[BUG] API ignores explicit thinking display:"summarized" for Opus 4.8 / Sonnet 5 since 2026-07-16 — empty thinking blocks; server-side (request verified delivered)

Status Open
Reported on v2.1.211
Maintainer reply None cached
Activity 4 comments · opened Jul 16, 2026

Summary

As of 2026-07-16 ~15:00Z, the API returns empty thinking blocks (thinking: "", signature only) for Claude Opus 4.8 and Sonnet 5, even when display: "summarized" is explicitly requested — including when injected directly into the raw request body. Fable 5 and Haiku 4.5 are unaffected. Onset occurred mid-session on unchanged client code and unchanged settings, so this is a server-side change, not a client regression. No client-side remedy (setting, CLI flag, request-body injection, or extension downgrade) restores summaries.

This differs from the existing reports (#74910, #77574, #77460, #76920, #49268): those diagnose the client failing to request summarized. Here the request is verified delivered on the wire and is ignored.

Environment

  • macOS 15 (arm64), VS Code extension 2.1.211 (bundled CLI used for headless repro)
  • Max plan, direct Anthropic API (no Vertex/Bedrock/proxy)
  • showThinkingSummaries: true in ~/.claude/settings.json since 2026-07-01 (git history) — the documented restore from the v2.1.89 default change, in place and working until onset

Evidence that the client request is correct

  1. The live extension-spawned CLI process passes --thinking-display summarized (verified via ps).
  2. Summaries worked through 2026-07-15 EOD and broke 2026-07-16 ~15:00Z inside a still-running session on 2.1.210 — no update, reload, or settings change in between.
  3. Local transcript scan: Jul 7–15 → 0 empty Opus 4.8 thinking blocks; from Jul 16 ~15:00Z → all empty, signatures up to ~11.5K chars (the display: "omitted" fingerprint described in #77460).

Decisive experiment: request-body injection

CLAUDE_CODE_EXTRA_BODY='{"thinking":{"type":"enabled","budget_tokens":31999,"display":"summarized"}}' \
  claude -p "What is 61*67? Think it through." --model claude-opus-4-8 \
  --max-turns 1 --output-format stream-json --verbose

→ thinking block present, thinking text empty. Same with {"type":"adaptive","display":"summarized"}.

Extra-body delivery was verified with a control: injecting {"max_tokens":64} overrode the CLI's own computed max_tokens (response truncated mid-sentence and auto-continued). Same merge precedence ⇒ the explicit display: "summarized" reached the wire and was ignored.

A/B repro (identical flags)

--max-thinking-tokens 31999 --thinking-display summarized --output-format stream-json --verbose, same prompt class:

| Model | Thinking block |
|---|---|
| claude-fable-5 | ✅ text |
| claude-haiku-4-5-20251001 | ✅ text |
| claude-opus-4-8 | ❌ empty or absent |
| claude-opus-4-8[1m] | ❌ absent |
| claude-opus-4-8 + --thinking adaptive | ❌ empty |
| claude-sonnet-5 | ❌ absent |

--debug --debug-to-stderr shows no [thinking] model rejected negotiation — the request succeeds; the summary simply isn't generated.

Expected behavior

An explicit thinking.display: "summarized" request returns summarized thinking text for all models that support it, as it did through 2026-07-15.

Actual behavior

Empty thinking text with signature-only blocks for Opus 4.8 and Sonnet 5; UI renders inert "Thought for Xs" stubs; reasoning is permanently unrecoverable for affected turns (never generated).

Impact

Users who rely on reasoning visibility have no recourse on Opus 4.8 / Sonnet 5 — the documented showThinkingSummaries: true workaround no longer has any effect for accounts hit by this rollout. Staged-rollout pattern matches the dates of prior reports (Jul 6 #74910, Jul 12 #76920, Jul 14 #77574 / #77460, Jul 16 here).

View original on GitHub ↗

3 Comments

khayzz13 · 1 month ago

Downgrading the extension to builds 5+ days old brings summaries straight back for me — same account, same Opus 4.8, same --thinking-display summarized. So the "no extension downgrade restores summaries" claim doesn't hold here, which points at a client regression rather than a purely server-side change.

Repro against the 2.1.212 bundled binary with the extension's own argv:

BIN=~/.vscode/extensions/anthropic.claude-code-2.1.212-darwin-arm64/resources/native-binary/claude
echo '{"type":"user","message":{"role":"user","content":"Think about your own existence for a full minute in a thinking block, then reply with one word."}}' \
| "$BIN" --output-format stream-json --verbose --input-format stream-json --model opus \
        --max-thinking-tokens 4000 --thinking-display summarized

One thinking block, thinking: "" (0 chars), signature present, final text present. Same with --thinking adaptive --thinking-display summarized. (Needs a forcing prompt — adaptive on a trivial prompt yields no block and masks it.)

The client is still explicitly requesting summaries — flag's on the spawned process, no new setting/env/flag flips it back on. So the request matches "verified delivered," yet the current build gets empty blocks while a build ~5 days older honors the identical request. A change keyed only on model + display can't explain that; feels like the server honors summarized conditioned on something the newer client stopped sending. Diffing the outbound thinking/beta payload between an old build and 2.1.212 should surface it.

showThinkingSummaries: true.

samboben · 1 month ago

T̶h̶i̶s̶ ̶i̶s̶ ̶f̶i̶x̶e̶d̶ ̶f̶o̶r̶ ̶m̶e̶ ̶a̶s̶ ̶o̶f̶ ̶t̶h̶e̶ ̶l̶a̶t̶e̶s̶t̶ ̶u̶p̶d̶a̶t̶e̶.̶ ̶(̶2̶.̶1̶.̶2̶1̶2̶)̶̶

I̶ ̶c̶a̶n̶ ̶o̶p̶e̶n̶ ̶t̶h̶i̶n̶k̶i̶n̶g̶ ̶b̶l̶o̶c̶k̶s̶ ̶a̶g̶a̶i̶n̶.̶

This seems to be temperamental for me at the moment. Broken in the latest version I'm running. (2.1.214)

ed-lichtman-nice · 1 month ago

This is 100% the problem I'm having. Claude agents seem to just be a lot more stupid right now -- it's not paying attention to simple details like text that says "

# Role Boundaries 
ALLOWED: You may do....

NEVER: Never do the following....

REASONING: ...

Along with a nondeterministic injection prompt that basically says "be absolutely 100% sure you've reviewed your Role Boundaries".

<img width="1272" height="351" alt="Image" src="https://github.com/user-attachments/assets/804cf377-fee7-4283-8700-63852582849c" />

<img width="1212" height="145" alt="Image" src="https://github.com/user-attachments/assets/4aef3012-71b8-43de-a457-493c77b26d42" />

When I try to look in the "thinking" to understand and justify _why_ it blatantly ignored it, it took me 3 sessions and a conversation with Opus for Opus to finally tell me "The handoff document that was written for me says I should dotnet build so it's likely that it superseeded instructions there"

The problem is I still can't even corroborate that Opus is correct because AI will only ever produce a plausible outcome. And for the last week or so I've been feeling like the outcome has become less and less plausible.

Showing cached comments. Read the full discussion on GitHub ↗