- Отменить нежелательные изменения, восстановив файлы в известное хорошее состояние
- Исследовать альтернативы, восстановив checkpoint и попробовав другой подход
- Восстановиться после ошибок, когда агент вносит неправильные изменения
Как работает checkpointing
Когда вы включаете file checkpointing, SDK создаёт резервные копии файлов перед их изменением через инструменты Write, Edit или NotebookEdit. Пользовательские сообщения в потоке ответов включают UUID checkpoint, который вы можете использовать как точку восстановления. Checkpoint работает с этими встроенными инструментами, которые агент использует для изменения файлов:| Инструмент | Описание |
|---|---|
| Write | Создаёт новый файл или перезаписывает существующий файл новым содержимым |
| Edit | Вносит целевые правки в определённые части существующего файла |
| NotebookEdit | Изменяет ячейки в Jupyter notebooks (файлы .ipynb) |
File rewinding восстанавливает файлы на диске в предыдущее состояние. Это не отматывает саму беседу. История беседы и контекст остаются нетронутыми после вызова
rewindFiles() (TypeScript) или rewind_files() (Python).- Файлы, созданные во время сеанса
- Файлы, изменённые во время сеанса
- Исходное содержимое изменённых файлов
Реализация checkpointing
Чтобы использовать file checkpointing, включите его в ваших параметрах, захватите UUID checkpoint из потока ответов, затем вызовитеrewindFiles() (TypeScript) или rewind_files() (Python) когда вам нужно восстановить.
Следующий пример показывает полный процесс: включение checkpointing, захват UUID checkpoint и ID сеанса из потока ответов, затем возобновление сеанса позже для отмотки файлов. Каждый шаг подробно объясняется ниже.
Включение checkpointing
Настройте параметры SDK для включения checkpointing и получения UUID checkpoint:
| Параметр | Python | TypeScript | Описание |
|---|---|---|---|
| Включить checkpointing | enable_file_checkpointing=True | enableFileCheckpointing: true | Отслеживает изменения файлов для отмотки |
| Получить UUID checkpoint | extra_args={"replay-user-messages": None} | extraArgs: { 'replay-user-messages': null } | Требуется для получения UUID пользовательских сообщений в потоке |
Захват UUID checkpoint и ID сеанса
С установленным параметром
replay-user-messages (показано выше), каждое пользовательское сообщение в потоке ответов имеет UUID, который служит checkpoint.Для большинства случаев использования захватите UUID первого пользовательского сообщения (message.uuid); отмотка к нему восстанавливает все файлы в их исходное состояние. Чтобы сохранить несколько checkpoint и отмотать к промежуточным состояниям, см. Несколько точек восстановления.Захват ID сеанса (message.session_id) является необязательным; вам он нужен только если вы хотите отмотать позже, после завершения потока. Если вы вызываете rewindFiles() немедленно, пока всё ещё обрабатываете сообщения (как это делает пример в Checkpoint перед рискованными операциями), вы можете пропустить захват ID сеанса.Отмотка файлов
Чтобы отмотать после завершения потока, возобновите сеанс с пустым приглашением и вызовите Если вы захватили ID сеанса и UUID checkpoint, вы также можете отмотать из CLI:
rewind_files() (Python) или rewindFiles() (TypeScript) с вашим UUID checkpoint. Вы также можете отмотать во время потока; см. Checkpoint перед рискованными операциями для этого паттерна.Общие паттерны
Эти паттерны показывают различные способы захвата и использования UUID checkpoint в зависимости от вашего случая использования.Checkpoint перед рискованными операциями
Этот паттерн сохраняет только самый последний UUID checkpoint, обновляя его перед каждым ходом агента. Если что-то пойдёт не так во время обработки, вы можете немедленно отмотать к последнему безопасному состоянию и выйти из цикла.Несколько точек восстановления
Если Claude вносит изменения в несколько ходов, вы можете захотеть отмотать к определённой точке, а не полностью назад. Например, если Claude рефакторит файл в ход один и добавляет тесты в ход два, вы можете захотеть сохранить рефакторинг, но отменить тесты. Этот паттерн сохраняет все UUID checkpoint в массиве с метаданными. После завершения сеанса вы можете отмотать к любому предыдущему checkpoint:Попробуйте
Этот полный пример создаёт небольшой служебный файл, просит агента добавить комментарии к документации, показывает вам изменения, затем спрашивает, хотите ли вы отмотать. Прежде чем начать, убедитесь, что у вас установлен Claude Agent SDK.Создание тестового файла
Создайте новый файл с именем
utils.py (Python) или utils.ts (TypeScript) и вставьте следующий код:Запуск интерактивного примера
Создайте новый файл с именем Этот пример демонстрирует полный рабочий процесс checkpointing:
try_checkpointing.py (Python) или try_checkpointing.ts (TypeScript) в том же каталоге, что и ваш служебный файл, и вставьте следующий код.Этот скрипт просит Claude добавить комментарии к документации в ваш служебный файл, затем даёт вам возможность отмотать и восстановить оригинал.- Включение checkpointing: настройте SDK с
enable_file_checkpointing=Trueиpermission_mode="acceptEdits"для автоматического одобрения правок файлов - Захват данных checkpoint: по мере выполнения агента сохраняйте UUID первого пользовательского сообщения (вашу точку восстановления) и ID сеанса
- Запрос на отмотку: после завершения агента проверьте ваш служебный файл, чтобы увидеть комментарии к документации, затем решите, хотите ли вы отменить изменения
- Возобновление и отмотка: если да, возобновите сеанс с пустым приглашением и вызовите
rewind_files()для восстановления исходного файла
Ограничения
File checkpointing имеет следующие ограничения:| Ограничение | Описание |
|---|---|
| Только инструменты Write/Edit/NotebookEdit | Изменения, внесённые через команды Bash, не отслеживаются |
| Один сеанс | Checkpoint привязаны к сеансу, который их создал |
| Только содержимое файла | Создание, перемещение или удаление каталогов не отменяется отмоткой |
| Локальные файлы | Удалённые или сетевые файлы не отслеживаются |
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() один раз.
Ошибка “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().