Rove Rev 0.9.198 · Sheet 1 of 4

Parallel coding agents in your terminal.

One managed task, one worktree, one branch. Run parallel work on a host that stays awake; disconnect your terminal and pick it back up over SSH.

macOS / Linux: use a POSIX shell. Requires git and a signed-in engine CLI. The installer sets up Bun if needed.

or with

Works with Claude Code, Codex, Copilot, Gemini CLI, OpenCode and more.

Needs git and a signed-in engine CLI; installation can set up Bun ≥ 1.3.11. Native Windows also needs Node.js and Git for Windows.

Next: complete your first two tasks →

Fig. 0 — Rove, running

Note 1 — Physical view Fig. 1

ROVE 3 REPOS · 4 TASKS · RUNNING IN THE BACKGROUND 28 COLS 52 COLS 20 COLS Tasks rove ledger-api · storefront streaming-diff+142−31⋮ Stream the diff pane oauth-refresh+88−54● Refresh before 401 ledger-migration+34−6? Backfill the ledger flaky-e2e+21−34○ Why checkout flakes claude › stream the diff pane instead of buffering ● I’ll parse git diff as a line stream, push hunks to the pane as they land. ⋯ ≈ 40 LINES — NOT SHOWN › bun dev $ bun run dev ready in 341 ms ⋯ ≈ 20 LINES SCOPE: VS MAIN CLAUDE 5h 42% → 14:00 · 7d 12% ^A commands · F1 help Detail A · scale 2:1 ⋮ streaming-diff +142 −31 Stream the diff pane 1 2 3 1 STATE GLYPH · 2 BRANCH · 3 FILES CHANGED / DELETED EVERY GLYPH IS ONE THE SIDEBAR REALLY DRAWS — SEE NOTE 5
Fig. 1 — Physical view · scale 1:2 · Detail A 2:1

The whole product, running. The notes below take it apart.

Every glyph is one the sidebar really draws; every engine name ships. The full schedule is in the docs.

Note 2 — General assembly Fig. 2

tab 1 tab 2 tab N Terminal tabs Same files · separate conversation base fix/auth-flow Branch Created with the task · kept on disk ~/.rove/worktrees/ Own checkout — not shared Git worktree Parallel work cannot collide A A 3 2 1 1 managed task
Fig. 1 — Managed task, exploded view · Scale 1:1 · Section A—A through the checkout

One prompt becomes one or more Tasks. A Task is the unit Rove isolates: it creates a git worktree, cuts a branch, and opens terminal tabs inside it. Nothing is shared sideways, so a second agent on the same prompt is working in a different directory on a different branch.

Inside a Task you can open more tabs — a second agent on the same files with its own conversation — and splits, which only divide the screen.

Parts list
ItemQtyPartNote
11Git worktreeOwn checkout on disk
21BranchCut when the task is made
3NTerminal tabSame files, separate conversation

Project-main tasks reuse a saved checkout and directory tasks reuse a directory you own; neither is supplied with items 1 and 2.

  1. All three parts are created when the task is made. Nothing is allocated later.

Note 3 — Isolation Fig. 3

Datum New task Own worktree + own branch Full isolation New tab Own conversation · same files Conversation only New split Layout only
Fig. 2 — Isolation from a common datum · Hatched face = separate files on disk

Isolation drops one notch at each level down, and the product says so in three lines:

new Task   → own worktree + own branch     (parallel work can't collide)
new Tab    → own conversation, SAME files  (a helper in the same checkout)
new Split  → same screen, one tab divided  (a monitor beside the work)

That is the whole mental model. If two agents must not touch each other's files, give them two Tasks. If one agent should read what another just wrote, give it a Tab.

Note 4 — Fan out, fan in Fig. 4

1 prompt rove api add ›_›_ ›_›_ ›_ claude:2 codex:2 copilot:1 5 × task — each with own worktree + branch Returns one group id
Fig. 3 — Fan-out on a mixed fleet · Dimension chain reads the fleet spec verbatim

One round of that command measures as 5 attempts5 worktrees5 branches.

rove api add --repo "$PWD" \
  --agents claude:2,codex:2,copilot:1 \
  --prompt "Try independent approaches to
           simplify the auth flow."

Each sibling gets its own worktree and branch. When the round is done, rove api collect --group <id> reads the whole round's health in one call — per-task branch, diff size, checks, and the worker's own report — and rove api land --task-id <id> merges the winner. The losing branches stay on disk.

Agents talk to each other as peers. A worker spawned from another task reports home with a bare rove api send --prompt "succeeded: … (branch fix/auth-flow)". Rove recorded who spawned whom, so the reply routes back to the exact tab. There is no coordinator process.

Note 5 — Continuous operation Fig. 5

Your TUI May detach Rove daemon PTY host · long-lived Survives detach pty · claude pty · codex narwhal Remote daemon SSH-forwarded socket No ports opened, no new auth ≤ 64 MB scrollback restored, newest first Screens come back on attach
Fig. 4 — Detached operation · Hidden line = the part that may be absent

Engines run in a separate PTY host. Quitting the TUI or dropping SSH only detaches: work continues while that host stays awake. Host sleep pauses local work; closing an SSH client laptop leaves an awake remote host working. Reboot ends processes. Reattach restores saved screens and relaunches commands; conversation resume depends on the engine. Restored output does not mean the task completed.

Machines. Got a second computer — a desktop at home, a box in the cloud? Add it once with rove machine add and its tasks show up in the same sidebar as your local ones. It rides on the SSH access you already have: no ports to open, no new login.

Revisions
RevDateDescription
2026-09 Engines pi, omp added to the contrib class
—2026-09Released as 0.9.198 on npm
TitleRove — managed task, general assembly
Part no.@sma1lboy/rove
Rev0.9.198
Sheet1 of 4
Drawn bySma1lboy
CheckedCI
Date2026-09-12
Scale1:1
On board00:00
MaterialTypeScript · ships its own Bun
FinishMIT
UnitsTasks
PlatformmacOS · Linux · Windows — git + engine CLI; native Windows also needs Node.js + Git Bash