Claude Code「Tool Use Concurrency」エラーの原因と対処法
「due to tool use concurrency issues」400エラーの原因、GitHub issueに共通する発生条件、/rewindでの復旧手順、バージョン別の修正経緯をまとめます。
Claude CodeでAPIエラー400とともに「due to tool use concurrency issues」という文言が出ると、そのターンの応答が止まります。原因は会話履歴に含まれるtool_useとtool_resultの対応関係が崩れ、Anthropic APIがリクエストを受け付けなくなった状態です。何がこの崩れを引き起こすのか、Claude Code側の修正はどこまで進んでいるのかを、GitHub issueの報告と公式changelogを突き合わせて読み解きます。
「Tool Use Concurrency」エラーとは
エラーメッセージの全文は次のとおりです。
API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.公式のエラーリファレンスは、このメッセージを「tool use or thinking block mismatch」という区分の1パターンとして扱っています。会話履歴の中でtool_useブロックとそれに対応するtool_resultブロックの並び順が、APIの想定と食い違った状態です。
同じ区分には、表記の異なる次の4つのエラーもあります。
API Error: 400 orphaned tool_result in conversation history. Run /rewind to recover the conversation.
API Error: 400 duplicate tool_use ID in conversation history. Run /rewind to recover the conversation.
API Error: 400 ... unexpected `tool_use_id` found in `tool_result` blocks
API Error: 400 ... thinking blocks ... cannot be modified公式ドキュメントは5つとも同じ原因の別表現として扱っており、対処法も共通です。拡張思考(thinking)ブロックが絡むケースと、Opus 4.7/4.8のバージョン起因のケースはthinking block mismatchエラーの原因とrewindでの直し方で個別に扱っています。tool_use/tool_resultの整形ルールそのもの(なぜ並列呼び出しが崩れるか)はtool_resultとtool_useの400エラー — 正しい整形ルールにまとめました。ここではClaude Code CLIで「concurrency issues」という文言とともに出るケースの発生条件と復旧手順に絞ります。
発生条件 — 複数のissueに共通するパターン
「concurrency issues」の文言が出るのは#9002です。#8004・#8903・#8931は、tool_use ids were found without tool_result blocksという同じ区分の別文言です。これらの報告を突き合わせると、発生条件は大きく3パターンに分かれます。
| きっかけ | 具体的な状況 |
|---|---|
| Stop hookのブロック中に発言する | 具体的な状況decision: "block"で継続を要求しているStop hookの処理中に、新しいメッセージを送るか、hookが指示を返すと発生する |
| 複数のPDFを一度に読ませる | 具体的な状況ほかの作業と並列で走らせているときに出る |
| 中断が効かずセッションが分岐する(#8004) | 具体的な状況中断がうまく反映されず、実行中の処理と中断後の処理の両方が並行して進み、メッセージが混線する |
issue #9002には、複数のPDFを並列で読み込みながら別の作業も走らせていたときにエラーが出たという報告があります。PDFを先に読ませ、ほかの作業を後に回すよう指示を変えると、再発しなくなったそうです。issue #8004では、Stop hookの完了前にメッセージを送ると、実行中のスレッドと中断後のスレッドが分岐し、両方の発言が混ざるという観察が共有されています。issue #8903はVS Code拡張(Windows 11、Claude Code 2.0.5)での報告です。PDFとJavaファイルを解析する作業で出たあと、PDFを含まない後続のプロンプトでも出たそうです。特定の環境や作業内容に限らず起きることがうかがえます。
会話ログを直接調べた利用者の報告は、原因の現れ方が一様でないことも示しています。別の利用者がissue #8004で共有した自己診断では、tool_useとtool_resultの対応自体はすべて揃っていました。それでもアシスタントの発言だけが18件連続するなど、本来交互になるはずのメッセージ順そのものが崩れていました。Stop hook系の報告では、ツール呼び出しの完了前に別の入力が割り込む点が共通します。
#8004には、Stop hookの実行から実際に止まるまでの間にメッセージを送ると再現できるという報告もあります。送る前にEscを押しておけば防げたそうです。すでに壊れたあとは、Claude CodeをCtrl+Cで抜けて立ち上げ直し、Escを2回押してメッセージを送る前まで戻したと書かれています。
割り込みは、Claude Code自身の機能でも起こせます。ツールの実行中にメッセージを送ると、Claude Codeはそれをキューに入れ、ツール呼び出しが終わった直後に同じターンへ渡します。このメッセージにはチェックポイントが作られず、巻き戻しメニューにも出てきません。長い並列実行の最中に追加の指示を打つ運用は、会話履歴に手が入る場面を増やします。
Stop hookでdecision: "block"を使い、テストが通るまで終了させないといった継続の仕組みを組んでいる場合は注意が必要です。APIエラーでターンが終わったときに発火するのは通常のStop hookではなく、StopFailureフックです。このイベントはフックの出力とJSONをすべて無視するため、Stop hookのdecisionで継続させる構成は、このエラーからの自動復旧になりません。StopFailureのmatcherにはエラー種別(rate_limit、invalid_request、server_errorなど)を指定でき、記録や通知に使うフックを種別ごとに分けられます。
issue #9002には、pre/postの各hookをすべて無効にしたところ発生しなくなったという報告が複数あります。どれも一時的な回避策という書き方です。原因の切り分けとして、hooksを一時的に外して再現するかどうかを見る手はあります。
今すぐ復旧するには
復旧の順番
- 1
Opus 4.7/4.8なら先にclaude updateを実行する
v2.1.156より前は、通常のツール利用中にもこのエラーが出ることがあり、
/rewindでも解消しません。v2.1.156では、Opus 4.8でthinkingブロックが書き換わってAPIエラーになる不具合が修正されています。 - 2
/rewindで壊れる前のチェックポイントへ戻る
/rewindを実行するか、プロンプト入力欄が空の状態でEscを2回押します。入力欄に文字があるときのEsc2回は、巻き戻しではなく入力のクリアになります。
この不整合はClaude Code側の実装が起こしていたもので、古いバージョンのまま巻き戻しても同じ状態が再現されます。順番を逆にしないことが要点です。
/rewind/rewindが効かない場合の代替策は、GitHub issueの報告に複数出ています。再開に使うオプションは、v2.1.289のclaude --helpでは次のように説明されています。
-c, --continue Continue the most recent conversation in
the current directory
--fork-session When resuming, create a new session ID
instead of reusing the original (use
with --resume or --continue)
-r, --resume [value] Resume a conversation by session ID, or
open interactive picker with optional
search term--fork-sessionは元のセッションIDを使い回さず新しいIDで再開するオプションですが、履歴そのものは引き継ぎます。セッションを終了して-cや--resumeで再開する方法は、壊れたtool_use/tool_resultの並びを含む会話履歴を丸ごと復元するため、同じエラーが再発したという報告がありました。
一方、-cを付けずに完全に新しいセッションを起動し、そこから会話をやり直したところ復旧したという報告もあります。同じ「再開」でも、既存の履歴を引き継ぐか引き継がないかで結果が分かれます。また、/compactで会話を要約したところ症状が収まったという報告もあります。最終手段は/clearで会話を打ち切ることですが、これは巻き戻しではなく削除なので、それまでの文脈が失われます。
予防策としては、並列呼び出しをやめて順番に処理するよう指示すると回避できたという報告が#9002にあります。ただし処理は遅くなります。VS Code拡張については、2025年10月の同issueに/rewindが出ないという報告が相次ぎました。ターミナルでclaudeを起動して/rewindすれば戻れたという報告もあります。VS Code拡張の更新や再インストール、ウィンドウの再読み込みで解消したという報告も、同じissueにあります。
バージョン別に見る修正の経緯
同系統の報告が集中したのは、Claude Code 2.0系の初期(v2.0.5〜v2.0.13。#8004は1.0.120での報告)でした。issue #9002には自動応答のbotが「重複候補」として#8004・#8903・#8931の3件を提示しており、同じ時期に同種の報告が複数のissueへ分散していたことがわかります。公式changelogを遡ると、この系統のエラーに関わる修正は複数のバージョンに分かれて入っています。
この系統のエラーに関わる修正
- 2026年1月14日v2.1.7
ストリーミング実行中に一部のツールが失敗したとき、対応先を失ったtool resultのエラーが出る不具合を修正
- 2026年1月16日v2.1.9
長いセッションで並列ツール呼び出しが、対応先を失ったtool resultブロックのAPIエラーで失敗する不具合を修正
- 2026年3月5日v2.1.69
ツールバッチの途中で中断したセッションを再開したとき、フォーク済みエージェント(自動コンパクトや要約)でAPI 400エラーが出る不具合を修正
- 2026年5月29日v2.1.156
Opus 4.8でthinkingブロックが書き換わり、APIエラーになる不具合を修正
- 2026年7月22日v2.1.218
中断されたツール呼び出し後の偽の割り込みメッセージと、ツールが応答の途中で中断したときに履歴へ残る対応先なしの
tool_useブロックを修正
issue #9002が報告されたのはv2.0.8で、上の修正が入るより前のバージョンです。修正は複数のバージョンに分かれて入っており、ツール呼び出しの中断や並行実行にまつわる問題が、形を変えて何度も直されています。issue #9002は、2025年11月15日に「修正済み。まだ出るなら新しいissueを立ててほしい」というコメントが付いて完了扱いになりました。コメントに修正バージョンの記載はありません。issue #8903は、別の利用者が2025年12月9日に「症状が自然に消えた」と書いたあと、完了扱いで閉じています。issue #8004は無活動を理由に自動クローズされました。
紛らわしい「concurrency」がつく別の設定
Claude CodeにはCLAUDE_CODE_MAX_TOOL_USE_CONCURRENCYという、名前が似た環境変数があります。読み込み専用のツールとサブエージェントが並列実行できる最大数を決める設定で、既定値は10です。
ただし公式ドキュメントがこの環境変数を対処として挙げているのは、今回の400エラーではなくRequest rejected (429)というレート制限エラーの節です。既定値の10を超える並列実行が必要な自動化スクリプトでは値を上げることもできますが、上げるほどレート制限に達しやすくなる点は変わりません。
同じ「concurrency」でも別のエラー
due to tool use concurrency issues
会話履歴のtool_use/tool_resultの対応関係が崩れた状態です。/rewindで戻します。Opus 4.7/4.8は先にclaude updateを実行します。
Request rejected
並列実行数がAPIのレート制限を超えた状態です。CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCYの値を下げます。
見分けるには、エラーメッセージのステータスコードを見ます。
よくある質問
/rewindを使うと作業内容は消えますか
チェックポイントを選ぶときに「Restore conversation」を選べば、コードの変更は維持したまま会話だけを巻き戻せます。ファイル編集も含めて戻したい場合は「Restore code and conversation」を選びます。ただしBashコマンドで変えたファイル(rmやmvなど)は追跡されず、巻き戻しても戻りません。チェックポイントのファイルスナップショットは、既定では最後に保存されてから約30日で削除され、期限後の巻き戻しはNo files were restoredで失敗することがあります。操作の詳細はClaude Code rewindコマンドで/clear前まで戻るにまとめています。
まとめ
400のconcurrencyエラーは履歴の壊れであり、並列数の設定を変える話ではありません。数値を下げて直そうとするのは429の対処で、こちらは履歴を戻す側の話です。
参照した一次ソース
この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。
- code.claude.com/docs/en/errors
- code.claude.com/docs/en/env-vars
- code.claude.com/docs/en/changelog
- github.com/anthropics/claude-code/issues/9002
- github.com/anthropics/claude-code/issues/8004
- github.com/anthropics/claude-code/issues/8903
- code.claude.com/docs/en/checkpointing
- code.claude.com/docs/en/interactive-mode
- code.claude.com/docs/en/hooks
- github.com/anthropics/claude-code/issues/8931