Multiple AI Agents, One Repo
You start a few agents on different tasks. As they work, you want to know: what has each one done so far? Which one is still busy, and which one is waiting for you? When one finishes, is the result good enough to ship? Does it conflict with what the others are working on?
Running agents in parallel is the easy part — most tools now give each agent an isolated folder. Keeping up with what they produce is harder. VisualJJ's change tree shows every workspace in one view: which agent is working, what each one has changed, and when the edits are ready to review, tidy, and ship. It also runs the agents for you — one click on a workspace opens Claude Code in it.
Setting Up Workspaces¶
JJ workspaces are lightweight working copies that share the same repository. In VisualJJ, open the Command Palette and run VisualJJ: Create Workspace. Give it a short name — one, two, three. VisualJJ creates each workspace as a sibling folder: if your repo is at ~/projects/myapp, the workspace appears at ~/projects/myapp.one.
Each workspace shows up in the change tree with a badge carrying its name. Workspaces can be long-lived — you don't need to recreate them for every task.
Running Claude Code¶
Open Project Info, and under Workspaces turn on Integrate Claude Code. From then on, clicking a workspace badge opens a terminal with Claude Code already running in that workspace — as an editor tab in VS Code, or in the details panel of the standalone app. Click the badge again to bring the terminal back. When Claude exits, the terminal closes.
For each agent, describe the task and discuss the plan. Once the approach looks right, let it execute — running tests, iterating on the implementation, and fixing issues on its own. When the work is reviewed and shipped, run /clear in that terminal, or exit and click the badge again, and give the agent its next task.
Other agents and tools can work in the same workspaces: right-click the badge, Copy Workspace Path, and start them in a terminal of your own. VisualJJ shows their edits the same way.
Running Unattended¶
Approving every action defeats the point of running several agents. The alternative is to let the agent skip permission prompts, and put a sandbox around it so that "skip" is safe: the agent can write only to its own workspace, not to your other workspaces, your repo's .jj store, or your home directory.
On macOS, sandfence is a small wrapper around the built-in sandbox-exec that confines Claude Code to the current folder and turns its permission prompts off. Tell VisualJJ to start the agent through it:
jj config set --repo visualjj.agent-command "s claude"Now every badge click starts a confined agent. sandfence is macOS-only, but any tool that confines Claude Code to its folder plugs in the same way — put its command in visualjj.agent-command. Note that a sandbox guards your files against a wrong command; it does not stop a determined agent from talking to the network. Treat it as a seatbelt, not a cage.
Seeing What's Happening¶
The badge tells you the state of each agent without opening its terminal. A pulsing dot means it is mid-task. Beside the name you see what the session is about and how long ago it was last active. A solid dot means it has finished its turn and there is output you haven't looked at yet. Glance at the tree and you know where to go next.
With Keep all workspaces updated enabled (Integrate Claude Code turns it on), VisualJJ periodically snapshots every workspace so each agent's edits show up on the graph as they happen. Enable Auto-describe changes to have VisualJJ generate descriptions from the diffs automatically:
Click any workspace's change to see the edits, browse the file list, or open the diff view — without interrupting the agent or switching terminals.
Reviewing and Shipping¶
When an agent is done, its work is a change on the graph like any other. Click it to inspect the edits, start a new change on top of it to run and test, split or describe it if it needs tidying, then create a pull request and ship it — all from the tree.
If a change isn't useful, abandon it; the workspace stays. You can also drag a workspace to a different point in the tree — for example, rebase it on top of another agent's completed work. If the two overlap, the conflict shows up on the tree right away, not at merge time.
Why JJ Makes This Work¶
Git worktrees isolate agents too, and several agent tools create one per agent. But each worktree is its own branch: to see what an agent did you check it out, moving work between them is a manual rebase, and discarding it means deleting branches.
JJ workspaces share one commit graph. Every agent's work shows up in the same tree, moving it is drag & drop, and discarding is instant. That shared graph is what makes VisualJJ a control center rather than one more terminal.
Getting Started¶
- Make sure VisualJJ and the Claude Code CLI are installed
- Create a workspace: Command Palette → VisualJJ: Create Workspace
- In Project Info, turn on Integrate Claude Code and Auto-describe changes
- Click the workspace badge and give Claude its first task
Once you get used to this workflow, going back to running one agent at a time feels slow.