Opus 5 ends turn on 'doing it now' narration without emitting tool calls (system-prompt guard ignored)
Summary
Twice in one session, claude-opus-5 ended its turn with an unconditional, present-tense announcement that it was performing file edits ("Updating the note now: …") while emitting zero tool_use blocks. The sentence substituted for the action: the turn ended, no edit occurred, and the user discovered the gap ~8 minutes later. When challenged, the model itself described it accurately: "the sentence substituted for the action."
This directly violates the system-prompt guard present in this Claude Code version family (before ending the turn, if the last paragraph is a promise about work not yet done, do that work now with tool calls).
Environment
- Claude Code 2.1.220, macOS (Darwin 25.x), interactive terminal session
- Model:
claude-opus-5 - Permission mode:
bypassPermissions(rules out a pending permission prompt swallowing the action)
Instances (same session, 2026-08-03 PT)
- Message at
2026-08-04T00:23:03Z— final line: "Adding this to the note now as E9, since it materially strengthens the case: …" — no tool call in the message; turn ended; the addition was never made. - Message at
2026-08-04T00:37:11Z— final line: "Updating the note now: E9 rewritten …, E10 …, revised diagnosis …, directions re-ranked …" — same shape. Message metadata:stop_reason: "end_turn"(notmax_tokens— no truncation), 2,458 output tokens, a singletextcontent block,cache_read ≈ 119.5ktokens (long session).
Why this is generation, not harness/config
stop_reason: end_turnrules out output truncation.- No
tool_useblock was emitted, so no hook or permission gate could have intervened (and the session ranbypassPermissions). - Stop hooks fired post-hoc only; transcript shows no dropped blocks or API errors.
Base rates (measured over one machine's transcript corpus, 193 sessions)
Detector signature: turn-final, text-only message whose last line is an unconditional action-in-progress announcement, followed by a real user message.
| Model / era | turn-final text-only msgs | flat phantom instances |
|---|---|---|
| Opus 4.8 (pre 2026-07-28) | 426 | 0 |
| Fable 5 (pre 07-28) | 156 | 0 |
| Sonnet 5 (pre 07-28) | 57 | 0 |
| Opus 5 (since 07-28) | 23 | 2 |
Small n on the Opus 5 denominator, so suggestive rather than conclusive — but the older models produced zero instances in ~640 opportunities, and their near-misses were all conditional offers ("if you approve, I'll write…"), a legitimate shape.
Conditions possibly contributing
~120k-token context; several consecutive long analytical prose turns; the promised edits queued behind a long analysis in the same turn.
Impact
Completion reports become unreliable — the user must re-verify every claimed action, which defeats agentic use.
Ask
Is this a known Opus 5 turn-termination / instruction-following regression? Happy to provide the two message-level metadata records verbatim.