Skip to content

shunt とは

shunt とは何か、他の Claude Code プロキシとどう違うか、いつ使うか。

Updated View as Markdown

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 — 推論。リクエストの model id に従ってルーティングされます。マッピングされていないモデルは、呼び出し元自身の認証情報を使ってバイト単位でそのまま Anthropic へ転送されます。
  • Anthropic Messages ⇄ OpenAI Responses 変換 — マッピングされた OpenAI ファミリーのモデル向け。ストリーミングを含みます。
  • ChatGPT サブスクリプションの再利用codex プロバイダーは Codex CLI の ~/.codex/auth.json ログインを再利用(かつ自動リフレッシュ)します。
  • GET /v1/models — Claude 命名のエイリアス向けの model discovery
  • トークンカウント — 変換されるプロバイダーにはローカルの tiktoken カウント、パススルーには上流の正確なカウント。
  • ストリーミングの堅牢性SSE キープアライブ ping により、Cloudflare のようなプロキシが長い推論の合間を切断しないようにします。
  • オプションのインバウンド認証 — 共有デプロイ向けのクライアント単位トークン

試す準備はできましたか? Installation へ進んでください。

Navigation

Type to search…

↑↓ navigate↵ selectEsc close