development·

Claude Code「Autocompact is thrashing」の意味と対処法

Claude Code の「Autocompact is thrashing: the context refilled to the limit within 3 turns of the previous compact, 3 times in a row」の意味と直し方。自動圧縮が止まる条件、原因の見分け方、/compact・/clear・/context・/autocompact の使い方を公式ドキュメントと v2.1.282 で確認して解説します。

Claude Code「Autocompact is thrashing」の意味と対処法
Autocompact is thrashing: the context refilled to the limit within 3 turns of the previous compact, 3 times in a row. A file being read or a tool output is likely too large for the context window. Try reading in smaller chunks, or use /clear to start fresh.

このメッセージは、自動圧縮(autocompact)自体は成功したのに、直後に同じくらい大きなファイルやツールの出力が入ってきて、コンテキストがすぐ上限まで埋まり直す状態が3回続いたことを表します。Claude Code は進まないループで API 呼び出しを無駄にしないよう、そこで処理を止めます。多くの場合は、大きなファイルを範囲を区切って読ませるか、/compact に「何を残すか」を指示して圧縮し直すか、不要になった会話を /clear で捨てることで解決します。

以下は、2026年9月25日時点(Claude Code v2.1.282)の公式ドキュメントと、手元の v2.1.282 本体から確認した内容です。実機で確認した内容とドキュメント記載の内容は書き分けています。

この記事を読むとわかること

  • 「thrashing(空回り)」と判定される正確な条件
  • 何がコンテキストを埋め直しているのかの見分け方
  • 起こりやすい順の原因と、それぞれの直し方
  • /compact・/clear・/context・/autocompact の使い分け
  • 自動圧縮を切る・閾値を変える設定が解決策にならない理由
  • 似ているが別物のエラーとの見分け方

このメッセージの意味

そもそも自動圧縮とは

Claude Code は、会話がモデルのコンテキストウィンドウの上限に近づくと、それまでの会話を要約して置き換える自動圧縮を行います。既定でオンで、手動で同じことをするのが /compact です。圧縮で何が残り何が消えるか、/compact の細かな使い方はClaude Code のコンテキスト圧縮ガイドで解説しています。

「thrashing」と判定される条件

thrashing は「空回り」の意味です。v2.1.282 の本体に含まれる判定処理を確認すると、次の条件で止まる作りになっていました。

  1. 自動圧縮が行われる
  2. その圧縮から 3ターン未満で、コンテキストが再び上限に達する(連続回数を1つ数える)
  3. これが 3回連続した時点で、上のメッセージを出してそのターンを止める

上限到達の間隔が3ターン以上空けばカウントは0に戻ります。つまり「長い会話で何度も圧縮される」だけでは出ず、圧縮してもすぐ埋まる状態が続いたときだけ出るエラーです。この安全装置は v2.1.89 の変更履歴に「thrash ループを検出し、API 呼び出しを浪費する代わりに対処可能なエラーで止める」として追加されました(CHANGELOG)。

公式のトラブルシューティングも、同じ趣旨を「自動圧縮は成功したが、ファイルかツールの出力がコンテキストを何度も連続で埋め直した。進まないループに API 呼び出しを使わないよう再試行をやめる」と説明しています(出典:Troubleshooting の「Auto-compaction stops with a thrashing error」)。

どの環境で出るか

ターミナルの CLI だけでなく、VS Code 拡張でも報告されています(GitHub Issue #82131)。Agent SDK では、v2.1.282 本体のメッセージ定義にエラー種別 autocompact_thrashing があり、「各自動圧縮の直後にコンテキストが上限まで埋まり直すことが繰り返されたため、ターンを止めた。コンテキスト内の何かがウィンドウに対して大きすぎる」と説明されています。プログラムで判定したい場合は、メッセージ本文ではなくこの種別を見るのが確実です。

原因:何がコンテキストを埋め直しているか

圧縮後にコンテキストへ入ってくるものは、大きく「作業中に読み込まれるもの」と「圧縮後に自動で戻ってくるもの」の2つです。

起こりやすい原因見分け方直し方
巨大なファイルを繰り返し読んでいる(ログ、生成物、minify 済みファイル、大きな JSON・CSV)エラー直前に同じファイルの読み込みが続いている行範囲・関数単位で読ませる。検索で必要箇所だけ取らせる
MCP ツールの出力が大きい(DB 検索、Web 取得、チケット一覧など)MCP ツールの結果が長い。1万トークン超えで警告が出る取得件数を絞る。使わない MCP サーバーを外す
出力の上限を自分で引き上げている環境変数や設定で読み込み・出力の上限を上げている上限を既定に戻す
常に読み込まれる指示やメモリが大きい/context で CLAUDE.md・ルール・メモリの比率が高い常時読み込みを減らし、必要時だけ読み込む形に移す
1回のやり取りで大量の出力を扱う作業そのもの大量ファイルの横断調査、ログ解析などサブエージェントに任せて別のコンテキストで処理する

大きなファイル・出力

公式ドキュメントが第一に挙げている原因です。Read ツールは、ファイル全体を読むと上限を超える場合は先頭だけを返し、offset と limit で続きを読むよう Claude に伝えます(出典:Tools reference の「Read tool behavior」)。1回の読み込みには上限がありますが、上限いっぱいの読み込みが何度も続けば、圧縮直後でもすぐに埋まります。

シェルコマンドの出力は、既定で約3万文字を超えると本文ではなくファイルの保存先とプレビューが返る仕組みです(同「Output limits」)。ただし Claude がその保存ファイルを丸ごと読みにいけば、同じことが起こります。

自分で引き上げた上限

次の環境変数・設定は、1回あたりにコンテキストへ入る量を増やします。「全部読ませたい」と引き上げていた場合は、既定に戻すのが先です(出典:Environment variables、Tools reference)。

名前何の上限か既定
CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENSファイル読み込みのトークン上限ドキュメントに数値の記載なし
BASH_MAX_OUTPUT_LENGTHコマンド出力を読み戻す文字数30,000(最大150,000)
bashOutputMaxChars(設定)コマンド結果として本文に入る文字数最大128,000まで指定可(v2.1.261 以降)
MAX_MCP_OUTPUT_TOKENSMCP ツールの応答トークン数25,000(1万超えで警告)

圧縮後に自動で戻ってくるもの

公式ドキュメントの「What survives compaction」によると、圧縮後も次のものは戻ってきます(出典:Explore the context window)。

  • プロジェクトルートの CLAUDE.md と、paths: 指定のないルール(ディスクから再注入)
  • auto memory(ディスクから再注入)
  • 直近に読み書きしたファイルを最大5つ(5,000トークンを超えるファイルは中身なしのパス参照になる)
  • 呼び出したスキルの本文(1スキル5,000トークン、合計25,000トークンまで)

これらが大きいと、圧縮直後の時点で空きが少なくなり、少しの読み込みで上限に届きます。GitHub では「巨大なファイルは無く、圧縮のたびに再注入されるプロジェクトの指示ファイルが原因だった」という利用者の報告もあります(Issue #85489、2026年9月25日時点で未解決の利用者報告)。

対処法

1. いま止まっているセッションを動かす

まず、何がコンテキストを占めているかを確認します。

/context

カテゴリ別(システムプロンプト、ツール、メモリファイル、メッセージ)の使用量と、容量を食っているツールやメモリへの改善提案が表示されます(出典:Commands)。そのうえで、次のどちらかを選びます。

これまでの経緯を残したい場合は、残すものを指示して圧縮し直します。公式ドキュメントの例は次のとおりです。

/compact keep only the plan and the diff

日本語で「計画と変更差分だけ残して、ログの中身は捨てて」のように指示しても構いません。指示なしの自動圧縮は「何が重要か」を推測するため、大きな出力の要約まで残ってしまうことがあります。

経緯が不要な場合は、新しい会話を始めます。

/clear

前の会話は消えるわけではなく、/resume で開き直せます(出典:Commands)。

2. 大きなファイルは範囲を区切って読ませる

再開後、同じ指示を繰り返すと同じ状態に戻ります。ファイル全体ではなく、範囲を指定して依頼します。

logs/app.log の最後の200行だけ読んで、ERROR の行を要約して
src/server.ts の handleRequest 関数だけ読んで

ログや大きな JSON は、先に grep や jq で必要な部分だけ取り出させるほうが確実です。

3. 大量に読む作業はサブエージェントに任せる

サブエージェントは自分専用のコンテキストウィンドウで動き、メインの会話には要約だけが戻ります(出典:Explore the context window)。「このディレクトリのログを全部調べて、原因の候補を3つ報告して」のように、読む量が多い作業ごと任せます。使い方はサブエージェント活用ガイドを参照してください。

4. MCP の出力と常時読み込みを減らす

使っていない MCP サーバーは /mcp disable <name> で外せます(出典:Error reference の「Prompt is too long」)。サブエージェントは親セッションの MCP ツール定義をすべて引き継ぐため、サブエージェントを使う前に外すほうが効果的です。MCP 全般の設定はMCP 連携ガイドにまとめています。

CLAUDE.md が大きい場合は、特定のパスでだけ必要な指示を paths: 付きのルールに移すと、関連ファイルを読んだときだけ読み込まれます。書き方はCLAUDE.md の書き方ガイドで解説しています。

5. Claude Code を更新する

圧縮まわりは頻繁に修正されています。たとえば v2.1.273 では、アドバイザーツールのターンを実際の約2倍の大きさで数えてしまい、自動圧縮が本来の半分ほどで発動していた不具合が直っています(CHANGELOG)。原因に心当たりがないのに頻発する場合は、claude --version で版を確認し、更新してから再確認してください。

設定で止める・閾値を変えるのは解決にならない

自動圧縮の挙動を変える設定はいくつかありますが、thrashing の原因(大きすぎる入力)はどれも取り除きません。

方法できることthrashing への効果
/config の Auto-compact(autoCompactEnabled)自動圧縮のオン・オフオフにすると、上限到達時に Context limit reached で止まるだけ
DISABLE_AUTO_COMPACT=1そのセッションだけ自動圧縮を止める同上。手動の /compact は使える
/autocompact 500k など自動圧縮ウィンドウを設定(v2.1.221 以降)早く圧縮されるだけで、埋め直す量は変わらない
--autocompact <auto|tokens>起動1回だけ自動圧縮ウィンドウを指定同上
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE圧縮が走る割合を下げる(上げることはできない)同上

/autocompact auto で、モデルに合わせて調整された既定の自動圧縮ウィンドウに戻せます(出典:Model configuration の「Set the auto-compact window」、Settings reference の autoCompactEnabled)。以前に自動圧縮ウィンドウを小さく設定していた場合は、既定に戻すと圧縮後の余白が広がります。

実機での確認結果

2026年9月25日に、Claude Code v2.1.282(macOS、npm パッケージ)で次を確認しました。

$ claude --version
2.1.282 (Claude Code)

$ claude --help
  --autocompact <auto|tokens>           Auto-compact window size (auto, or
                                        100k–1M tokens)
  • 本体に含まれるメッセージ全文は、本記事冒頭のものと一字一句同じでした
  • 判定処理は「前回の圧縮から3ターン未満で上限に達したら連続回数を1増やし、3回に達したら停止」という内容でした。上限到達は、圧縮を事前に行う経路と、API から「長すぎる」と拒否された後に回復する経路の両方で数えられています

実際にこのエラーを発生させるには、認証済みの状態で API に大量のトークンを繰り返し送る必要があるため、再現は行っていません。

似ているが別のエラー

メッセージ違い
Prompt is too long / Context limit reached · /compact or /clear to continue会話がコンテキストウィンドウを超えた。自動圧縮をオフにしているとこちらで止まる
Error during compaction: Conversation too long. Press esc twice to go up a few messages and try again.圧縮そのものが失敗した。Esc を2回押して数ターン戻ってから /compact
Not enough messages to compact.要約できる過去のやり取りがない。1回の大きな貼り付けで埋まったときなど。/clear して小さく送り直す
Request too large (max 32MB)トークン数ではなく、リクエスト本体が 32MB を超えた。画像や添付が原因のことが多い

出典:Error reference の「Prompt is too long」「Error during compaction: Conversation too long」「Request too large」、Troubleshooting の「High CPU or memory usage」

エラー全体の一覧はClaude Code トラブルシューティング完全ガイドにまとめています。

よくある質問

まとめ

  • Autocompact is thrashing は、自動圧縮の直後3ターン未満で上限まで埋まり直すことが3回続いたときに出る停止メッセージ
  • まず /context で中身を確認し、/compact <残す内容> か /clear で再開する
  • 再発防止は、ファイルを範囲指定で読ませる、大量の読み込みをサブエージェントに任せる、MCP の出力と常時読み込みを減らすこと
  • 自動圧縮のオフや自動圧縮ウィンドウの変更は、原因を取り除かない

koromo からの提案

AIツールの導入判断は、突き詰めると「投資対効果が合うか」「リスクを管理できるか」「事業にどう効くか」の3点に帰着します。koromo では、この判断に必要な材料を整理するところからご支援しています。

以下のような状況にある方は、まず現状の整理だけでも前に進むきっかけになります。

  • AIで開発や業務を効率化したいが、自社に合う方法がわからない
  • 社内にエンジニアがいない / 少人数で、AI導入の進め方に見当がつかない
  • 外注先の開発会社にAI活用を提案したいが、何を求めればいいか整理できていない
  • 「AIを使えばコスト削減できるはず」と感じているが、具体的な試算ができていない

ツールを使った上で相談したい方はお問い合わせフォームから「Claude Code の導入・運用設計の相談」とご記載ください。初回の壁打ち(30分)は無料で対応しています。

無料で相談する

関連記事