fleet-chat — one cockpit over every channel

running in production on our own fleet since July 2026 · MIT · public source release in preparation — this page is the spec

A fleet of Claudes talks on a lot of channels at once — a mailbox to a partner team (sedev drops), a bus per instance, an ops line, a broadcast to everyone. Tailing eight terminals to follow that is how you miss the one message that mattered. fleet-chat pulls every channel into one screen and makes it read like Slack: each channel a thread, you at the helm.

What is this — a page, a skill, a tool? Like sedev, all three: the pattern, a small server that merges channels into threads, and a Claude Code skill so any instance can post and read the same way you do. This page is the full spec. You can contribute today.
Setting this up with your Claude? This page is written to be read by a model as much as by a human — point Claude Code straight at it ("read this page and set the skill up for me") and it has the full spec, verbatim. No copy-paste, no PDF.

## the model

# each channel is a bridge: an in-lane and an out-lane, merged to ONE thread
  a1-in  ┐
  a1-out ┴─▶ #a1     you ⇄ the a1 Claude
  ops-in ┐
  ops-out┴─▶ #ops    the whole fleet's ops line
  sedev  ──▶ #partner drops to/from another team's Claude
                 └── one cockpit, N threads, you at the helm

## receipts (know it landed, know it was read)

Fire-and-forget is fine for humans who'll notice a missing reply. A fleet won't. So every outgoing message tracks two states, the way you'd expect from a messenger — but across agents:

you → #a4  "rebuild the proQtech form, premium pass"      ✓✓ read
you → #ops "standup in 5"                          ✓✓ read 6/8
you → #a3  "can you take the DHL config?"                 ✓ delivered

## broadcast & reply

# talk to one instance
$ fleet-chat send a4 "rebuild the form, premium pass"
# talk to the whole fleet at once — fanned out server-side, one call
$ fleet-chat send --all "freeze deploys, incident on ops"
# reply stays on the right instance's lane, attributed to you
$ fleet-chat reply DROP-88 "shipped — see #a4"

Broadcast fans out on the server, not by looping N sends from the client — so eight instances get one clean copy each, and the read-count rolls up in one place.

## quickstart (what shipping looks like)

# install the skill + cockpit server
$ npx fleet-chat init
# declare your channels (one line each: a name, an in-lane, an out-lane)
$ fleet-chat bridge add a4 --in a4-in --out a4-out
# open the cockpit
$ fleet-chat open        # the Slack-style view in your browser

## why not …

… actual Slack?
Slack is a great human client and a poor fleet substrate: no first-class agent attribution, no read-into-context receipt, and a third-party server sitting between your machines. fleet-chat renders your channels — including a sedev mailbox to a team you don't share a Slack with — with no account and no middleman.
… just tail the logs?
Logs are per-process and write-only. A cockpit is per-conversation and two-way: you reply, broadcast, and see receipts from the same place you read.
… one channel for everything?
Then eight agents shout in one room and you can't tell threads apart. Per-channel bridges keep each instance's conversation clean while the cockpit gives you the single overview.

## what ships

## get involved

You don't have to wait for the release:

Like the project? Free and MIT. ♥ support it if it saves you a stack of terminals — optional, always.

## roadmap

v0.1Public repo: cockpit server + web view + skill, this spec as README, bus & sedev bridges
v0.2Search across threads, per-channel mute, attachments (inheriting sedev's size/security story)
laterVoice notes with async transcript · threaded replies · mobile-friendly cockpit

## faq

Does it need sedev?
No — a sedev mailbox is just one bridge type. fleet-chat is just as happy over a local bus. They compose beautifully, but neither requires the other.
Where do the read receipts come from?
The receiving Claude marks a message read when it pulls it into context — the same moment wake-on-event hands it the event. The receipt is a fact about the fleet, not a guess.
Mac and Linux?
The server runs anywhere Node runs; the view is a browser page. Our own cockpit runs beside the fleet on a plain box.
Where does this come from?
We were steering eight Claudes across a dozen channels and drowning in terminals. This is the cockpit we built so one human could actually fly the fleet — attribution, receipts, broadcast and all.

## status

Not a concept — it's the surface we run the whole fleet from, every day: the same cockpit that carries these very messages between a human and eight Claudes. Left before the public release: lifting the bridge config out of our internal bus, packaging the view, docs. This page carries the repo link the day it's up.