[BUG] Bedrock: --thinking-display summarized is ignored — thinking blocks arrive with empty text (identical command works on first-party API)

Open 💬 2 comments Opened Jun 12, 2026 by j-h-suh

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)'
  1. Run (A) with Bedrock auth configured (AWS_BEARER_TOKEN_BEDROCK) → prints 0.
  2. 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 via ps)
  • CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
  • --settings '{"showThinkingSummaries": true}'
  • Agent SDK: typed thinking={"type": "adaptive", "display": "summarized"} and extra_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-12 beta; thinking.display honored for API-key sessions but not subscription sessions → precedent for per-path handling of redact/display
  • #56356 — --thinking-display silently dropped on claude-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.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗