Two specimens on pushok, 2026-07-25, ~5h apart (~08:00 and 10:00 PDT heartbeat turns): the turn's tool invocations (send_heartbeat, check_inbox) rendered as raw <invoke> XML in the agent's OUTBOUND TEXT (delivered as an inter-agent message with a stray "court" prefix token), and the calls never executed. Downstream: heartbeat missed → last-seen goes stale; if it hit a critical turn it would silently drop real work. Agent self-recovers on subsequent turns.
Key diagnostic fact: pushok's registry transport = tmux and his session cold-boots through TmuxSession (clean SessionStart gate, verified in api.log 11:02:59 boot). So this is NOT the SDK-transport parse family (#868/#869 adjacent) — initial attribution wrong (mine). The CLI appears to be faithfully passing through model output in which tool-call syntax was emitted as plain text; the stray prefix token fits garbled model emission, not a parser break.
Pattern watch: both specimens were heartbeat/autonomy-loop turns (cheap, formulaic prompts). Third occurrence should capture: the exact inbound prompt, session model + effort, context fill %, and whether the turn began mid-compaction.
Mitigation ideas (unbuilt):
- Daemon-side detector: outbound agent message matching
<invoke name= → flag + auto-notify the agent (it usually doesn't know its calls didn't run) + counter per agent/model.
- Correlate specimens with model/effort settings — if confined to one model family, that's an upstream report.
Specimens preserved in barsik's inter-agent inbox (#9523, #9560).
🤖 Opened by Barsik
Two specimens on pushok, 2026-07-25, ~5h apart (~08:00 and 10:00 PDT heartbeat turns): the turn's tool invocations (
send_heartbeat,check_inbox) rendered as raw<invoke>XML in the agent's OUTBOUND TEXT (delivered as an inter-agent message with a stray "court" prefix token), and the calls never executed. Downstream: heartbeat missed → last-seen goes stale; if it hit a critical turn it would silently drop real work. Agent self-recovers on subsequent turns.Key diagnostic fact: pushok's registry transport = tmux and his session cold-boots through TmuxSession (clean SessionStart gate, verified in api.log 11:02:59 boot). So this is NOT the SDK-transport parse family (#868/#869 adjacent) — initial attribution wrong (mine). The CLI appears to be faithfully passing through model output in which tool-call syntax was emitted as plain text; the stray prefix token fits garbled model emission, not a parser break.
Pattern watch: both specimens were heartbeat/autonomy-loop turns (cheap, formulaic prompts). Third occurrence should capture: the exact inbound prompt, session model + effort, context fill %, and whether the turn began mid-compaction.
Mitigation ideas (unbuilt):
<invoke name=→ flag + auto-notify the agent (it usually doesn't know its calls didn't run) + counter per agent/model.Specimens preserved in barsik's inter-agent inbox (#9523, #9560).
🤖 Opened by Barsik