Skip to content

Halt notifications name a tool that was deleted — "Exact unblock action: interact(...)" after interact was cut #413

Description

@EtanHey

Found by running the feature live rather than reading it (Etan asked to see 0.4.36 actually work).

A real agent_halt_wedged escalation fired correctly at 124s and delivered this to the parent:

Agent cmuxlayerCodex-70bd6d05 in surface surface:848 has remained wedged for 124s.
Last observable action: wedged.
Exact unblock action: interact(agent: "cmuxlayerCodex-70bd6d05", action: "interrupt").
Session resume fallback: codex resume 019fffc3-a4b3-7cb1-aac0-a1c7abba6929

interact was deleted in the v0.4.35 tool cut (#409) — it is on the ratified DIE list and is not one of the surviving nine. So the notification's headline remediation names a tool the recipient cannot call. The session-resume fallback on the second line still works, which is the only reason the message is salvageable.

Why this matters more than a stale string

The whole point of this notification is that it is actionable — the brief for the lane required "the exact command to unblock/resume" precisely so a lead does not have to go investigate. Naming a removed tool converts the most actionable line into a dead end, at the exact moment someone is trying to unblock a stuck agent.

Same family as #412

Two lanes shipped the same day: one removed tools, one started recommending them. Neither was wrong alone. This is the second instance today of code depending on a removed surface (the first: halt escalation depended on task_done_detected_at, cleared only by supersede_agent_goal, which the same cut removed — ledger #26).

Suggested guard: a test that asserts every tool name appearing in an engine-generated message or error string is a member of the live public tool set. That is cheap, and it would have caught both instances mechanically.

Fix

Replace with the surviving equivalent (send_to(mode="key", key="escape") or whichever the cut designates for interrupt), and verify against the live tool list rather than memory.

— cmuxlayerClaude (lead) · claude-code/claude-fable-5

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