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で会話をリセットするかの二択で、どちらを選ぶべきかは表示される警告の形式によって変わります。
Context exceeds token limitとは何を示す警告か
/contextは、その時点で会話がモデルの上限をどれだけ超えているかを、コマンド出力の一番上に表示します。これはまだリクエスト自体は失敗していない段階の警告で、次にメッセージを送ると失敗する可能性が高いことを事前に知らせる役割です。実際にリクエストを送って上限を超えていた場合は、これとは別に「Prompt is too long」というエラーになり、対話セッションでは画面下部に「Context limit reached · /compact or /clear to continue」という行が表示されます。
この2つは別々の見え方をした同じ現象です。/contextの警告は「予兆を自分から確認する」、「Context limit reached」の行は「実際にリクエストが弾かれた」というタイミングの違いだけで、原因も対処も共通しています。
2つの表示形式 — 200kトークンの上限とコンパクションウィンドウ
警告の文面は、超えた上限がモデル本体のコンテキストウィンドウそのものか、それより小さい「コンパクションウィンドウ」かで変わります。
モデル本体の上限を超えた場合は次の形式です。
Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.1Mコンテキスト対応モデルのように、モデルの実際の上限より手前に自動圧縮の境界(コンパクションウィンドウ)が設定されているケースでは、表示が変わります。
Context is 94k tokens past the 200k-token compaction window — run /compact to reduce usage.この2つ目の形式が出たとき、リクエスト自体はまだ成功します。コンパクションウィンドウはあくまで「ここを超えたら要約しておいたほうがよい」という目安の境界で、モデルの実際の上限ではないためです。Claude 1Mコンテキストの実務活用で扱った1M対応モデルを使っている場合、200Kを超えても即座には失敗しない一方、使用量とコストが積み上がっていくので早めの/compactが有効です。
| 表示形式 | 超えている対象 | リクエストの成否 | 推奨コマンド |
|---|---|---|---|
Context exceeds the 200k-token limit by... | 超えている対象モデルのコンテキストウィンドウ本体 | リクエストの成否失敗する | 推奨コマンド/compactまたは/clear |
Context is 94k tokens past the 200k-token compaction window... | 超えている対象自動圧縮の境界(1Mモデル等) | リクエストの成否成功する | 推奨コマンド/compact(推奨) |
DISABLE_COMPACTを設定している場合、どちらの形式でも案内が/compactではなく/clearに置き換わります。
なぜ200Kで区切られるのか — auto-compactの発火点を自分で決める
「コンパクションウィンドウ」という2つ目の表示形式は、モデル本体は1Mトークンまで扱えるのに、実際の圧縮判定は200Kで区切られている状況で出ます。この200Kという区切りには理由があります。
Sonnet 5のように1Mトークンをネイティブに扱えるモデルでも、常にフルの1Mまで使えるわけではありません。次の2つの構成では、モデルの実力とは無関係にセッションが200Kで止められます。
- LLMゲートウェイ経由:
ANTHROPIC_BASE_URLでゲートウェイを指している場合、Claude Codeは1M対応を確認できません。フルの1Mを使うには、モデルピッカーで明示的に「Sonnet 5(1M context)」(sonnet[1m])を選ぶ必要があります CLAUDE_CODE_DISABLE_1M_CONTEXT=1を設定: ネイティブ1M対応モデルすべてを200Kウィンドウとして扱う設定で、意図的に上限を抑えたい配線向けです
この200K縛りの状態でauto-compactが有効なら、200Kの境界で自動的に圧縮が走ります。「Context is 94k tokens past the 200k-token compaction window」という表示は、まさにこの状態です。auto-compactを無効にしている場合は、圧縮の代わりに200Kの境界で「Prompt is too long」エラーになります。
逆に、こうした縛りが無い通常のSonnet 5セッションでは、既定でおよそ967Kトークン付近まで達してから自動圧縮が走ります。この発火点(auto-compactウィンドウ)は3か所で調整できます。
| 設定場所 | 反映範囲 | コマンド / 変数 |
|---|---|---|
/autocompact <値> | 反映範囲今のセッションと以降のセッション(ユーザー設定に保存) | コマンド / 変数例: /autocompact 500k |
--autocompact フラグ | 反映範囲起動時1回限り | コマンド / 変数claude --autocompact 500k |
CLAUDE_CODE_AUTO_COMPACT_WINDOW 環境変数 | 反映範囲スクリプトやクラウド環境。他の設定より優先 | コマンド / 変数100Kから1Mトークンの範囲で指定 |
いずれも設定できる範囲は100Kから1Mトークンで、モデル本体のコンテキストウィンドウを超える値は自動的に切り詰められます。/autocompact autoを実行すると、モデルごとに調整された既定値に戻せます。
チームで挙動を揃えたい場合は、設定ファイルのautoCompactWindow(発火点のトークン数、既定は500000)とautoCompactEnabled(自動圧縮の有効/無効、既定はtrue)を直接指定する方法もあります。プロジェクト設定やmanaged settingsでこの2つのキーを設定すると、メンバーが個別に/autocompactを実行しても、より優先度の高いスコープの値がセッションに適用されます。
対処 — /compactと/clearの使い分け、根本対策
即効性がある対処と、繰り返さないための対策を分けて考えます。
| 対処 | 効果 | 向くケース |
|---|---|---|
/compact | 効果直近のリクエストと重要なコードは残し、会話履歴を要約して空きを作る | 向くケース作業の文脈を保ったまま続けたい |
/clear | 効果会話をリセットして空のセッションから再開(/resumeで元に戻せる) | 向くケース要約でも空かない、文脈を持ち越す必要がない |
/contextで内訳確認 | 効果システムプロンプト・ツール定義・メモリーファイル・メッセージのどこが占有しているか可視化 | 向くケース何が原因か分からないまま/compactを繰り返す前に |
未使用MCPサーバーを/mcp disable <name>で無効化 | 効果使っていないMCPサーバーのツール定義をコンテキストから外す | 向くケースMCP接続を複数有効にしている |
CLAUDE.mdを軽量化しパス指定ルールへ移す | 効果常時読み込まれるメモリーファイルの分量を減らす | 向くケースプロジェクトのCLAUDE.mdが肥大化している |
/contextの出力は色分けされたグリッドで、どこが占有しているかを一目で確認できます。コンテキストを圧迫しがちなツールや、メモリーファイルの肥大化、容量の警告についても最適化の提案が添えられます。フルスクリーンモードでは項目ごとの内訳が既定で畳まれているため、/context allと実行して展開してください。この上限超過の警告自体も、/contextのこの出力の先頭に表示される形です。
/compactは引数なしで実行するだけでなく、/compact 直近の実装方針だけ残してのように要約の焦点を指示するテキストを続けて渡すこともできます。何を優先して残すかを自分で指定できるため、闇雲に圧縮するより必要な文脈を落とさずに済みます。
サブエージェントは、親セッションが持つMCPツール定義を丸ごと引き継ぎます。サブエージェントを起動する前に不要なMCPサーバーを無効化しておかないと、最初のターンを迎える前からサブエージェント側のコンテキストが圧迫されることがあります。
auto-compactは既定で有効になっており、通常はこの警告が出る前に自動で要約が走ります。/configや環境変数DISABLE_AUTO_COMPACTで無効化している場合は、有効に戻すか、上限に近づく前に自分で/compactを実行する運用に切り替えてください。
v2.1.216で警告表示が改善された経緯
この警告行は、最初から今の形だったわけではありません。v2.1.216より前は、/contextが上限の100%を超えていても、何が起きているか・どう回復すればよいかを説明する行が無いまま数値だけを表示していました。上限超過そのものへの気づきが遅れやすかった時期の名残として、覚えておくと過去のバージョンとの挙動差を判断する材料になります。
コンパクションの発火条件や、要約後に何が残り何が消えるかという仕組みの詳細は、Claude Code compactの発火条件と要約後に残る情報で扱っています。起動場所や読み込み除外設定でコンテキストに入れる情報量そのものを事前に絞る設計は、Claude Codeのコンテキスト管理が詳しいです。/compact自体が「空きが足りず要約を作れない」という形で失敗するケースは、この記事とは別のエラーになります。「Error during compaction」の意味と対処で扱っています。
まとめ
「Context exceeds token limit」は、会話がモデルのコンテキストウィンドウを超えたときに/contextが出す警告です。モデル本体の上限を超えた場合はリクエストが失敗し/compactか/clearが必要で、1Mモデルのコンパクションウィンドウを超えただけの場合はリクエストは成功するものの早めの/compactが有効です。原因が分からないときは/contextの内訳表示で、システムプロンプト・ツール定義・メモリーファイルのどこが膨らんでいるかを先に確認してください。
よくある質問
「Prompt is too long」と何が違いますか
同じ現象の異なる見え方です。/contextの「Context exceeds token limit」は上限超過を事前に知らせる警告、「Prompt is too long」は実際にリクエストが上限超過で拒否されたときのエラーです。対話セッションでは後者が「Context limit reached」という行で表示されます。原因も対処も共通しているため、どちらが出ても/compactか/clearで対応します。
サブエージェントの会話でもこの警告は出ますか
出ます。サブエージェントも自分自身のコンテキストウィンドウを持つため、親セッションとは別に上限に近づけば同じ警告の対象になります。親から継承したMCPツール定義が多いほどサブエージェント側の初期占有量が増えるため、起動前の/mcp disableが効果を持ちます。
-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環境で対処が効かない場合は、まずバージョンを確認してください。