Vuncloud ブログ
← フィールドノートに戻る

OmniRouteをゼロから:Claude、GPT、Gemini、DeepSeekを一つの無料AIゲートウェイにまとめる

一つの /v1 · 自分のアカウント · 127.0.0.1 だけ読了目安 12 分

デュアルモニタのコードと手前のキーボード。手元に OmniRoute の AI ゲートウェイを置く場面

Cursor、Claude Code、Codex、Gemini CLI は、それぞれ別のアドレスと秘密を覚えます。プロバイダが増えると、上限と「今日は 429」が設定ファイルのあちこちに散らばります。OmniRoute は、それを自分のマシン上の OpenAI 互換の入口一つにまとめます。クライアントが覚えるのは http://127.0.0.1:20128/v1 だけです。Claude、GPT、Gemini、DeepSeek と、カタログのほかのモデルはダッシュボードからつなぎます。ライセンスは MIT です。この手順が追うリリースは release/v3.8.53 です。ポート、コマンド、ルーティングはそこの README に合わせ、プロバイダ数は版ごとに動きます。

「無料」はゲートウェイのソフトに利用料がない、という意味です。枠は接続したプロバイダのアカウントにあります。公式は第三者の無料枠を /dashboard/free-tiers の見積もりとして出しており、それは合計であって OmniRoute が配るトークンではない、と書いています。すでに払っているサブスクリプションも、そのアカウント手順を通して同じアドレスを共有できます。定価を比べるなら、コーディングツールの月額と OpenRouter の料金を見てください。OpenRouter はホストされたルータで、OmniRoute は手元のゲートウェイです。

20128
ダッシュボードと /v1 は同じローカルポート
MIT
ソフトは無料。モデル枠はプロバイダ側
auto
接続済みで対象になる接続だけを選ぶ

ゲートウェイの位置

自分のマシンだけで動く変換ソケット、と考えてください。上流は OpenAI、Anthropic、Google、DeepSeek、またはカタログの別プロバイダのままです。下流は OpenAI の Chat Completions か Responses を話すクライアントです。v3.8.53 の文書は、プロバイダ約 375、生のモデル ID 約 1475 で、一部に無料枠の発見フラグが付く、としています。この数字は再監査されるので、古いスクリーンショットではなくダッシュボードのカタログを見てください。

  • 鍵は二種類です。プロバイダの API key または OAuth は OmniRoute の中だけに置きます。Cursor やスクリプトが使うのは Dashboard → Endpoints のゲートウェイ鍵です。
  • モデル名は接続したあとに意味を持ちます。先に /v1/models を呼び、返った ID を使います。README の例は openai/gpt-5.4 や glm/glm-5.2 のような「プロバイダ/モデル」です。一覧に出たものを使います。
  • 対応クライアントは広いです。Claude Code、Codex、Cursor、Cline、Continue、OpenCode、Copilot、OpenClaw などが名指しされています。OpenAI の Base URL を変えられるものはアドレスを入れるだけです。omniroute run は CLI を 7 本起動できます。
枠はプロバイダ側にある

README の文言は Bring your own provider accounts です。無料枠は登録、審査、支払い手段が要ることがあり、閉じることもあります。tos: avoid のプロバイダは初期状態で auto に入りません。アカウントを接続しても、この方針は自動では変わりません。

ゼロからの導入:npm と Docker

マシンに Node.js が要ります。短い道はこれです。

npm install -g omniroute
omniroute

npm warn ERESOLVE や peer の警告は、公式が最初は無視してよいとしています。起動すると http://127.0.0.1:20128 が開き、API は http://127.0.0.1:20128/v1 です。ダッシュボードなしのプロキシだけなら omniroute serve --headless、または OMNIROUTE_HEADLESS=1 です。

npm 11 はインストールスクリプトを許可する

npm 11 はパッケージのライフサイクルスクリプトを止めることがあります。OmniRoute の postinstall が走らないと、ネイティブの実行ファイルが揃いません。3.8.53 の文書にある許可リストは次です。

npm install -g --allow-scripts=omniroute,keytar,onnxruntime-node,@parcel/watcher,@swc/core,protobufjs,esbuild omniroute

npm が別の名前を出したら、その警告の一覧を使います。許可すると、それらのインストールスクリプトが実行されます。出所を確認してからにしてください。CI や遅いマシンでは OMNIROUTE_SKIP_POSTINSTALL=1 で、ネイティブ SQLite のウォームアップだけを飛ばせます。バイナリのコピーは残ります。

コーディング負荷に合わせて Docker のメモリを足す

文書のイメージ名は今も diegosouzapw/omniroute です。:latest は公開済みの最高安定 SemVer を追い、git の main は追いません。残す環境では版を固定します。公式例はループバックにバインドします。

docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
  -e OMNIROUTE_MEMORY_MB=8192 --memory=10g \
  -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data diegosouzapw/omniroute:latest

イメージのヒープ初期値は 1024MB で、パネルと短い会話には足ります。Claude Code と Codex は POST /v1/responses を使います。長いコンテキストにはより大きい V8 ヒープが要り、足りないとプロセスがメモリ不足で死にます。コーディングエージェント一つなら、上のコマンドのヒープ 8192 とコンテナ 10g 以上です。長いリクエストが二つ重なるならヒープ 10240–12288、コンテナ 12–16g です。Apple Silicon はイメージの arm64 を使います。ボリューム omniroute-data には秘密が入るので、バックアップも削除も機密として扱います。

二台のノートで作業する手元。Claude、GPT、Gemini、DeepSeek を一つの OmniRoute につなぐ
クライアントが持つ Base URL は一つ。プロバイダの鍵はゲートウェイに残す。

Claude、GPT、Gemini、DeepSeek をつなぐ

ダッシュボードの Providers で、今使ってよい相手を選び、API key を貼るか、そのアカウント手順を終えます。四社の鍵はそれぞれのコンソールで取ります。OmniRoute は代わりに開通しません。

プロバイダ自分で用意するもの入れる場所
OpenAI(GPT)platform.openai.com の API keyProviders → OpenAI
Anthropic(Claude)console.anthropic.com の key、または支払い済み Claude サブスクリプションのアカウント手順Providers → Anthropic / その OAuth
GeminiGoogle AI Studio の key、または Gemini CLI の OAuthProviders → Gemini
DeepSeekplatform.deepseek.com の API keyProviders → DeepSeek

無料枠は別リストで、この四つの鍵の別名ではありません。初回ウィザードに「無料プロバイダを設定」が出ることがあり、その時点の無認証カタログから一覧を作り、確認したものだけ接続を作ります。完了を押しただけで勝手には追加しません。名前として出たことがあるのは Pollinations、Cloudflare AI、SiliconFlow の DeepSeek 無料枠などです。規約、地域、まだあるかは相手側が決めます。古い「鍵なし Claude」が tos: avoid なら、初期状態では auto に入りません。使う前に、その日の Free Tiers を開いて資格を確認します。

Gemini Web のような Cookie 型は、ブラウザの実行環境も要ります。npm パッケージには Playwright があり、Chromium のバイナリはありません。最初の呼び出しの前に、リポジトリの Playwright Chromium の手順を済ませないと、ブラウザ層で失敗します。

IDE と CLI でアドレスを一つにする

Endpoints でゲートウェイ鍵をコピーしてから、次を入れます。

Base URL: http://127.0.0.1:20128/v1
API Key:  (Dashboard → Endpoints)
Model:    auto

IDE に話させる前に、モデル一覧を確認します。

curl http://127.0.0.1:20128/v1/models \
  -H "Authorization: Bearer YOUR_KEY"

curl http://127.0.0.1:20128/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"auto","messages":[{"role":"user","content":"Hello"}]}'

Cursor、Cline、Continue と、OpenAI の Base URL を変えられるプラグインは、この三行で足ります。独自ヘッダを出せないクライアントは、文書のトークン付き互換 URL、たとえば http://127.0.0.1:20128/vscode/YOUR_KEY/chat/completions を使えます。ヘッダを出せるなら Authorization: Bearer を優先します。

CLI ごとに設定ファイルを手で直す必要はありません。公式の一発起動は、そのプロセスに資格情報を入れます。Qwen と Gemini は使い捨ての隔離 home も使います。

omniroute run claude --model auto
omniroute run codex  --model auto
omniroute run gemini --model auto
omniroute configure codex

omniroute run は Claude Code、Codex、Aider、Goose、OpenCode、Qwen Code、Gemini CLI を覆います。configure はそのツール自身の設定へプロバイダとモデルを書きます。文書の対象には codex、claude、opencode、qwen、aider、goose、gemini、cline、continue、kilo があります。--dry-run は使う環境変数と引数を表示するだけです。--api-key-env NAME は秘密を環境変数名に残し、シェル履歴には入れません。

auto、フォールバック、入らない相手

auto はすでに接続され、対象になる接続の中から選びます。何もつなぐ前の新規インストールでは、対象が無くて正常です。選ばれた戦略、プロバイダ、遅延は応答ヘッダ X-OmniRoute-Decision に戻ります。クライアントのログより先に、このヘッダを見ます。

  • 枠を見たフォールバック。一つの接続が上限に達すると、まだ余っている接続へ移れます。v3.8.53 には残枠で重み付けする戦略もあり、同じ会話はなるべく元の接続に留めます。
  • サブスクリプション経路は失敗で止まれます。文書の subscription コンボは、すでに払っているサブスクリプション枠だけを使います。尽きたら止まり、別の課金キーへ落ちません。課金 API キーとサブスクリプション鍵を、どこへでも落ちる一つのコンボに混ぜないでください。
  • tos: avoid は初期状態で除外です。接続できたことは auto のメンバーであることは別です。ゲートウェイ鍵を一つのモデルに固定するなら、その鍵の forcedModel を使い、クライアントに上流 URL を書き込みません。

圧縮は任意のパイプラインで、クライアントからは透過です。文書は組み合わせ可能なエンジンとして説明し、実際に使ったセットは X-OmniRoute-Compression に出ます。減る量はモデルとリクエスト次第です。README の幅を、毎回の約束として扱わないでください。メモリ機能は初期状態でオフです。資格情報のマスクもオプトインです。

Cloud Mac ではループバックと SSH

ゲートウェイは、付けっぱなしの Mac に向きます。20128 はループバックで聞き、ノートからは SSH でそのポートを戻します。Cloud Mac はリージョンが固定で SSH でき、Apple Silicon なら公式の arm64 イメージも動きます。管理画面を 0.0.0.0 にバインドしないでください。

ssh -N -L 20128:127.0.0.1:20128 user@your-cloud-mac

トンネルのあと、ノートの Cursor や omniroute run も http://127.0.0.1:20128/v1 のままです。手元に見え、実体はクラウド Mac のループバックです。プロバイダの秘密はクラウドのボリュームかユーザーディレクトリに置き、Git には入れません。同じマシンで OpenClaw を動かしているなら、そのモデルアドレスを同じ /v1 に向け、プロバイダ鍵のコピーはゲートウェイに一つだけ残します。

パネルにログインが要るときは、文書に任意の OIDC があります。パスワードログインは残ります。遠隔操作には範囲付きトークン(connect / contexts / tokens)もあり、公式の Remote Mode に従います。手間を省くためにダッシュボードを公開 IP へ出さないでください。

止まったときに見る箇所

  1. /v1/models が空。Providers の接続が成功していないか、クライアントがプロバイダの key をゲートウェイ鍵の場所に入れています。
  2. auto に経路がない。除外されたプロバイダしかないか、その日の無料枠に資格がありません。動くと分かっている有料 key を使うか、モデル欄に /v1/models の具体 ID を入れます。
  3. グローバルインストール後にネイティブモジュールが見つからない。npm 11 の --allow-scripts と、警告に出たパッケージ名で入れ直します。
  4. Docker のコーディングエージェントが途中で終わる。OMNIROUTE_MEMORY_MB と --memory をコーディング用の段へ上げます。1024MB はダッシュボード用のままにします。
  5. ウェブ型プロバイダの初回が失敗する。Playwright の Chromium を入れてから再試行します。成功する前にルーティング方針は変えません。
  6. 数字が古い。375 社と 1475 モデル ID は v3.8.53 の文書時点の値です。上げたあとはダッシュボードと README を見ます。

FAQ

短く言うと、ソフトは無料で枠はプロバイダ側、アドレスは手元の 20128 の /v1、auto は対象の接続だけ、Docker のコーディングエージェントはメモリを増やし、ポートはループバックに残して SSH で転送します。全文はページ先頭の FAQ 構造化データにあります。

フィールドノート · ゲートウェイ

ゲートウェイはループバックに置き、SSH でノートへ戻す

OmniRoute · 20128 · Cloud Mac

Cloud Macプランを見る
期間限定 プランを見る