原文(日本語に翻訳)
ツール使用をキャンセルした際のクラッシュを修正
原文(英語)
Fixed crashes when cancelling tool use
概要
Claude Code v2.1.20では、エージェントがツールを実行している最中にユーザーが操作をキャンセル(Ctrl+C)した際、アプリケーションがクラッシュする重大なバグが修正されました。以前は、特定のツール(ファイル読み込み、検索、外部コマンド実行など)の処理中にキャンセルすると、プログラムが異常終了し、作業中のデータが失われる可能性がありました。この修正により、安全にキャンセルできるようになります。
基本的な使い方
ツール実行中でも安全にキャンセルできます:
bash
# 長時間実行されるコマンド
> プロジェクト全体のテストを実行して
# エージェントがテストツールを実行中...
Running tests...
Test suite 1/10 completed...
Test suite 2/10 completed...
# Ctrl+C でキャンセル
^C
# 修正前:
# - アプリケーションがクラッシュ
# - エラーメッセージが表示され、セッションが終了
# - 進行中の作業が失われる
# 修正後:
# - ツール実行が適切に中断
# - セッションは継続
# - 新しいコマンドを入力可能実践例
大規模なファイル検索のキャンセル
巨大なコードベースでの検索操作:
bash
> プロジェクト全体から "TODO" コメントを検索して
# エージェントがGreepツールで検索中...
Searching in /project (10,000+ files)...
Scanned: 1,234 files...
Scanned: 2,456 files...
# 「これは時間がかかりすぎる」と判断してキャンセル
^C
# 修正により:
# - 検索が安全に中断
# - Claude Code は応答を続ける
# - すぐに別のコマンドを実行可能
> もっと狭い範囲で検索して:src/ ディレクトリのみ
# ↑ キャンセル後もスムーズに続行長時間実行スクリプトの中断
ビルドプロセスやテストスイートのキャンセル:
bash
> npm run build を実行して
# ビルドプロセス開始...
Building...
[1/100] Compiling modules...
[2/100] Optimizing...
# ビルド設定を変更したくなった
^C
# 修正前の問題:
# - クラッシュしてターミナルが閉じる
# - セッション履歴が失われる
# - 再起動が必要
# 修正後:
# - ビルドが停止
# - セッション継続
> package.json の設定を変更して、もう一度ビルドして
# ↑ そのまま作業続行複数ツール実行中のキャンセル
エージェントが複数のツールを連鎖的に実行している場合:
bash
> すべてのPythonファイルを見つけて、型ヒントを追加して、テストして
# エージェントの処理:
# 1. Glob でファイル検索中... (100+ files)
# 2. Read でファイル読み込み中...
# 途中でキャンセル
^C
# 修正により:
# - 現在のツール実行が中断
# - 後続のツール(Edit、Bash など)も実行されない
# - クリーンにセッションに戻る
> 代わりに src/main.py だけを更新して
# ↑ 即座に新しいタスクを開始可能MCP サーバーツールのキャンセル
外部MCPツールの長時間実行:
bash
> @database すべてのユーザーデータをエクスポート
# データベースツールが大量のレコードを処理中...
Exporting users... 10,000 / 1,000,000 records
# 「これは完了まで時間がかかりすぎる」
^C
# 修正により:
# - MCPツールの実行が適切に中断
# - データベース接続が正しくクローズ
# - メモリリークなし
# - セッション安定
> @database 直近1週間のユーザーのみエクスポート
# ↑ より小さなクエリで再試行ネストされたツール呼び出しのキャンセル
ツールが他のツールを呼び出す複雑な操作:
bash
> このディレクトリの全ファイルを解析して、依存関係グラフを作成
# 処理フロー:
# - Glob: ファイルリスト取得
# - Read: 各ファイル読み込み (50個目...)
# - Grep: import文を検索
# - Read: 依存ファイルも読み込み...
# 深くネストした処理中にキャンセル
^C
# 修正により:
# - すべてのネストレベルで適切に中断
# - リソースリークなし
# - スタックトレースエラーなし
# - 正常にプロンプトに戻るタイムアウト前のマニュアルキャンセル
応答しないツールの強制停止:
bash
> このAPIエンドポイントをテストして
# 外部APIへの接続試行中...
# (APIが応答しない)
Waiting for response...
Waiting for response...
# 待ちきれずにキャンセル
^C
# 修正により:
# - タイムアウト待ちせずに即座に中断
# - ハングしない
# - クラッシュしない
# - すぐに次の操作が可能注意点
- Ctrl+C によるキャンセルは、現在実行中のツールのみを中断します
- キャンセル後、エージェントは前回のコンテキストを保持します
- 一部の外部プロセスは、キャンセルシグナルの処理に若干時間がかかる場合があります
- ファイル書き込み中のキャンセルは、部分的な書き込みが発生する可能性があります(ただしクラッシュはしません)
- この修正は、すべてのツール(Bash、Read、Write、Edit、Grep、MCP toolsなど)に適用されます