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 reasoning | MAX_THINKING_TOKENSの効き方ゼロ以外の値も0も効かない。思考を止める手段自体が無い |
| Sonnet 5 / Opus 4.7以降 | 思考モード常にadaptive reasoning | MAX_THINKING_TOKENSの効き方ゼロ以外の値は無視される。0は例外的に効き、思考を無効化できる |
| Opus 4.6 / Sonnet 4.6 | 思考モード既定はadaptive reasoning | MAX_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など)経由では挙動が変わります。0はthinkingパラメーター自体をリクエストから省略する動作になり、adaptive reasoning対応モデルではそれでも思考が行われることがあります。Anthropic API直接利用時のように確実に無効化されるとは限りません。
Anthropic API上で思考を無効化した場合、Claude Codeはeffortにhighを送ります。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=1とMAX_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_THINKINGはthinkingパラメーター自体をリクエストから省略する互換性オプションで、プロキシやゲートウェイがこのパラメーターを拒否する環境向けです。デフォルトで思考するモデルでは、パラメーターを省略しても思考が行われることがあります。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レベルの使い方と設定にまとめています。