Differences

Part of team status — each way the file, the state and the live session disagree, and the command that repairs it.

A seat the state records waiting shows waiting for owner (<classification>) — or trust sent; recovery required — as its row, with its pane, and its one difference stands before the unnamed and launch-stopped ones. The classification is validated when the state is read, against the closed list (trust, permission, question, vendor notice, login, unknown, unsent, timeout): anything else the file holds reads unknown in the row, in the difference and in the log line the record writes, so a hand-edited or corrupted file can never print its bytes here.

DifferenceRepair
<seat> is in the file and is not runningteam add <seat> when something else runs, the owner runs team up when nothing does
<seat>: its pane runs no CLI (the CLI ended or the session was restored)the owner runs team up (it closes the pane without input and launches the seat fresh)
<seat>: the process in its pane is not the one team launched; nothing checks its model, account or rulesthe owner runs team up (it closes the pane without input and launches the seat fresh)
<seat>: the agent in <pane> is named "x"herdr --session <s> agent rename <pane> <seat>
<seat> runs <model> <version>; the file says <declared> (<declared> is the seat's display spelling)restart it (team remove <seat> --keep, then team add <seat>), or correct the file and team approve
<seat> is marked stopped in the file and is runningteam remove <seat> --keep, or take stopped: true off the seat
<seat>: waiting for owner (<classification>)the owner runs team up (it offers to open the pane, skip the seat or stop cleanly), or team answer <seat> trust when the classification is trust and the policy is dialogs.trust: orchestrator
<seat>: trust sent; recovery requiredthe owner runs team up
<seat>: its launch stopped at "<stage>"the owner runs team up (it resumes the launch)
<seat>: its rules were not deliveredteam remove <seat> --keep, then team add <seat>
<seat>: its rules file is missing / … is a symbolic link / … is not a regular file / … has mode 0644, not 0600 / … is not owned by this user / … cannot be read / … differs from the approved rulesthe owner runs team up — the seat's rules travel in a file in the project state folder, and it no longer holds the approved rules text; status never rewrites it
<seat> holds text in its input box that was never sentthe owner clears or sends it in the pane; team does not type into a box it can't verify
<seat>: its launch stopped at "named", and it holds text in its input box that was never sentthe owner clears or sends it in the pane, then runs team up (it resumes the launch)
<name>: a temporary seat is recorded and is not runningteam remove <name>
no watch has run for this sessionteam watch --session <s>
the watch's last pass was <n> minute(s) agoteam watch --session <s>
an unnamed <cli> (w1:p2) is running and is not in the fileadd the seat to the file and team approve, or close it
worktree <task>: its setup failedteam worktree remove <task>
the protected checkout "." is on "x", not on "main"the owner switches it back: git -C . switch main
the file was never approved on this machinethe owner runs team approve
approved before records were signed: run team approve once, or the case a refused record namesthe owner runs team approve
the file differs from the approved one: <line>the owner runs team approve

The one precondition status knows and orders is the real one: the file is not the approved one. That difference is printed first, and a repair that names a command that refuses on an unapproved file — team up, team add, team worktree — is marked (after: …). Nothing else is reordered or marked: a missing or stale watch blocks no repair, and what blocks a launch is team doctor's to report. When at least one repair is the owner's, the summary line reports N difference(s), M for the owner.

A difference, and its repair

The repair is the command add starts a stopped or missing seat with:

Terminal
 team add claude-keeper
claude-keeper: ready

Now nothing disagrees:

Terminal
 team status ; echo "exit $?"
team status: warning, line 3: `coordinator:` is now `leads: true` on the lead's seat, and is still read
team beacon, session "beacon"
  claude-keeper  idle     Claude Opus 5.5  w2:p1
  claude-beacon  working  Claude Opus 5.5  w1:p1
budgets:
  openai  session  left 40%  used 60%  resets in 44m  -  read 2m ago  check  fresh
  openai  daily  left 70%  used 30%  resets unknown  claude-beacon  last seen 40m ago  status line (fallback)  stale
  openai  weekly  left 5%  used 95%  resets in 44m  claude-beacon  changed 2m ago  status line (fallback)  fresh, inside reserve 20%
note: approval #1 (2026-10-04), key fe21ef6293de
0 difference(s)
exit 0