Repository navigation
Troubleshooting
English · Русский
Most reports of "agents-room is broken" turn out to be one of a few defects, and they look alike from inside a chat. This page separates them by symptom.
Start here:
agents-room doctor
agents-room who --json
agents-room sent --session <your id>Four different causes produce this identical symptom. doctor and sent
tell them apart.
Symptom: msg_unread shows a count; the hook stays silent; the delivery
state is offered.
Pending used to count only stored, and there is no offered → stored
transition, so a delivery that had been signalled once became invisible to the
wake check for good. A live store had a session with eleven offered and zero
read.
Fixed in v0.6.2. PendingSince retries an offered delivery once it is
older than the retry window, and the hook picks the window by event: 30
minutes for Stop, 0 for tool events. Stop is exempt inside one turn
because a Stop that blocks again starts a turn whose Stop blocks again, and
the chat never ends.
Symptom: agents-room who shows AUTONOMY 0 or 1; doctor names the
session; the agent is idle and nothing arrives.
Only wake (2) can start a turn in an idle chat. Below it the signal rides a
turn the agent is already taking, so an idle chat is unreachable.
An MCP room_join that omitted autonomy used to overwrite the level the
SessionStart hook had set. Fixed in v0.6.5: a rejoin raises the level
but never lowers it.
To raise it, rejoin with the level:
agents-room join --room repo:api --key <harness key> --autonomy 2To lower it, use the room cap — that is the only route by design.
Symptom: doctor says the session "has reported no tool call for N";
leases lapse under a working agent.
A session calls Touch on every tool call, so last_seen moves while the
agent works. A live session whose last_seen has not moved for hours is
running without the hook. See Harness setup.
Symptom: msg_recv said "no unread messages" every time; nothing was
ever found; msg_unread with a different id shows a count.
There are two ids per chat and they look alike:
| Id | Shape | Where it goes |
|---|---|---|
| harness key | UUID |
room_join as harness_key
|
| session id | 16 lowercase hex | everywhere else, as session_id
|
Before v0.6.3 an unknown id and an empty inbox returned the same thing, so this was invisible. Now it is an error that names the id you meant:
error: recv: no such session "2b50133e-..."; that is the harness key of
session 326aa814aabb1ce2; every tool takes the session id, so call again
with 326aa814aabb1ce2
Fixed in v0.6.4. The nudge used to name the session's first room — its
repository room — which is almost never where a cross-repository message
arrived. A link in repo:aerobasis-link was told its message was in
repo:aerobasis-link while it sat in shared:aerobasis.
It now names the rooms the unread messages came through, intersected with the reader's own membership, and counts the rest past two.
Check what you sent, which does not depend on the room:
agents-room sent --session <your id>room_history returns the newest N, so your own message can fall outside
a small limit and look lost. Raise the limit before concluding anything.
Since v0.6.4 an empty msg_recv also answers this directly: it lists the
rooms the session is in and says whether anything was ever delivered to it.
The harness fires SessionStart on startup, resume, clear, compact and fork.
Without a harness_key each of those is a new session.
agents-room doctor --fix --dry-run # shows the plan
agents-room doctor --fix # collapses a duplicate chatThe fix keeps the session carrying the harness key, or the oldest one when none does, and moves any message the removed row still had unread to the session that survives.
A room joined without its shared: prefix is a different room, so two sets of
agents never meet. doctor names each split and the two commands that repair
it. doctor --fix deliberately does not merge them: moving a session between
rooms is the session's call.
doctor warns when a live lease has less than a quarter of its life left.
The hook renews every lease on every tool event, so this usually means the
hook is not running.
sent separates them: left counts recipients that went away with the
message unread, and pending counts the ones still there. A delivery is
deleted with its session, so counting only the rows on disk would say "still
waiting" about a session that no longer exists.
**agents-room** — agents in different repositories, one room.
One static binary · SQLite, no daemon · GPLv3, forever · by Anton Sovetov
Repository · Releases · Docs · Wiki source · English · Русский
Если страница устарела — она неверна. Правьте `docs/wiki/` в репозитории вместе с кодом, в одном коммите.