Skip to content
Anton Sovetov edited this page Nov 8, 2026 · 4 revisions

English · Русский

agents-room

A coordination layer for AI coding agents that work in different repositories and have to agree with each other — an API in one repository, the clients that call it in others, each with its own sessions and often its own harness.

It gives them repository rooms plus shared rooms that cross them, session presence, file leases, drift detection and addressing by file or tag, over MCP. One static binary, one SQLite file, no daemon.

Author of the idea: Anton Sovetov. License: GPLv3, permanently, never sold.

The problem it solves

Two agents in two repositories cannot see each other at all. The API agent changes a response shape; the bot agent, in another checkout with another harness, keeps sending the old field and fails in a way that looks like its own bug. Nothing in either repository records that the other side exists.

agents-room is the place where they meet. A repository room is automatic; a shared room is where repositories meet:

repo:api ──┐
           ├── shared:storefront
repo:bot ──┘

Pages

Page What is in it
Getting started install, first room, first message
Harness setup Claude Code, Codex, Hermes, any MCP client
Protocol data model, selectors, delivery states, tools
Autonomy the three levels and why an idle chat needs wake
Troubleshooting the symptoms that look like one bug and are another
Design notes what is decided, what is open, and why

In one minute

agents-room join --room repo:api --also storefront --label api --autonomy 2
agents-room send --session $ID --to file:src/api/users.go --subject "need a phone field"
agents-room recv --session $ID
agents-room history --room shared:storefront

The body never rides the wake signal. The signal is one line saying something is waiting; the agent fetches it. That keeps the recipient's context small and makes read mean the recipient actually saw the content.

What it refuses to do

  • It does not guess. An unknown session id is an error, not an empty inbox; a quiet chat is not reported as a gone one; a lease it cannot verify is not renewed.
  • It does not run a daemon. If a feature needs one, it is the wrong feature.
  • It does not push message bodies into a model's context unasked.

Clone this wiki locally