-
Notifications
You must be signed in to change notification settings - Fork 80
Description
Bug Description
When using AgentCoreMemorySessionManager with AgentCoreBrowser (Browser Tool) in Strands Agents, the conversation history becomes corrupted after the first message, leading to ValidationException errors.
Environment
- bedrock-agentcore: Latest version
- Strands Agents: Latest version
- strands-agents-tools: Latest version
- Region: us-east-1
- Memory ID: memory_agentcore_demo_complex-MOvGs2AZQ5
Problem Description
Error Message
Session message history has an orphaned toolUse with no toolResult.
Adding toolResult content blocks to create valid conversation.
ValidationException: The number of toolResult blocks at messages.27.content
exceeds the number of toolUse blocks of previous turn.
Behavior
- ✅ First message in session: Works correctly
- ❌ Subsequent messages in same session: Fails with ValidationException
- ✅ Without Browser Tool: Memory works correctly with other tools (Gateway tools)
- ❌ With Browser Tool: Memory appears to save corrupted conversation history
Code Example
from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig
from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager
from strands import Agent
from strands_tools.browser import AgentCoreBrowser
# Memory configuration
memory_config = AgentCoreMemoryConfig(
memory_id="memory_agentcore_demo_complex-MOvGs2AZQ5",
session_id="test_session_123",
actor_id="test_user"
)
session_manager = AgentCoreMemorySessionManager(
agentcore_memory_config=memory_config,
region_name="us-east-1"
)
# Browser Tool
browser_tool = AgentCoreBrowser(region="us-east-1")
# Agent with Browser Tool + Memory
agent = Agent(
model="us.anthropic.claude-sonnet-4-5-20250929-v1:0",
system_prompt="You are a helpful assistant.",
session_manager=session_manager,
tools=[browser_tool.browser]
)
# First call: SUCCESS ✅
result1 = agent("Hello")
# Second call in same session: FAILS ❌
# Memory loads corrupted history with orphaned toolUse
result2 = agent("How are you?")Root Cause Hypothesis
The issue appears to be in how AgentCoreMemorySessionManager saves and loads conversation history when Browser Tool is involved:
Possible Causes:
-
Incomplete tool call persistence:
- Browser Tool creates
tool_useblocks - Memory saves the conversation
- On reload,
tool_useblocks are missing or corrupted - But
tool_resultblocks are preserved - This creates "orphaned toolUse"
- Browser Tool creates
-
Serialization/Deserialization issue:
- Browser Tool's conversation format may not be fully compatible with Memory's storage format
- Some data is lost during save/load cycle
-
Context truncation without cleanup:
- Memory may truncate conversation history
- But doesn't properly clean up orphaned tool blocks
Logs
2026-02-02T10:12:24.909000+00:00 Session message history has an orphaned toolUse with no toolResult. Adding toolResult content blocks to create valid conversation.
2026-02-02T10:12:25.876000+00:00 botocore.errorfactory.ValidationException: An error occurred (ValidationException) when calling the ConverseStream operation: The number of toolResult blocks at messages.27.content exceeds the number of toolUse blocks of previous turn.
Testing Results
| Configuration | Result |
|---|---|
| Memory + Gateway Tools | ✅ Works |
| Memory + Browser Tool | ❌ Fails after first message |
| No Memory + Browser Tool | ❓ Not tested (Memory required) |
| Memory + Gateway + Browser | ❌ Fails after first message |
This strongly suggests the issue is in how Memory handles Browser Tool's conversation history.
Questions
- Is Browser Tool + Memory a tested and supported combination?
- Are there known limitations or special handling required for Browser Tool with Memory?
- Does Memory have special serialization logic for different tool types?
- Is there documentation on conversation history format requirements?
Expected Behavior
AgentCore Memory should correctly save and restore conversation history when Browser Tool is used, maintaining proper tool_use/tool_result pairing.
Actual Behavior
After the first message, Memory loads corrupted conversation history with orphaned tool blocks, causing Bedrock API to reject subsequent requests.
Related Issues
- Similar issue reported in Strands Agents: Browser Tool + Memory: orphaned toolUse causing ValidationException after first message strands-agents/sdk-python#1610
- Anthropic Claude Code #13964: orphaned tool_result blocks after context truncation
- browser-use #710: Browser-use fails with Bedrock Converse API
Suggested Investigation
- Add logging to show exactly what Memory saves vs. what it loads
- Compare conversation history format for Browser Tool vs. other tools
- Check if Browser Tool's message format requires special handling
- Verify that all tool blocks are properly paired during save/load
Suggested Fix
Add validation and cleanup in AgentCoreMemorySessionManager:
- Before saving: Validate that all
tool_useblocks have correspondingtool_resultblocks - After loading: Sanitize conversation history to remove orphaned tool blocks
- Add specific handling for Browser Tool if its format differs from standard tools
Impact
This bug prevents using Browser Tool with Memory, which is a critical limitation for building context-aware agents that need web browsing capabilities.