File: memory-tool.md | Updated: 11/15/2025
Agent Skills are now available! Learn more about extending Claude's capabilities with Agent Skills .
English
Search...
Ctrl K
Search...
Navigation
Tools
Memory tool
Home Developer Guide API Reference Model Context Protocol (MCP) Resources Release Notes
On this page
The memory tool enables Claude to store and retrieve information across conversations through a memory file directory. Claude can create, read, update, and delete files that persist between sessions, allowing it to build knowledge over time without keeping everything in the context window. The memory tool operates client-side—you control where and how the data is stored through your own infrastructure.
The memory tool is currently in beta. To enable it, use the beta header context-management-2025-06-27 in your API requests.Please reach out through our feedback form
to share your feedback on this feature.
When enabled, Claude automatically checks its memory directory before starting tasks. Claude can create, read, update, and delete files in the /memories directory to store what it learns while working, then reference those memories in future conversations to handle similar tasks more effectively or pick up where it left off. Since this is a client-side tool, Claude makes tool calls to perform memory operations, and your application executes those operations locally. This gives you complete control over where and how the memory is stored. For security, you should restrict all memory operations to the /memories directory.
Example: How memory tool calls work
When you ask Claude to help with a task, Claude automatically checks its memory directory first. Here’s what a typical interaction looks like: 1. User request:
Copy
"Help me respond to this customer service ticket."
2. Claude checks the memory directory:
Copy
"I'll help you respond to the customer service ticket. Let me check my memory for any previous context."
Claude calls the memory tool:
Copy
{
"type": "tool_use",
"id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4",
"name": "memory",
"input": {
"command": "view",
"path": "/memories"
}
}
3. Your application returns the directory contents:
Copy
{
"type": "tool_result",
"tool_use_id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4",
"content": "Directory: /memories\n- customer_service_guidelines.xml\n- refund_policies.xml"
}
4. Claude reads relevant files:
Copy
{
"type": "tool_use",
"id": "toolu_01D5E6F7G8H9I0J1K2L3M4N5",
"name": "memory",
"input": {
"command": "view",
"path": "/memories/customer_service_guidelines.xml"
}
}
5. Your application returns the file contents:
Copy
{
"type": "tool_result",
"tool_use_id": "toolu_01D5E6F7G8H9I0J1K2L3M4N5",
"content": "<guidelines>\n<addressing_customers>\n- Always address customers by their first name\n- Use empathetic language\n..."
}
6. Claude uses the memory to help:
Copy
"Based on your customer service guidelines, I can help you craft a response. Please share the ticket details..."
The memory tool is available on:
claude-sonnet-4-5-20250929)claude-sonnet-4-20250514)claude-haiku-4-5-20251001)claude-opus-4-1-20250805)claude-opus-4-20250514)To use the memory tool:
context-management-2025-06-27 in your API requestsTo handle memory tool operations in your application, you need to implement handlers for each memory command. Our SDKs provide memory tool helpers that handle the tool interface—you can subclass BetaAbstractMemoryTool (Python) or use betaMemoryTool (TypeScript) to implement your own memory backend (file-based, database, cloud storage, encrypted files, etc.).For working examples, see:
Python: examples/memory/basic.py
TypeScript: examples/tools-helpers-memory.ts
cURL
Python
TypeScript
Copy
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--header "anthropic-beta: context-management-2025-06-27" \
--data '{
"model": "claude-sonnet-4-5",
"max_tokens": 2048,
"messages": [\
{\
"role": "user",\
"content": "I'\''m working on a Python web scraper that keeps crashing with a timeout error. Here'\''s the problematic function:\n\n```python\ndef fetch_page(url, retries=3):\n for i in range(retries):\n try:\n response = requests.get(url, timeout=5)\n return response.text\n except requests.exceptions.Timeout:\n if i == retries - 1:\n raise\n time.sleep(1)\n```\n\nPlease help me debug this."\
}\
],
"tools": [{\
"type": "memory_20250818",\
"name": "memory"\
}]
}'
Your client-side implementation needs to handle these memory tool commands:
view
Shows directory contents or file contents with optional line ranges:
Copy
{
"command": "view",
"path": "/memories",
"view_range": [1, 10] // Optional: view specific lines
}
create
Create or overwrite a file:
Copy
{
"command": "create",
"path": "/memories/notes.txt",
"file_text": "Meeting notes:\n- Discussed project timeline\n- Next steps defined\n"
}
str_replace
Replace text in a file:
Copy
{
"command": "str_replace",
"path": "/memories/preferences.txt",
"old_str": "Favorite color: blue",
"new_str": "Favorite color: green"
}
insert
Insert text at a specific line:
Copy
{
"command": "insert",
"path": "/memories/todo.txt",
"insert_line": 2,
"insert_text": "- Review memory tool documentation\n"
}
delete
Delete a file or directory:
Copy
{
"command": "delete",
"path": "/memories/old_file.txt"
}
rename
Rename or move a file/directory:
Copy
{
"command": "rename",
"old_path": "/memories/draft.txt",
"new_path": "/memories/final.txt"
}
We automatically include this instruction to the system prompt when the memory tool is included:
Copy
IMPORTANT: ALWAYS VIEW YOUR MEMORY DIRECTORY BEFORE DOING ANYTHING ELSE.
MEMORY PROTOCOL:
1. Use the `view` command of your `memory` tool to check for earlier progress.
2. ... (work on the task) ...
- As you make progress, record status / progress / thoughts etc in your memory.
ASSUME INTERRUPTION: Your context window might be reset at any moment, so you risk losing any progress that is not recorded in your memory directory.
If you observe Claude creating cluttered memory files, you can include this instruction:
Note: when editing your memory folder, always try to keep its content up-to-date, coherent and organized. You can rename or delete files that are no longer relevant. Do not create new files unless necessary.
You can also guide what Claude writes to memory, e.g., “Only write down information relevant to <topic> in your memory system.”
Here are important security concerns when implementing your memory store:
Sensitive information
Claude will usually refuse to write down sensitive information in memory files. However, you may want to implement stricter validation that strips out potentially sensitive information.
File storage size
Consider tracking memory file sizes and preventing files from growing too large. Consider adding a maximum number of characters the memory read command can return, and let Claude paginate through contents.
Memory expiration
Consider clearing out memory files periodically that haven’t been accessed in an extended time.
Path traversal protection
Malicious path inputs could attempt to access files outside the /memories directory. Your implementation MUST validate all paths to prevent directory traversal attacks.
Consider these safeguards:
/memories../, ..\\, or other traversal patterns%2e%2e%2f)pathlib.Path.resolve() and relative_to())The memory tool uses the same error handling patterns as the text editor tool . Common errors include file not found, permission errors, and invalid paths.
The memory tool can be combined with context editing , which automatically clears old tool results when conversation context grows beyond a configured threshold. This combination enables long-running agentic workflows that would otherwise exceed context limits.
How they work together
When context editing is enabled and your conversation approaches the clearing threshold, Claude automatically receives a warning notification. This prompts Claude to preserve any important information from tool results into memory files before those results are cleared from the context window. After tool results are cleared, Claude can retrieve the stored information from memory files whenever needed, effectively treating memory as an extension of its working context. This allows Claude to:
Example workflow
Consider a code refactoring project with many file operations:
/memories/refactoring_progress.xml)Configuration
To use both features together:
Python
TypeScript
Copy
response = client.beta.messages.create(
model="claude-sonnet-4-5",
max_tokens=4096,
messages=[...],
tools=[\
{\
"type": "memory_20250818",\
"name": "memory"\
},\
# Your other tools\
],
betas=["context-management-2025-06-27"],
context_management={
"edits": [\
{\
"type": "clear_tool_uses_20250919",\
"trigger": {\
"type": "input_tokens",\
"value": 100000\
},\
"keep": {\
"type": "tool_uses",\
"value": 3\
}\
}\
]
}
)
You can also exclude memory tool calls from being cleared to ensure Claude always has access to recent memory operations:
Python
TypeScript
Copy
context_management={
"edits": [\
{\
"type": "clear_tool_uses_20250919",\
"exclude_tools": ["memory"]\
}\
]
}
Was this page helpful?
YesNo
Assistant
Responses are generated using AI and may contain mistakes.