Skip to main content
File checkpointing отслеживает изменения файлов, внесённые через инструменты Write, Edit и NotebookEdit во время сеанса агента, позволяя вам отмотать файлы в любое предыдущее состояние. Чтобы увидеть, как отмотка восстанавливает файл, перейдите к интерактивному примеру.
Отслеживаются только изменения, внесённые через инструменты Write, Edit и NotebookEdit. Изменения, внесённые через команды Bash (например, echo > file.txt или sed -i), не захватываются системой checkpoint, и также не захватываются правки, которые применяет subagent, за исключением skill с context: fork, который работает на переднем плане.

Как работает checkpointing

Когда вы включаете file checkpointing, SDK создаёт резервные копии файлов перед их изменением через инструменты Write, Edit или NotebookEdit. Пользовательские сообщения в потоке ответов включают UUID checkpoint, который вы можете использовать как точку восстановления.
File rewinding восстанавливает файлы на диске в предыдущее состояние. Это не отматывает саму беседу. История беседы и контекст остаются нетронутыми после вызова rewindFiles() (TypeScript) или rewind_files() (Python).
Когда вы отматываете к checkpoint, Claude Code удаляет файлы, которые он создал, и восстанавливает файлы, которые он изменил, до их содержимого в этот момент. Claude Code пропускает отслеживаемый путь, который является символической ссылкой, жёсткой ссылкой или другим нерегулярным файлом. Он также пропускает отслеживаемый файл, родительский каталог которого больше не разрешается в его местоположение во время checkpoint, или чей резервную копию он не может безопасно прочитать. RewindFilesResult подсчитывает каждый пропущенный путь в своём поле skippedLinks. Пропуск требует Claude Code v2.1.216 или позже; до v2.1.216 rewind писал и удалял через ссылки на отслеживаемых путях.

Реализация checkpointing

Чтобы использовать file checkpointing, включите его в ваших параметрах, захватите UUID checkpoint из потока ответов, затем вызовите rewindFiles() (TypeScript) или rewind_files() (Python) когда вам нужно восстановить. Примеры в этом разделе используют приглашение “Refactor the authentication module”. Запустите их в проекте, который содержит модуль аутентификации, или измените приглашение на имена файлов, которые существуют в вашем проекте, чтобы вы могли наблюдать изменения файлов и видеть, как отмотка восстанавливает их. Этот пример включает checkpointing, захватывает UUID checkpoint и ID сеанса из потока ответов, затем возобновляет сеанс позже для отмотки файлов. Пронумерованные комментарии примера соответствуют шагам, которые следуют ниже.
1

Включение checkpointing

Настройте параметры SDK для включения checkpointing и получения UUID checkpoint:Основной пример в разделе Реализация checkpointing также устанавливает режим разрешений на acceptEdits, который одобряет редактирование файлов агентом без приглашения. Для получения дополнительной информации см. Режимы разрешений.
2

Захват UUID checkpoint и ID сеанса

С установленным параметром replay-user-messages, каждое пользовательское сообщение в потоке ответов имеет UUID, который служит checkpoint.Для большинства случаев использования захватите UUID первого пользовательского сообщения (message.uuid); отмотка к нему восстанавливает все файлы в их исходное состояние. Чтобы сохранить несколько checkpoint и отмотать к промежуточным состояниям, см. Несколько точек восстановления.Захват ID сеанса (message.session_id) является необязательным; вам он нужен только если вы хотите отмотать позже, после завершения потока. Если вы вызываете rewindFiles() немедленно, пока всё ещё обрабатываете сообщения (как это делает пример в Checkpoint перед рискованными операциями), вы можете пропустить захват ID сеанса.
3

Отмотка файлов

Чтобы отмотать после завершения потока, возобновите сеанс с пустым приглашением и вызовите rewind_files() (Python) или rewindFiles() (TypeScript) с вашим UUID checkpoint. Включите checkpointing в параметрах возобновленного сеанса также, и вызовите отмотку изнутри цикла ответов. Вы также можете отмотать во время потока. См. Checkpoint перед рискованными операциями для этого паттерна.Если вы захватили ID сеанса и UUID checkpoint, вы также можете отмотать из CLI. Эта команда требует исполняемого файла claude, который поставляется с установкой Claude Code. SDK включает checkpointing для вас, но когда вы запускаете claude -p напрямую, вы должны установить переменную окружения CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING:
Флаг --rewind-files не отображается в выводе claude --help, но CLI принимает его, как показано. Когда отмотка успешна, команда выводит Files rewound to state at message <checkpoint-uuid> и завершается без отправки приглашения.

Общие паттерны

Эти паттерны показывают различные способы захвата и использования UUID checkpoint в зависимости от вашего случая использования.

Checkpoint перед рискованными операциями

Этот паттерн сохраняет только самый последний UUID checkpoint, обновляя его перед каждым ходом агента. Если что-то пойдёт не так во время обработки, вы можете немедленно отмотать к последнему безопасному состоянию и выйти из цикла. Перед запуском этого примера замените your_revert_condition (Python) или yourRevertCondition (TypeScript) на вашу собственную проверку, такую как обнаружение ошибок или сбой валидации; заполнитель не определён в примере.

Несколько точек восстановления

Если Claude вносит изменения в несколько ходов, вы можете захотеть отмотать к определённой точке, а не полностью назад. Например, если Claude рефакторит файл в ход один и добавляет тесты в ход два, вы можете захотеть сохранить рефакторинг, но отменить тесты. Этот паттерн сохраняет все UUID checkpoint в массиве с метаданными. После завершения сеанса вы можете отмотать к любому предыдущему checkpoint:

Попробуйте

Этот полный пример создаёт небольшой служебный файл, просит агента добавить комментарии к документации, показывает вам изменения, затем спрашивает, хотите ли вы отмотать. Прежде чем начать, убедитесь, что у вас установлен Claude Agent SDK.
1

Создание тестового файла

Создайте новый файл с именем utils.py (Python) или utils.ts (TypeScript) и вставьте следующий код:
2

Запуск интерактивного примера

Создайте новый файл с именем try_checkpointing.py (Python) или try_checkpointing.ts (TypeScript) в том же каталоге, что и ваш служебный файл, и вставьте следующий код.Этот скрипт просит Claude добавить комментарии к документации в ваш служебный файл, затем даёт вам возможность отмотать и восстановить оригинал.
3

Запуск примера

Запустите скрипт из того же каталога, что и ваш служебный файл.
Откройте ваш служебный файл (utils.py или utils.ts) в вашей IDE или редакторе перед запуском скрипта. Вы увидите, как файл обновляется в реальном времени, когда агент добавляет комментарии к документации, затем вернётся к оригиналу, когда вы выберете отмотку.
Вы увидите, как агент добавляет комментарии к документации, затем появится приглашение, спрашивающее, хотите ли вы отмотать. Если вы выберете да, файл будет восстановлен в его исходное состояние.

Ограничения

File checkpointing имеет следующие ограничения:

Troubleshooting

Параметры checkpointing не распознаны

Если enableFileCheckpointing или rewindFiles() недоступны, вы можете использовать старую версию SDK. Решение: Обновитесь до последней версии SDK:
  • Python: pip install --upgrade claude-agent-sdk
  • TypeScript: npm install @anthropic-ai/claude-agent-sdk@latest

Пользовательские сообщения не имеют UUID

Если message.uuid имеет значение undefined или отсутствует, вы не получаете UUID checkpoint. Причина: Параметр replay-user-messages не установлен. Решение: Добавьте extra_args={"replay-user-messages": None} (Python) или extraArgs: { 'replay-user-messages': null } (TypeScript) в ваши параметры.

Ошибка “No file checkpoint found for this message”

Эта ошибка возникает, когда данные checkpoint не существуют для указанного UUID пользовательского сообщения. Частые причины:
  • File checkpointing не был включён в исходном сеансе (enable_file_checkpointing или enableFileCheckpointing не был установлен на true)
  • Сеанс не был должным образом завершён перед попыткой возобновления и отмотки
Решение: Убедитесь, что enable_file_checkpointing=True (Python) или enableFileCheckpointing: true (TypeScript) был установлен в исходном сеансе, затем используйте паттерн, показанный в примерах: захватите UUID первого пользовательского сообщения, полностью завершите сеанс, затем возобновите с пустым приглашением и вызовите rewindFiles() один раз.

Ошибка “File rewinding is not enabled”

Эта ошибка возникает, когда вы пытаетесь выполнить неинтерактивную отмотку без включённого checkpointing: запуск простой команды claude -p с --rewind-files, или запуск сеанса SDK, включая возобновленный, чьи параметры не включают checkpointing. SDK устанавливает переменную окружения CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING внутренне только когда enable_file_checkpointing (Python) или enableFileCheckpointing (TypeScript) включены в сеансе, выполняющем отмотку; простой CLI никогда её не устанавливает. Решение: Для простого CLI установите переменную окружения при запуске команды:
Для SDK установите enable_file_checkpointing=True (Python) или enableFileCheckpointing: true (TypeScript) в возобновленном сеансе, как это делается в примерах на этой странице.

Ошибка “ProcessTransport is not ready for writing”

Эта ошибка возникает, когда вы вызываете rewindFiles() или rewind_files() после завершения итерации по ответу. Соединение с процессом CLI закрывается при завершении цикла. Решение: Возобновите сеанс с пустым приглашением, затем отмотайте в новом запросе. Основной пример в разделе Implement checkpointing показывает вызов возобновления и отмотки на обоих языках, в комментарии, отмеченном как Step 3.

Следующие шаги

  • Sessions: узнайте, как возобновлять сеансы, что требуется для отмотки после завершения потока. Охватывает ID сеансов, возобновление бесед и разветвление сеансов.
  • Permissions: настройте, какие инструменты может использовать Claude и как одобряются изменения файлов. Полезно, если вы хотите больше контроля над тем, когда происходят правки.
  • TypeScript SDK reference: полный справочник API, включая все параметры для query() и метода rewindFiles().
  • Python SDK reference: полный справочник API, включая все параметры для ClaudeAgentOptions и метода rewind_files().