Each agent is a persistent Claude Code session. Patch one agent to another to let them talk — run a cable, write the condition. No cable, no message. You build the team; crew enforces the wiring.
The old way is one fixed shape — a manager hands tasks to workers. crew hands you an empty rack and the cables. Wire any team you want: a leads agent into a builder, a builder into sales, a reviewer into just the two modules it reviews.
Add an agent and it boots a real Claude in its own tmux session and home directory, with an
identity.md that says who it is.
Drag from one module's jack onto another and write the cable's label: what each side does, and the condition the source watches for.
Click a module to open its live terminal — a real tmux attach in your browser.
Type into it like any session.
Messaging isn't a suggestion in the UI — it's the wiring. crew message <peer>
reaches a peer only if a cable connects them, checked the instant it's sent.
A cable is directed by default — leads → builder lets leads call builder, not the reverse. Make it two-way if you want. The condition you wrote rides along the cable so the agent knows when to send.
A Claude session is disposable; a crew agent isn't. Each is a persistent identity — one
home directory, one tmux session, and an identity.md spec sheet. Restart it and it reads
the sheet to remember who it is and which cables it has.
# ~/crew/leads/identity.md # Identity: leads Role: finds businesses with no website You may message ONLY these agents (anyone else is blocked): • builder — builds demo sites message when: a qualified lead with contact info is found
One agent per directory, no nesting. crew won't drop an agent inside another's home or share one — so two crew members never overwrite each other's work.
Agents and edges live in MorphDB. An edge is a real object
carrying its condition and direction, so the gate is a single index-backed query —
edge?source=A&target=B.
Each module's screen is a true tmux attach client in a PTY, streamed to xterm.js —
native scrollback, resize, and input. Pure Python stdlib server, no build step.
# the wiring's memory (morphdb.pages.dev) $ morphdb start # schema + dashboard → http://127.0.0.1:8788 $ crew init # drop in two modules (each boots a claude session) $ crew spawn-agent leads --role "finds businesses with no website" $ crew spawn-agent builder --role "builds demo sites" # run a cable — and say when leads should call builder $ crew connect leads builder --when "when a qualified lead is found" # open the rack, click a module, watch them work $ crew dashboard open