Skip to content

モデルディスカバリー

Claude Code の /model ピッカーを Claude 命名のエイリアスで自動的に埋める。

Updated View as Markdown

Discovery(GET /v1/models)は Claude Code の /model ピッカーを自動的に埋められます。デフォルトでは、shunt は管理者が選定した [[models]] エントリを先に返し、その後に shunt 自身が検出したモデルを追加します。同一 id は選定したエントリを優先して重複を除きます。選定したリストだけを公開するには、トップレベルで auto_include_builtin_models = false を設定してください。

後半について、server.default_provider が Anthropic 種別の場合に限り、shunt はそのアップストリームに実際の一覧を問い合わせ、その認証モードに応じた認証情報を使います。auth = "passthrough" では呼び出し元が転送した認証情報を使うため、呼び出し元ごとにその認証情報で利用できるモデルが返ります — ただし、そのスロットに実際のアップストリーム認証情報ではなく shunt 自身の [server.gateway] JWT(または設定済みの [server.auth] クライアントトークン)が入っている場合、そのスロットは転送されません。api_key では設定済みのキーを使います。claude_oauth では、推論と同じ実効アカウントセットから、解決可能かつ無効化されていない最初のアカウントを使います。このセットにはストアから検出されたアカウントが含まれ、account_scope の順序が適用されます。Discovery はプール選択、クールダウン、クォータの記録を行いません。そのため、ゲートウェイ所有の認証情報を使う後者 2 つのモードでは、すべての呼び出し元がその認証情報にスコープされたカタログを共有します。server.default_provider が Anthropic 種別ではない、使える認証情報がない、あるいは呼び出しが失敗・タイムアウト(2 秒上限)した場合は、組み込みの Claude カタログのスナップショットにフォールバックします。キャッシュはしません。

検出されたモデルは専用の [[routes]] エントリを必要としません。通常のルーティング規則で解決され、[[routes]] と [[route_prefixes]] のいずれにも一致しない場合は server.default_provider にフォールバックします。

Claude Code は discovery された id が claude/anthropic で始まらない場合、それを無視するため(プロトコルリファレンス)、gpt-* などの非 Claude モデルには Claude 命名のエイリアスを使ってください。

Discovery とルーティングを統合する

選定したモデルでルーティングと上流変換を直接宣言できます。1エントリのマップのキーは設定済み provider 名、値は上流へ送るモデル id です。

[[models]]
id = "claude-gpt-5.6-sol-via-codex"
display_name = "GPT-5.6-Sol (via Codex)"

[models.upstream_model]
codex = "gpt-5.6-sol"

このエイリアスを選択すると codex へルーティングし、上流には gpt-5.6-sol を送ります。このマップは別の [[routes]] エントリより推奨される厳密 id の形式であり、[[routes]]、[[route_prefixes]]、server.default_provider より優先されます。エントリごとに設定済み provider を1つだけ指定でき、不正なマップや同じ id の [[routes]] エントリは起動エラーです。

別のルートを使う

マップのない既存の [[models]] エントリは後方互換です。引き続き [[routes]] エントリと組み合わせ、実際の上流スラッグへ書き換えられます。

[[models]]
id = "claude-gpt-5.6-sol-via-codex"     # must begin with claude/anthropic
display_name = "GPT-5.6-Sol (via Codex)"

[[routes]]
model = "claude-gpt-5.6-sol-via-codex"  # the alias Claude Code sends
provider = "codex"
upstream_model = "gpt-5.6-sol"          # real slug forwarded to the ChatGPT backend

そして discovery を有効化し(Claude Code v2.1.129+)、shunt + Claude Code を再起動します。

export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1

エイリアスは /model に From gateway とラベル付けされて表示されます。それを選ぶと claude-gpt-5.6-sol-via-codex が送られ、shunt がそれを codex へルーティングし、gpt-5.6-sol へ書き換えます。

エイリアスのない gpt-* id には、代わりに ANTHROPIC_CUSTOM_MODEL_OPTION を使ってください — Connect Claude Code を参照。

Claude Desktop は tier 名の id のみを認識します

Claude Code は claude/anthropic で始まる discovery id をすべて受け入れますが、Claude Desktop はより厳格です。claude-sonnet-*、claude-opus-*、claude-haiku-*、claude-fable-* といった tier 名の id のみを表示します。したがって上記の claude-<slug>-via-<provider> エイリアスは Claude Code には現れますが、gpt は tier 名ではないため Claude Desktop では静かに破棄されます。

組み込みカタログはすべて tier 名なので Desktop でも表示されたままです。失われるのは選定した claude-<slug>-via-<provider> エイリアスだけです。非 Anthropic バックエンドを Claude Desktop へ公開するには、tier 名の id を再利用し、[[routes]] の upstream_model でマッピングしてください。

[[routes]]
model = "claude-sonnet-5"        # a tier-named id Claude Desktop recognizes
provider = "codex"
upstream_model = "gpt-5.6-sol"   # real backend slug

Desktop でそれを選ぶと、意図した上流へ解決されます。この route はその id に対する組み込みカタログのデフォルトルーティングを上書きするため、バックエンドのマッピングがユーザーにとって意味を保つ tier 名を選んでください。

Discovery にはゲートウェイの認証情報が必要

claude.ai OAuth のログインだけでは discovery はトリガーされません。Claude Code は ANTHROPIC_AUTH_TOKEN、API キー、または apiKeyHelper が設定されているときのみ /v1/models リクエストを発行します。素の Max/Pro サブスクリプションログインでは、フラグをオンにしても何も送りません — shunt に届くリクエストはなく、キャッシュも書かれません。認証情報の選択を参照してください。claude setup-token が推奨ルートです。

デバッグ

Discovery は静かに失敗し(3 秒のタイムアウト、リダイレクトはすべて失敗としてカウント)、キャッシュ/組み込みのリストにフォールバックします。claude --debug を実行し、[gatewayDiscovery] の行を探して実行されたか確認してください。

Navigation

Type to search…

↑↓ navigate↵ selectEsc close