「is not a recognized model id」の意味と対処 — Claude Code
Claude Codeで「is not a recognized model id」が出たときの3つの原因と、v2.1.200前後での挙動の違い・優先順位の確認方法をまとめます。
Claude Codeでモデルを切り替えようとすると、Model "..." is not a recognized model id.で止まることがあります。原因はモデルIDの打ち間違い、表示名とIDの取り違え、新しいバージョンでしか使えないエイリアスの3パターンに絞れます。
「is not a recognized model id」の原因 — 3パターン
Model "claud-sonnet-5" is not a recognized model id. Did you mean 'claude-sonnet-5'?このエラーは、/modelでの切り替えに渡した文字列が、モデルエイリアス(sonnetなど)でも、このClaude Codeバージョンが認識するモデルIDでも、claude-で始まるIDでもないときに出ます。原因は主に3つです。
1つ目は単純なIDの打ち間違いです。上の例のようにclaude-sonnet-5をclaud-sonnet-5と1文字誤入力するケースが典型です。2つ目はSonnet 5のような表示名とID表記の取り違えで、Claude Codeが期待するのはclaude-sonnet-5という形式のIDです。3つ目は、新しいClaude Codeバージョンでしか認識されないエイリアスを古いバージョンで指定するケースです。
末尾のヒントは、近いエイリアスやモデルIDがあればそれを提案し、該当が無ければRun /model to see available models.という文言になります。
いつ・どこで発生するか — API送信前のローカルチェック
Claude Codeはこのチェックを、APIへリクエストを送る前に、モデル切り替えが要求された時点でローカルに行います。Agent SDKのsetModel()メソッドで設定する場合や、DesktopアプリのようにClaude Code CLIを裏側で動かすアプリからも同じチェックが働きます。
v2.1.200より前はどう違ったか
v2.1.200より前は挙動が異なりました。認識できない文字列でも即座には拒否されず、いったん保存された上で、次回のリクエスト時に別のエラー「There's an issue with the selected model」(後述)として失敗していました。
| 挙動 | v2.1.200より前 | v2.1.200以降 |
|---|---|---|
| 不正なモデルIDの扱い | v2.1.200より前保存してから次回リクエストで失敗 | v2.1.200以降切り替え要求の時点で即座に拒否 |
| 出るエラー | v2.1.200より前There's an issue with the selected model | v2.1.200以降is not a recognized model id |
| チェックのタイミング | v2.1.200より前API呼び出し後 | v2.1.200以降API呼び出し前(ローカル) |
v2.1.200より前に保存された不正な値は、このチェックでは修復されません。同じ古いIDが何度も出てくる場合は、後述の優先順位に沿って設定箇所を確認します。
対処法
/modelを引数なしで実行すると、アカウントで使えるモデルの一覧からピッカーで選び直せます。エイリアスが新しいバージョンでしか使えない場合は、claude updateでアップデートします。claude-で始まるフルIDは、Claude Codeのバージョンより新しいモデルであってもこのチェックを通過するため、フルIDを使っている限りアップデートは必須ではありません。
同じ古いモデルIDが繰り返し出てくる場合、設定箇所を優先順位順に確認します。
| 優先順位 | 設定箇所 |
|---|---|
| 1 | 設定箇所--modelフラグ |
| 2 | 設定箇所ANTHROPIC_MODEL環境変数 |
| 3 | 設定箇所.claude/settings.local.jsonのmodelフィールド |
| 4 | 設定箇所プロジェクトの.claude/settings.json |
| 5 | 設定箇所~/.claude/settings.json |
古い値を削除すると、Claude Codeはアカウントの既定モデルにフォールバックします。
このチェックが働くのはAnthropic API接続のときだけです。Amazon Bedrock・Google Cloud's Agent Platform・Microsoft FoundryのようなサードパーティのプロバイダーやLLMゲートウェイでは、プロバイダー側がモデル名を独自に定義しているため、Claude Codeは任意の文字列をそのまま通過させます。この場合でも、未認識のモデルIDを使ったリクエスト時に診断行を出力することはあります。
似た名前のエラーとの違い
is not a recognized model idは、モデルを切り替える瞬間のローカルチェックで止まる点が特徴です。似た文言で紛らわしいエラーがいくつかあるので、区別しておきます。
- There's an issue with the selected model: 設定されているモデル名が認識されない、またはアカウントにアクセス権が無いときに、実際のAPIリクエスト時点で出ます。v2.1.160以降、末尾のヒントは実行面(対話CLI・非対話モード・Agent SDK)ごとに変わります。v2.1.206より前は、claude.aiログインの期限切れも全モデルでこのエラーとして表面化していました
- Claude Opus is not available with the Claude Pro plan: モデルIDそのものは正しいが、契約プランに含まれていないときに出ます。原因の切り分けはProプランでOpusが使えないときの確認手順にまとめています
- Model ... is restricted by your organization's settings: 組織の管理コンソールやmanaged settingsの
availableModels許可リストで制限されているときに出ます
いずれもモデル関連のエラーですが、原因が「文字列として認識できない」のか「文字列は正しいが使えない」のかで分かれます。
プロバイダーによってモデルIDの書式が違う
Anthropic API以外を使っている場合、モデルの指定方法自体が異なります。Amazon Bedrockは推論プロファイルのARN、Microsoft Foundryはデプロイ名、Google CloudのAgent Platformはバージョン名を使い、いずれもプロバイダー固有の文字列です。これらのプロバイダーではこのローカルチェックが働かないため、is not a recognized model id自体が出ることはありません。代わりに、プロバイダー側のAPIが受け付けないIDを渡すと、そのプロバイダー独自のエラー形式で失敗します。
opusやsonnetのようなエイリアスも、接続先のプロバイダーによって解決先のモデルが変わります。
| プロバイダー | opusの解決先 | sonnetの解決先 |
|---|---|---|
| Anthropic API | opusの解決先Opus 5 | sonnetの解決先Sonnet 5 |
| Amazon Bedrock / Google CloudのAgent Platform | opusの解決先Opus 5 | sonnetの解決先Sonnet 4.5 |
| Microsoft Foundry | opusの解決先Opus 4.6 | sonnetの解決先Sonnet 4.5 |
同じsonnetという指定でも、プロバイダーによって実際に動くモデルの世代が変わります。ブログ記事やチームの過去のメモに書かれたモデルIDをそのまま使い回すと、投稿された時点のプロバイダー・時期とずれて、このエラーやモデル自体の挙動の違いに行き着くことがあります。
よくあるつまずき
ブログや過去のドキュメントに載っていたモデルIDをそのまま貼り付ける動きはよくある落とし穴です。モデルIDの命名規則はバージョンごとに変わることがあり、古い記事のIDが今のClaude Codeでは認識されないケースがあります。迷ったら/modelのピッカーで実際に選べる候補を確認するほうが確実です。
エイリアスと個別バージョンを混同することも起きがちです。opusはアカウント種別やプロバイダーに応じて解決先が変わる可変のエイリアスで、特定のバージョンを指す固定の文字列ではありません。「先週まで動いていたモデルIDが急に認識されなくなった」という場合、Claude Codeのアップデートでエイリアスの解決先が変わった可能性も含めて確認します。
組織の制限とタイプミスを混同するのも注意点です。管理者がavailableModelsでモデルを制限している場合、ピッカーにはそもそも表示されず、/model <name>で直接指定すると「制限されている」旨のエラーになります。こちらは文字列自体は正しいので、is not a recognized model idとは別の対処が必要です。
よくある質問
エイリアスとフルIDのどちらを使うべきですか
長く使う設定にはエイリアス(sonnet・opusなど)が向いています。エイリアスは常に維持された既定モデルを指すため、モデルが引退しても自動で追従します。特定バージョンに固定したい場合はフルIDを使います。
フルIDを使っているのにエラーが出るのはなぜですか
claude-で始まらない、あるいはタイプミスがあるフルIDはこのチェックに通りません。表示名(Sonnet 5など)をそのまま使っていないか確認します。
v2.1.200より前のバージョンでは対処法が違いますか
v2.1.200より前は不正な値がいったん保存されるため、モデル切り替え時ではなく次のリクエストで別のエラーとして表面化します。Claude Codeバージョンの確認・固定・ダウングレード手順を参考に、最新版へのアップデートも検討します。
社内ゲートウェイ経由だとこのチェックは効きませんか
Anthropic API直結以外(Amazon Bedrock・Google Cloud's Agent Platform・Microsoft Foundry・LLMゲートウェイ経由)では、プロバイダーが独自にモデル名を解釈するため、Claude Code側でのローカルチェックは働きません。
fallbackModelの設定は関係ありますか
fallbackModelは過負荷時に別モデルへ自動的に切り替える設定で、モデルIDの認識チェックとは別の仕組みです。過負荷対策としての設定方法はClaude Code fallbackModelで過負荷に備えるにまとめています。
Bedrock・Vertex経由だとこのエラー自体が出ないのはなぜですか
Anthropic APIではモデルIDの形式が固定されているため、Claude Codeがローカルで妥当性を判断できます。一方Bedrock・Google CloudのAgent Platform・Microsoft Foundryは、それぞれ独自の識別子体系(推論プロファイルARN・バージョン名・デプロイ名)を使うため、Claude Code側では「正しい形式かどうか」を判断する基準を持てません。結果として文字列はそのまま素通しになります。
ファミリーエイリアス(opus・sonnet等)が制限されている場合はどうなりますか
組織のavailableModels許可リストで、あるファミリーの全バージョンが制限されている場合のみ/model opusのようなエイリアス指定は拒否されます。一部バージョンだけが許可されている場合は、許可された範囲内の最新バージョンへ自動的に解決されるため、拒否にはなりません。
まとめ
「is not a recognized model id」は、モデル切り替え時にClaude Codeがローカルで行う検証エラーです。原因はタイプミス・表示名との混同・未対応エイリアスの3つに絞られ、/modelでの選び直しかclaude updateで大半は解決します。同じ値が繰り返し出る場合は、--modelフラグから~/.claude/settings.jsonまでの優先順位を順に確認します。モデル名やIDの体系そのものを見直したい場合は、Claudeモデルの移行ガイドも参考になります。