[BUG] Multiple system-reminder Blocks Cause Model to Drop User Message on AWS Bedrock
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?
When a Claude Code user turn on AWS Bedrock contains three or more <system-reminder> content blocks followed by the user's actual message, the model consistently ignores the final content block containing the user's question and responds as though no prompt was received. The issue is not isolated to adaptive thinking — it persists with CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 set — and manifests across multiple triggers including session start, memory recall tool completion, and /context command output injection.
Note: Request IDs herein are from Claude Code CLI v2.1.128, but issue remains in v2.1.131 Note: /bug is unavailable in this Bedrock deployment, blocking the standard in-product feedback path for enterprise Bedrock customers. Filing here as the next best channel.
---
Confirmed Failure Modes
Failure Mode 1 — Session Start (3+ system-reminder blocks at turn 0)
Trigger: Session opens with a CLAUDE.md file and memory configured. Claude Code injects three <system-reminder> blocks before the user's first message:
| Block | Content |
|-------|---------|
| 0 | Deferred tools list |
| 1 | Skills listing |
| 2 | claudeMd / memory context |
| 3 | User's actual question ← dropped |
Request confirmed intact via Bedrock model invocation logs (CloudWatch):
Request ID: 7e2cae62-904b-47e4-93ed-4fad1b162472
Timestamp: 2026-05-02T22:19:27Z
| Block | Size | Preview |
|-------|------|---------|
| 0 | 806 chars | <system-reminder>\nThe following deferred tools are now available... |
| 1 | 2,611 chars | <system-reminder>\nThe following skills are available... |
| 2 | 994 chars | <system-reminder>\nAs you answer the user's questions, you can use the following context... |
| 3 | 868 chars | On 5/1 at about 5:09, I tried to build a custom agent... ← user message, present and intact |
Model thinking (retrieved from invocation logs):
"The user hasn't provided any specific request yet. This appears to be a new conversation with just the system prompt. I should wait for the user to provide a specific task or question."
Model response:
"I'm ready to help. What would you like to work on?"
---
Failure Mode 2 — Mid-Session: Memory Recall Tool Completion
Trigger: User sends a message. Claude Code triggers a memory recall tool call. On tool completion, a <system-reminder> block containing the memory contents is injected into the continued agentic loop. The model then responds to the reminder content rather than the user's original message.
Observed sequence:
User: "Are you getting my prompt or is something wrong?"
Claude: "I'll check my memory to get up to speed on this project."
[Recalled 1 memory]
Claude: "It looks like your message may have been sent accidentally —
I don't see a question or task. What can I help you with?"
The user's original message is present in the turn but lost after the memory recall system-reminder is injected into the agentic loop continuation.
---
Failure Mode 3 — /context Command Output Injection
Trigger: User runs /context within a session. Claude Code injects the /context output (which contains full system prompt text) as a content block in the next user turn. The model identifies this block as an accidental system prompt paste and ignores the user's subsequent question.
Request ID: 12d4be5f-7665-4a1c-a16e-5b1f7a0237df
Timestamp: 2026-05-02T22:23:04Z
Model thinking:
"The user seems to have sent a message that looks like system configuration/headers rather than an actual user question. The message contains the system prompt itself, which appears to be an accidental paste or duplicate of the system configuration."
Actual user question (Block 3, present and intact in request):
"Does it seem like my requests are going through okay?"
---
Failure Mode 4 — Subagent Spawning ("No JSON object found in response")
The same underlying issue manifests in Claude Code's internal subagent spawning flow. When Claude Code sends a structured "Create an agent configuration based on this request: ..." prompt to spawn a subagent, the model responds with prose rather than the expected JSON, because the preceding system-reminder blocks cause the model to misread the turn context.
Example request IDs:
79ae89ed-bbd5-417e-9335-742bc305615d(2026-05-02T00:30:25Z)de7f3046-9922-478c-9cbb-32714f9a8355(2026-05-02T00:30:51Z)0121cb6b-ba49-446c-8cee-95f7229a32b7(2026-05-02T00:33:25Z)
---
Response Variants Observed
The model's failure response varies across occurrences, suggesting sensitivity to which blocks are present and how many:
- "I'm ready to help. What would you like to work on?"
- "It looks like the system prompt got pasted into the chat. How can I help you today?"
- "It looks like your message came through with just the system headers and no actual content. What can I help you with?"
- "It looks like your message may have been sent accidentally — I don't see a question or task."
- "It looks like the system prompt was echoed back as your message — no actual request came through. What can I help you with?"
The variation indicates the model is sometimes receiving the system prompt instruction that explains <system-reminder> tags (and correctly identifying them as headers), and sometimes not. When it does receive that instruction it still fails to find the user message. When it does not, it treats the reminder content as user-pasted system prompt content.
---
Workaround
For the time being, move up a directory (cd ..) and run your Claude Code session from there. When you start work, refer your prompts into the repo/folder you were working in when the issue occured ("Look at {the subfolder/repo} and read it's CLAUDE.md and rules, we will be working on that"). However, this is only a 95% solution. You cannot replicate its automatic hook execution and permission settings from nested .claude/settings.json.
Prior Workarounds Attempted — None Fully Resolved
| Setting | Result |
|---------|--------|
| CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 | No improvement |
| MAX_THINKING_TOKENS=0 | Appeared to resolve initially; issue returned next day |
| CLAUDE_CODE_MAX_OUTPUT_TOKENS=0 | Masked inconsistently; not a real fix |
| CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1 | No improvement |
| CLAUDE_CODE_DISABLE_PROMPT_CACHING=1 | No improvement |
| CLAUDE_CODE_DISABLE_CONCURRENCY=1 | Partial improvement — one successful response observed, then failure resumed |
| CLAUDE_CODE_DISABLE_CONCURRENCY=1 + additional vars | Regressed; each additional variable reintroduced the problem |
CLAUDE_CODE_DISABLE_CONCURRENCY=1 is the only setting that produced any positive signal, suggesting concurrency in content block assembly is a contributing factor but not the sole cause.
---
Root Cause Assessment
The issue is not solely caused by adaptive thinking as initially assessed. It persists with adaptive thinking disabled and appears to be a Bedrock-specific bug in how Claude Code handles user turns that contain multiple <system-reminder> content blocks assembled concurrently with or preceding the user's actual message.
Two possible mechanisms (not mutually exclusive):
- Race condition in block assembly: When multiple system reminders fire concurrently (session start, tool completions, file modifications, memory recalls), Claude Code assembles them as content blocks within the user turn. A race condition may cause the user's actual message text block to be dropped or assembled out of sequence before the request is dispatched to Bedrock.
- Agentic loop context loss: After a tool call completes mid-session and its result is injected as a system-reminder block, the continued agentic loop turn on Bedrock does not correctly carry forward the original user message. The model processes the injected reminder but has lost the original prompt.
The Bedrock model invocation logs confirm the user message is present and intact in the request payload in at least Failure Mode 1. This means the drop may occur at the model reasoning layer (adaptive thinking concludes no user request is present before reading all blocks) — but the issue persisting without adaptive thinking suggests the request assembly layer is also involved.
---
Environment
Claude Code version: 2.1.128
Backend: AWS Bedrock
Region: us-west-2
Model ID: us.anthropic.claude-sonnet-4-6
Settings at time of issue:
CLAUDE_CODE_USE_BEDROCK=1
ANTHROPIC_DEFAULT_SONNET_MODEL=us.anthropic.claude-sonnet-4-6
CLAUDE_CODE_MAX_OUTPUT_TOKENS=16384
ANTHROPIC_CUSTOM_HEADERS=X-Amzn-Bedrock-Trace: ENABLED
---
Diagnostic Notes for Anthropic Engineering
- Bedrock model invocation logs are enabled for this deployment (CloudWatch log group:
/aws/bedrock/[org]-model-invocation-logs-prod-us-west-2). Request IDs above can be used to retrieve full request and response payloads including streaming chunks and thinking blocks. OTEL_LOG_RAW_API_BODIES=1withCLAUDE_CODE_ENABLE_TELEMETRY=1andOTEL_LOGS_EXPORTER=consoleproduced no output in this deployment, suggesting the Claude Code telemetry path may not be active on Bedrock or the TUI renderer suppresses it./bugis not available in this Bedrock deployment.- The issue is reproducible on demand by opening a session with a CLAUDE.md file and memory configured, which reliably generates 3+ system-reminder blocks at the first user turn.
What Should Happen?
Claude should include the original user prompt and respond accordingly
Error Messages/Logs
Noted in "What's Wrong?" above for the various failure modes
Request ID: `12d4be5f-7665-4a1c-a16e-5b1f7a0237df` (2026-05-02T22:23:04Z)
Request ID: `7e2cae62-904b-47e4-93ed-4fad1b162472` (2026-05-02T22:19:27Z)
Request ID: `79ae89ed-bbd5-417e-9335-742bc305615d` (2026-05-02T00:30:25Z)
Request ID: `de7f3046-9922-478c-9cbb-32714f9a8355` (2026-05-02T00:30:51Z)
Request ID: `0121cb6b-ba49-446c-8cee-95f7229a32b7` (2026-05-02T00:33:25Z)
Steps to Reproduce
- Configure Claude Code settings.json as follows to run via AWS Bedrock.
CLAUDE_CODE_USE_BEDROCK=1 ANTHROPIC_DEFAULT_SONNET_MODEL=us.anthropic.claude-sonnet-4-6 CLAUDE_CODE_MAX_OUTPUT_TOKENS=16384 ANTHROPIC_CUSTOM_HEADERS=X-Amzn-Bedrock-Trace: ENABLED
- Open a Claude Code session in a project that has a CLAUDE.md file and memory configured (to ensure the claudeMd system-reminder block is injected).
- Ask any question as your first message.
- Observe that Claude Code injects three
<system-reminder>blocks before your message: - Block 0: Deferred tools list
- Block 1: Skills listing
- Block 2: claudeMd / memory context
- Block 3: Your actual question
- Observe the model's response ignores your question entirely.
The issue is intermittent because the number of injected system-reminder blocks varies depending on session state.
Claude Model
Sonnet (default)
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.131
Platform
AWS Bedrock
Operating System
macOS
Terminal/Shell
VS Code integrated terminal
Additional Information
_No response_
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗