Инструмент памяти позволяет Claude сохранять и извлекать информацию между разговорами через директорию файлов памяти. Claude может создавать, читать, обновлять и удалять файлы, которые сохраняются между сеансами, позволяя ему накапливать знания с течением времени без необходимости хранить всё в окне контекста.
Инструмент памяти работает на стороне клиента — вы контролируете, где и как хранятся данные через вашу собственную инфраструктуру.
Инструмент памяти в настоящее время находится в бета-версии. Чтобы включить его, используйте заголовок бета-версии context-management-2025-06-27 в ваших запросах API.
Пожалуйста, свяжитесь с нами через нашу форму обратной связи, чтобы поделиться своим мнением об этой функции.
Когда включено, Claude автоматически проверяет директорию памяти перед началом задач. Claude может создавать, читать, обновлять и удалять файлы в директории /memories для сохранения того, что он узнаёт во время работы, а затем ссылаться на эти воспоминания в будущих разговорах для более эффективного решения похожих задач или продолжения с того момента, где он остановился.
Поскольку это инструмент на стороне клиента, Claude делает вызовы инструментов для выполнения операций с памятью, а ваше приложение выполняет эти операции локально. Это даёт вам полный контроль над тем, где и как хранится память. В целях безопасности вы должны ограничить все операции с памятью директорией /memories.
Когда вы просите Claude помочь с задачей, Claude автоматически сначала проверяет директорию памяти. Вот как выглядит типичное взаимодействие:
1. Запрос пользователя:
"Помогите мне ответить на этот билет в службу поддержки."2. Claude проверяет директорию памяти:
"Я помогу вам ответить на билет в службу поддержки. Позвольте мне проверить мою память на предмет любого предыдущего контекста."Claude вызывает инструмент памяти:
{
"type": "tool_use",
"id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4",
"name": "memory",
"input": {
"command": "view",
"path": "/memories"
}
}3. Ваше приложение возвращает содержимое директории:
{
"type": "tool_result",
"tool_use_id": "toolu_01C4D5E6F7G8H9I0J1K2L3M4",
"content": "Вот файлы и директории до 2 уровней глубины в /memories, исключая скрытые элементы и node_modules:\n4.0K\t/memories\n1.5K\t/memories/customer_service_guidelines.xml\n2.0K\t/memories/refund_policies.xml"
}4. Claude читает релевантные файлы:
{
"type": "tool_use",
"id": "toolu_01D5E6F7G8H9I0J1K2L3M4N5",
"name": "memory",
"input": {
"command": "view",
"path": "/memories/customer_service_guidelines.xml"
}
}5. Ваше приложение возвращает содержимое файла:
{
"type": "tool_result",
"tool_use_id": "toolu_01D5E6F7G8H9I0J1K2L3M4N5",
"content": "Вот содержимое /memories/customer_service_guidelines.xml с номерами строк:\n 1\t<guidelines>\n 2\t<addressing_customers>\n 3\t- Всегда обращайтесь к клиентам по их имени\n 4\t- Используйте сочувственный язык\n..."
}6. Claude использует память для помощи:
"На основе ваших рекомендаций по обслуживанию клиентов я могу помочь вам составить ответ. Пожалуйста, поделитесь деталями билета..."Инструмент памяти доступен на:
claude-sonnet-4-5-20250929)claude-sonnet-4-20250514)claude-haiku-4-5-20251001)claude-opus-4-5-20251101)claude-opus-4-1-20250805)claude-opus-4-20250514)Чтобы использовать инструмент памяти:
context-management-2025-06-27 в ваши запросы APIЧтобы обрабатывать операции инструмента памяти в вашем приложении, вам нужно реализовать обработчики для каждой команды памяти. Наши SDK предоставляют помощники инструмента памяти, которые обрабатывают интерфейс инструмента — вы можете создать подкласс BetaAbstractMemoryTool (Python) или использовать betaMemoryTool (TypeScript) для реализации вашего собственного бэкенда памяти (на основе файлов, базы данных, облачного хранилища, зашифрованных файлов и т. д.).
Для рабочих примеров см.:
Ваша реализация на стороне клиента должна обрабатывать эти команды инструмента памяти. Хотя эти спецификации описывают рекомендуемые поведения, с которыми Claude наиболее знаком, вы можете изменить вашу реализацию и возвращать строки по мере необходимости для вашего варианта использования.
Показывает содержимое директории или содержимое файла с необязательными диапазонами строк:
{
"command": "view",
"path": "/memories",
"view_range": [1, 10] // Необязательно: просмотр определённых строк
}Для директорий: Возвращает список, который показывает файлы и директории с их размерами:
Вот файлы и директории до 2 уровней глубины в {path}, исключая скрытые элементы и node_modules:
{size} {path}
{size} {path}/{filename1}
{size} {path}/{filename2}5.5K, 1.2M).) и node_modulesДля файлов: Возвращает содержимое файла с заголовком и номерами строк:
Вот содержимое {path} с номерами строк:
{line_numbers}{tab}{content}Форматирование номеров строк:
"File {path} exceeds maximum line limit of 999,999 lines."Пример вывода:
Вот содержимое /memories/notes.txt с номерами строк:
1 Hello World
2 This is line two
10 Line ten
100 Line one hundred"The path {path} does not exist. Please provide a valid path."Создание нового файла:
{
"command": "create",
"path": "/memories/notes.txt",
"file_text": "Meeting notes:\n- Discussed project timeline\n- Next steps defined\n"
}"File created successfully at: {path}""Error: File {path} already exists"Замена текста в файле:
{
"command": "str_replace",
"path": "/memories/preferences.txt",
"old_str": "Favorite color: blue",
"new_str": "Favorite color: green"
}"The memory file has been edited." с последующим фрагментом отредактированного файла с номерами строк"Error: The path {path} does not exist. Please provide a valid path.""No replacement was performed, old_str `\{old_str}` did not appear verbatim in {path}."old_str появляется несколько раз, возвращайте: "No replacement was performed. Multiple occurrences of old_str `\{old_str}` in lines: {line_numbers}. Please ensure it is unique"Если путь является директорией, возвращайте ошибку "файл не существует".
Вставка текста в определённую строку:
{
"command": "insert",
"path": "/memories/todo.txt",
"insert_line": 2,
"insert_text": "- Review memory tool documentation\n"
}"The file {path} has been edited.""Error: The path {path} does not exist""Error: Invalid `insert_line` parameter: {insert_line}. It should be within the range of lines of the file: [0, {n_lines}]"Если путь является директорией, возвращайте ошибку "файл не существует".
Удаление файла или директории:
{
"command": "delete",
"path": "/memories/old_file.txt"
}"Successfully deleted {path}""Error: The path {path} does not exist"Удаляет директорию и всё её содержимое рекурсивно.
Переименование или перемещение файла/директории:
{
"command": "rename",
"old_path": "/memories/draft.txt",
"new_path": "/memories/final.txt"
}"Successfully renamed {old_path} to {new_path}""Error: The path {old_path} does not exist""Error: The destination {new_path} already exists"Переименовывает директорию.
Мы автоматически включаем эту инструкцию в системную подсказку при включении инструмента памяти:
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.Если вы заметите, что Claude создаёт загромождённые файлы памяти, вы можете включить эту инструкцию:
Примечание: при редактировании папки памяти всегда старайтесь поддерживать её содержимое в актуальном, согласованном и организованном виде. Вы можете переименовывать или удалять файлы, которые больше не актуальны. Не создавайте новые файлы, если это не необходимо.
Вы также можете направить то, что Claude записывает в память, например: "Записывайте в вашу систему памяти только информацию, релевантную <topic>."
Вот важные проблемы безопасности при реализации вашего хранилища памяти:
Claude обычно отказывается записывать конфиденциальную информацию в файлы памяти. Однако вы можете захотеть реализовать более строгую валидацию, которая удаляет потенциально конфиденциальную информацию.
Рассмотрите отслеживание размеров файлов памяти и предотвращение чрезмерного роста файлов. Рассмотрите добавление максимального количества символов, которые может возвращать команда чтения памяти, и позвольте Claude разбивать содержимое на страницы.
Рассмотрите периодическое очищение файлов памяти, которые не были доступны в течение длительного времени.
Вредоносные входные пути могут попытаться получить доступ к файлам вне директории /memories. Ваша реализация ДОЛЖНА валидировать все пути для предотвращения атак обхода директорий.
Рассмотрите эти меры защиты:
/memories../, ..\\ или другие паттерны обхода%2e%2e%2f)pathlib.Path.resolve() и relative_to() Python)Инструмент памяти использует похожие паттерны обработки ошибок на инструмент текстового редактора. См. отдельные разделы команд инструмента выше для подробных сообщений об ошибках и поведения. Распространённые ошибки включают файл не найден, ошибки разрешений, неверные пути и дублирующиеся совпадения текста.
Инструмент памяти можно комбинировать с редактированием контекста, которое автоматически очищает старые результаты инструментов, когда контекст разговора превышает настроенный порог. Эта комбинация позволяет долгоживущие агентские рабочие процессы, которые в противном случае превысили бы лимиты контекста.
Когда редактирование контекста включено и ваш разговор приближается к порогу очистки, Claude автоматически получает уведомление предупреждения. Это побуждает Claude сохранить любую важную информацию из результатов инструментов в файлы памяти перед тем, как эти результаты будут очищены из окна контекста.
После очистки результатов инструментов Claude может извлекать сохранённую информацию из файлов памяти всякий раз, когда это необходимо, эффективно рассматривая память как расширение своего рабочего контекста. Это позволяет Claude:
Рассмотрим проект рефакторинга кода со множеством операций с файлами:
/memories/refactoring_progress.xml)Чтобы использовать обе функции вместе:
Вы также можете исключить вызовы инструмента памяти из очистки, чтобы убедиться, что Claude всегда имеет доступ к недавним операциям памяти:
context_management={
"edits": [
{
"type": "clear_tool_uses_20250919",
"exclude_tools": ["memory"]
}
]
}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"
}]
}'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
}
}
]
}
)