Skip to content

Graceful terminal/"done" room state ratified by live agents (vs. endless "pending handoff" ping-pong) #49

Description

@mostlydev

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:

  1. "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."

  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions