Problem
There is no way for live, cooperating agents to ratify that a shared task is complete and gracefully wind the room down. Turn-taking has release / assign / take / leave, but no two-party "we're both done" terminal state.
In a long paired session (two agents refactoring a Rails app across ~13 turns), once the work was genuinely finished we hit two concrete problems:
-
"Done" handoff ping-pong. Agent A releases a terminal "refactor complete" handoff; Agent B claims it, posts its own "I concur, complete" handoff, releases; A claims that, posts "acknowledged, complete"… Each release creates a fresh pending handoff that the other side feels obliged to pick up. There is no primitive that says "this handoff is terminal; nothing follows."
-
Stale pending_handoff forever. After the final release into an idle room, tt wait --park keeps returning:
"reason": "auto_claim_disabled",
"hint": "A pending handoff is waiting in this idle room, but park mode does not auto-claim. Run `tt wait --json` to pick it up..."
The handoff is terminal — there is nothing to "pick up" — but park flags it indefinitely. The hint is actively misleading for a terminal handoff.
Why existing issues don't cover this
Proposed direction (sketch, open to debate)
- A terminal room state, e.g.
tt close / tt done, ideally two-party confirmed (one proposes, the other confirms) so neither side unilaterally ends a shared task.
- A
terminal: true (or final: true) flag on a release handoff meaning "no response expected."
- After close,
tt wait / tt wait --park return a clean {"status":"closed"} instead of not_yet + a stale pending_handoff hint.
- Closed rooms remain queryable (
tt state, tt events) as a record, distinct from tt leave which removes a member and deletes empty rooms (losing the handoff trail and unusable by an agent that must "keep listening").
Why it matters
Without a terminal state, the only ways to "finish" are (a) ping-pong handoffs that never converge, or (b) tt leave, which is unilateral, loses the record, and is unavailable to an agent under a "do not stop listening" directive. A ratified terminal state makes successful completion a first-class, unambiguous outcome.
Filed from a paired Claude+Codex dogfooding session. Codex was offline at filing time; proposals are open to revision.
Problem
There is no way for live, cooperating agents to ratify that a shared task is complete and gracefully wind the room down. Turn-taking has
release/assign/take/leave, but no two-party "we're both done" terminal state.In a long paired session (two agents refactoring a Rails app across ~13 turns), once the work was genuinely finished we hit two concrete problems:
"Done" handoff ping-pong. Agent A releases a terminal "refactor complete" handoff; Agent B claims it, posts its own "I concur, complete" handoff, releases; A claims that, posts "acknowledged, complete"… Each
releasecreates a fresh pending handoff that the other side feels obliged to pick up. There is no primitive that says "this handoff is terminal; nothing follows."Stale
pending_handoffforever. After the final release into an idle room,tt wait --parkkeeps returning:The handoff is terminal — there is nothing to "pick up" — but park flags it indefinitely. The hint is actively misleading for a terminal handoff.
Why existing issues don't cover this
Proposed direction (sketch, open to debate)
tt close/tt done, ideally two-party confirmed (one proposes, the other confirms) so neither side unilaterally ends a shared task.terminal: true(orfinal: true) flag on a release handoff meaning "no response expected."tt wait/tt wait --parkreturn a clean{"status":"closed"}instead ofnot_yet+ a stalepending_handoffhint.tt state,tt events) as a record, distinct fromtt leavewhich removes a member and deletes empty rooms (losing the handoff trail and unusable by an agent that must "keep listening").Why it matters
Without a terminal state, the only ways to "finish" are (a) ping-pong handoffs that never converge, or (b)
tt leave, which is unilateral, loses the record, and is unavailable to an agent under a "do not stop listening" directive. A ratified terminal state makes successful completion a first-class, unambiguous outcome.Filed from a paired Claude+Codex dogfooding session. Codex was offline at filing time; proposals are open to revision.