「thinking.type.enabled」エラーの原因と対処法(Claude Code)
「thinking.type.enabled is not supported for this model」はClaude Codeのバージョン不足が原因です。モデル別の必要バージョンと直し方をまとめます。
「thinking.type.enabled is not supported」はClaude Codeのバージョンが古いときに出る
Claude Codeで新しいモデルに切り替えた直後、次のAPIエラーで止まることがあります。
API Error: 400 ... "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.原因はモデル側ではなくClaude Codeのバージョンです。選んだモデルが要求する最小バージョンよりCLIが古く、送るthinking設定の形式が旧式のままになっています。モデルは旧形式のthinking.type.enabledをもう受け付けません。要求されるのはthinking.type.adaptiveとoutput_config.effortの組み合わせで、古いCLIはそれを送れません。
直し方は、リクエストを実際に送っているバイナリを特定して更新することです。次の節で、その特定から入ります。
まずどのバイナリがリクエストを送っているかを決める
「Claude Codeを更新したのに直らない」という場合、更新したバイナリと、リクエストを送っているバイナリが別物であることがよくあります。公式のエラー対処ページは、バージョン不足の別エラーについて、問題になるのは「リクエストを出したClaude Codeバイナリ」だと説明しています。このエラーも同じです。同じマシンにCLIが入っていても、デスクトップアプリやIDE拡張が内蔵するバイナリは別のバージョンのことがあります。
リクエスト元ごとの更新先
自分で入れたClaude Code
claude updateを実行します。Claudeデスクトップアプリ
アプリ自体を更新します。
VS Code拡張
拡張が同梱するバイナリを使うので、拡張を更新します。
Agent SDK
SDKが同梱するバイナリが対象です。パッケージを上げてアプリを再起動します。単一実行ファイルにコンパイルしている場合は作り直します。
ここで更新したら、新しいセッションを始めます。古いプロセスを使い続けている場合は、バイナリを入れ替えても動作中のプロセスのバージョンは変わらず、エラーが続くことがあります。
なぜパラメーターが変わったのか
thinkingの扱いは、モデル世代で2通りに分かれています。
thinkingの扱いの違い
旧形式も受け付ける
既定は適応的思考ですが、旧形式のthinking.type.enabledも非推奨ながら受け付けます。CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1でMAX_THINKING_TOKENSの固定予算へ戻せるのも、この2モデルだけです。
適応的思考のみ
考える量はモデルが各ステップで決め、利用者はeffortで目安を渡します。thinking.type.adaptiveとoutput_config.effortで制御します。
Fable 5ではthinkingを止めることさえできません。パラメーターの切り替えは、この世代交代に合わせた変更です。古いCLIは新方式を知らないため、旧方式のまま新モデルへリクエストを送って拒否されます。
モデル別の必要バージョン早見表
| モデル | Claude Codeの最小バージョン | TypeScript SDK | Python SDK |
|---|---|---|---|
| Opus 4.7 | Claude Codeの最小バージョンv2.1.111以降 | TypeScript SDK指定なし | Python SDK指定なし |
| Opus 4.8 | Claude Codeの最小バージョンv2.1.154以降 | TypeScript SDKv0.3.154以降 | Python SDKv0.2.88以降 |
| Sonnet 5 | Claude Codeの最小バージョンv2.1.197以降 | TypeScript SDKv0.3.197以降 | Python SDK指定なし |
| Opus 5 | Claude Codeの最小バージョンv2.1.219以降 | TypeScript SDKv0.3.219以降 | Python SDK指定なし |
| Opus 5.5 | Claude Codeの最小バージョンv2.1.280以降 | TypeScript SDKv0.3.280以降 | Python SDK指定なし |
| Sonnet 5.5 | Claude Codeの最小バージョンv2.1.284以降 | TypeScript SDKv0.3.284以降 | Python SDK指定なし |
表の「指定なし」は、公式のエラー対処ページがそのSDKの最小バージョンを載せていない、という意味です。不要という保証ではありません。手元のバージョンはclaude --versionで確認できます。v2.1.287で実行した出力は次のとおりです。
claude --version2.1.287 (Claude Code)複数のモデルを切り替えて使うなら、その中でもっとも新しいモデルの要件を満たすバージョンまで上げておけば、表のどのモデルでもこのエラーは避けられます。バージョン管理の考え方はClaude Codeアップデートガイドにあります。モデル移行時の確認点はClaudeモデルの移行ガイドが扱っています。
対処法1: 更新して新しいセッションで試す
もっとも確実なのは、リクエスト元のバイナリを更新することです。CLIなら次の流れになります。
CLIでの直し方
- 1
今のバージョンを確かめる
claude --versionを実行し、上の表の最小バージョンと比べます。 - 2
更新する
claude updateを実行します。claude updateはclaude upgradeでも呼べます。v2.1.287の--helpには「Check for updates and install if available」と出ます。 - 3
新しいセッションを始める
動いているセッションは入れ替え前のプロセスのままです。ターミナルを開き直して
claudeを起動します。 - 4
モデルを選び直す
/modelで目的のモデルを選んで、同じ操作をもう一度試します。
対処法2: 更新できないあいだは古いモデルへ逃がす
管理された環境でバージョンを固定しているなど、すぐに上げられないときは、/modelでOpus 4.6かSonnet 4.6を選びます。この2モデルは旧形式のリクエストも受け付けるので、古いCLIからも動きます。
/modelOpus 4.6やSonnet 4.6へ逃げて固定予算で動かす場合は、固定予算に固有のエラーにも注意が要ります。予算を大きく取りすぎると、400が返ります。文言はmax_tokens must be greater than thinking.budget_tokensです。回答に使える長さが残らない、という意味のエラーです。公式の対処はCLAUDE_CODE_MAX_OUTPUT_TOKENSをthinking予算より大きくすることです。
SDKからモデルを変える場合は、再起動せずに切り替える手段もあります。TypeScript SDKはストリーミング入力モードのQueryオブジェクトのsetModel()、Python SDKはClaudeSDKClientのset_model()です。更新の段取りがつくまでセッションを維持したい場面で使えます。
あくまで橋渡しです。チームで作業しているなら、自分だけ別モデルに寄せると他のメンバーとの動作の差に気づきにくくなります。Opus 4.7以降を使うタスクでは、結局更新が必要です。
同じ原因で別の文言が出ることもある
バージョン不足はthinking.type.enabledの形でだけ現れるわけではありません。公式のエラー対処ページには、CLIの最小バージョンをサーバーが直接検査して返す別の400も載っています。エラーコードはclaude_code_version_too_oldで、メッセージに必要なバージョンが書かれます。
API Error: 400 Claude Code 2.1.219 does not support this model; version 2.1.255 or newer is required. Run 'claude update', or update the Claude desktop app, then try again.こちらは、必要なバージョンをサーバーがモデルごとに検査して返すもので、メッセージの数字をそのまま読めば足ります。thinking.type.enabledのほうは、モデルがリクエストの中身を拒否した結果として出るので、メッセージに最小バージョンが書かれません。だから表と見比べる作業が要ります。組織のポリシーが最小バージョンを決めている場合も、同じ400が返ります。文言はis older than the minimum version required by your organization's policyです。この場合は個人の判断で別モデルに逃げても解決せず、更新が前提です。
Bedrockのアプリケーション推論プロファイルARN経由でthinking.type.enabledのエラーが出る場合は、v2.1.113とv2.1.121で不具合として修正されています。更新で解消します。
モデル指定まわりの別エラーとの見分け方
文言が似ていても、原因の階層が違うエラーがあります。
| メッセージ | 何が起きているか | 対処 |
|---|---|---|
thinking.type.enabled is not supported for this model | 何が起きているかモデルは認識されているが、CLIがそのモデルの最小バージョンに達していない | 対処更新して再起動 |
Model ... is not a recognized model id | 何が起きているかモデルを切り替えようとした文字列が、Claude Codeの使えるモデルとして解釈できず、リクエスト前に拒否された | 対処正しいIDか別名に直す |
There's an issue with the selected model | 何が起きているか設定されたモデル名が認識されないか、アカウントにアクセス権がない | 対処/modelで選び直す |
2行目が出るのは、Agent SDKのsetModel()、デスクトップアプリのようにCLIを呼ぶアプリ、Remote Controlで接続した端末からモデルを選んだときです。v2.1.200より前は、保存だけされて次のリクエストで失敗していました。例えばアプリが表示名のSonnet 5を送ると、Model "Sonnet5" is not a recognized model id. Did you mean 'claude-sonnet-5'?と、空白を詰めた名前と候補が返ります。3行目は、非対話モードなら--modelに有効な別名かIDを渡し、Agent SDKならmodelオプションを指定します。完全なバージョン付きIDより、sonnetやopusのような別名のほうが古くなりにくいというのが、公式ページの案内です。
thinking.type.enabledのエラーは、モデルの指定が正しいのにCLIの側が追いついていない、という点が他と違います。メッセージを読んで、疑われているのがモデルIDなのかパラメーターなのかを見分ければ、無駄な設定変更を避けられます。
更新コマンドが効かない、またはバージョンが上がらないとき
claude updateを実行しても表の最小バージョンに届かないケースは、インストール方法と更新設定で説明がつきます。
Homebrewで入れた場合、claude-codeのcaskはstableチャンネルを追い、claude-code@latestはlatestを追います。stableはおおむね1週間遅れで、大きな回帰のあるリリースを飛ばす設計です。つまり、新モデルが出た直後にstableのcaskを使っていると、必要なバージョンがまだ配られていない期間があり得ます。対処は2通りです。claude-code@latestのcaskに切り替えるか、入れているcaskに合わせてbrew upgradeで更新します。WinGetならwinget upgrade Anthropic.ClaudeCodeです。どちらも既定では自動更新されません。CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE=1を設定すると、Claude Codeに更新コマンドを走らせることはできます。
ネイティブインストールの場合は、autoUpdatesChannelが"stable"になっていないかを疑います。/configの「Auto-update channel」で選べるもので、stableなら同じく約1週間遅れのバージョンが入ります。逆方向の設定もあります。minimumVersionは自動更新やclaude updateが入れてよい下限を決めるだけで、起動を止める力はありません。起動そのものを拒否するのは、管理設定のrequiredMinimumVersionです。
更新手段自体が塞がれている場合もあります。環境変数DISABLE_AUTOUPDATERはバックグラウンドの更新確認だけを止め、claude updateは動きます。DISABLE_UPDATESは手動の更新も含めて全経路を止めます。自社配布のバイナリで運用している組織では、後者が入っている可能性があります。自動更新が止まっているかどうかは、claude doctorのAuto-updatesの行で分かります。DISABLE_AUTOUPDATERが原因なら、disabled (set by env: DISABLE_AUTOUPDATER)と表示されます。
Agent SDKで遭遇した場合
CLI本体ではなくAgent SDK経由で出たなら、SDKパッケージの更新が必要です。claude updateでは、SDKのバージョンは変わりません。必要なバージョンは上の表のSDK列です。
npm view @anthropic-ai/claude-agent-sdk version
npm install @anthropic-ai/claude-agent-sdk@latestPythonならclaude_agent_sdkパッケージが対象です。
pip show claude-agent-sdk
pip install --upgrade claude-agent-sdknpm installは既定でプロジェクトごとのnode_modulesに入るので、プロジェクトによってSDKのバージョンが違うことがあります。更新を忘れたプロジェクトだけが止まる、という形で表に出ます。package.jsonの依存バージョンをプロジェクトごとに確かめてください。呼び出し元がCLIかSDKかがエラー文から分からないときは、実行しているスクリプトがどちらを経由しているかを先に確認すると、やり直しが減ります。
設定を書き換えずにモデルとeffortを切り分ける
エラーの原因がモデルの選択にあるのか、保存済みの設定にあるのかを見分けたいときは、起動時のフラグが使えます。v2.1.287のclaude --helpには、次の2つが載っています。
--effort <level> Effort level for the current session (low, medium, high, xhigh, max)
--model <model> Model for the current session. Provide an alias for the latest model (e.g. 'fable', 'opus', or 'sonnet') or a model's full name.どちらも「現在のセッション」に対する指定です。settings.jsonは書き換わらないので、claude --model sonnetのように別名で起動して挙動を比べ、そこから原因を絞り込めます。保存された設定の側に古いモデルIDが残っている場合の確認順は、公式のモデル設定ページにある優先順位の一覧に沿います。
新しいモデルが出た直後は、必要バージョンが表より先に増えている可能性もあります。公式のモデル設定ページは、Opus 5.5にv2.1.280以降、Sonnet 5.5にv2.1.284以降が必要だと書いています。古いバージョンで失敗した場合の案内先は、本記事のthinking.type.enabledではなく、先に紹介したclaude_code_version_too_oldの項目です。表にまだ載っていないモデルを使うときは、どちらの文言が出たかで確認先が変わります。
更新後に出やすい次のエラー
バージョンを上げて新しいモデルを使い始めると、thinkingまわりで別の400に当たることがあります。公式のエラー対処ページにある代表例が、thinkingを切っているのにeffortが高い組み合わせです。
API Error: Effort 'xhigh' isn't available with thinking turned off on this model · run /effort high to continue, or turn thinking back on (unset MAX_THINKING_TOKENS=0)MAX_THINKING_TOKENS=0や"alwaysThinkingEnabled": falseでthinkingを切ったままeffortをhighより上にしたときに出ます。直し方は、effortをhigh以下にするか、thinkingを切る設定を外すかです。v2.1.251以降は、Opus 5のようにこの組み合わせを受け付けないと分かっているモデルには、Claude Code側がeffort highを代わりに送ります。
さらに、Opus 5.5・Sonnet 5.5・Fable系は、thinkingを切ること自体ができません。MAX_THINKING_TOKENS=0も保存済みのalwaysThinkingEnabled: falseも効かず、モデルがeffortに応じて各ステップで考える量を決めます。非ゼロのMAX_THINKING_TOKENSも、適応的思考のモデルでは無視されます。固定予算に戻すと書かれているCLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1が効くのは、Opus 4.6とSonnet 4.6だけです。更新後に「前は効いていた設定が効かない」と感じたら、この世代差が理由の可能性が高いです。
SkillやCLAUDE.mdにthinking.type.enabled前提の古い指示が残っていることもあります。そうした指示文の棚卸しは、prompt-auditで古いモデル向けの記述を検出するで扱っています。
まとめ
このエラーは、モデルの不具合ではなく、リクエストを送っているClaude Codeバイナリが古いというサインです。どのバイナリ(CLI・デスクトップ・IDE拡張・SDK)が送っているかを特定して、そこを更新して新しいセッションで試すのが近道です。