- 不要な変更を元に戻す - ファイルを既知の良好な状態に復元することで、不要な変更を元に戻します
- 代替案を探索する - checkpoint に復元して、別のアプローチを試します
- エラーから回復する - エージェントが不正な修正を行った場合に回復します
checkpointing の仕組み
ファイル checkpointing を有効にすると、SDK は Write、Edit、または NotebookEdit ツールを通じてファイルを修正する前に、ファイルのバックアップを作成します。レスポンスストリーム内のユーザーメッセージには、復元ポイントとして使用できる checkpoint UUID が含まれます。 Checkpoint は、エージェントがファイルを修正するために使用するこれらの組み込みツールで機能します:| ツール | 説明 |
|---|---|
| Write | 新しいファイルを作成するか、既存のファイルを新しいコンテンツで上書きします |
| Edit | 既存ファイルの特定の部分に対して、対象を絞った編集を行います |
| NotebookEdit | Jupyter ノートブック(.ipynb ファイル)のセルを修正します |
ファイル巻き戻しは、ディスク上のファイルを以前の状態に復元します。会話自体を巻き戻すわけではありません。
rewindFiles()(TypeScript)または rewind_files()(Python)を呼び出した後も、会話履歴とコンテキストはそのまま保持されます。- セッション中に作成されたファイル
- セッション中に修正されたファイル
- 修正されたファイルの元のコンテンツ
checkpointing を実装する
ファイル checkpointing を使用するには、オプションで有効にし、レスポンスストリームから checkpoint UUID をキャプチャしてから、復元が必要な場合にrewindFiles()(TypeScript)または rewind_files()(Python)を呼び出します。
次の例は、完全なフロー(checkpointing を有効にし、レスポンスストリームから checkpoint UUID とセッション ID をキャプチャしてから、後でセッションを再開してファイルを巻き戻す)を示しています。各ステップについては、以下で詳しく説明します。
checkpointing を有効にする
checkpointing を有効にして checkpoint UUID を受け取るように SDK オプションを設定します:
| オプション | Python | TypeScript | 説明 |
|---|---|---|---|
| checkpointing を有効にする | enable_file_checkpointing=True | enableFileCheckpointing: true | 巻き戻しのためのファイル変更を追跡します |
| checkpoint UUID を受け取る | extra_args={"replay-user-messages": None} | extraArgs: { 'replay-user-messages': null } | ストリーム内でユーザーメッセージ UUID を取得するために必須 |
checkpoint UUID とセッション ID をキャプチャする
replay-user-messages オプションが設定されている場合(上記を参照)、レスポンスストリーム内の各ユーザーメッセージには、checkpoint として機能する UUID があります。ほとんどのユースケースでは、最初のユーザーメッセージ UUID(message.uuid)をキャプチャします。これに巻き戻すと、すべてのファイルが元の状態に復元されます。複数の checkpoint を保存して中間状態に巻き戻すには、複数の復元ポイントを参照してください。セッション ID(message.session_id)をキャプチャするのはオプションです。ストリームが完了した後に巻き戻したい場合にのみ必要です。Checkpoint before risky operations の例のように、メッセージの処理中に rewindFiles() をすぐに呼び出す場合は、セッション ID のキャプチャをスキップできます。ファイルを巻き戻す
ストリームが完了した後に巻き戻すには、空のプロンプトでセッションを再開し、checkpoint UUID を使用して セッション ID と checkpoint ID をキャプチャした場合、CLI からも巻き戻すことができます:
rewind_files()(Python)または rewindFiles()(TypeScript)を呼び出します。ストリーム中に巻き戻すこともできます。そのパターンについては、Checkpoint before risky operations を参照してください。一般的なパターン
これらのパターンは、ユースケースに応じて checkpoint UUID をキャプチャして使用するさまざまな方法を示しています。リスクのある操作の前に checkpoint を作成する
このパターンは、最新の checkpoint UUID のみを保持し、各エージェントターンの前に更新します。処理中に問題が発生した場合、最後の安全な状態にすぐに巻き戻して、ループから抜け出すことができます。複数の復元ポイント
Claude が複数のターンにわたって変更を加える場合、すべての方法で巻き戻すのではなく、特定のポイントに巻き戻したい場合があります。例えば、Claude がターン 1 でファイルをリファクタリングし、ターン 2 でテストを追加した場合、リファクタリングは保持したいが、テストは元に戻したい場合があります。 このパターンは、すべての checkpoint UUID をメタデータ付きの配列に保存します。セッションが完了した後、以前の任意の checkpoint に巻き戻すことができます:試してみる
この完全な例は、小さなユーティリティファイルを作成し、エージェントにドキュメンテーションコメントを追加させ、変更を表示してから、巻き戻したいかどうかを尋ねます。 開始する前に、Claude Agent SDK がインストールされていることを確認してください。インタラクティブな例を実行する
ユーティリティファイルと同じディレクトリに この例は、完全な checkpointing ワークフローを示しています:
try_checkpointing.py(Python)または try_checkpointing.ts(TypeScript)という新しいファイルを作成し、次のコードを貼り付けます。このスクリプトは Claude にユーティリティファイルにドキュメンテーションコメントを追加するよう要求し、その後、元の状態に巻き戻すオプションを提供します。- checkpointing を有効にする:
enable_file_checkpointing=Trueとpermission_mode="acceptEdits"で SDK を設定して、ファイル編集を自動承認します - checkpoint データをキャプチャする:エージェントが実行されるときに、最初のユーザーメッセージ UUID(復元ポイント)とセッション ID を保存します
- 巻き戻しを促す:エージェントが完了した後、ユーティリティファイルをチェックしてドキュメンテーションコメントを確認し、変更を元に戻したいかどうかを決定します
- 再開して巻き戻す:はいの場合、空のプロンプトでセッションを再開し、
rewind_files()を呼び出して元のファイルを復元します
制限事項
ファイル checkpointing には、次の制限事項があります:| 制限事項 | 説明 |
|---|---|
| Write/Edit/NotebookEdit ツールのみ | Bash コマンドを通じて行われた変更は追跡されません |
| 同じセッション | Checkpoint は、それを作成したセッションに関連付けられています |
| ファイルコンテンツのみ | ディレクトリの作成、移動、または削除は、巻き戻しによって元に戻されません |
| ローカルファイル | リモートまたはネットワークファイルは追跡されません |
トラブルシューティング
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 回呼び出します。
「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 リファレンス。