| name | convoy |
|---|---|
| description | Stand up and run a crew of agents — a CoS → supervisor → worker network — on this machine. convoy is the front door: it DECLARES agents into a synced catalog, materializes each one's workspace overlay, and hosts + supervises the running network (respawn, crash-loop cap). Reach for convoy whenever you need to CREATE, LAUNCH, HOST, or TEAR DOWN agents — not to talk to them. |
| when_to_use | You need to stand up an agent network, declare/add a new agent, host and supervise agents (start/respawn/adopt), tear a network down, or prove a setup is ready to run agents (doctor). NOT for messaging another agent (that is smalltalk / the `st` CLI) and NOT for wrapping a single terminal session (that is pty). |
convoy is the single front door to a smalltalk agent network — the nomad-like
orchestrator that pulls the lower layers into one runnable whole. It composes
@compoundingtech/smalltalk (the message bus + agent status, driven by the
st CLI) and @compoundingtech/pty (persistent terminal sessions) into one
verb set for the lifecycle of a crew: declare agents, materialize their
workspaces, host + supervise them, tear them down. Roles form a tree:
chief-of-staff (CoS) → supervisor → worker (plus technical-manager).
- Stand up a new network:
convoy init(thenconvoy up). - Add an agent:
convoy add <role> --identity <id>(claude or codex harness). - Host + supervise the network (respawn on exit, crash-loop cap):
convoy up. - Tear it down:
convoy down(the only verb that kills sessions). - Check readiness before trusting a setup:
convoy doctor.
For talking to an agent (send/reply/read a message, answer a [DING] poke),
use st (smalltalk) — not convoy. For wrapping one process in a session, use
pty.
convoy is folder-based and declarative — declaring an agent is not running it:
convoy add= declare. Writes an agent file to the network's SYNCED catalog at<net>/catalog/<identity>.toml. Launches nothing.convoy render <id>= materialize. Compiles that agent file down into its workspace overlay (.convoy/pty.toml, persona, hooks). No launch, no bus.convoy up= reconcile. Reads the catalog, host-filters to THIS machine, and launches (or adopts) this host's agents — then supervises them every interval (respawn on exit, flapping-cap on crash-loops). The catalog syncs across machines, soupis also a cross-machine scheduler: drop ahost = "other-box"agent file and that box'sconvoy upruns it.
Decommission an agent by EDITING its file (retired = true), not by deleting it —
the catalog syncs union/no-delete, so a bare rm just re-propagates from a peer.
convoy init myproj # stand up a network at <home>/myproj (name → CoS)
convoy doctor # prove the setup can do real agent work (honest — no false negatives)
convoy add worker --identity build-wk --dir ~/repos/app --harness claude # DECLARE (writes catalog/build-wk.toml)
convoy add worker --identity iroh --dir ~/repos/x --model claude-fable-5 # optional per-agent model
convoy up myproj # reconcile + launch this host's agents, then supervise
convoy ls --tree # who's around: spawn tree + cross-machine liveness
convoy down myproj # tear down (the ONLY path that kills sessions)convoy env <net> / convoy shell <net> export a network's env
(ST_ROOT/PTY_ROOT/CONVOY_NETWORK) so st and pty target it with zero
manual setup.
convoy adddeclares — it does NOT launch. Afteradd, nothing is running untilconvoy upreconciles the catalog. (declaring ≠ running.)ST_ROOTis the BUS root (<net>/smalltalk), NOT the network dir. Select a network by NAME or PATH (orconvoy env), not by hand-settingST_ROOTto a network dir — convoy derives the bus/pty/catalog subtrees from the network dir itself. A bareconvoy <cmd>with no network / noST_ROOTtargets convoy's own default network (<home>/default), never st's global~/.local/state/smalltalk.- A network name vs a path. A bare token (
default,my-net) resolves under convoy's home (($XDG_STATE_HOME|~/.local/state)/convoy/<name>); anything with a/is used as a filesystem path. convoy upnever tears down. Stopping (or crashing) the host DETACHES — agents keep running their last orders and a restart re-adopts them. Onlyconvoy downkills sessions.- Ding by default. Agents run ding-mode (the
stpoke bus), not MCP; pass--mcponly if you explicitly want MCP (codex is always ding).
Run convoy --help for the full subcommand list, and convoy <subcommand> --help
for a command's flags. convoy doctor (--quick / --full) proves a setup can
do real agent work. convoy --version prints <semver>+<short-sha>.