Claude Codeのauto compactが100%で止まるときの対処と回避策
コンテキストが100%になっても自動コンパクトが走らず止まる報告(issue #66144)の症状と、手動 /compact、auto-compact windowの指定、似た別症状との切り分けをまとめます。
自動コンパクトが100%でも動かないとき、まず手動で進める
コンテキストが100%に達しても自動コンパクトが走らず、作業が止まる。この症状はGitHubのissue #66144で報告されています。issueはオープンのままで、bug duplicate platform:linux area:core のラベルが付いています。
先に手を動かす順番を書きます。
止まったセッションを動かす順序
- 1
/compact を手で実行する
履歴の要約を残したいときは
/compactを実行します。コメント欄では、100%に達する前の80%前後で手動実行すると、止まる状態そのものを避けられるという提案が出ています。 - 2
/clear で履歴を捨てる
前の会話が要らなければ
/clearが最も確実です。 - 3
auto-compact window を明示する
次回から同じ状態にならないよう、閾値を環境変数か設定で指定します。手順は後半の節にあります。
/compact が通らないときは、症状が別物の可能性があります。切り分けは次の節で扱います。
issue #66144で報告された症状
報告者はArch Linux上のClaude Code v2.1.168で、長い実装セッションが100%に届いても自動コンパクトが発動せず、Claude Codeが自分で止まると書いています。プラットフォーム欄はAnthropic API、端末欄は非対話・CI環境です。
要点は次の4つです。
- 100%に達しても自動コンパクトが走らない
- 止まったあと、続行できるのは手動の
/compactだけ - CLAUDE.mdに「自動で圧縮して」と書いても挙動は変わらない
- 約12バージョン前から続いている(最後に動いていたバージョンは不明)
「約12バージョン」は報告者の体感です。コメント欄では別のユーザーが「150までは自動圧縮されていた」と書きましたが、後のコメントはそのバージョンを裏づける報告を見つけられていません。
issueには再現手順の欄が実質空のまま残っています。再現条件が一意に決まった報告ではない点は、読む側で割り引いてください。
100%で止まる症状とよく似た別の現象
「100%」「止まる」という見た目が同じでも、メッセージが違えば原因が違います。
| 画面に出るもの | 意味 | 見る場所 |
|---|---|---|
Context limit reached · /compact or /clear to continue | 意味コンテキストが上限に達した。本記事の症状はここに入る | 見る場所/compact か /clear |
末尾に auto-compact is off · /config to turn it on | 意味自動コンパクトが設定でオフ | 見る場所/config のAuto-compact |
Prompt is too long · automatic compaction failed: | 意味圧縮を試みたが、その下に書かれた別のエラーで失敗 | 見る場所続くエラー文を先に解消 |
Autocompact is thrashing | 意味圧縮は成功するが、直後にコンテキストが埋まり直す | 見る場所0%表示とthrashingの記事 |
Context left until auto-compact: 0% のまま進まない | 意味残量表示の不具合報告 | 見る場所同上 |
最上段の Context limit reached は、本記事の症状と同じ状態を指す文言です。2行目は表示の仕様で、autoCompactEnabled をuser settingsでオフにしたときに末尾へ付きます。DISABLE_AUTO_COMPACT や DISABLE_COMPACT で止めている場合と、project・managed settings側でオフにしている場合は、この追記が出ません。
つまり、設定側でオフになっているのに、追記が出ないせいで「動かない不具合」に見えるケースがあります。まず自動コンパクトが有効かどうかを確かめます。
env | grep -E 'DISABLE_(AUTO_)?COMPACT|AUTO_COMPACT_WINDOW|AUTOCOMPACT'
grep -rn autoCompactEnabled ~/.claude/settings.json .claude/ 2>/dev/nullどちらも何も出なければ、環境変数と設定ファイルでオフにはなっていません。
オフになっていた場合の戻し方は、原因ごとに違います。/config のAuto-compactトグルはuser settingsの autoCompactEnabled を書き換えるだけなので、DISABLE_AUTO_COMPACT や DISABLE_COMPACT が環境に残っているとトグルを戻しても動きません。その場合は環境変数をunsetして、Claude Codeを起動し直します。projectやmanaged settingsが autoCompactEnabled を false にしているときも、/config では上書きできません。
Prompt is too long · automatic compaction failed: の行は、コロンの後ろに失敗の原因が続きます。たとえば利用できないモデルや認証の失敗です。この原因が残る間は /compact も同じエラーで失敗するので、/compact を繰り返す前に原因を直します。会話が1往復しかなく圧縮できないときは、システムプロンプト・ツール定義・添付が大半を占めるという趣旨のメッセージが出ます。この場合は /clear で始め直し、貼り付けや添付を減らします。DISABLE_AUTO_COMPACT と autoCompactEnabled: false は、どちらか一方がオフにすると、もう一方では戻せません。
閾値を明示して、止まる状態を避ける
issueのコメントでは、閾値を明示する回避策が複数出ています。ただし、効くかどうかは報告者ごとに結果が分かれていて、すべてが再現確認された手順ではありません。以下は設定リファレンスとモデル設定ページに載っている仕様です。
設定の置き場所は4つあります。
| 方法 | 範囲 | 補足 |
|---|---|---|
/autocompact 500k | 範囲現在のモデル | 補足ユーザー設定の modelSettings に保存される |
autoCompactWindow | 範囲全モデル | 補足settings.jsonに数値で書く |
--autocompact フラグ | 範囲起動1回 | 補足保存済みの設定は変わらない |
CLAUDE_CODE_AUTO_COMPACT_WINDOW | 範囲環境全体 | 補足上の3つより優先される |
設定の例を示します。
{
"autoCompactEnabled": true,
"autoCompactWindow": 200000
}コメント欄では、この autoCompactWindow を「公式のスキーマにない」と訂正する発言がありました。しかし、現行の設定リファレンスには autoCompactWindow が載っています。値は 100000 から 1000000 の数値か、モデルに合わせた値を使う "auto" です。issueのコメントよりも、設定リファレンスの現行記述を優先してください。
スクリプトやCIでは環境変数を使います。
export CLAUDE_CODE_AUTO_COMPACT_WINDOW=900000
export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=90
claude環境変数には注意点があります。
CLAUDE_CODE_AUTO_COMPACT_WINDOWは500000のような整数だけを受け付けます。500kと書くと500と読まれ、下限の100Kに切り上げられます- 有効なウィンドウは、モデルのコンテキストウィンドウで頭打ちになります。モデルの上限を超える値は効きません
- ステータスラインの
used_percentageは常にモデル全体のウィンドウで計算されます。この変数を設定すると、その割合は圧縮の発動点を示さなくなります CLAUDE_AUTOCOMPACT_PCT_OVERRIDEは発動点を下げる方向にだけ働きます。既定の割合より大きい値は無視されます
最後の点が、issueのコメントにある CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=80 を設定しても動かなかったという報告を読むときの手がかりになります。この変数は閾値を早める用途であり、止まっている根本の動作を直すものではありません。
非対話実行(claude -p)やCIで止まるときも、渡し方は同じです。-p の出力では文言が Prompt is too long のまま出ます。環境変数をジョブの中で指定します。
CLAUDE_CODE_AUTO_COMPACT_WINDOW=200000 claude -p "テストを直して"この変数は設定ファイルやコマンドより優先されるので、CIのイメージに古い設定が残っていても上書きできます。
1Mウィンドウのモデルを使っているなら、変更前の既定値を知っておくと判断しやすくなります。Fable系、Sonnet 5以降、Haiku 5.5、Opus 4.7以降のようにネイティブで1Mを持つモデルは、既定で約967Kトークンで圧縮します。ここより早く圧縮したいときだけ、小さいウィンドウを指定します。調整の使い分けはautocompactの使い方の記事にあります。
CLAUDE.mdの指示で直らない理由
報告者はCLAUDE.mdに自動圧縮を促す指示を書いて効果がなかったとしています。コメント欄の説明は、CLAUDE.mdはモデルが読む指示で、圧縮の発動は実行側が使用量を見て行う動作だから、というものです。これは公式ドキュメントの記述ではなく、コメント投稿者の見立てです。
確かなのは、autoCompactEnabled、autoCompactWindow、環境変数の3系統が、設定として文書化された操作点だという点です。設定リファレンスに載っている圧縮の操作点はこの3系統で、CLAUDE.mdの記述で発動を制御する項目はありません。圧縮後に残したい指示を書く用途はClaude Code compactの発火条件と要約後に残る情報が扱っています。
同じ症状の別issueは閉じている
issueのコメントには、近い症状のissueが3件挙がっています。いずれも現在はクローズ済みです。
| issue | 症状 | 状態 |
|---|---|---|
| #65048 | 症状v2.1.153以降、残量表示が「100% used」に変わり、圧縮が発動しない | 状態クローズ |
| #64802 | 症状BedrockとVertexでv2.1.154以降、自動コンパクトが静かに無効 | 状態クローズ |
| #65585 | 症状サードパーティAPIプロバイダーでv2.1.161以降、自動コンパクトが動かない | 状態クローズ |
#66144がどの修正で解消されるのかは、issueに書かれていません。最後のコメントは2026年7月5日で、コメント投稿者はv2.1.195の1Mモデル・Anthropic API直結の環境で自動圧縮が動くことを確かめたと書いています。プロバイダー固有の問題がある環境では、更新だけで直らず、明示的な閾値のほうが確実だとも補足していました。
changelogには、自動コンパクトが動かなかった原因の修正がいくつか入っています。#66144の報告者の環境に当てはまるかは、各項目に書かれていません。
| バージョン | 公開日 | 修正内容 |
|---|---|---|
| v2.1.217 | 公開日2026-07-21 | 修正内容BedrockのOpus 4.8で自動コンパクトが一度も発動せず、上限を超えると /compact も失敗する問題 |
| v2.1.223 | 公開日2026-08-06 | 修正内容未認識のモデルIDでウィンドウを超えて伸びていた問題。上限内に収まるよう変更 |
| v2.1.288 | 公開日2026-10-02 | 修正内容直前の返答が使用トークン0と報告されたとき、自動圧縮されず "Prompt is too long" になる問題 |
自分の環境がBedrockやVertex、LLMゲートウェイ経由なら、この表のバージョン以降かどうかを claude --version で確認します。ゲートウェイの上限が200Kなら、CLAUDE_CODE_AUTO_COMPACT_WINDOW=200000 を指定する手順がモデル設定ドキュメントにあります。BedrockとVertexの1M設定はBedrock・Vertexで1Mコンテキストを使う記事が扱っています。
止まったあとの動きを確かめる
閾値を指定したら、効いているかを自分の画面で確かめます。/context を開き、指定した値に近づいたときにコンテキストの使用量が下がるかを見ます。
見る数字には注意が要ります。ステータスラインの used_percentage は、モデル全体のウィンドウに対する割合です。1Mのモデルに CLAUDE_CODE_AUTO_COMPACT_WINDOW=500000 を指定した場合、計算上は表示が約50%に達したあたりが発動点になります。表示が100%に見えなくても、指定した値の手前で圧縮が走るのが正常です。逆に、指定した値を大きく超えても使用量が下がらないなら、圧縮が発動していません。指定した閾値でも圧縮が走らずに止まるなら、設定以前の不具合です。そのときはClaude Codeのバージョン、プロバイダー、モデル名、設定値を添えて、#66144かその後継issueに書き足すと、再現の材料になります。
内訳の見方はコンテキストウィンドウを可視化する方法にあります。圧縮後に同じ会話が再び埋まる場合は、圧縮しても会話が長すぎるエラーの切り分けが役に立ちます。