マガジン

動き出したAIエージェントを途中で止める方法と、止めたあとの状態を確認する手順

AIを使いこなす

Claudeで執筆し、GPTで自動校閲・修正しています。

机上で作業メモとファイル一覧を照らし合わせる手元
記事の内容をもとに制作したAI生成イメージです。実際の製品画面や検証結果の写真ではありません。

結論から言うと、エージェントは「止める操作」だけでは安全に終わりません。止める前にGitなどで戻り先を作っておき、止めたあとに「どのファイルが変わったか」「外部のサービスに何か送られたか」を確認して初めて、中断が完了します。 この記事では、具体例としてClaude Codeの公式ドキュメントで確認できた操作を使います。ほかのエージェントでも考え方は同じですが、キー操作や巻き戻しの範囲は製品ごとに違うため、お使いの製品の仕様で読み替えてください。記事内のコマンドや依頼文は説明用の例で、この記事のために実行して確かめたものではありません。

この記事の目次
  1. 止める前に:戻り先を作る
  2. 止める:状況別の操作
  3. 止めた直後:変更を確認する
  4. 戻す:何で戻すかの判断表
  5. そのまま使えるチェックリスト
  6. 再開するときの依頼文

止める前に:戻り先を作る

公式ドキュメントによると、Claude Codeはファイル編集ツールによる変更をチェックポイントとして記録し、巻き戻せます。ただし、Bashだけで変更したファイルや、通常のサブエージェントによる別ファイルの編集、セッション外で行った変更は巻き戻せない場合があります。チェックポイントはセッション単位の復旧用で、恒久的な履歴にはGitなどを使うよう案内されています(Checkpointing)。

開始時点の未コミット変更を不用意に消さないよう、まずgit status --shortで状態を確認します。既存の変更がある場合は内容を確認してコミットするか、別の作業ツリーなどに退避してから、専用ブランチを用意します。

bash
# 説明用の例(未実行)。作業ツリーがクリーンな場合
git status --short          # 出力が空であることを確認
git switch -c agent/try-1   # エージェント専用の作業ブランチを作る

あわせて、最初の依頼文に停止条件を入れておくと、人が止める場面を減らせます。

text
# 依頼文の例
src/report/ 配下のテストを直してください。
- 変更してよいのは src/report/ と tests/report/ だけです。
- 範囲外のファイルを変える必要が出たら、変更せずに理由を報告して止まってください。
- データベースや外部APIに書き込む操作はしないでください。
- 作業の最後に、変更したファイルの一覧を出してください。

権限の側でも備えられます。公式ドキュメントでは、planモードはコードベースの調査に向くとされていますが、利用可能な権限や設定により、承認なしで実行できる操作が異なります。すべての操作を確認するdefaultモードや、読み取り中心の設定を選ぶ方法もあります。CLIではShift+Tabでモードを切り替えられます。bypassPermissionsは隔離されたコンテナやVM向けです(Permission modes)。初めて任せる作業では、利用中の環境の権限設定を確認し、確認を挟めるモードから始めます。

止める:状況別の操作

Claude Codeでは、実行中にEscを押すと即座に止まり、実行中のツール呼び出しはキャンセルされて、次の指示を待つ状態になります。止めずに修正を送りたいときは、入力してEnterを押すとメッセージがキューに入り、実行中のツール呼び出しが終わった時点で読まれます(How Claude Code works)。Ctrl+Cも実行中の操作を中断します。何も動いていない状態で押すと入力欄が消え、続けて押すと終了するので注意してください(Interactive mode)。

  • 方向が違うが、作業は続けたい、操作:修正を入力してEnter、注意点:現在のツール呼び出しが終わってから反映される
  • 今すぐ止めたい、操作:Esc、注意点:実行中のツール呼び出しはキャンセルされる
  • 並行サブエージェントも止めたい、操作:Ctrl+X Ctrl+Kを3秒以内に2回、注意点:セッション内のバックグラウンドのサブエージェントが対象
  • 止まらない・画面が固まった、操作:Ctrl+C、それでもだめならターミナルごと終了、注意点:終了後は必ず変更内容を確認する

「キャンセルされる」は、その呼び出しの途中までに起きた副作用が消えるという意味ではありません。コマンドを途中で止めると、ファイルが半端に書かれたり、外部へのリクエストだけが先に出ていたりする可能性があります。次の確認が必要なのはこのためです。

外部ツール(MCP)経由の操作を止めるとき

MCPの仕様には、処理中のリクエストを取り消すnotifications/cancelled通知があります。受け手は通常、処理を止めることが推奨されています(SHOULD)が、処理がすでに完了していた場合や、取り消せない処理の場合は通知を無視してもよい(MAY)とされています。通知が着く前に処理が完了する競合も仕様上想定されています(MCP Cancellation)。

読み替えると、「止めたつもり」でも外部側では実行済みの可能性があります。MCP対応や取消し通知の送信は、利用するクライアントとサーバーの実装によります。メール送信、チケット作成、データ更新などのツールを使わせた場合は、止めた後に必ず外部側の画面で確認してください。

止めた直後:変更を確認する

止めたら、まずエージェントに「続き」を頼む前に、人の目で状態を見ます。

bash
# 説明用の例(未実行)
git status --short       # 変更・新規ファイルの一覧
git diff --stat          # どのファイルがどれだけ変わったか
git diff                 # 中身。範囲外のファイルがないか確認

見るポイントは次の3つです。

  1. 依頼した範囲外のファイルが変わっていないか(設定ファイル、ロックファイルなど)
  2. 新規ファイルや一時ファイルが残っていないか(git statusの??の行)
  3. 外部への書き込みがなかったか(送信済みメール、作成済みチケット、更新済みのデータ)

3つ目はGitでは分かりません。データベース、API、デプロイなどの外部操作は、ローカルのファイルチェックポイントでは元に戻せません。利用可能な権限モードやルールを事前に確認し、実行後は外部サービス側で状態を確かめます。

戻す:何で戻すかの判断表

  • Claudeが編集したファイル、戻し方:/rewind、またはEscを2回(入力欄が空のとき)、補足:「コードと会話」「会話のみ」「コードのみ」を選べる
  • Bashだけが変えたファイル、戻し方:Git(git restore <ファイル>など)、補足:チェックポイントの追跡外
  • 通常のサブエージェントによる別ファイルの編集、戻し方:Git、補足:多くの場合、セッションの巻き戻し対象外。編集状況を確認する
  • シンボリックリンク・ハードリンクのファイル、戻し方:手動、またはClaudeに逆の編集を依頼、補足:復元時にスキップされ警告が出る
  • 新規ファイル(未追跡)、戻し方:内容を確認して手動で削除、補足:削除前に対象を個別に確認。git clean -nは候補確認用(説明用の例)
  • 外部サービスへの書き込み、戻し方:そのサービス側で手動対応、補足:巻き戻し手段がない前提で扱う

/rewindのメニューでは、「会話だけ戻す」と「コードだけ戻す」を分けて選べます。コードだけを戻して会話は残せば、「何を試してなぜ止めたか」をエージェントに覚えさせたまま、別の方針で再依頼できます。逆に、変更は残して会話だけ戻すこともできます。なお、公式ドキュメントによれば、メッセージ入力欄に文字があるときEsc2回は入力欄をクリアするだけで、メニューは開きません。

そのまま使えるチェックリスト

コピーして、作業のメモ欄に貼って使えます。

停止前の備え

  • [ ] git statusを確認し、既存の変更を整理・退避してから始めた
  • [ ] 専用ブランチを作った
  • [ ] 依頼文に「変更してよい範囲」と「範囲外が必要なら止まって報告」を書いた
  • [ ] 外部への書き込み(送信・更新・削除)を許可するか、最初に決めた
  • [ ] 利用環境の権限設定を確認し、初回は確認を挟めるモードから始めた

停止手順

  • [ ] 方向修正だけなら、止めずにメッセージを送った
  • [ ] 即停止はEsc、サブエージェントはCtrl+X Ctrl+K
  • [ ] 止まらないときはCtrl+C、最終手段としてターミナルを閉じた
  • [ ] 止めた時刻と、直前にエージェントが何をしていたかをメモした

停止後の確認と戻し

  • [ ] git status --shortとgit diff --statで変更ファイルを確認した
  • [ ] 範囲外のファイル、新規・一時ファイルがないか見た
  • [ ] 外部ツールを使っていた場合、外部側の画面で送信・作成・更新の有無を確認した
  • [ ] 戻す対象を、Claudeの編集・Bashの変更・サブエージェント・外部に分けて、表の方法で戻した
  • [ ] 戻した後にテストなどで動作を再確認した
  • [ ] 再開する場合は、止めた理由と確認結果を伝えてから依頼し直した

再開するときの依頼文

状態を確認したら、続きを頼む前に事実を渡します。

text
# 依頼文の例(丸括弧は自分の状況に置き換えます)
さきほど作業を中断しました。現在の状態は次のとおりです。
- 変更が残っているファイル:(git status の結果)
- 戻したもの:(例:src/report/format.py を元に戻した)
- 外部への影響:(例:なし/チケット1件が作成済み)
この状態を前提に、(やり直したい内容)だけを実行してください。
範囲外のファイルは変更しないでください。

エージェントの記憶だけに頼らず、人が確認した結果を文章で渡すことで、半端に残った変更の上に重ねて作業されるのを防げます。

出典・参考資料