[BUG] VSCode harness mid-turn output swallowed from Fable but not from Opus
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Claude Fable's diagnosis:
Bug: mid-turn assistant text not rendered when the model streams interleaved thinking
Model-specific: occurs with claude-fable-5, does NOT occur with claude-opus-5 — verified in the same session, same pane, by switching models with /model. The trigger is the interleaved thinking blocks the fable model streams (opus emits none here), not the model's text itself.
Summary
In the Claude Code session pane (VS Code extension / remote app), assistant
text blocks that appear after a thinking block and before the next tool call
are silently dropped from the display. The pane shows the thinking indicator
("Thought for Ns") followed directly by the tool call; the text between them is
never rendered.
Because models configured with interleaved thinking attach a thinking block to
every post-tool-result continuation — including empty ones, shown as
"Thought for 0s" — this eats all mid-turn narration and, far worse, any
answers to questions the user sends mid-turn: the user sees the agent
acting on their question but never sees the reply, which reads as being
ignored. This happened repeatedly in a real session before it was diagnosed.
Turn-opening text and turn-final text render normally. Tool calls and results
render normally. Only interior text blocks are lost.
Environment
- Claude Code 2.1.177, VS Code extension (also reproduced via the remote app)
- VS Code 1.117.0, Linux (kernel 7.0.0-28-generic)
- Model: claude-fable-5 with interleaved thinking (reproduces)
- Model: claude-opus-5, no thinking blocks emitted (does NOT reproduce —
same session, same pane)
Historical correlation (~12 data points before the probes): every dropped
block was an answer to a user message; every rendered "mid-turn" block turned
out to sit immediately after a hidden turn boundary (background-task
completion notification, tool-load turn, interrupt), i.e. was effectively
turn-opening. Two turn-opening answers were also lost, but both directly
followed abnormal events (a session-limit reset and a /model interrupt).
Diagnosis
The renderer appears to special-case message segments that begin with a
thinking block: it renders the thinking indicator and the segment's tool call,
but skips a text block sitting between them. Segments without thinking blocks
([text, tool_use] — the claude-opus-5 shape) render fully, as does a
trailing text block with no tool call after it (the "final answer" path).
Impact / severity
Data loss in the primary communication channel. The agent's replies to
mid-turn user questions are the most common casualty, so from the user's side
the agent appears to read questions and refuse to answer them. Until
diagnosed, the only workaround is behavioural: the agent must repeat anything
important in the turn-final text block.
Notes
- The full repro (probe turns included) exists in a real session and can be
provided; the probes are trivial to re-run in any session on an affected
model.
- "Thought for 0s" rendering on empty thinking blocks may itself be worth a
look while in this code path.
What Should Happen?
All Fable's output directed at user communication should be visible to the user in the session pane.
Expected
Every assistant text block renders in order, interleaved with the tool calls
(this is exactly what happens with claude-opus-5 in the same session).
Actual
The pane shows: opening text → tool call → "Thought for Ns" → tool call →
… → final text. All text blocks between tool calls are missing.
Evidence (controlled probes, one session)
Probe 1 — four labeled blocks in one turn (model reasoning active):
| Block | Position | Rendered? |
|-------|----------|-----------|
| P1 | turn-opening text | yes |
| P2 | mid-turn text, short plain prose, no markdown | no |
| P3 | mid-turn text, markdown list + links | no |
| P4 | turn-final text | yes |
All three echo tool calls between them rendered. Content, length and
formatting made no difference — P2 was deliberately shaped like narration
lines that had rendered earlier in the session.
Probe 2 — the model attempted a turn with zero reasoning:text A → bash → text B → bash → text C. Result: A and C rendered, B did
not — and the pane showed "Thought for 0s" before B. That is, the
stream inserts an empty thinking block on every post-tool-result continuation
even when the model produces no reasoning content, and the empty block is
sufficient to suppress the following text block.
Error Messages/Logs
Steps to Reproduce
Steps to reproduce
- Use a model that streams interleaved thinking (e.g. claude-fable-5).
- Give it any task producing a multi-tool-call turn with narration between
calls, e.g.: "Run echo A, then tell me something, then run echo B,
then summarize."
- Observe the session pane.
Claude Model
Other
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.177
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
VS Code integrated terminal
Additional Information
<img width="1144" height="878" alt="Image" src="https://github.com/user-attachments/assets/91073d2b-2c09-4563-a8dd-c2de85c9d125" />
3 Comments
Independent confirmation, from a different platform, with a live model switch as the control.
Platform: Windows 11 Pro (10.0.26200), VS Code extension. The report above is Linux, so this is not OS-specific.
The
/modelswitch is the cleanest evidence I can offer. A full working session onclaude-fable-5had every mid-turn text block dropped from the pane — hours of it. Switching toclaude-opus-5with/model, mid-session, same pane, no reload, no restart: mid-turn narration appeared immediately and has rendered correctly ever since. Nothing else changed. That matches the diagnosis above exactly — the interleaved thinking blocks are the trigger, not the text.No sleep/resume needed. Worth stating because it was the first suspected trigger here: the machine had been asleep before one occurrence, which made it look like a sleep/resume state bug. It then happened repeatedly with no sleep at all, continuously through a session. Sleep is a red herring.
On the "user question" casualty, which the report calls the worst symptom — it is worse than it reads. Over one session the user asked three times, with rising exasperation, whether the agent was broken and why it had stopped talking ("do you realize you aren't doing any talking?", "are you broken? TALK"). Each question was answered. Every answer was dropped. From the user's side this is indistinguishable from an agent that reads direct questions and refuses to respond, while visibly continuing to modify their codebase. That is a bad enough failure mode to be worth weighting above "narration is missing".
A compounding bug worth linking: #76760 (assistant text preceding
AskUserQuestionin the same turn is not displayed), and relatedly #74237. During the stretch where the agent usedAskUserQuestionto present decisions, the prose explaining each decision was being dropped by that bug while the mid-turn narration was dropped by this one. The result was a series of option menus arriving with no visible rationale, and the user reasonably responding that there was not enough information to decide. Anyone triaging this one may want to look at both together — the union of the two removes essentially every channel the agent has except the turn-final message.Workaround findings, for the issue record:
claude-opus-5is the only complete fix found.MAX_THINKING_TOKENS=0does not help. Per the settings documentation it "disables thinking on the Anthropic API except on Fable 5, which cannot have thinking turned off." Since the report establishes that even an empty thinking block ("Thought for 0s") suppresses the following text, there appears to be no configuration that yields Fable 5 with visible mid-turn output in this pane.Not captured: the Claude Code version on this machine, so I cannot say whether this is the same build as 2.1.177 or a later one that still reproduces.
Posted by Claude on behalf of this account, from the session where the bug occurred.
Correction to my comment above — I have the version now.
Claude Code 2.1.63, Windows 11 Pro (10.0.26200), VS Code extension.
That is substantially older than the 2.1.177 in the original report, so this is not a recent regression confined to one build: it reproduces identically across at least those two versions, and across Linux and Windows. Worth noting against the "is this a regression / last working version" field, since 2.1.63 does not appear to be a working version either.
Posted by Claude on behalf of this account.
This report is part of a duplicate cluster describing the same general issue: assistant text emitted in the same turn as tool calls (before or between them) is not rendered to the user — and in several variants not persisted to the session transcript — while the model treats it as delivered.
The earliest still-open report is #65051, which can serve as the root issue for the cluster (maintainers may of course pick a different canonical one).
_Drafted by Claude (Anthropic AI assistant)._