Claude Codeでバックグラウンドエージェントを使用している場合、エージェントパネルの横に表示される「ファイル編集中…」といったステータス表示テキストのために、裏側で相当量のトークンが消費されることがあります。2026年8月に展開されたバージョン2.1.232以降、インタラクティブなバックグラウンドエージェントではagent_summary機能がデフォルトで有効になっており、30秒ごとに該当エージェントの対話トランスクリプト全体をモデルに送信し、3〜5語のステータステキストを生成しています。
Flamerix AIチームが自社システムのOpenTelemetryデータを分析して公開した情報によると、このagent_summaryリクエストによるコストが総コストの16.4%、APIリクエスト件数の19.7%を占めていました1。GitHub Issue #86879では、複数のユーザーがサブエージェントを集中的に使用する環境で、異なる指標によって相当な比率であることを報告しています。rflcrz氏は、4時間のセッション(サブエージェント27個)において、agent_summaryがリクエスト数の22.7%、Opus 5単価基準の加重トークンの18.0%を占めたと測定し、sylvain-artois氏は1時間45分のセッションでキャッシュ読み取りトークンの26%、kcarriedo氏は20個以上のサブエージェントのセッションで加重トークンの15–22%を確認しました2。一方、Anthropicのエドウィン・アーバス(Edwin Arbus)氏は、テレメトリを送信している全ユーザーの平均基準ではコストの比率は約2%程度であると説明しています3。つまり、自分のワークロードにおいて体感されるコストが大きいかどうかは、サブエージェントをどのくらいの頻度で、そしてどのくらいの長いコンテキストで実行するかによって大きく異なります。
本記事では、agent_summary呼び出しが高コストな構造について解説し、これを把握する方法、そして現在利用可能な遮断手段の長所と限界を併せてまとめます。
30秒ごとにトランスクリプト全体を読み取る非効率性

Flamerix AIが公開した適用前後の測定値。同チームのワークロードでの結果です。 ↗
agent_summaryのコストが大きい理由は、入力と出力の非対称性にあります。この機能は30秒ごとにアクティブなバックグラウンドエージェントの対話履歴全体をモデルに再送信し、モデルはこれを読み取り、「最後の行動を3〜5語で要約せよ」という指示のみを実行します。
Flamerixチームの測定結果では、入力トークン対出力トークンの比率は約9,000:1でした。また、関連コストの96%が高価なOpusモデルで発生しました1。GitHubユーザーのsylvain-artois氏は、380kのコンテキストを持つエージェントが1時間あたり約4,500万のキャッシュ読み取りトークンを消費すると報告しています2。3〜5語のステータスを表示するために、数十万トークンを読み取る構造であると言えます。
この消費は、本来的なエージェント作業とは分離されています。呼び出し時には、skipTranscript:true(トランスクリプトへの記録なし)、ツールの完全なブロック、1ターン制限など、エージェントの実作業コンテキストとは独立して動作するように設定されています2。したがって、このリクエストを遮断しても、エージェントがファイルを編集したりコマンドを実行したりする動作自体には影響がありません。Flamerixチームは、遮断後にOpenTelemetryデータでagent_summaryリクエストが0件として記録され、他のクエリソースで置き換えられないことを確認しました1。
現在利用可能な遮断手段

原文で公開されたBun preloadの実行例。 ↗
まだagent_summaryを公式に無効にする専用設定はありません。代わりに、FlamerixチームやGitHubユーザーたちは以下のような回避策を提示しています。
1. Bun preloadスクリプトによるタイマーの無効化
Flamerixチームは、Claude Codeバイナリを修正せずにBunの--preloadオプションを用いてタイマーを無効化する、約70行分のスクリプトを公開しました。グローバルなsetTimeoutをラップし、要約タイマーのコールバックのソースコードから特定のアンカー文字列を検出すると、実際のタイマーを実行せず、空のハンドルのみを返す仕組みです1。
curl -fsSL https://gist.githubusercontent.com/flamerix-ai/c3905705cc4205e5de3011fa2e74efce/raw/no-agent-summary.js -o ~/.local/share/no-agent-summary.js
claude daemon stop --any
export BUN_OPTIONS="${BUN_OPTIONS:+$BUN_OPTIONS} --preload=$HOME/.local/share/no-agent-summary.js"
claudeこの方法の注意点として、アンカーへの依存性があります。スクリプトは「Fail-open」方式で動作するため、Claude Codeの更新時に内部コードや文字列構造が変更されると、スクリプトは静かに機能を停止してしまいます。そのため、バージョン更新後はOpenTelemetryデータでリクエストの発生有無を再確認する必要があります1。
2. CLAUDE_CODE_FORK_SUBAGENT環境変数の設定
GitHub Issue #86879の参加者たち、特にuwuclxdy氏は、CLAUDE_CODE_FORK_SUBAGENT=0環境変数を設定すると要約が停止すると報告しています2。
{
"env": {
"CLAUDE_CODE_FORK_SUBAGENT": "0"
}
}しかし、この変数はフォークモード自体を無効化します。sylvain-artois氏がコード解析で確認したところによると、要約有効化条件がフォークゲートと連携しており、フォーク機能をオフにしなければ要約もオフにならない構造です2。したがって、サブエージェントが対話履歴をコピーするフォークモードも不要なユーザーにとっては直感的な代替案となり得ますが、フォーク機能が必要な場合は使用できません。なお、2.1.276バージョンのバンドル分析では、インタラクティブCLIでこの機能をオフにする公式ルートが存在しないことも確認されました2。
遮断時に変わるユーザー体験

Anthropicが公開したエージェント一覧のUI例。ブロック前後の比較画面ではありません。 ↗
agent_summaryを遮断すると、バックグラウンドエージェントのステータス表示テキストが更新されません。現在、エージェントが何を実行しているのかを視覚的に把握する手段が失われることになります。
Anthropic側はこの点について認識しています。エドウィン・アーバス氏はHacker Newsで、現在の方法は「ステータスバーには過剰である」と認め、2.1.311以降のバージョンでキャッシュミス問題を修正しました。また、トランスクリプト全体の代わりに短いメモを小型モデルに送信する「shortモード」を開発中であると表明しています3。2.1.310バージョンのコードでは関連ロジックが確認されますが、現在のところデフォルトでは無効な状態です3。
自分のワークロードにおける比率の測定

GitHub Issueで報告された、4時間・27サブエージェントのセッション測定値。 ↗
バックグラウンドエージェントを使用しない場合、この機能の比率は0%に近く、サブエージェントを多数・長時間実行すると、コスト評価基準で約16%、キャッシュ読み取りトークン基準で約26%まで上昇する可能性があります1、2。指標によって数値が異なるため、遮断の有無を決める前に、まず自分の環境での比率を把握することをお勧めします。
ステータスバーの要約リクエストはトランスクリプトに記録されないため、JSONLログに基づく一般的なコスト追跡ツールでは確認できません。CLAUDE_CODE_ENABLE_TELEMETRY=1でOpenTelemetryのエクスポートを有効にし、query_source = agent_summary項目のリクエスト数とコストを集計することで、正確な比率を確認できます1、3。
Bun preloadスクリプトを適用した後、OpenTelemetryデータでquery_source = agent_summary項目が消失しているかを確認することで、効果を確実に検証できます1。環境変数CLAUDE_CODE_FORK_SUBAGENT=0はフォークモード全体を無効化するため、フォーク機能を使用しないユーザーであれば、Flamerixチームが提案したBunスクリプトなしでも同様の効果を得られます2。




