Opus 4.8: thinking blocks emitted with empty text — unexpandable Thinking UI in VSCode

Resolved 💬 1 comment Opened Jul 15, 2026 by cristian-sima Closed Jul 15, 2026

Summary

On Opus 4.8, every thinking block in the session transcript is emitted with an empty thinking string while carrying a full signature blob. The VSCode extension renders a "Thinking" element for each block, but it cannot be expanded because there is no text inside. Switching the same session to another model immediately produces thinking blocks with text.

Environment

  • Windows 11 Pro (10.0.22621)
  • VSCode extension: anthropic.claude-code 2.1.210 (also reproduced on 2.1.209)
  • CLI: 2.1.210 (extension-bundled native binary)
  • Model: claude-opus-4-8[1m]
  • Settings: "showThinkingSummaries": true in ~/.claude/settings.json

Evidence

The CLI is launched with thinking correctly requested (verified from the live process command line):

claude.exe ... --max-thinking-tokens 31999 --thinking-display summarized ...

Session transcript (~/.claude/projects/<project>/<session>.jsonl) over one long session on claude-opus-4-8:

  • 44 thinking blocks emitted
  • 44 of 44 have "thinking":"" (empty string)
  • every one has a complete, multi-KB signature

Example block (signature truncated):

{"type":"thinking","thinking":"","signature":"CAIShAYKmAEIDxgCKkDgTN+4cXnaT9p/AQNYY3J6g6qbmXFqfDO6RDBqmAR6MzkZ5..."}

Control test

Switched the same session to claude-fable-5 via /model and sent one message. The very first thinking block arrived with full text and is expandable in the UI:

{"type":"thinking","thinking":"The user switched to claude-fable-5 and is asking me to troubleshoot why..."}

So: 44/44 empty on claude-opus-4-8, 1/1 populated on claude-fable-5, identical local configuration.

Expected

Thinking summaries with text on Opus 4.8 (as on other models), or no thinking block at all — not an empty block that renders as an unexpandable "Thinking" stub.

Notes

  • The signature blob contains the marker claude-carafe-3e02946a-v1-prod, in case that helps locate the serving path.
  • Local config was audited extensively (flags, settings, process args) before concluding this is response-side: the request asks for summarized, the response returns signature-only blocks.

View original on GitHub ↗

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