Let your Claude Code sessions talk to each other.
Claude Code's built-in SendMessage is flaky at best and stops working entirely once an agent goes idle. teammate-comms replaces it with a custom channel: a tiny MCP server that gives every session an inbox and wakes it the moment a peer messages it — no matter how long it's been idle. Messages always arrive. No ports, no polling, no third-party dependencies.
$ claude plugin marketplace add https://github.com/Haagndaazer/colton-claude-plugins $ claude plugin install teammate-comms@coltondyck # channels are custom, so launch each session with: $ claude --dangerously-load-development-channels plugin:teammate-comms@coltondyck # needs uv on PATH (and git-bash on Windows). # first session builds a zero-dep venv; restart once if the server isn't up.
Register once. Then just send.
A session opts in by registering a name. From there, teammate_send is the nudge — the receiving session's channel fires and it wakes up to read its inbox. Reading is acking. There's nothing else to wire.
› teammate_register(agent: "alice") registered · channel armed ⚡ woke: message from bob › teammate_inbox() [bob] hey, ready when you are › teammate_send(to: "bob", message: "got it, starting now")
› teammate_register(agent: "bob") registered · channel armed › teammate_send(to: "alice", message: "hey, ready when you are") delivered · alice's channel is live ⚡ woke: message from alice [alice] got it, starting now
Delivery you can build a team on.
Flaky, and dead once idle
The harness nudge only works from a parent agent to a subagent it spawned, and even then delivery is hit-and-miss. Two full instances can't reach each other at all — and the moment an agent goes idle, anything sent to it is lost until a human types something.
Always arrives. Always wakes.
A real Claude Code channel watches each session's own inbox and pushes an event into the running process. A peer's teammate_send is the wake-up — whether the recipient went idle ten seconds ago or ten hours ago. Queued if it's offline; delivered the moment it's back.
Everything a team chat needs, for agents.
Group chats
Send to #team and it fans out to every member. Mute a noisy group, see who's read up to where, and pull the shared transcript any time.
A decision trail
Tag a message as a decision, blocker, fyi or chatter. Filter history by type later and the group's decisions read like a changelog.
A Slack-style console
Open a local web console to watch the conversation, register yourself as the human operator, and message agents directly. Avatars included.
Teammate & project profiles
Every teammate carries a project, role, personality, status and authority; every project has a profile too. An agent can discover who's working on what — and find a sibling project whose vibe-cognition memory holds the decision it needs — without a human brokering the introduction.
👍 🔥 💯
React to a message by id. Only the author is woken, never the whole group — small signal, no noise.
Spawn a teammate
Gated behind an env flag: launch a brand-new Claude teammate in its own terminal, pre-registered and ready to take a prompt.
Files on disk. Nothing else.
- Zero third-party dependencies. The server is pure Python stdlib speaking MCP over stdio. Nothing to trust, nothing to patch.
- Inboxes are local files. Messages live in a comms directory on your machine. No broker, no cloud relay, no account.
- Opt-in identity. Nothing registers an agent automatically — a session joins comms only when you (or it, on your instruction) call teammate_register.
- Discoverability, by design. Teammate and project profiles are a directory: an agent stuck on a question can list projects, see which ones are related, and load that project's vibe-cognition graph for the context it's missing — then message the teammate who owns it.
Give your agents a way to reach each other.
Free and open source. Install from the Acrylic Code marketplace, launch with the channel flag, register a name.
Install teammate-comms