- 不要な変更を元に戻す - ファイルを既知の良好な状態に復元することで、不要な変更を元に戻します
- 代替案を探索する - checkpoint に復元して、別のアプローチを試します
- エラーから回復する - エージェントが不正な修正を行った場合に回復します
checkpointing の仕組み
ファイル checkpointing を有効にすると、SDK は Write、Edit、または NotebookEdit ツールを通じてファイルを修正する前に、ファイルのバックアップを作成します。レスポンスストリーム内のユーザーメッセージには、復元ポイントとして使用できる checkpoint UUID が含まれます。 Checkpoint は、エージェントがファイルを修正するために使用するこれらの組み込みツールで機能します:ファイル巻き戻しは、ディスク上のファイルを以前の状態に復元します。会話自体を巻き戻すわけではありません。
rewindFiles()(TypeScript)または rewind_files()(Python)を呼び出した後も、会話履歴とコンテキストはそのまま保持されます。- セッション中に作成されたファイル
- セッション中に修正されたファイル
- 修正されたファイルの元のコンテンツ
checkpointing を実装する
ファイル checkpointing を使用するには、オプションで有効にし、レスポンスストリームから checkpoint UUID をキャプチャしてから、復元が必要な場合にrewindFiles()(TypeScript)または rewind_files()(Python)を呼び出します。
次の例は、完全なフロー(checkpointing を有効にし、レスポンスストリームから checkpoint UUID とセッション ID をキャプチャしてから、後でセッションを再開してファイルを巻き戻す)を示しています。各ステップについては、以下で詳しく説明します。このセクションの例では、プロンプト「Refactor the authentication module」を使用しています。認証モジュールを含むプロジェクトで実行するか、プロンプトを変更してプロジェクトに存在するファイルを指定してください。ファイルの変更を確認し、巻き戻しがそれらを復元するのを見ることができます。
1
checkpointing を有効にする
checkpointing を有効にして checkpoint UUID を受け取るように SDK オプションを設定します:
2
checkpoint UUID とセッション ID をキャプチャする
replay-user-messages オプションが設定されている場合(上記を参照)、レスポンスストリーム内の各ユーザーメッセージには、checkpoint として機能する UUID があります。ほとんどのユースケースでは、最初のユーザーメッセージ UUID(message.uuid)をキャプチャします。これに巻き戻すと、すべてのファイルが元の状態に復元されます。複数の checkpoint を保存して中間状態に巻き戻すには、複数の復元ポイントを参照してください。セッション ID(message.session_id)をキャプチャするのはオプションです。ストリームが完了した後に巻き戻したい場合にのみ必要です。Checkpoint before risky operations の例のように、メッセージの処理中に rewindFiles() をすぐに呼び出す場合は、セッション ID のキャプチャをスキップできます。3
ファイルを巻き戻す
ストリームが完了した後に巻き戻すには、空のプロンプトでセッションを再開し、checkpoint UUID を使用して セッション ID と checkpoint ID をキャプチャした場合、CLI からも巻き戻すことができます。このコマンドには、Claude Code をインストールすることで取得できる
rewind_files()(Python)または rewindFiles()(TypeScript)を呼び出します。ストリーム中に巻き戻すこともできます。そのパターンについては、Checkpoint before risky operations を参照してください。claude 実行ファイルが必要です。これは SDK パッケージではインストールされません。SDK は checkpointing を有効にしますが、claude -p を直接実行する場合は、CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING 環境変数を設定する必要があります:--rewind-files フラグは claude --help 出力には表示されませんが、CLI は上記のように受け入れます。一般的なパターン
これらのパターンは、ユースケースに応じて checkpoint UUID をキャプチャして使用するさまざまな方法を示しています。リスクのある操作の前に checkpoint を作成する
このパターンは、最新の checkpoint UUID のみを保持し、各エージェントターンの前に更新します。処理中に問題が発生した場合、最後の安全な状態にすぐに巻き戻して、ループから抜け出すことができます。 このサンプルを実行する前に、your_revert_condition(Python)または yourRevertCondition(TypeScript)を独自のチェック(エラー検出や検証失敗など)に置き換えてください。プレースホルダーはサンプルでは定義されていません。
複数の復元ポイント
Claude が複数のターンにわたって変更を加える場合、すべての方法で巻き戻すのではなく、特定のポイントに巻き戻したい場合があります。例えば、Claude がターン 1 でファイルをリファクタリングし、ターン 2 でテストを追加した場合、リファクタリングは保持したいが、テストは元に戻したい場合があります。 このパターンは、すべての checkpoint UUID をメタデータ付きの配列に保存します。セッションが完了した後、以前の任意の checkpoint に巻き戻すことができます:試してみる
この完全な例は、小さなユーティリティファイルを作成し、エージェントにドキュメンテーションコメントを追加させ、変更を表示してから、巻き戻したいかどうかを尋ねます。 開始する前に、Claude Agent SDK がインストールされていることを確認してください。1
テストファイルを作成する
utils.py(Python)または utils.ts(TypeScript)という新しいファイルを作成し、次のコードを貼り付けます:2
インタラクティブな例を実行する
ユーティリティファイルと同じディレクトリに この例は、完全な checkpointing ワークフローを示しています:
try_checkpointing.py(Python)または try_checkpointing.ts(TypeScript)という新しいファイルを作成し、次のコードを貼り付けます。このスクリプトは Claude にユーティリティファイルにドキュメンテーションコメントを追加するよう要求し、その後、元の状態に巻き戻すオプションを提供します。- checkpointing を有効にする:
enable_file_checkpointing=Trueとpermission_mode="acceptEdits"で SDK を設定して、ファイル編集を自動承認します - checkpoint データをキャプチャする:エージェントが実行されるときに、最初のユーザーメッセージ UUID(復元ポイント)とセッション ID を保存します
- 巻き戻しを促す:エージェントが完了した後、ユーティリティファイルをチェックしてドキュメンテーションコメントを確認し、変更を元に戻したいかどうかを決定します
- 再開して巻き戻す:はいの場合、空のプロンプトでセッションを再開し、
rewind_files()を呼び出して元のファイルを復元します
3
例を実行する
ユーティリティファイルと同じディレクトリからスクリプトを実行します。エージェントがドキュメンテーションコメントを追加し、巻き戻したいかどうかを尋ねるプロンプトが表示されます。はいを選択すると、ファイルは元の状態に復元されます。
- Python
- TypeScript
制限事項
ファイル checkpointing には、次の制限事項があります:トラブルシューティング
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 または欠落している場合、checkpoint UUID を受け取っていません。
原因:replay-user-messages オプションが設定されていません。
解決策:オプションに extra_args={"replay-user-messages": None}(Python)または extraArgs: { 'replay-user-messages': null }(TypeScript)を追加します。
「No file checkpoint found for message」エラー
このエラーは、指定されたユーザーメッセージ UUID の checkpoint データが存在しない場合に発生します。 一般的な原因:- ファイル checkpointing が元のセッションで有効になっていない(
enable_file_checkpointingまたはenableFileCheckpointingがtrueに設定されていない) - セッションが再開して巻き戻しを試みる前に適切に完了していない
enable_file_checkpointing=True(Python)または enableFileCheckpointing: true(TypeScript)が設定されていることを確認してから、例に示されているパターンを使用します:最初のユーザーメッセージ UUID をキャプチャし、セッションを完全に完了してから、空のプロンプトで再開し、rewindFiles() を 1 回呼び出します。
「File rewinding is not enabled」エラー
このエラーは、checkpointing が有効になっていない非対話的な巻き戻しを試みた場合に発生します:--rewind-files を使用して bare claude -p を実行するか、checkpointing を有効にしないオプションを持つ SDK セッション(再開されたセッションを含む)を実行します。SDK は、enable_file_checkpointing(Python)または enableFileCheckpointing(TypeScript)が巻き戻しを実行するセッションで有効になっている場合にのみ、CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING 環境変数を内部的に設定します。bare CLI はこれを設定しません。
解決策:bare 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:
query()のすべてのオプションとrewindFiles()メソッドを含む完全な API リファレンス。 - Python SDK reference:
ClaudeAgentOptionsのすべてのオプションとrewind_files()メソッドを含む完全な API リファレンス。