[BUG] Fable 5: mid-turn assistant text blocks intermittently delivered as summarized thinking blocks (turn appears silent)
Environment
- Claude Code: 2.1.201
- Model:
claude-fable-5 - Platform: Linux (WSL2), Anthropic API (subscription)
- Observed both in the on-disk transcript (
~/.claude/projects/**/<session>.jsonl) and in a--output-format stream-jsonconsumer rendering the same stream
Summary
On Fable 5, when the model emits thinking → text → tool_use within a turn, the client intermittently never receives the text block. Instead it receives an extra short thinking block, with a valid signature, whose content is a paraphrase of the missing user-facing text — i.e. the summarized-thinking pipeline appears to absorb the model's text block into the thinking summary stream.
Because Claude Code hides thinking by default, affected turns look completely silent: the model works through tool calls with no visible narration, and text clearly written for the user (status updates, sometimes even instructions) is only discoverable by expanding thinking blocks in a client that renders them.
Evidence
From one session (4a80f3d4-eb8a-4e4b-b791-9efa8bd31171), block composition per assistant message id:
msg_01RGLsVsMqW1fTGEDHuMRExz ['thinking', 'text', 'tool_use'] <- text delivered (ok)
msg_01X1PEtb6xF27hJuFHwmBTUm ['thinking', 'thinking', 'tool_use'] <- text swallowed
msg_013UEULaCURMbNGfpWYLazSL ['thinking', 'thinking', 'tool_use'] <- text swallowed
msg_01CDBLob3BAqEb6u25XB47vS ['thinking', 'thinking', 'tool_use'] <- text swallowed
msg_017k9JmCVezg4Vt4YAMALSk2 ['thinking', 'thinking', 'tool_use'] <- text swallowed
msg_015ggGe2xFVcFCS7LT7W7sVW ['thinking', 'text', 'tool_use'] <- text delivered (ok)
msg_019JkXNVEyRcKPbgQY42Vevn ['thinking', 'thinking', 'tool_use'] <- text swallowed
Example (msg_01X1PEtb6xF27hJuFHwmBTUm, requestId req_011CcjR4DNPhEkZKdZBWafVA, 2026-07-05T18:52:50Z):
- The model's intended user-facing text for that turn (confirmed because the model quotes it verbatim in later turns — it exists in the model-side conversation) was:
> "You caught a live specimen — this very session. Let me look at the raw transcript on disk to see what those two blocks actually are on the wire."
- What the client received instead was a second
thinkingblock (88 chars, signed):
> "I'll check the raw transcript to see what those two blocks actually contain on the wire."
- The verbatim text appears nowhere in the stream or transcript (
grep -c "live specimen" <transcript>→ 0), while the paraphrase arrived typed asthinking.
The paraphrase-not-verbatim relationship (same content, different, shorter wording) is the fingerprint of the thinking summarizer, and the valid signature on the block means it was typed as thinking server-side — the client cannot mint signed thinking blocks, so this is not a client-side mislabeling.
Expected
Assistant text blocks are always delivered to the client as text content blocks, regardless of the thinking display mode. The thinking summary should cover only the chain of thought, not absorb the model's user-facing output.
Impact
- Fable 5 frequently appears to "go silent" in Claude Code — long tool-calling stretches with zero visible narration, because the narration was emitted but delivered as hidden thinking.
- User-directed content (including, occasionally, instructions the model wants the user to follow) lands in thinking blocks the default UI never shows.
- Clients that do render thinking (custom stream-json consumers) show a confusing "double thinking block" pattern where the second block reads like it was addressed to the user — because it was.
Frequency
5 of 7 text-bearing tool-calling turns in the session above. Intermittent within a single session, so unlikely to be a per-request configuration difference.
Related (distinct) issues
- #21751 — assistant text missing from transcript persistence (text was received but not written). Different failure: here the text never arrives on the wire at all, and a signed thinking paraphrase arrives in its place.
- #66887 — Fable 5 thinking blocks render as empty stubs in the VS Code extension (display/omitted rendering issue, not content misrouting).
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗