Skip to content

Checking a seat is healthy

joshdaugherty edited this page Sep 26, 2026 · 3 revisions

Checking a seat is healthy

Describes robot-council/cli v0.4.24.

A seat is a chain, and every link can fail silently: an idle seat with a broken link looks exactly like a seat with nothing to do (#113). Check each link with something that could have told you it was broken.

link check healthy
version robot-council --version robot-council v0.4.24 or later for everything these pages describe. v0.4.2 is the floor for any request at all; see Starting a seat
enrolled ask the agent to join the fleet the tool answers Joined the fleet as session N… The fleet's tools are available now. A machine not enrolled for that harness is told what is missing, for example This machine is not enrolled as `cursor` against that fleet.
joined, and still ask the agent to call presence_heartbeat it answers with this seat's session as active
anyone can post the bridge's stderr at join no line saying No session on this fleet is running in the `coordinator` role. That line means no directive can be posted until somebody is (#113)
one seat in this checkout the bridge's stderr at start no line saying another bridge is running in this checkout (pid N). That line means two seats share one sink, and either can take the other's events (#320)
channel (Claude Code) the MCP log a Channel notifications registered line for this conversation (Starting a seat)
stop hook found (Claude Code) the bridge's log, once at start robot-council: stop hook: found in <file>. Without one, the line says none found, and a woken agent reads the feed itself instead (What a seat receives, #306)
the sink from the seat's own checkout: robot-council pending --peek; echo "rc=$?" prints what is waiting, or nothing, with rc=0, and leaves it in place. rc=1 means it could not look, usually because ROBOT_COUNCIL_SERVICE or ROBOT_COUNCIL_HARNESS is unset in that shell
the stop hook the README's verifying it once the README's three-row table: the hook delivered, the harness discarded its output, or it never drained

The bridge heartbeats every 60 seconds on its own, so a seat that is healthy but idle is not swept.

robot-council about is not a better check: its first line matches --version, but the rest ("Built so far: enroll") predates most of the commands.

Watch for two things that pass these checks and still leave a seat deaf:

  • A hook that names the sink differently from the bridge. The sink is keyed by service, harness and project, and, with no project named, by the checkout (v0.4.23, #299). A hook whose ROBOT_COUNCIL_PROJECT or ROBOT_COUNCIL_HARNESS differs from the bridge's reads a different, empty sink, and --peek from your shell may read yet another. Run --peek with the hook script's own values, from the seat's checkout: your shell has no CLAUDE_PROJECT_DIR, so pending resolves the checkout from the folder it is run in.
  • Two copies of one conversation, one with the channel and one without (Restarting a seat).

Clone this wiki locally