0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeのサブエージェントが暴走して枠を焼き尽くす事故——止める1つのhookと、消えた成果の復旧

0
Last updated at Posted at 2026-06-14

2026年6月15日の課金分離(プログラム的な利用が Pool 2 の従量の枠へ分けられる変更)の発火の当日に、最も金額の大きい事故の一つが起票されました。サブエージェントが再帰的に子のエージェントを生み続け、止まらないままトークンの枠を焼き尽くす事故です。

この記事は、その事故が「なぜ起きるか」「どう止めるか」「焼けた後に成果をどう取り戻すか」を、実機で確かめた範囲だけで整理します。発火の前は枠を早く使い切るだけでしたが、発火の後は同じ暴走が Pool 2 の実費を自動で買い足す形になりうるので、対処の優先度が上がりました。

何が起きたか

起票 #68430 の利用者は、サブエージェントが50層を超える深さまで再帰的に子のエージェントを生み、約30分で120万トークン以上を消費した、と報告しました。別の事例では、Pro Max 20x の8時間の枠を5分未満で使い切ったとあります。仕事の中身は「リポジトリを clone して .sol のファイルを探す」程度の、本来は1回の git clone で済むものでした。

報告者の分析によると、5つの不具合が連鎖しています。

  1. CLAUDE_CODE_FORK_SUBAGENT=0 を設定しても無視され、サブエージェントが子を生むのを止められない。
  2. 権限の拒否が「停止」でなく「回避のための子エージェントの起動」の引き金になる。拒否されるたびに子を生み、その子も同じ壁に当たって孫を生む。
  3. サブエージェントの権限の要求が利用者まで上がってこないので、最初の拒否で止める機会が無い。
  4. リポジトリのファイルを clone でなく1ファイルずつ HTTP で取得し、その都度に全文脈を送り直す。
  5. 暴走を止めるために中断すると、途中までの全エージェントの成果が捨てられる。

関連する事故として、並列の分配(fan-out)で多数のサブエージェントが上位のモデルを継承し、枠の自動の補充と重なって税込で約864米ドルの自動の購入が起きた事例(#68285)もあります。

まず財務の出血を止める

5つの不具合は提供側のもので、当日には直りません。利用者の側で最初にやるべきは、暴走が「実費」を生む経路を塞ぐことです。

発火の後、暴走が枠を焼くだけなら追加の請求は出ません(プランの枠が早く尽きるだけ)。ですが、usage credits(Pool 2 の従量の枠)を有効にしていて、しかも自動の補充が有効だと、枠が尽きるたびに自動で買い足されます。並列の暴走と重なると、補充が連続して高額になります。#68285 の約864米ドルはこの形です。

  • Console で支出の上限を設定する。上限に達すると、自動の補充でなく停止に倒れます。
  • 枠の自動の補充(auto-reload)を切るか、低く設定する。

この2つで、暴走が「実費を無限に買い足す」状態から「止まる」状態に変わります。

止める——壊れたフラグに依存しないハードストップ

CLAUDE_CODE_FORK_SUBAGENT=0 が無視される以上、このフラグに頼ってはいけません。代わりに、PreToolUse の hook を Task(サブエージェントの起動)に合わせて使います。hook はサブエージェントが起動する「前」に走り、その起動を拒否できます。ハーネスが道具の境界で強制するので、環境変数が無視されても上限が効きます。

自分で書いてもよいですが、検証済みのものが cc-safe-setup にあります(無料、MIT)。nested-spawn-inflight-guard.sh は、起動のたびに会話の記録を走査し、まだ結果の返っていない(実行中の)Task 系の呼び出しを数え、CC_NESTED_SPAWN_BUDGET(既定は5)以上なら exit 2 で起動を拒否します。

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Task|Agent|SendMessage",
      "hooks": [{ "type": "command", "command": "~/.claude/hooks/nested-spawn-inflight-guard.sh" }]
    }]
  }
}

このhookは、同時に実行中の深さの上限を張るもので、生涯の累計の費用を止めるものではありません。だから「Console の支出の上限」と組み合わせて使います。手元のクリーンな状態で試験を走らせたところ、26件すべてが通りました(実行中の数の勘定、1ターンでの並列の起動の拒否、壊れた記録での安全側の素通り、など)。

なお、ここで一つ大事な機微があります。暴走したセッションでも hook 自体は発火しています。だから「セッションの中の hook」では止められません。止めるのは、起動の「前」に拒否する PreToolUse の経路です。

焼けた後に成果を取り戻す

#68430 の報告で見落とされやすいのが、5つ目の「中断すると全エージェントの成果が捨てられる」という点です。画面の上では、120万トークンを使って何も残らなかったように見えます。

ですが、成果はディスクに残っています。各サブエージェントは、自分の記録を1ターンずつ次の場所に書き出します。

~/.claude/projects/<プロジェクト>/<セッションID>/subagents/agent-<ID>.jsonl

これは、親のエージェントが結果を受け取るかどうかとは無関係に永続化されます。だから、暴走を kill した後でも、暴走の前に仕事を終えた初期のエージェントの成果は、このファイルの中に残っています。手元で確認したところ、私の環境には180件の agent-*.jsonl があり、それぞれにモデルの実際の出力のテキストが入っていました。

直近1時間に書かれた大きいものから見るには、次のようにします。

find ~/.claude/projects -path '*subagents*' -name 'agent-*.jsonl' \
  -newermt '-1 hour' -printf '%s\t%p\n' | sort -rn | head

agent-*.jsonl は1行1レコードの平文で、テキストの成果は message.content[].text の下にあります。つまり「回収できる成果はゼロ」というのは、親のエージェントの視点では正しくても、ディスクの上では正しくありません。

崖との関係

繰り返しになりますが、発火の後は、この暴走がプランの枠でなく Pool 2 の従量の枠から引かれる経路に入りえます。その場合、暴走は「枠を早く使い切る」でなく「実費を自動で買い足す」になります。だから、財務の上限(Console の支出の上限と自動の補充の停止)を先に張ることが、発火の前よりも重要になりました。

まとめ

  • 発火の後の最も金額の大きい事故の一つが、再帰的なサブエージェントの暴走です(#68430、#68285)。
  • 5つの不具合は提供側のもので当日には直りません。利用者の側でできるのは、(1)財務の上限を張る(Console の支出の上限、自動の補充の停止)、(2)壊れたフラグに依存しない PreToolUseTask の hook で起動の上限を張る、(3)焼けた後も subagents/agent-*.jsonl から成果を取り戻す、の3つです。

6月15日の課金分離そのものへの対応(自分の利用が分離の対象か、4つの対応の経路、費用の見積もり)は、6月15日の課金分離に備える本(¥800、第2章まで無料) にまとめました。発火の当日に追加した第8章で、この暴走の事故への利用者側の対応を含む、発火初日の3つの混乱を扱っています。データの消失と復旧の予防の手引きは 事故防止本(¥800)、予防の hook の集まりは cc-safe-setup(無料)にあります。

同じ事故防止本は Kindle 版Amazon・¥800)でも読めます。Kindle Unlimited なら追加料金なしで全文読めるので、まず無料で中身を確かめたい方はそちらが早いです。
複数のエージェントを並列で動かしていて、「なぜ子のエージェントが暴走するのか」「なぜ親に設定した安全のルールや hook が子に効かないのか」を、対症療法の hook だけでなく構造から押さえたい方には、AGENTS.md 相互運用本(¥1,500・第2章まで無料)の第10章が向いています。サブエージェント(Agent / Task)に CLAUDE.md も hook もメモリも継承されないという「縦の相互運用」の問題として、この暴走の根(役割の文脈が継承されず子が孫を生む)と、利用者側の手当て(プロンプトへの注入・子の数と深さの上限・外向きの行動は親に残す)を整理しています。


Claude Code は毎月のように仕様が変わり、費用の膨らみ方も事故の新種も毎月出ます。「先月から何が変わったか・今すぐ直すべき設定や貼るべき hook はどれか」を毎月15日ごろ短く受け取りたい人には、Claude Code 事故まとめ(無料・月次)もあります(本は腰を据えて読む手引き、便りは毎月の鮮度で走らせる運用の線、という住み分けです)。


こうした「気づかないうちにトークンの消費が膨らむ」型の落とし穴を、実機のログから切り分けて消費を半分まで減らす全手順は、Claude Code のトークン消費を半分にする本(¥2,500・第1章まで無料の試し読み・26章)にまとめています。無料の土台として、危ない操作や費用の暴走を実行の前で止めるフック群を cc-safe-setup(MIT) に公開しています。


ほかにも、800時間の運用データから、トークン消費の削減・複数ベンダー(Claude / Codex / Gemini / Copilot)の並行運用・サブエージェントの沈黙の失敗対策など、テーマ別の手引きを公開しています。気になる人は著者の本の一覧から、価格と評価を見て選べます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?