ClaudeCode CLI (claude) が、Anthropic APIの代わりに OpenAI (Codex) や Google (Antigravity/Gemini) のサブスクリプションを利用できるようにするローカルプロキシゲートウェイです。
Janus は、中間者(Man-in-the-Middle)として動作するローカルサーバーを提供します。ClaudeCodeからのAnthropic API形式のリクエストを傍受し、認証情報の注入とプロトコル変換を行った上で、以下のバックエンドサービスへ転送します。
- OpenAI: ChatGPT Plus/Pro/Team サブスクリプション (Codex CLI互換)
- Google: Gemini Advanced / Google One AI Premium (Antigravity/Cloud Code互換)
これにより、API従量課金ではなく、既存の定額サブスクリプション権限でClaudeCodeを活用することが可能になります。
- プロトコル変換: Anthropic Messages APIのリクエスト/レスポンスをOpenAI/Gemini形式に相互変換
- ストリーミング対応: Server-Sent Events (SSE) によるリアルタイムレスポンス変換により、スムーズな表示を実現
- 認証マネージャー: CLI向けのOAuthフロー(Device Flow / Loopback)を模倣し、トークンを安全に管理
- モデル一覧提供 (
/models): ClaudeCodeが起動時に問い合わせるモデル一覧エンドポイントを提供し、利用可能なバックエンドモデルを動的に通知 - モデルルーティングとパススルー: エイリアスによる自動マッピングに加え、バックエンドのモデルIDを直接指定するパススルーリクエストに対応
ClaudeCodeから指定されたモデルは、以下のようにバックエンドのモデルへ自動的にマッピングされます。
| ClaudeCode指定モデル (Alias) | OpenAI (Codex) | Google (Antigravity) |
|---|---|---|
claude-3-5-sonnet-20241022 |
gpt-4o |
gemini-1.5-pro |
claude-3-opus-20240229 |
gpt-4o |
gemini-1.5-pro |
claude-3-sonnet-20240229 |
gpt-4o |
gemini-1.5-pro |
claude-3-haiku-20240307 |
gpt-4o-mini |
gemini-2.0-flash-exp |
マッピング表にないモデル名が指定された場合、ゲートウェイは以下のルールでバックエンドへリクエストをパススルー(そのまま転送)します。
- OpenAI:
gpt-,o1-〜o9-,chatgpt-で始まるモデル名、またはcodexを含むモデル名は、そのままOpenAIへ転送されます。 - Google:
gemini-で始まるモデル名、またはantigravityを含むモデル名は、そのままGoogleへ転送されます。 - Anthropic (上記以外): 上記のいずれにも該当しないモデル名は、**Anthropic APIへ直接転送(パススルー)**されます。
- 重要: Anthropicへのパススルーを利用する場合、有効な
x-api-keyヘッダーが必要です。ダミーのキーでは認証エラーとなります。
- 重要: Anthropicへのパススルーを利用する場合、有効な
これにより、新しく追加されたモデルやExperimentalなモデルも即座に利用可能です。
- Node.js (v18以上)
- OpenAI または Google の有効なサブスクリプションアカウント
git clone https://github.com/yohi/janus.git
cd janus
npm install
npm run build
サーバーを起動してバックグラウンドで待機させます。
npm start
# または開発モード(ホットリロード有効)
npm run dev
デフォルトでは http://localhost:4000 で起動します。
利用したいプロバイダーの認証を行います。ブラウザが起動し、ログインを求められます。
OpenAI (Codex) の認証:
npm run auth:codex
Google (Antigravity) の認証:
npm run auth:antigravity
現在の認証ステータスは以下のコマンドで確認できます。
npm run status
ClaudeCodeがローカルゲートウェイを経由するように環境変数を設定します。
(.bashrc や .zshrc に追加することを推奨します)
# ゲートウェイのアドレス
export ANTHROPIC_BASE_URL="http://localhost:4000"
# 重要: Anthropicパススルーを使用する場合は有効なAPIキーを設定してください。
# OpenAI/Google変換のみを使用する場合でも、クライアントの要件を満たすために
# 何らかの値を設定する必要があります(例: ダミーキー)。
export ANTHROPIC_API_KEY="sk-ant-api03-..."
# または
export ANTHROPIC_API_KEY="dummy-key-for-gateway"
ゲートウェイ経由でモデルを指定して実行します。
# GPT-4o を使用する場合
claude --model gpt-4o
# Gemini 1.5 Pro を使用する場合
claude --model gemini-1.5-pro
# Gemini 2.0 Flash (Experimental) を使用する場合
claude --model gemini-2.0-flash-exp
- ビルド:
npm run build - テスト:
npm test - 開発サーバー:
npm run dev
本ゲートウェイはClaudeCodeが期待するAnthropic APIの挙動を完全にエミュレートします。
/modelsエンドポイント: 起動時に利用可能なモデルID(gpt-4o,gemini-1.5-pro等)と、Claudeのエイリアスを返却します。/messagesエンドポイント: チャット補完リクエストを受け取り、指定されたモデルに応じてバックエンドAPI(OpenAI/Vertex)へプロトコル変換して転送します。
graph LR
CC[ClaudeCode CLI] -->|Req: Anthropic Protocol| GW[Janus Gateway]
subgraph "External Providers"
GW -->|Req: OpenAI Protocol| OAI[OpenAI API]
GW -->|Req: Vertex Protocol| GGL[Google API]
end
OAI -->|Res: SSE Stream| GW
GGL -->|Res: SSE Stream| GW
GW -->|Res: Anthropic Protocol| CC
本ツールは非公式の実験的プロジェクトです。各サービスプロバイダーの利用規約を遵守してご使用ください。意図しない利用方法によるアカウントの制限等について、開発者は責任を負いません。