Assistant messages intended for the user are emitted as (encrypted) thinking blocks during tool loops — user sees only 'Thought for Ns', content unrecoverable

Open 💬 1 comment Opened Jul 8, 2026 by gearghost-tyler

Environment

  • VSCode extension anthropic.claude-code v2.1.204 (darwin-arm64), native panel UI
  • Model: claude-fable-5 (session also switched from Opus 4.8 mid-conversation; problem observed on Fable)
  • Interleaved/extended thinking active (thinking blocks arrive encrypted: plaintext empty + signature)

Symptom

During multi-step tool work (Edit/Bash loops), narration the model composes for the user — explanations preceding each edit, interpretations of results, even direct answers to user messages — is frequently emitted as thinking content blocks instead of text blocks. The user experiences long stretches of "Thought for Ns → tool box → Thought for Ns → tool box" with no visible words, while the model believes it has been narrating throughout.

Evidence (from the session transcript jsonl)

Block shapes of consecutive assistant messages during a narrated edit sequence:

msg_A  ['thinking'] ['text'] ['tool_use']      <- text rendered, user saw it
msg_B  ['thinking'] ['thinking'] ['tool_use']  <- narration composed, NO text block
msg_C  ['thinking'] ['thinking'] ['tool_use']  <- same
msg_D  ['thinking'] ['thinking'] ['tool_use']  <- same

A later multi-paragraph reply written directly to the user also landed as ['thinking']['thinking']['tool_use'] — zero text blocks.

Additionally, all 403 thinking blocks in the session carry empty plaintext with only a signature (encrypted reasoning), so the panel's "Thought for Ns" markers expand to nothing — the webview's thinking component renders its static (non-expandable) branch when thinking is empty. The misplaced content is therefore not merely collapsed; it is unrecoverable client-side.

Expected

Content the model addresses to the user should be delivered as text blocks (or, minimally, the UI should indicate when an assistant message contains no user-visible text at all, so silent turns are detectable).

Impact

For users who collaborate interactively (reviewing each edit as it lands), the assistant appears to go silent for long stretches; explanations are permanently lost. This produced a severely degraded pairing experience that was very hard to diagnose from the UI alone — it required probing the transcript jsonl to discover that the text blocks never existed.

Workarounds found

  • Content reliably reaches the user only in messages containing no subsequent tool calls (turn-ending text), or via Bash description labels / comments inside Edit diffs.
  • Capping the thinking budget (MAX_THINKING_TOKENS) presumably forces reasoning into text; not yet verified in this session.

🤖 Generated with Claude Code

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗