繰り返すコンパクションの要点
- コンパクションはコンテキスト空間を空ける自動要約です。会話がモデルのウィンドウ上限に近づくと Claude Code はコンパクトします(extended context なしの Sonnet 4.6/Opus 4.6 では 200K、1M ウィンドウのモデルではデフォルトで約 967K)。
- 「繰り返しコンパクトされる」原因は主に 3 つ:本当にウィンドウが満杯、2.1.299 で追加されたアイドルコンパクション(200K トークン超の会話を約 54 分放置すると、1 時間のプロンプトキャッシュ失効前にコンパクトされる)、そして 2.1.301 で修正されたゲートウェイのモデル名不一致。
- 送信済みの内容は失われません:要約には重要なコードと決定が残り、resume とチェックポイントで残りを復元できます。再開したセッションのコンパクション行には、以前のメッセージの保存先が表示されます(2.1.301)。
- 対抗するより調整する:/autocompact か autoCompactWindow 設定でウィンドウを変え、CLAUDE_CODE_AUTO_COMPACT_WINDOW がすべてに優先し、"idleCompaction": false(または /config の Idle compaction 行)でアイドルコンパクションを無効化できます。
- バージョン固有の 2 つのループには修正が届いています:別モデル名を名乗る LLM ゲートウェイ越しの繰り返しコンパクション(2.1.301)と、非常に大きなネストされた CLAUDE.md 配下のファイル読み込み後の繰り返しコンパクション(2.1.309)。調整の前に更新を。
Claude Code: CLAUDE.md, Memory & Session Management
チャンネルDavid Mahler22:39
Stop Losing Work When You Compact Claude Code
チャンネルThe Art of Vibe Coding7:28
Model configuration — Claude Code documentation
ドキュメントcode.claude.com
メカニズム系のフレームは David Mahler のセッション管理ウォークスルーから——アニメーション付きコンテキスト図、Autocompact buffer の行を含む /context 使用量グリッド、コンパクション要約の図です。しきい値とハンドオフのスライドは The Art of Vibe Coding のアニメーション解説から。事実は Claude Code の CHANGELOG(2.1.299、2.1.301、2.1.302、2.1.309)と公式モデル設定ドキュメントで突き合わせました。顔出しのトーク動画と、トークン削減ガイドで既に使ったスピナーのフレームは素材から除外しました。
動画のフレームは作成者に著作権があり、署名とディープリンク付きでステップ解説として引用しています。
Claude Code の繰り返しコンパクションを止める
ステップ 1 — コンパクションが何をしているか理解する
- 1
コンパクションの正体を知る
コンパクションは、重要なコードと決定を残しつつ古いメッセージを要約してコンテキスト空間を空ける自動プロセスです。会話がモデルのウィンドウ上限に近づくと Claude Code はコンパクトします——extended context なしの Sonnet 4.6 と Opus 4.6 では 200K の境界、ネイティブ 1M ウィンドウのモデルではデフォルトで約 967K トークンです。長いセッションで一度「Compacting conversation…」が出るのは設計どおりの動作で、エラーではありません。

コンパクション定義のスライド:重要なコードと決定を残しつつ古いメッセージを要約する自動プロセス。10:40 に視聴 - 2
ウィンドウを満たしているものを見る
何かを変える前に /context を実行します。モデル、ウィンドウに対するトークン数、カテゴリ別の内訳——system prompt、system tools、MCP tools、memory files、Messages、空き容量、確保済みの Autocompact buffer——が出力されます。録画されたセッションでは、Messages だけで 149.1k トークンのうち 129.9k(65%)を占め、33k(16.5%)がバッファに確保されていました。コンパクションが来た理由はこれで、故障ではなく会話そのものがウィンドウを消費していたのです。

75% 時点の /context 使用量グリッド:Messages が 129.9k トークン、下段に 33k の Autocompact buffer(16.5%)が注記されています。10:20 に視聴 - 3
肥大化ループとはどういう状態か理解する
長い出力、大きなファイル読み込み、巨大なツール結果が積み重なると、Messages ブロックが他を押しのけます——skill の説明、MCP tools、記憶された指示は気づかないうちに圧迫されます。この状態では、それ以降のすべてのやり取りがさらにコンパクションサイクルを誘発します。/context で Messages が支配的になり有用な指示の行が縮んでいるなら、対処はしきい値の再調整ではなく、セッションに与える入力のスリム化です。

肥大化したコンテキストの図:Messages ブロックが肥大し、skill の説明、MCP tools、記憶された指示を押しのけている様子。11:26 に視聴
ステップ 2 — 作業を復旧してウィンドウをリセットする
- 4
復旧:要約は決定を残し、resume は履歴を戻す
送信済みの内容が消えることはありません。コンパクションは Messages ブロックを Conversation Summary に変え、CLAUDE.md と Auto Memory の行はそのまま残ります。さらに Claude Code のチェックポイントと claude --resume / /resume が残りを復元します。2.1.301 からは、再開したセッションのコンパクション行に以前のメッセージの保存先が表示され、読み込めない履歴を提示されることはありません。大事な作業の途中でコンパクトが割り込んだ場合は、説明し直す前にセッションを再開して要約を読みましょう。

コンパクションの前後図:Messages は Conversation Summary になり、赤枠の CLAUDE.md と Auto Memory の行は保持されます。7:56 に視聴 - 5
大きなコンパクトの前に、作業をディスクに書き出す
コンテキストを失えないセッションでは、リセットを自分で橋渡しします:セッション全体——すべての決定、触れたファイル、未解決の課題——を読み、構造化された 1 つの HANDOFF.md としてディスクに落とすハンドオフドキュメントを Claude Code に作らせます(/handoff-doc のようなハンドオフ skill も使えます)。コンパクション後や新しいセッションでは、次のプロンプトでそのファイルを指し示せば、要約だけに頼るより速く方向を取り戻せます。

ハンドオフの流れ:/handoff-doc skill がセッション全体——すべての決定、触れたファイル、未解決の課題——を読み込み、構造化された 1 つの HANDOFF.md にまとめます。1:00 に視聴 - 6
恐れるよりオートコンパクトのウィンドウを調整する
発動点は調整できます。/autocompact <value> は現在のモデルに対して設定しユーザー設定に保存します。autoCompactWindow 設定キー(例:~/.claude/settings.json の "autoCompactWindow": 200000)はすべてのモデルに適用されます。--autocompact は 1 回の起動だけ上書きし、環境変数 CLAUDE_CODE_AUTO_COMPACT_WINDOW はすべてに優先します(100,000–1,000,000 トークンを受け付け、2.1.304 からは 200k や 1M と書けます)。値はモデルの実際のウィンドウを上限とし、/autocompact auto で調整済みのデフォルトに戻ります。

しきい値の計算:1M トークンの Opus セッションの 20% は約 200,000 トークン——実働約 1 時間分です。2:12 に視聴
ステップ 3 — アイドルコンパクション:2.1.299 の挙動
- 7
アイドルコンパクションを見分ける(Claude Code 2.1.299)
2.1.299 から、ウィンドウ満杯とは無関係の第 2 の発動条件が登場しました:アイドルコンパクションです。200K トークン超の会話を約 54 分放置すると、1 時間のプロンプトキャッシュが失効する前にコンパクトされ、次のメッセージで全トランスクリプトを定価で再処理せずに済みます。離席中に Claude Code がコンパクトした——戻るとトランスクリプトに通知が出ます——なら、それはループではなくこの機能です。
- 8
アイドルコンパクションを無効化するか、下限を下げる
スイッチは 2 つ、どちらも 2.1.299 のチェンジログに記載されています:settings.json で "idleCompaction": false を設定すると完全に無効化でき、CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS を設定すると、アイドルコンパクションが決して発動しない 200K トークンの下限を変更できます(どちらも v2.1.290 以降が必要)。2.1.302 からは /config に Idle compaction 行も追加され、アイドルコンパクション後の通知に無効化の方法が書かれるようになりました。発動条件は 200K トークン超を約 54 分アイドル——短いセッションには決して触れません。
- 9
本当に無効化したいか判断する
アイドルコンパクションはコストを別のコストと交換します。有効のままでは、1 時間後に戻ったとき正確なトランスクリプトを失い、無効にすると、次のメッセージが失効したキャッシュで 200K トークン超の全トランスクリプトを再処理します——より遅く、キャッシュミス料金で課金されます。セッションが長く離席も多いなら、無効化より CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS を下げるほうが通常は得です:コンパクトが自分の条件で、より小さいブロックに対して行われます。
ステップ 4 — バージョン固有のループと予防
- 10
調整の前に更新:2.1.301 のゲートウェイループ
ウィンドウ満杯でコンパクションが本当に繰り返されるなら、まずバージョンを確認します。2.1.301 は「リクエストしたモデルと異なるモデル名を応答に名乗る LLM ゲートウェイの背後で、選んでいないモデルの会話が繰り返しコンパクトされる」問題を修正しました——ゲートウェイの応答はモデル X と名乗り、こちらはモデル Y をリクエストしていて、毎ターン再コンパクトされていたのです。同じリリースで、再開セッションのコンパクション行が読み込めない履歴に ctrl+o を提案する問題も修正されました。2.1.300 以前のゲートウェイ利用者は、設定に触る前に更新を。
- 11
CLAUDE.md をスリム化——2.1.309 のネストされたファイルのループ
もう 1 つの記録されたループ:非常に大きなネストされた CLAUDE.md 配下のファイルを読んだ後、セッションが繰り返しコンパクトされ続ける問題——2.1.309 で修正され、サイズ上限を超えるネストされた CLAUDE.md は先頭部分だけを読み込むようになりました。それでもメモリファイルを見直しましょう:ユーザーレベルの CLAUDE.md は全プロジェクトで読み込まれ、プロジェクトスコープのファイルは作業ディレクトリで読み込まれ、オンデマンドのサブディレクトリファイルは Claude が訪れたときに読み込まれます。普遍的な指示でないものは、常時読み込みのファイルから追い出しましょう。

メモリスコープの図:全プロジェクトのユーザーレベル CLAUDE.md、作業ディレクトリのプロジェクトスコープファイル、Claude が訪れたときに読み込むオンデマンドファイル。4:44 に視聴 - 12
次のループを予防する
3 つの習慣で、コンパクションをイベントにしない。CLAUDE.md を無駄のない状態に保ち、指示がすべてのコンパクトを乗り切れるようにする。コンパクションを先送りせず、しきい値で起きるに任せる——ウィンドウが満たされるほど応答品質は落ち、残り 20% で書かれた要約は 95% で書かれたものより良い。そして大切な状態はファイル(ハンドオフドキュメント、計画、チェックリスト)に退避し、毎回のリセットが要約より良いものから始まるようにする。

先送りの弊害を示すスライド:コンパクションしきい値を越えてコンパクトを先送りすると、応答品質が落ちます。2:20 に視聴
アイドルコンパクション、2.1.299 の詳細
アイドルコンパクションは、セッションが「コンパクションを繰り返す」最新の原因で、バグと誤読されやすいものです。2.1.299 のチェンジログが明確な理由付きでターミナルに導入し、2.1.301 と 2.1.302 が周辺の制御を仕上げました。チェンジログで確認した事実:
- 1発動条件:200K トークン超の会話を約 54 分アイドルにすること——1 時間のプロンプトキャッシュが失効する前にコンパクトが間に合うよう計時されています。
- 2理由:「so your next message doesn't reprocess it all(次のメッセージですべてを再処理しなくて済むように)」——キャッシュ失効後の未コンパクトの 200K トークン超トランスクリプトは、キャッシュミス料金でトークン単位で再処理されます。
- 3無効化スイッチ:settings.json の "idleCompaction": false——または 2.1.302 からは /config の Idle compaction 行。
- 4調整ノブ:CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS で 200K トークンの下限を変更。それ未満の会話はアイドルコンパクションされません。
- 5バージョン下限:環境変数も設定も Claude Code v2.1.290 以降が必要——古いビルドには機能自体が存在しないため、更新後の突然の挙動変化に見えることがあります。
- 6ガードレール:短いセッションには決して触れず、通知は戻ったときにトランスクリプトへ表示され、2.1.302 からは通知自体に無効化の方法が書かれています。
チームでセッションを共有するなら、設定はマシン単位であることに注意:ユーザー設定の "idleCompaction": false はリポジトリについてこないため、こちらは一度もコンパクトされなくても、チームメイトのアイドル中のセッションはコンパクトされ得ます。共有する長時間セッションには、CLAUDE_CODE_IDLE_COMPACT_MIN_TOKENS を下げ、離席前にハンドオフドキュメントを書いておく組み合わせが予測しやすくなります。
