Your agents in parallel, in a graph you can fly through.
Cubito is a spatial frontend for orchestrating coding agents. Every worktree is a node, every fan-out is a litter of branches growing in space, every agent lives in the scene with its real terminal, and the system they are building draws itself live as they write.
Features
Your project is a graph
Every worktree is a node in a navigable 3D scene. Which branch spawned which stops being hidden metadata and becomes an edge you can follow with the camera.
Agents live in the scene
Every node carries its terminal: real PTYs, streamed over RPC and rendered inside the world. A pulsing amber cube is an agent waiting for your answer, impossible to ignore.
One litter, one prompt
From any node, fan out: N child worktrees are born in parallel, each with its own agent, comparable side by side. Look at the litter, pick the winner, merge it.
One daemon, one RPC, one scene.
orcad runs in the background
A headless Node 24 runtime, no Electron. It registers repos, creates worktrees with parent → child lineage, keeps PTY terminals alive across restarts, coordinates multi-agent runs in SQLite and parses each worktree's source into a system graph.
Cubito talks to it over WebSocket
A versioned RPC with an {id, ok, result | error} envelope and keepalives, across six namespaces: worktree.*, terminal.*, git.*, orchestration.*, system.* and agent.*. Capabilities are negotiated on pairing: a newer Cubito against an older daemon simply does not offer what the daemon lacks. The runtime is the source of truth: the scene resyncs on reconnect.
The scene makes it spatial
Three.js draws every worktree as a cube and every lineage as an edge, through a perspective camera with four heights: general, island, focus and compare. Agent state lives in the color: blue working, amber waiting for input, grey idle. Pairing with the daemon is E2EE from the browser.
Restart the daemon. The graph is still there.
Cubito runs orcad, a headless Node 24 runtime with zero Electron, as a background daemon and talks to it over its versioned RPC. Repos, worktrees with lineage, PTYs that survive restarts, multi-agent runs and the system graph already live there. Cubito makes them spatial.
$
node out/orcad/orcad.js --bind 127.0.0.1 --json
● orcad listening · runtime 4f2a9c
$
orca worktree create --name auth-retry --agent claude
… checkout · setup · agent launched
$
kill -HUP orcad && node out/orcad/orcad.js
● restoring 6 nodes…
✓
lineage main → auth-retry — intact
✓
pty claude — reattached
The whole loop, inside the scene.
Graphical fan-out
One prompt, N agents: from any node, N child worktrees are born in parallel, each with its own agent. Gates and questions from the run surface next to the node that raised them, and you answer them without leaving the scene.
Compare and merge
The litter in a rail view, children side by side. Pick the winner, merge it into the parent without opening a terminal and, when the parent is clean, sync its working tree in the same step.
Live system graph
Each worktree's source, parsed into routers, endpoints, services and databases. Express, Fastify and NestJS today, including cross-file prefixes, setGlobalPrefix and RouterModule. The uncommitted diff is painted onto the graph as the agents write.
Lineage and state at a glance
Which branch came from which stops being metadata: every worktree is a cube and every parent → child relation, an edge. Color is state: blue working, amber waiting for your input, grey idle, wireframe archived.
Real terminals in the scene
Every node carries its PTYs: the agent's terminal first, extra shells with one keystroke. Streamed over RPC, rendered inside the world and persistent across restarts.
Diff per worktree
File rail plus line panel for any worktree, rename-aware. What an agent changed, without leaving the graph.
Four camera heights
General, island, focus and compare: tweened poses and a stack that Esc unwinds. Raycaster hover and click, double click descends to focus, Enter enters the island. All of it from the keyboard too: hjkl, f, v, g, x, d, c, t and ⌘K.
Agents ready to work
Claude Code, Codex, Cursor and Copilot land on their prompt with no trust dialog: trust is pre-marked per worktree, locally or over SSH, honouring per-account CLAUDE_CONFIG_DIR and CODEX_HOME.
E2EE and backwards compatible
End-to-end encrypted pairing from the browser to your daemon, local or remote. Capabilities are negotiated on connect, so a newer Cubito degrades gracefully against an older daemon. Your code never touches a third party.