Claude Media
MAX_THINKING_TOKENSとは — 拡張思考の予算を固定する環境変数

MAX_THINKING_TOKENSとは — 拡張思考の予算を固定する環境変数

MAX_THINKING_TOKENSは拡張思考のトークン予算を固定する環境変数です。adaptive reasoning対応モデルではほぼ無視される点と、0を指定したときの例外をまとめます。

MAX_THINKING_TOKENSは、拡張思考(extended thinking)に使うトークン予算を固定値で指定する環境変数です。ただし今のモデルの多くは思考の深さを自分で決めるadaptive reasoningに対応しており、この変数を設定しても実質的に無視されるケースがほとんどです。何を決める変数で、どのモデルなら効くのか、0を指定したときの例外まで順にまとめます。

MAX_THINKING_TOKENSは何を決める変数か

拡張思考が有効なとき、Claude CodeはAPIリクエストにthinking.budget_tokensという思考専用のトークン予算を載せます。MAX_THINKING_TOKENSは、この予算に固定値を指定する環境変数です。

値をどう設定しても、Claude Codeは内部で2つの制約を自動的にかけます。最大出力トークン数(CLAUDE_CODE_MAX_OUTPUT_TOKENSが決める値)より1トークンでも大きくならないこと、そして1,024トークンを下回らないことです。この変数を設定しないまま思考が有効な場合、adaptive reasoningに対応したモデルは自分で思考の深さを選び、対応していないモデルはこのキャップ値をそのまま使います。

モデルが思考量を自分で決める場合は基本的に無視される(adaptive reasoning)

ここが最も見落とされやすい点です。MAX_THINKING_TOKENSにゼロ以外の値を設定しても、adaptive reasoningに対応したモデルではその値は無視され、実際の思考量はeffortレベルに従って決まります。

モデル思考モードMAX_THINKING_TOKENSの効き方
Fable 5.1 / Fable 5思考モード常にadaptive reasoningMAX_THINKING_TOKENSの効き方ゼロ以外の値も0も効かない。思考を止める手段自体が無い
Sonnet 5 / Opus 4.7以降思考モード常にadaptive reasoningMAX_THINKING_TOKENSの効き方ゼロ以外の値は無視される。0は例外的に効き、思考を無効化できる
Opus 4.6 / Sonnet 4.6思考モード既定はadaptive reasoningMAX_THINKING_TOKENSの効き方CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1を設定した場合のみ、この変数が決める固定予算モードに戻る
Opus 4.5以前の思考対応モデル思考モード拡張思考のみ(adaptive reasoning非対応)MAX_THINKING_TOKENSの効き方ゼロ以外の値がそのまま固定予算として使われる

Fable 5.1・Fable 5・Sonnet 5・Opus 4.7以降のモデルは常にadaptive reasoningで動作し、固定思考予算モードそのものが存在しません。Opus 4.6とSonnet 4.6だけは例外で、CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1を設定すると、MAX_THINKING_TOKENSが効く従来の固定予算方式に戻せます。「値を設定したのに思考量が変わらない」という相談の多くは、使っているモデルがadaptive reasoning対応で、この変数がそもそも効かない状態に当てはまります。

0を指定すると思考を止められる(Fable 5.1/5は例外)

MAX_THINKING_TOKENS=0は、adaptive reasoning対応モデルでも例外的に効き、Anthropic API上で思考そのものを無効化します。ゼロ以外の固定値と違い、0だけは特別扱いです。

サードパーティープロバイダー(Amazon Bedrock、Google CloudのAgent Platformなど)経由では挙動が変わります。0thinkingパラメーター自体をリクエストから省略する動作になり、adaptive reasoning対応モデルではそれでも思考が行われることがあります。Anthropic API直接利用時のように確実に無効化されるとは限りません。

Anthropic API上で思考を無効化した場合、Claude Codeはefforthighを送ります。Opus 5のように、思考オフとの組み合わせを受け付けないモデルへ、より高いeffortレベルをそのまま送らないための調整です。

設定方法

シェルの環境変数として渡すか、設定ファイルのenvキーに書きます。

export MAX_THINKING_TOKENS=8000
claude

チームで固定値を共有したい場合は、リポジトリの.claude/settings.jsonに書きます。

{
  "env": {
    "MAX_THINKING_TOKENS": "0"
  }
}

Opus 4.6やSonnet 4.6で固定予算方式を使いたい場合は、CLAUDE_CODE_DISABLE_ADAPTIVE_THINKINGもあわせて設定します。

export CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1
export MAX_THINKING_TOKENS=16000

他の思考コントロールとの役割分担

Claude Codeには、拡張思考を切り替える手段がMAX_THINKING_TOKENS以外にも複数あります。対象範囲がそれぞれ違うため、混同すると設定した変数が効かない状態になります。

コントロール対象範囲設定方法
セッション内トグル対象範囲今のセッションだけ設定方法macOSはOption+T、Windows/LinuxはAlt+T
グローバルの既定値対象範囲以後すべてのセッション設定方法/configで切り替え、alwaysThinkingEnabledとして~/.claude/settings.jsonに保存
環境変数による無効化対象範囲プロセス・セッション単位、0のみ確実に効く設定方法MAX_THINKING_TOKENS=0
固定予算モードへの切り替え対象範囲Opus 4.6・Sonnet 4.6限定設定方法CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1

MAX_THINKING_TOKENSは「思考のオン・オフ」よりも「固定予算モードのときに、その予算をどこまで積むか」を決める変数だと捉えると、他のコントロールとの役割の違いが整理しやすくなります。思考のオン・オフ自体を切り替えたいだけなら、セッション内トグルかalwaysThinkingEnabledのほうが直接的です。

直接Anthropic APIやSDKを使う場合は別物

MAX_THINKING_TOKENSはClaude Code自身が読む環境変数で、Claude Codeを経由せずAnthropic APIやSDKを直接呼び出すコードには影響しません。直接呼び出す場合、思考予算はリクエストごとにthinking: {type: "enabled", budget_tokens: N}という形でメッセージAPIのパラメーターとして指定します。

budget_tokensにも同じ最小値の制約があり、1,024トークンを下回る値はAPI側が拒否します。max_tokens(そのリクエストの最大出力トークン数)より小さくなければならない点も共通です。Claude CodeのMAX_THINKING_TOKENSは、このbudget_tokensをClaude Code側が自動で組み立てるための入力値という位置づけで、両者は別の設定ポイントです。自作のエージェントやスクリプトからAnthropic APIを直接叩いている場合、MAX_THINKING_TOKENSをいくら変更してもそのコードの挙動には反映されません。

CLAUDE_CODE_MAX_OUTPUT_TOKENSとの上限関係

MAX_THINKING_TOKENSは、最大出力トークン数を決めるCLAUDE_CODE_MAX_OUTPUT_TOKENSの値を超えないよう自動的にキャップされます。この自動調整はAnthropic API直接利用時のみ働き、Amazon BedrockやGoogle CloudのAgent Platform経由では効きません。両方の値を大きく取りすぎていると、max_tokens must be greater than thinking.budget_tokensのエラーで応答が返らなくなることがあります。この症状の切り分けと直し方は「Thinking budget exceeds」エラーの原因と対処法に、CLAUDE_CODE_MAX_OUTPUT_TOKENS自体の詳しい挙動はCLAUDE_CODE_MAX_OUTPUT_TOKENSとはにまとめています。

モデル移行で設定が急に効かなくなる典型パターン

Opus 4.6やSonnet 4.6をCLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1MAX_THINKING_TOKENSで固定運用していたチームが、そのままOpus 5やSonnet 5へ切り替えると、この2つの環境変数は静かに意味を失います。エラーにはならず、Claude Codeは単にadaptive reasoningへ切り替わり、effortレベルに応じて思考量を自分で決めるようになります。「同じ設定のはずなのに思考の量が変わった」と感じたら、まず切り替え先のモデルがadaptive reasoning対応かどうかを疑うのが近道です。

固定予算の運用そのものを新モデルでも続けたい場合、MAX_THINKING_TOKENSを積み増す方向の調整はできません。効くのは0による無効化だけです。思考の深さをコントロールしたいなら、MAX_THINKING_TOKENSではなくeffortレベルを上げ下げする形に運用を切り替えます。

よくある質問

plan modeを使うとMAX_THINKING_TOKENSの意味は変わりますか

plan modeは思考予算を引き上げる仕様を持っています。固定予算モードで運用している場合、MAX_THINKING_TOKENSが出力上限に対して余裕のない値だと、plan modeがその余裕を使い切ってエラーにつながることがあります。具体的な症状と直し方は「Thinking budget exceeds」エラーの原因と対処法で扱っています。

値を大きくすれば回答の質は上がりますか

固定予算モードが効いているモデルに限れば、予算を引き上げると複雑な問題への対応力が上がる傾向はあります。ただし該当しないモデルではeffortレベルを操作するほうが直接的です。予算を必要以上に大きく取ると、その分だけCLAUDE_CODE_MAX_OUTPUT_TOKENS側の余地が狭まる点にも注意が必要です。

CLAUDE_CODE_DISABLE_THINKINGとは何が違いますか

CLAUDE_CODE_DISABLE_THINKINGthinkingパラメーター自体をリクエストから省略する互換性オプションで、プロキシやゲートウェイがこのパラメーターを拒否する環境向けです。デフォルトで思考するモデルでは、パラメーターを省略しても思考が行われることがあります。Anthropic API上で確実に思考を無効化したい場合はMAX_THINKING_TOKENS=0のほうが直接的です。

まとめ

MAX_THINKING_TOKENSは拡張思考の固定予算をトークン単位で指定する環境変数ですが、Fable 5.1・Fable 5・Sonnet 5・Opus 4.7以降のようなadaptive reasoning対応モデルではゼロ以外の値が無視されます。効くのは主にOpus 4.6・Sonnet 4.6をCLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1で固定予算モードに戻したときと、Opus 4.5以前の拡張思考専用モデルです。0を指定した無効化だけは例外的にadaptive reasoning対応モデルでも効きますが、Fable 5.1とFable 5はこの0すら効かず思考を止められません。値を変えても反応がまったく変わらないときは、まず使っているモデルがadaptive reasoning対応かどうかを確認するのが近道です。環境変数全体の一覧はClaude Code環境変数リファレンス、effortレベルとの関係はClaude Code effortレベルの使い方と設定にまとめています。

この記事を共有:XはてブLinkedIn