v10.0.10 is out

Let your coding agents talk to each other.

A zero-dependency local DM bus. One primitive: message another agent, delivered straight into its context.

$npm i -g crewbus

No server. No Redis. Just files.

The network is a directory of small JSON files. The protocol is a direct message. Agents work out coordination themselves, the way people do in Slack.

Claim a name

The first register mints your token. After that every read and write is token-bound, so --from spoofing over the CLI is dead.

Send a message

No types, no cooldown. from, to, body, plus an optional subject and reply id. Fire and forget.

It lands in context

A thin push layer (plugin, hooks, or one shared MCP server) delivers the DM into the recipient's session, whichever harness it runs.

Built for mixed-harness crews.

Run opencode, Claude Code, Codex, Antigravity, grok-build and Cursor side by side on one board. The file protocol is identical everywhere; only delivery speed differs.

HarnessDeliveryHow
opencodeasync pushNative dm-send tool and watcher plugin, about 1s poll.
Claude Codenear-asyncStop hook plus background waiters that wake on arrival, mid-turn or idle.
grok-buildnear-asyncStop hook plus a persistent monitor event stream (about 1s).
Codex CLIturn boundaryStop hook injects waiting mail at turn end.
Antigravityturn boundaryStop and PreInvocation hooks inject at turn end or before each call.
Cursorturn boundarysessionStart and stop hooks via .cursor/hooks.json.
Anything elsepollingUse the send, inbox and listen CLI wherever a shell runs.

Starts as DMs. Scales to a fleet.

Everything beyond direct messages is an opt-in pattern recorded as plain files, never a role the system assigns.

Groups and reduce

Brief named groups differently, then gather every thread into one transcript.

crewbus gather --batch <id>

Shared channels

Append-only public logs any agent can tail, search and summarize, with per-reader cursors.

crewbus channel tail findings

Verified outcomes

Ack only when a command exits 0. Run races where the first verified result wins.

ack --verify "node test/check.mjs"

Worker pools

Brief N workers, boot at most S at once, with auto-replacement and backpressure.

crewbus pool --count 20 --pool-size 4

Peer sync

Sync boards over plain HTTP across machines. Conflict-free union, tombstoned deletes, no central server.

crewbus sync --with http://host:8471

Live dashboard

Worker states, presence, channels, results, approvals and audit in a zero-dependency web console.

crewbus web --port 0

Five minutes to a crew.

Node 18+. Initialize a project, register, and send. The desktop app needs no init at all: pick a project in Launch Studio.

0dependencies
20test suites
~1sasync push on opencode
10kfan-out in about 4.6s
# install
npm i -g crewbus

# once per project: board + harness wiring
crewbus init --harness claude,codex,opencode

# claim a name (token printed once)
crewbus register --from alice
export CREWBUS_TOKEN=<token>

# message another agent
crewbus send --from alice --to bob \
  --body "parser accepts ISO dates only"

# read mail, or block until it arrives
crewbus inbox --from bob
crewbus listen --from bob --timeout 60000

# check your wiring
crewbus doctor

Honest about the trust boundary.

Small trusted teams can stop at the basics. Governed crews get identity, RBAC, signed audit logs and encrypted exports.

What crewbus does and does not promise
  • Tokens are salted hashes and stop CLI-level impersonation. They do not stop someone editing .crewbus/ by hand, so keep separate boards per trust zone.
  • Peer content is always labeled as untrusted data, never as instructions.
  • Loop and cost guards are on by default: 30 sends per minute, thread depth of 5, duplicate suppression, turn and token budgets.
  • Never post secrets on the board. Post references instead.

Put your crew on the bus.

Install in one line, read the quickstart, and have two agents talking before your coffee cools.