A workspace is where a conversation's tools run.
It's where bash executes, and what read, write and edit paths are relative to. Every project already has one — itself.
The workspace itself is an abstraction: an environment for those tools, provided by a plugin. The conversation just works in whatever environment it's given — a git worktree on another branch, a throwaway copy of the tree, one folder of a monorepo — and neither knows nor cares which. That indifference is the point: it's what lets several agents share one project without treading on each other, or on you, and lets a conversation move somewhere else without noticing.
Three providers, out of the box
-
Git worktree
Another branch of the same repository, checked out in a tree of its own. An agent works on the branch without disturbing the tree you're looking at; a per-repo setup hook installs dependencies before the first command runs. Files are isolated — ports, databases and machine state are not, and Juggler doesn't pretend otherwise.
-
Scratch copy
A throwaway copy of the tree, for experiments you might want to walk away from. Apply the changes back when they earn it — refusing any file the project changed in the meantime — or delete the whole thing. Works with or without git.
-
Project folder
No checkout at all: the conversation simply works in one subfolder — one package or service of a monorepo. Commands are confined to the folder; reads still see the whole project. Focus, not isolation.
These three aren't the end of it: more kinds of place — an ssh host, a container — are on the way.
Workspaces live in the tab strip
Conversations sharing a workspace are drawn together in a box named after it, with a dot when the tree holds uncommitted work. Select the box itself and you get the workspace panel: what kind of place it is, where it is on disk, its git status, and the ways of finishing with it.
Conversations move; workspaces outlive them
Several conversations can share one workspace, and none of them owns it — a workspace outliving the conversations that used it is normal. Moving a conversation is a tab action: pick a different workspace from its context menu, or drag the tab into another box.
Finishing is on the workspace's own terms. A worktree offers to commit its branch or discard it; a scratch copy applies back or gets deleted; a project folder needs no ending at all.
Providers are extensions
The built-in providers are written against the same Apache-2.0 extension SDK that everything else in Juggler uses — so a new kind of place doesn't have to wait for us.