Context exceeds token limitの意味と対処 — Claude Code
/contextに出る「Context exceeds the token limit」警告の2つの表示形式と、/compact・/clearでの対処を解説します。
/contextを実行したとき、出力の先頭に「Context exceeds the token limit」という警告が出ることがあります。これは会話がコンテキストウィンドウの上限を超えて膨らんだ合図で、放置するとリクエストが「Prompt is too long」で失敗し始めます。対処は/compactで要約するか/clearで会話をリセットするかの二択です。どちらが急ぎかは、警告の文面が「limit」なのか「compaction window」なのかで決まります。
警告の文面で急ぎかどうかが分かれる
警告は/contextの出力の一番上に出ます。文面は、超えたのがモデル本体のコンテキストウィンドウか、それより手前の圧縮の境界(コンパクションウィンドウ)かで変わります。
警告の2つの文面
Context exceeds the 200k-token limit
Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.モデル本体のウィンドウを超えています。次のメッセージは「Prompt is too long」で弾かれるため、先に空きを作る必要があります。
past the 200k-token compaction window
Context is 94k tokens past the 200k-token compaction window — run /compact to reduce usage.圧縮の境界を超えただけで、モデルの上限は別にあります。境界がモデルのウィンドウより手前にあるため、超えた後もリクエストが成功することがあります。
DISABLE_COMPACTを設定している場合は、どちらの形式でも案内が/compactではなく/clearだけになります。この2行は公式ドキュメントに載っている文面で、94kという数字は例示の値です。
なお、/contextの警告はリクエストが失敗する前の予告です。実際に上限を超えた要求が拒否されると、別に「Prompt is too long」というエラーが出ます。対話セッションでは、この後者が画面下部の「Context limit reached · /compact or /clear to continue」の行になります。見え方は違っても、原因も対処も同じです。
自動圧縮をユーザー設定でオフにしている場合、この行の末尾にauto-compact is off · /config to turn it onが付きます。ヒントが出るのは/configで切り替えれば効くときだけです。DISABLE_AUTO_COMPACTやDISABLE_COMPACTでオフにしている場合や、プロジェクト設定・managed settingsがautoCompactEnabledをfalseにしている場合は付きません。v2.1.235より前は、この行に自動圧縮のヒントは付きませんでした。
警告が出たときの対処の順番
警告が出てからの動き方
- 1
まず内訳を見る
/contextを実行し、システムプロンプト・ツール定義・メモリーファイル・メッセージのどれが大きいかを確認します。フルスクリーンモードでは項目ごとの内訳が畳まれているため、/context allで展開します。 - 2
会話を続けたいなら/compact
/compactは会話をここまでの要約に置き換えて空きを作ります。/compact 直近の実装方針だけ残してのように、要約の焦点を指示する文を続けて渡せます。 - 3
持ち越す文脈が無ければ/clear
/clearは空の会話から始め直します。元の会話は/resumeで開き直せます。 - 4
繰り返すなら原因側を削る
使っていないMCPサーバーを
/mcp disable <サーバー名>で止め、肥大したCLAUDE.mdは分量を減らします。公式のコンテキストウィンドウの解説には、CLAUDE.mdは200行以内に収め、参照用の内容はスキルやパス指定ルールへ移すとよい、という趣旨のヒントがあります。
/contextの出力は色分けされたグリッドで、コンテキストを圧迫しがちなツールやメモリーファイルの肥大、容量の警告について最適化の提案も添えられます。この上限超過の警告も、同じ出力の先頭に出る形です。
サブエージェントは、親の会話で使えるMCPツールを引き継ぎます。MCPサーバーを多く有効にしたまま起動すると、サブエージェント側も最初のターンからツール定義の分だけ埋まった状態で始まります。起動前に不要なサーバーを/mcp disableで止めておくのは、この意味でも効きます。
2つ目の文面はどんな設定で出るか
2つ目の文面(compaction window)が出るのは、自動圧縮の境界をモデル本体のウィンドウより小さく設定しているときです。公式の説明にある例は、1Mコンテキストのモデルで境界が200Kになっている場合です。たとえば1Mネイティブのモデルで/autocompact 200kと指定した場合や、200Kで止まるゲートウェイに合わせて同じ値を指定した場合が当たります。
構成ごとの既定の境界は、公式ドキュメントで次のようになっています。
| 構成 | 圧縮の境界の既定 | 出典の記述 |
|---|---|---|
| 1Mネイティブのモデル(Sonnet 5.5・Sonnet 5・Fable・Opus 4.7以降、Anthropic API、既定) | 圧縮の境界の既定約967Kトークン | 出典の記述1Mウィンドウで、満杯の手前で自動圧縮 |
CLAUDE_CODE_DISABLE_1M_CONTEXT=1 | 圧縮の境界の既定200K | 出典の記述モデルのウィンドウ自体を200Kとして扱う |
| Sonnet 4.6・Opus 4.6(拡張コンテキスト無し) | 圧縮の境界の既定200K | 出典の記述200Kの境界で圧縮 |
| Opus 4.8以降を200Kウィンドウで動かす構成(Bedrock等) | 圧縮の境界の既定200K | 出典の記述同上 |
200Kの3行は、既定値のままなら境界とモデル本体のウィンドウが同じ200Kです。1Mのモデルは約967Kで、満杯の手前で圧縮します。CLAUDE_CODE_DISABLE_1M_CONTEXT=1の行は、境界だけが手前に出るのではなく、モデルのウィンドウ自体が200Kになる設定です。
この設定の下では、/autocompactで200K超を指定しても境界は上がりません。Claude Codeが値をモデルのウィンドウまでに制限するためです。自動圧縮をオフにしていると、圧縮されずに200Kで「Context limit reached」のエラーになります。
LLMゲートウェイ経由(ANTHROPIC_BASE_URLで指している場合)の扱いは、公式ページ同士で食い違っています。モデル設定のページには、ゲートウェイでは1M対応を確認できないため200Kで見積もる、と書かれています。フルの1Mを使うには、モデルピッカーで「Sonnet 5.5 (1M context)」(sonnet[1m]に対応)を選びます。Sonnet 5なら/model claude-sonnet-5[1m]です。
一方、v2.1.285のchangelogには、カスタムANTHROPIC_BASE_URL配下のセッションを、1Mウィンドウを持つモデル(Opus 4.7以降・Sonnet 5以降・Fable)では1Mで動かす変更が載っています。ゲートウェイが200Kで止まる場合は/autocompact 200kで合わせる、という注記付きです。モデル設定のページの記述とは、この点で食い違っています。ゲートウェイ経由で200Kの警告が出たときは、まずclaude --versionでv2.1.285以降かどうかを確認します。
圧縮の発火点を自分で決める
境界が動くなら、発火点そのものを自分で決める手もあります。設定できる場所は3つあり、優先順位が違います。
auto-compactウィンドウの設定場所
/autocompact <値>
今のセッションと以降のセッションに効きます。値はユーザー設定の
autoCompactWindowに保存されます。v2.1.221以降のコマンドです。--autocompact フラグ
起動時の1回だけ効きます。保存済みの設定は書き換えません。managed settingsのような上位の設定スコープにも負けません。
CLAUDE_CODE_AUTO_COMPACT_WINDOW
スクリプトやクラウド環境向けで、コマンド・フラグ・設定のすべてより優先されます。
手元のclaude v2.1.285でclaude --helpを実行すると、フラグの説明は次のとおり出ます。
--autocompact <auto|tokens> Auto-compact window size (auto, or
100k–1M tokens)指定できる範囲は100Kから1Mトークンで、モデル本体のウィンドウを超える値は切り詰められます。ただし書式にはコマンド・フラグと環境変数で差があります。
- コマンドとフラグ:
200000、500k、1M、100〜1000の数字(200は20万の意味)のいずれも受け付けます - 環境変数:
500000のような素の整数だけです。500kと書くと500として読まれ、下限の100Kに丸められます
環境変数を500kのつもりで書いて、意図より大幅に早く圧縮が走る、という間違いはここで起きます。環境変数を設定している間は、/autocompactは値を変えず、上書きされていることを報告します。また、ステータスラインのused_percentageは常にモデル本体のウィンドウに対する割合なので、環境変数を設定した後は圧縮のタイミングの目安になりません。
/autocompact autoを実行すると、モデルごとに調整された既定値に戻せます。設定ファイルにはautoCompactWindow(トークン数)とautoCompactEnabled(自動圧縮の有効/無効)があります。どちらもプロジェクト設定やmanaged settingsで指定でき、autoCompactEnabledの既定はtrueです。autoCompactWindowは既定では未設定で、Claude Codeがモデルに合わせた値を選びます。
{
"autoCompactWindow": 500000,
"autoCompactEnabled": true
}自動圧縮は既定で有効なので、通常はこの警告が出る前に要約が走ります。/configやDISABLE_AUTO_COMPACTで無効にしている場合は、上限に近づく前に自分で/compactを実行する運用が必要です。
v2.1.216で警告の説明行が付いた経緯
v2.1.216より前の/contextは、使用量が100%を超えても、それが何を意味してどう回復するかを説明する行が無く、数値だけを表示していました。今の警告行はそれを補うものです。古いバージョンで数値だけが100%超で並んでいたら、同じ状態と考えられます。
圧縮の発火条件や、要約後に何が残るかはClaude Code compactの発火条件と要約後に残る情報が扱っています。読み込む情報量を事前に絞る設計はClaude Codeのコンテキスト管理が詳しいです。Claude Code全体の使い方から入る場合は、こちらのガイドが起点になります。
1Mコンテキストのモデルの使いどころはClaude 1Mコンテキストの実務活用にあります。/compact自体が「空きが足りず要約を作れない」形で失敗する場合は別のエラーです。「Error during compaction」の意味と対処で扱っています。
まとめ
「limit」の文面ならリクエストが弾かれる状態なので、先に/compactか/clearで空きを作ります。環境変数CLAUDE_CODE_AUTO_COMPACT_WINDOWは素の整数で書きます。500kは500として読まれるためです。ゲートウェイ経由で200Kの警告が出るなら、先にClaude Codeのバージョンを確かめます。
よくある質問
-pでの非対話実行でも同じ表示になりますか
表示だけ変わります。対話セッションでは「Context limit reached · /compact or /clear to continue」という短い行になりますが、-pフラグを使った非対話実行やトランスクリプトでは、テキストは常に「Prompt is too long」のままです。
Amazon Bedrock経由でも同じ警告になりますか
Bedrock経由では文面がInput is too long for requested model.となり、Claude Codeはこれを同じ状況として扱います。ただしv2.1.217より前のバージョンでは、この表記が認識されずauto-compactが発火しないまま/compactも同じエラーで失敗しました。Bedrock環境で対処が効かない場合は、まずバージョンを確認してください。