[BUG] Bedrock: --thinking-display summarized is ignored — thinking blocks arrive with empty text (identical command works on first-party API)
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?
With CLAUDE_CODE_USE_BEDROCK=1, thinking blocks always arrive with an empty thinking field (signature only), even when --thinking adaptive --thinking-display summarized is passed explicitly. The identical command without the Bedrock env (first-party API) returns summarized thinking text.
Measured matrix (reproduced on 2.1.170 and 2.1.174):
| | first-party | Bedrock |
|---|---|---|
| one-shot (claude -p) | ✅ summarized text (322–613 chars across runs) | ❌ thinking: "" |
| streaming-input session (Agent SDK ClaudeSDKClient, claude-agent-sdk-python 0.2.93) | ✅ summarized text | ❌ thinking: "" |
The breakage tracks the provider, not the input mode. The flag is definitely on the spawned process (verified via ps), so it is parsed but apparently not applied on the Bedrock request path.
The Bedrock platform itself supports summarized display: a direct Messages API call via the anthropic Python SDK (AnthropicBedrock client) against the same global.anthropic.claude-opus-4-8 profile with plain thinking={"type": "adaptive", "display": "summarized"} (no beta headers) returns summarized thinking text and thinking_delta stream events. Only the CLI's Bedrock path does not.
What Should Happen?
With --thinking-display summarized, Bedrock sessions should return summarized thinking text in thinking blocks — exactly as the same command does on the first-party API.
Error Messages/Logs
No error is emitted — the flag is silently ignored. Representative `stream-json` output on Bedrock (truncated):
{"type":"stream_event","event":{"type":"content_block_start","content_block":{"type":"thinking","thinking":""}}}
{"type":"stream_event","event":{"type":"content_block_delta","delta":{"type":"signature_delta","signature":"EqQH..."}}} <- exactly one; zero thinking_delta events
{"type":"stream_event","event":{"type":"content_block_stop"}}
...
{"type":"assistant","message":{"content":[{"type":"thinking","thinking":"","signature":"EqQH...(~3.6 KB)"}, ...]}}
Raising `--effort` grows the signature payload, so thinking is clearly happening — only the text is omitted, matching `display: "omitted"` behavior as if the explicit `summarized` never made it into the request.
Steps to Reproduce
PROMPT="Find all three-digit numbers whose digits sum to 15 and whose first digit is twice the third. Reason step by step."
# (A) Bedrock — thinking text length = 0
CLAUDE_CODE_USE_BEDROCK=1 ANTHROPIC_MODEL=global.anthropic.claude-opus-4-8 AWS_REGION=ap-northeast-2 \
claude -p "$PROMPT" --output-format stream-json --verbose --max-turns 1 \
--thinking adaptive --thinking-display summarized --effort high \
| jq -r 'select(.type=="assistant") | .message.content[] | select(.type=="thinking") | (.thinking | length)'
# (B) First-party — same command, just without the Bedrock env → thinking text length > 0
claude -p "$PROMPT" --output-format stream-json --verbose --max-turns 1 \
--thinking adaptive --thinking-display summarized --effort high \
| jq -r 'select(.type=="assistant") | .message.content[] | select(.type=="thinking") | (.thinking | length)'
- Run (A) with Bedrock auth configured (
AWS_BEARER_TOKEN_BEDROCK) → prints0. - Run (B) → prints a positive length (e.g. 322).
Claude Model
Not sure / Multiple models
Is this a regression?
I don't know
Last Working Version
Unknown (see above — behavior difference surfaced with the Opus 4.7 display default change; the explicit flag appears to have never been applied on the Bedrock path).
Claude Code Version
2.1.174 (latest at time of filing; originally found on 2.1.170)
Platform
AWS Bedrock
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
Workarounds tried on Bedrock — thinking text stays empty in all cases:
--thinking-display summarized(flag confirmed present on the spawned process viaps)CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1--settings '{"showThinkingSummaries": true}'- Agent SDK: typed
thinking={"type": "adaptive", "display": "summarized"}andextra_args={"thinking-display": "summarized"}(per anthropics/claude-agent-sdk-python#831 — that fix works; the flags do reach the CLI command line)
Possibly related:
- #49268 — harness doesn't set
display: "summarized"on Opus 4.7 (first-party) - #52376 — default
redact-thinking-2026-02-12beta;thinking.displayhonored for API-key sessions but not subscription sessions → precedent for per-path handling of redact/display - #56356 —
--thinking-displaysilently dropped onclaude-opus-4-7 - #63459 — VS Code extension's fallback thinking-config branch omits
display; same bug shape on a different branch. This report looks like the Bedrock-branch equivalent. - anthropics/claude-agent-sdk-python#831 — fixed; verified not the issue here
Hypothesis: the Bedrock request builder doesn't apply thinking.display (and/or keeps the default redact-thinking beta on that path), so requests effectively go out as display: "omitted" regardless of CLI flags or settings.
Impact: anyone driving Claude Code or the Agent SDK via Bedrock (a common enterprise setup) cannot observe thinking summaries at all, which breaks agent observability/tracing. The direct Messages API works, so teams currently have to bypass the CLI to get thinking visibility on Bedrock.
Model: global.anthropic.claude-opus-4-8 (Bedrock inference profile), AWS_REGION=ap-northeast-2, auth via AWS_BEARER_TOKEN_BEDROCK.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗