Skip to Content

Projects Tab

TL;DR

Projects is a Warp-style file sidebar that mixes local folders with remote machines. Add a local path or a cmdop://machine/<id>/<path> URI and browse it like any folder; the chat picks files from the same tree for context.

The Projects tab is the one place where local and remote files share a common UI.

What Projects is

Projects is a persistent file-tree sidebar at the desktop level. Each entry is a “project” — a named root that may be local (a filesystem path) or remote (a cmdop:// URI). The tree caches lazily, so adding a remote project does not block on reachability — you can register a project on a sleeping laptop and the sidebar shows it as pending until the next dial. The implementation lives in internal/desktop/services/projectfs.

Adding a local project

Click “Add local project”, pick a directory in the OS file picker, give it a name, and optionally set an icon. The desktop spawns a watcher rooted at the directory so file changes show up in the tree without a manual refresh.

Local projects are sandboxed — the desktop only reads paths under the root you picked, never above it.

Adding a remote project

Use the “Add remote project” form to register a cmdop://machine/<id>/<absolute-path> URI. The machine ID is the UUID from the Machines tab (or the hostname-prefix resolver if your workspace is small). The desktop does not dial on Add — reachability surfaces the first time you expand the tree or call ListDir, via the RemoteOpener dependency injected into the projectfs service.

If a remote project shows “pending” for more than a few seconds, the target machine is offline or unreachable. Check the Machines tab and confirm the machine is online before retrying.

Tree navigation works with arrow keys or the mouse, and every project supports fuzzy search inside its root. Search runs locally for local projects and falls through to a remote ListDir call for remote ones, so a search across a remote project costs one round trip per directory expanded.

Pinning, recency, and grouping

The side rail groups projects into pinned, recent, and “show all”. Pinned projects sit at the top in the order you set; recent projects appear below in last-accessed order; the rest collapse into an expander. Pin order is persisted to the user state store.

Files in chat context

Dragging a file from Projects into the chat input attaches it as a context file for the current turn. For remote files, the inspector and the chat both read content via the RemoteOpener — the file streams through the same connection used for chat, so attaching a remote file to a remote-machine inspector chat costs zero extra dials.

Inspector preview from Projects

Clicking a media file in the tree opens the Inspector. Local files stream via the AssetServer mux at /_localfile/?path=... for Range support; remote files come over remotefs. PDFs, audio, video, and images all render inline; everything else falls back to “open with system default”.

Last updated on