- Отменить нежелательные изменения, восстановив файлы в известное хорошее состояние
- Исследовать альтернативы, восстановив checkpoint и попробовав другой подход
- Восстановиться после ошибок, когда агент вносит неправильные изменения
Как работает checkpointing
Когда вы включаете file checkpointing, SDK создаёт резервные копии файлов перед их изменением через инструменты Write, Edit или NotebookEdit. Пользовательские сообщения в потоке ответов включают UUID checkpoint, который вы можете использовать как точку восстановления. Checkpoint работает с этими встроенными инструментами, которые агент использует для изменения файлов:File rewinding восстанавливает файлы на диске в предыдущее состояние. Это не отматывает саму беседу. История беседы и контекст остаются нетронутыми после вызова
rewindFiles() (TypeScript) или rewind_files() (Python).- Файлы, созданные во время сеанса
- Файлы, изменённые во время сеанса
- Исходное содержимое изменённых файлов
Реализация checkpointing
Чтобы использовать file checkpointing, включите его в ваших параметрах, захватите UUID checkpoint из потока ответов, затем вызовитеrewindFiles() (TypeScript) или rewind_files() (Python) когда вам нужно восстановить.
Следующий пример показывает полный процесс: включение checkpointing, захват UUID checkpoint и ID сеанса из потока ответов, затем возобновление сеанса позже для отмотки файлов. Каждый шаг подробно объясняется ниже. Примеры в этом разделе используют приглашение “Refactor the authentication module”. Запустите их в проекте, который содержит модуль аутентификации, или измените приглашение на имена файлов, которые существуют в вашем проекте, чтобы вы могли наблюдать изменения файлов и видеть, как отмотка восстанавливает их.
1
Включение checkpointing
Настройте параметры SDK для включения checkpointing и получения UUID checkpoint:
2
Захват UUID checkpoint и ID сеанса
С установленным параметром
replay-user-messages (показано выше), каждое пользовательское сообщение в потоке ответов имеет UUID, который служит checkpoint.Для большинства случаев использования захватите UUID первого пользовательского сообщения (message.uuid); отмотка к нему восстанавливает все файлы в их исходное состояние. Чтобы сохранить несколько checkpoint и отмотать к промежуточным состояниям, см. Несколько точек восстановления.Захват ID сеанса (message.session_id) является необязательным; вам он нужен только если вы хотите отмотать позже, после завершения потока. Если вы вызываете rewindFiles() немедленно, пока всё ещё обрабатываете сообщения (как это делает пример в Checkpoint перед рискованными операциями), вы можете пропустить захват ID сеанса.3
Отмотка файлов
Чтобы отмотать после завершения потока, возобновите сеанс с пустым приглашением и вызовите Если вы захватили ID сеанса и UUID checkpoint, вы также можете отмотать из CLI. Эта команда требует исполняемого файла Флаг
rewind_files() (Python) или rewindFiles() (TypeScript) с вашим UUID checkpoint. Вы также можете отмотать во время потока; см. Checkpoint перед рискованными операциями для этого паттерна.claude, который поставляется с установкой Claude Code и не устанавливается пакетом SDK. SDK включает checkpointing для вас, но когда вы запускаете claude -p напрямую, вы должны установить переменную окружения CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING:--rewind-files не отображается в выводе claude --help, но CLI принимает его, как показано.Общие паттерны
Эти паттерны показывают различные способы захвата и использования 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
Запуск интерактивного примера
Создайте новый файл с именем Этот пример демонстрирует полный рабочий процесс checkpointing:
try_checkpointing.py (Python) или try_checkpointing.ts (TypeScript) в том же каталоге, что и ваш служебный файл, и вставьте следующий код.Этот скрипт просит Claude добавить комментарии к документации в ваш служебный файл, затем даёт вам возможность отмотать и восстановить оригинал.- Включение checkpointing: настройте SDK с
enable_file_checkpointing=Trueиpermission_mode="acceptEdits"для автоматического одобрения правок файлов - Захват данных checkpoint: по мере выполнения агента сохраняйте UUID первого пользовательского сообщения (вашу точку восстановления) и ID сеанса
- Запрос на отмотку: после завершения агента проверьте ваш служебный файл, чтобы увидеть комментарии к документации, затем решите, хотите ли вы отменить изменения
- Возобновление и отмотка: если да, возобновите сеанс с пустым приглашением и вызовите
rewind_files()для восстановления исходного файла
3
Запуск примера
Запустите скрипт из того же каталога, что и ваш служебный файл.Вы увидите, как агент добавляет комментарии к документации, затем появится приглашение, спрашивающее, хотите ли вы отмотать. Если вы выберете да, файл будет восстановлен в его исходное состояние.
- Python
- TypeScript
Ограничения
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 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 установите переменную окружения при запуске команды:
enable_file_checkpointing=True (Python) или enableFileCheckpointing: true (TypeScript) в возобновленном сеансе, как это делается в примерах на этой странице.
Ошибка “ProcessTransport is not ready for writing”
Эта ошибка возникает, когда вы вызываетеrewindFiles() или rewind_files() после завершения итерации по ответу. Соединение с процессом CLI закрывается при завершении цикла.
Решение: Возобновите сеанс с пустым приглашением, затем отмотайте в новом запросе:
Следующие шаги
- Sessions: узнайте, как возобновлять сеансы, что требуется для отмотки после завершения потока. Охватывает ID сеансов, возобновление бесед и разветвление сеансов.
- Permissions: настройте, какие инструменты может использовать Claude и как одобряются изменения файлов. Полезно, если вы хотите больше контроля над тем, когда происходят правки.
- TypeScript SDK reference: полный справочник API, включая все параметры для
query()и методаrewindFiles(). - Python SDK reference: полный справочник API, включая все параметры для
ClaudeAgentOptionsи методаrewind_files().