docs/sf/providers/aws/guide/agents/memory.md
Memory enables your AI agents to persist conversation history and context across invocations. AgentCore Memory stores conversation data in AWS-managed infrastructure, allowing agents to recall previous interactions and maintain context over time.
Add memory to any agent with a single property:
ai:
agents:
myAgent:
memory:
expiration: 30 # Days until memory events expire (3-365)
The framework automatically:
BEDROCK_AGENTCORE_MEMORY_ID environment variable into your runtimeMemory persists conversation data tied to a session ID. When your agent receives a request, the session ID determines which conversation history to load.
Request 1 (session: abc-123)
User: "My name is Alice"
Agent: "Nice to meet you, Alice!"
→ Stored in memory
Request 2 (session: abc-123)
User: "What's my name?"
Agent: "Your name is Alice" ← Retrieved from memory
Request 3 (session: xyz-789) # Different session
User: "What's my name?"
Agent: "I don't know your name yet" ← No history for this session
Define memory directly on an agent. Best for simple, single-agent deployments:
ai:
agents:
myAgent:
memory:
expiration: 30 # 30 days
Define memory at the ai.memory level and reference by name. Best when multiple agents need access to the same conversation history:
ai:
memory:
conversations:
expiration: 90 # 90 days
description: Shared conversation memory
agents:
chatbot:
memory: conversations # Reference by name
assistant:
memory: conversations # Same memory, different agent
Strategies define how memory processes and retrieves conversation data. They're optional—memory works without them—but strategies enable advanced features like semantic search and summarization.
Enables similarity-based search across conversation history. Use when agents need to find relevant past conversations.
ai:
memory:
searchable:
expiration: 90 # 90 days
strategies:
- SemanticMemoryStrategy:
Name: ConversationSearch
Description: Semantic search over conversation history
Namespaces:
- /conversations/{sessionId}
- /users/{userId}/chats
Maintains condensed conversation context. Use for long conversations where full history exceeds token limits.
ai:
memory:
summarized:
expiration: 90 # 90 days
strategies:
- SummaryMemoryStrategy:
Name: ConversationSummary
Description: Summarizes long conversations
Namespaces:
- /sessions/{sessionId}
Tracks user preferences across sessions. Use for personalization that persists beyond individual conversations.
ai:
memory:
preferences:
expiration: 365 # Maximum retention (1 year)
strategies:
- UserPreferenceMemoryStrategy:
Name: UserSettings
Description: Tracks user preferences and settings
Namespaces:
- /users/{userId}/preferences
Stores episodic memories with reflection capabilities. Use for agents that need to learn from past experiences.
ai:
memory:
episodes:
expiration: 30 # 30 days
strategies:
- EpisodicMemoryStrategy:
Name: Episodes
Description: Stores episodic memories with reflection
Namespaces:
- /episodes/{sessionId}
Application-specific memory handling with custom configuration.
ai:
memory:
custom:
expiration: 30 # 30 days
strategies:
- CustomMemoryStrategy:
Name: ApplicationSpecific
Description: Custom memory handling
Configuration:
customField: customValue
processingMode: batch
Combine multiple strategies for comprehensive memory management:
ai:
memory:
comprehensive:
expiration: 90 # 90 days
strategies:
# Semantic search for finding relevant conversations
- SemanticMemoryStrategy:
Name: SemanticSearch
Namespaces:
- /conversations/{sessionId}
# Summarization for context management
- SummaryMemoryStrategy:
Name: ContextSummary
Namespaces:
- /sessions/{sessionId}
# User preferences for personalization
- UserPreferenceMemoryStrategy:
Name: Preferences
Namespaces:
- /users/{userId}
When memory is configured, the framework automatically injects the BEDROCK_AGENTCORE_MEMORY_ID environment variable into your runtime. Use this to initialize memory clients in your agent code.
Python (Strands):
import os
from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig
from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager
MEMORY_ID = os.environ.get("BEDROCK_AGENTCORE_MEMORY_ID")
config = AgentCoreMemoryConfig(
memory_id=MEMORY_ID,
session_id=session_id, # From request context
actor_id="user"
)
session_manager = AgentCoreMemorySessionManager(
agentcore_memory_config=config,
region_name="us-east-1"
)
Python (LangGraph / General):
import os
from bedrock_agentcore.memory import MemoryClient
MEMORY_ID = os.environ.get("BEDROCK_AGENTCORE_MEMORY_ID")
memory_client = MemoryClient(region_name="us-east-1")
# Save conversation turn
memory_client.create_event(
memory_id=MEMORY_ID,
actor_id="user-123",
session_id="session-456",
messages=[
("What's the weather?", "USER"),
("Today is sunny!", "ASSISTANT")
]
)
# Retrieve conversation history
events = memory_client.list_events(
memory_id=MEMORY_ID,
actor_id="user-123",
session_id="session-456",
max_results=10
)
JavaScript:
import {
BedrockAgentCoreClient,
CreateEventCommand,
ListEventsCommand,
} from '@aws-sdk/client-bedrock-agentcore'
const MEMORY_ID = process.env.BEDROCK_AGENTCORE_MEMORY_ID
const client = new BedrockAgentCoreClient()
// Save conversation turn
await client.send(
new CreateEventCommand({
memoryId: MEMORY_ID,
actorId: 'user-123',
sessionId: 'session-456',
eventTimestamp: new Date(),
payload: [
{
conversational: {
content: { text: "What's the weather?" },
role: 'USER',
},
},
{
conversational: {
content: { text: 'Today is sunny!' },
role: 'ASSISTANT',
},
},
],
}),
)
// Retrieve conversation history
const { events } = await client.send(
new ListEventsCommand({
memoryId: MEMORY_ID,
actorId: 'user-123',
sessionId: 'session-456',
maxResults: 10,
}),
)
The framework automatically creates an IAM role for each memory resource. This role includes the AWS managed policy AmazonBedrockAgentCoreMemoryBedrockModelInferenceExecutionRolePolicy, which grants Bedrock model invocation permissions required for memory strategies (extraction, consolidation). You can add custom statements alongside this managed policy:
ai:
memory:
conversations:
expiration: 30 # 30 days
role:
name: custom-memory-role
statements:
- Effect: Allow
Action:
- kms:Decrypt
Resource: arn:aws:kms:us-east-1:123456789012:key/xxx
tags:
Team: AI
| Property | Type | Required | Description |
|---|---|---|---|
expiration | number | No | Days until memory events expire (3-365, default: 30) |
description | string | No | Human-readable description |
encryptionKey | string | No | KMS key ARN for encryption |
strategies | array | No | Memory processing strategies |
role | string/object | No | IAM role ARN or configuration |
tags | object | No | Resource tags |
Each strategy type has specific properties:
| Strategy | Required Properties | Optional Properties |
|---|---|---|
SemanticMemoryStrategy | Name | Description, Namespaces |
SummaryMemoryStrategy | Name | Description, Namespaces |
UserPreferenceMemoryStrategy | Name | Description, Namespaces |
EpisodicMemoryStrategy | Name | Description, Namespaces, ReflectionConfiguration |
CustomMemoryStrategy | Name | Description, Namespaces, Configuration |
service: my-ai-service
provider:
name: aws
region: us-east-1
ai:
# Shared memory with multiple strategies
memory:
conversationMemory:
description: Production conversation memory
expiration: 90 # 90 days
strategies:
- SemanticMemoryStrategy:
Name: ConversationSearch
Namespaces:
- /conversations/{sessionId}
- SummaryMemoryStrategy:
Name: ContextSummary
Namespaces:
- /sessions/{sessionId}
tags:
Environment: production
# Agent with shared memory reference
agents:
chatbot:
memory: conversationMemory # Reference shared memory
JavaScript:
Python: