[BUG] Thinking blocks arrive empty (signature-only) — reasoning invisible in UI and lost from transcripts; no summary events delivered

Status Open
Reported on v2.1.218
Maintainer reply None cached
Activity 0 comments · opened Jul 23, 2026

[BUG] Thinking blocks arrive empty (signature-only) — reasoning invisible in UI and lost from transcripts; no summary events delivered

Environment

  • Extension: Claude Code for VSCode 2.1.218 (also reproduced after downgrade to 2.1.217)
  • VS Code: 1.114.0, Linux
  • Model: Opus 4.8 (claude-opus-4-8)
  • CLI used by extension: bundled native binary (resources/native-binary/claude)
  • Settings: effortLevel: "max", CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1

Summary

As of ~2026-07-23 17:09 UTC, every thinking content block streamed to newer clients has empty thinking text — only the signature field is populated. No thinking-summary events arrive in the stream to replace the text. Result: the VSCode extension shows no Thinking block at all, and transcripts (~/.claude/projects/**/*.jsonl) permanently store empty reasoning.

An older CLI (2.1.87) on the same account, same settings, same day, returns full thinking text — so the regression is keyed to client version/protocol, not account or local config.

Evidence

1. Transcript audit — sharp cutover at 2026-07-23 22:39 IST (17:09 UTC):

session mod=07-23 19:07  blocks=  3  empty=  0  total_chars=369
session mod=07-23 22:35  blocks= 24  empty=  0  total_chars=12529
session mod=07-23 22:36  blocks=  6  empty=  0  total_chars=7449
session mod=07-23 22:40  blocks= 16  empty= 16  total_chars=0     <-- cutover
session mod=07-23 22:57  blocks=  6  empty=  6  total_chars=0
session mod=07-23 23:08  blocks=  4  empty=  4  total_chars=0

At the cutover moment, ~/.claude/settings.json was auto-modified (22:39:23) — showThinkingSummaries: true appeared without user action, consistent with the client persisting a server-pushed default.

2. Block structure after cutover (from transcript JSONL):

{"type": "thinking", "thinking": "", "signature": "<644-char signature>"}

3. Version A/B test — same account, same prompt, minutes apart:

# Bundled CLI 2.1.217:
$ claude -p "Briefly, why is the sky blue?" --output-format stream-json --verbose --max-turns 1
THINKING BLOCK: 0 chars, starts: ''

# System CLI 2.1.87:
$ claude -p "Briefly, why is the sky blue?" --output-format stream-json --verbose --max-turns 1
THINKING BLOCK: 45 chars, starts: 'Simple question, not related to the codebase.'

4. No summary events in the stream (2.1.217, full event dump):

system init
rate_limit_event
assistant ['thinking']   <- empty text
assistant ['text']
result success

5. Ruled out locally (each tested):

  • showThinkingSummaries: true, false, and absent — empty text in all three cases
  • Extension downgrade 2.1.218 → 2.1.217 — no change
  • Full Electron cache wipe (Cache, Code Cache, GPUCache, Service Worker) — no change
  • state.vscdb integrity — ok
  • thinkingLevel: "default_on" confirmed in launch message; no errors in exthost/renderer/extension logs

Impact

  1. UI: No Thinking block rendered anywhere in the VSCode extension (live or resumed sessions).
  2. Data loss: reasoning is not persisted — transcripts since the cutover contain no recoverable reasoning text.

Expected

Either raw thinking text streams to the client (as before), or thinking-summary events actually arrive and render when the server withholds raw text.

Steps to reproduce

  1. VSCode extension ≥2.1.217 (or bundled CLI), account where the summaries rollout is active
  2. Send any prompt that triggers extended thinking
  3. Observe stream: thinking block has thinking: "", signature only; no summary events; no Thinking UI

View original on GitHub ↗