shunt は仕様準拠の Claude Code LLM ゲートウェイです。透過的なプロキシとして、マッピングしたモデルについてのみ、推論を推論レイヤーで別の LLM プロバイダーへ振り分けます。リクエストの model id に基づいてルーティングし、デフォルトではそれ以外はすべて変更なしで Anthropic へパススルーします(これが「shunt」であり、フォールバック先は server.default_provider で設定可能です)。
この名前が仕組みそのものを表しています。電気回路や鉄道の shunt(分岐器)が、選んだ一部の流れを並行した経路へ振り分けるのと同じように、ここではマッピングされたモデルの推論を別のプロバイダーへ振り分けつつ、Claude Code のツールやスキルはそのまま保たれます。
仕組み
Claude Code はすべてのターンを Anthropic API へ送信します。shunt はその前段に(ANTHROPIC_BASE_URL を介して)位置し、マッピングしたモデルについてのみ、推論を別のプロバイダー(OpenAI、Codex/ChatGPT、…)へ振り分けます。ルーティングが HTTP/推論レイヤーで行われる — 別の CLI へタスクを引き渡すのではない — ため、セッションは Claude Code のハーネス内で走り続けます。同じツールループ、同じプリロード済みスキル、同じバンドルスクリプトのパス解決です。外部化されるのはトークン生成だけです。
これを、サブエージェントを別ランタイム(Codex CLI など)へ引き渡す方式と対比してください。そちらはスタックのより上層で切り替えるため、ペルソナとプリロード済みスキルが失われます。
エージェント単位ではなくモデル単位 — そしてグローバルな一括切り替えでもない
ほとんどの Claude Code プロキシは、すべてのトラフィックを 1 つの代替プロバイダーへルーティングします(グローバルなモデル一括切り替え)。shunt の焦点は、リクエストの model id によって駆動される選択的でモデル単位の振り分けです。メインセッションは Claude のまま残し、あなたが指名したモデルだけを他プロバイダーへ shunt します。
選択性は Claude Code 自身の中で決まります。Claude Code はすでにコンテキストごとにモデルを選べるようにしています。
- メインセッション向けの
/modelピッカー、 - サブエージェント定義の
model:フロントマター、 - すべてのサブエージェント向けの
CLAUDE_CODE_SUBAGENT_MODEL、 - ピッカーにカスタムエントリを追加する
ANTHROPIC_CUSTOM_MODEL_OPTION。
shunt は受け取ったモデル id を尊重するだけです — エージェントごとのシステムプロンプトの脆いフィンガープリンティングは不要です。その同じ選択性が、shunt が呼び出し元を一切詮索することなく、個々のエージェントにまで届きます。
shunt が実装するもの
POST /v1/messages— 推論。リクエストのmodelid に従ってルーティングされます。マッピングされていないモデルは、呼び出し元自身の認証情報を使ってバイト単位でそのまま Anthropic へ転送されます。- Anthropic Messages ⇄ OpenAI Responses 変換 — マッピングされた OpenAI ファミリーのモデル向け。ストリーミングを含みます。
- ChatGPT サブスクリプションの再利用 —
codexプロバイダーは Codex CLI の~/.codex/auth.jsonログインを再利用(かつ自動リフレッシュ)します。 GET /v1/models— Claude 命名のエイリアス向けの model discovery。- トークンカウント — 変換されるプロバイダーにはローカルの tiktoken カウント、パススルーには上流の正確なカウント。
- ストリーミングの堅牢性 — SSE キープアライブ ping により、Cloudflare のようなプロキシが長い推論の合間を切断しないようにします。
- オプションのインバウンド認証 — 共有デプロイ向けのクライアント単位トークン。
試す準備はできましたか? Installation へ進んでください。