# Claude CodeでGPT-6 Astraを使う連携設定：LiteLLMとCodexプラグイン

> Claude CodeでGPT-6 Astraを使う方法はLiteLLM経由とCodexプラグインの2つです。2026年11月12日の実測では修正1件が定価約$0.23でした。

- URL: https://blog.laozhang.ai/ja/posts/gpt-6-astra-in-claude-code
- Published: 2026-11-12
- Updated: 2026-11-12
- Author: LaoZhang AI Team (https://blog.laozhang.ai/ja/about)
- Topic: Claude Code
- Tags: GPT-6 Astra, Claude Code, LiteLLM, Codexプラグイン, ANTHROPIC_BASE_URL, OpenAI

---
Claude Codeの中でGPT-6 Astraを使う方法は2つあります。Astraをメインモデルにするなら、Claude CodeとOpenAI互換のAPIの間にLiteLLMのプロキシを置き、`ANTHROPIC_BASE_URL`をそのプロキシに向けて、`ANTHROPIC_DEFAULT_OPUS_MODEL`などのモデル指定を`gpt-6-astra`にします。Claudeをメインモデルのまま一部の作業だけAstraに任せるなら、OpenAI公式のCodexプラグインを入れて`/codex:rescue --model gpt-6-astra`で渡します。2026年11月12日に、LiteLLMの構成はClaude Code 2.1.316で、Codexプラグインは`/codex:rescue`が内部で呼ぶスクリプト（`--model gpt-6-astra --effort medium`）を直接実行して試し、どちらもPythonの小さなバグ修正を終えてテスト4件を通しました。

どちらにするかは、主に支払い方で決まります。APIの従量課金でよく、ファイルの読み書きやコマンド実行までAstraに任せたいならLiteLLMの構成です。ChatGPTのPlus以上のプランでCodexを使っていて、その利用枠で動かしたいならCodexプラグインです。どちらの場合も、[Claude CodeのLLMゲートウェイに関する公式ドキュメント](https://code.claude.com/docs/en/llm-gateway)にあるとおり、AnthropicはClaude以外のモデルへのルーティングをサポートしていません。禁止されているわけではありませんが、不具合が出ても公式の助けはなく、機能が壊れる可能性があります。

`ANTHROPIC_BASE_URL`をOpenAI互換のゲートウェイへ直接向けるだけでは動かないことがあります。laozhang.aiのClaude形式のエンドポイント（`/v1/messages`）に`gpt-6-astra`を送ると、2026年11月12日時点では503が返りました。使うゲートウェイのClaude形式のエンドポイントがAstraを受け付けるかは、設定を書き換える前にcurlを1回送れば分かります。

*注記：[laozhang.ai は当ブログ運営チームの自社サービスです](https://blog.laozhang.ai/ja/about#laozhang)。その料金は中立的な比較ではなく、自社の提示価格です。*

## Astraをメインにするか、Claudeから任せるか：2つの構成の違い

Astraに作業全体を任せたいならLiteLLM、判断はClaudeに残して手を動かす部分だけAstraに渡したいならCodexプラグインです。前者ではAstraがClaude Codeのツール（Read、Edit、Bashなど）を直接呼び、Claude Codeの画面はそのままに中身のモデルだけが入れ替わります。後者ではClaudeが会話を続け、`/codex:rescue`で渡したタスクだけを、Codex CLIの上で動くAstraが処理します。「Claude CodeとCodexをどう使い分けるか」で迷っているなら、この後者の形がそのまま答えになります。

| 比べる点 | LiteLLMでAstraをメインにする | CodexプラグインでAstraに任せる |
| --- | --- | --- |
| 作業を進めるモデル | Astra（Claude Codeのツールを直接使う） | Claude（渡したタスクだけCodex上のAstra） |
| 支払い | OpenAIまたはOpenAI互換ゲートウェイのAPI従量課金 | ChatGPTプランのCodex利用枠、またはOpenAI APIキー |
| 必要なもの | LiteLLMの常駐、APIキー、環境変数6つ | Node.js 18.18以上、Codex CLIのログイン、プラグイン |
| Astraの指定方法 | `ANTHROPIC_DEFAULT_OPUS_MODEL`などに`gpt-6-astra` | `--model gpt-6-astra` |
| 2026年11月12日の実測 | 19.2秒、テスト4/4、定価で約$0.228 | 28秒、テスト4/4 |
| 弱いところ | Claude Codeの費用表示がずれる、Claude向け機能は未検証 | Claude側の利用量も別に消費する |

2つの実測は同じタスクですが、effortがLiteLLM側は`high`、プラグイン側は`medium`で、動いている仕組みも違います。秒数やトークン数を並べて「どちらが速い・安い」とは言えません。また、AstraとClaude Fableのどちらを主に使うべきかというモデル選びの問題は、[GPT-6 AstraとClaude Fable 5.2比較：effort対応と1タスクの費用](https://blog.laozhang.ai/ja/posts/claude-fable-5-2-vs-gpt-6-astra)で判断できます。

## LiteLLMでAstraをメインモデルにする設定手順

LiteLLMは、Claude Codeが送るAnthropicのMessages形式を受け取り、OpenAIの形式に変換して上流へ送るプロキシです。間に置く理由は、Claude CodeがClaude形式でしか話さないのに対し、AstraはOpenAIの形式で提供されているからです。OpenAIのAPIでは、Astraのツール呼び出し（function calling）はResponses APIでしか使えず、Chat Completionsでは使えません。2026年11月12日のテストでは、LiteLLMは上流への呼び出しをすべて`/v1/responses`に送っていたので、この制約に引っかかりませんでした。

手順は次のとおりです。テストではLiteLLM 1.109.1（Python 3.12の仮想環境）、Claude Code 2.1.316を使い、上流はlaozhang.aiのOpenAI互換エンドポイント（`https://api.laozhang.ai/v1`）でした。

*注記：[laozhang.ai は当ブログ運営チームの自社サービスです](https://blog.laozhang.ai/ja/about#laozhang)。その料金は中立的な比較ではなく、自社の提示価格です。*

1. LiteLLMをプロキシ機能つきで入れます。LiteLLMのドキュメントは`uv tool install 'litellm[proxy]'`を案内しています。
2. 次の`litellm-config.yaml`を作ります。`gpt-6-luna`は、Claude Codeがセッションタイトルの生成などに使うHaiku用のモデル指定に割り当てるためのものです。

```yaml
model_list:
  - model_name: gpt-6-astra
    litellm_params:
      model: openai/gpt-6-astra
      api_base: https://api.laozhang.ai/v1
      api_key: os.environ/LAOZHANG_API_KEY
  - model_name: gpt-6-luna
    litellm_params:
      model: openai/gpt-6-luna
      api_base: https://api.laozhang.ai/v1
      api_key: os.environ/LAOZHANG_API_KEY
litellm_settings:
  drop_params: true
```

3. キーを環境変数に入れて、プロキシを起動します。`LITELLM_MASTER_KEY`は自分で決める長いランダムな文字列で、Claude Codeがプロキシに接続するときの鍵になります。プロキシはこのターミナルで動き続けるので、手順4と5は別のターミナルで行い、そこでも同じ値の`LITELLM_MASTER_KEY`を設定し直します。

```bash
export LAOZHANG_API_KEY="<上流のAPIキー>"
export LITELLM_MASTER_KEY="sk-<長いランダムな文字列>"
litellm --config litellm-config.yaml --host 127.0.0.1 --port 4011
```

4. Claude Codeを起動する前に、プロキシがClaude形式の要求にAstraで答えるかをcurlで確かめます。応答の`model`が`gpt-6-astra`になっていれば、変換は動いています。

```bash
export LITELLM_MASTER_KEY="sk-<手順3と同じ文字列>"
curl -X POST http://127.0.0.1:4011/v1/messages \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-6-astra", "max_tokens": 200, "messages": [{"role": "user", "content": "Which model are you?"}]}'
```

5. 手順4と同じターミナルでClaude Codeの環境変数を設定し、起動します。

```bash
export ANTHROPIC_BASE_URL="http://127.0.0.1:4011"
export ANTHROPIC_AUTH_TOKEN="$LITELLM_MASTER_KEY"
export ANTHROPIC_MODEL="gpt-6-astra"
export ANTHROPIC_DEFAULT_OPUS_MODEL="gpt-6-astra"
export ANTHROPIC_DEFAULT_SONNET_MODEL="gpt-6-astra"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="gpt-6-luna"
export CLAUDE_CODE_MAX_CONTEXT_TOKENS=272000   # 任意。理由は後述の警告の節
claude
```

モデル指定の変数を4つとも書くのは、Claude Codeが用途ごとに別の指定を読むからです。`--model`なしで起動したメインのセッションはOpus用の指定（`ANTHROPIC_DEFAULT_OPUS_MODEL`）で動き、対話モードのセッションタイトルはHaiku用の指定へ送られます。どれかが抜けていると、Claude Codeはプロキシが知らないClaudeのモデルIDを要求してしまいます。各変数がどこで使われるかは[GLM-5.3-FlashをClaude Codeで使う設定：モデル割り当てとeffort](https://blog.laozhang.ai/ja/posts/glm-5-3-flash-claude-code)で同じ仕組みを詳しく説明しています。同じ変数は`settings.json`の`env`にも書けます。ファイルの場所と、シェルの値とどちらが優先されるかは[Claude Code API 設定：キー、settings.json、モデル、ゲートウェイの確認手順](https://blog.laozhang.ai/ja/posts/claude-code-api-configuration)を参照してください。

OpenAIのAPIキーでapi.openai.comに直接つなぐ場合は、LiteLLMのチュートリアルのとおり`api_base`の行を消し、`api_key`を`os.environ/OPENAI_API_KEY`にした同じ設定になります。この組み合わせは今回のテストでは動かしていません。OpenAI側でAstraを使えるかどうかは[GPT-6 Astra APIの始め方：利用権限の確認から最初の応答まで](https://blog.laozhang.ai/ja/posts/gpt-6-astra-api-access)の手順で確認できます。

## 本当にGPT-6 Astraが応答しているかを確かめる

応答したモデルは、Claude Codeの画面と`/status`、そしてプロキシのログの3か所で確かめられます。2026年11月12日に上の設定で対話モードを起動すると、ヘッダーに次の2行が出ました。

```text
gpt-6-astra · API Usage Billing
⚠ Model "gpt-6-astra" isn't recognized · context assumed to be 200k tokens · update Claude Code, or see https://code.claude.com/docs/en/model-config
```

`/status`には`Auth token: ANTHROPIC_AUTH_TOKEN`、`Anthropic base URL: http://127.0.0.1:4011`、`Model: gpt-6-astra`と表示されました。ここまではClaude Code側の設定が読み込まれたことの確認で、実際に上流へ何が送られたかはLiteLLMのログに残ります。LiteLLMを`--detailed_debug`つきで起動すると上流への要求がログに出ます。そのログでは、上流への呼び出しがすべて`https://api.laozhang.ai/v1/responses`宛て、モデルは`gpt-6-astra`でした。最初のメッセージを1回送るとプロキシには3件の要求が届き、2件が`gpt-6-astra`、1件がセッションタイトル用の`gpt-6-luna`でした。ログに`gpt-6-luna`が混ざるのはこのためです。

*注記：[laozhang.ai は当ブログ運営チームの自社サービスです](https://blog.laozhang.ai/ja/about#laozhang)。その料金は中立的な比較ではなく、自社の提示価格です。*

![Claude CodeのメッセージがLiteLLMを経てgpt-6-astraへ2件、gpt-6-lunaへ1件届く流れと、ヘッダー・/status・LiteLLMのログで応答モデルを確かめる3か所](https://blog.laozhang.ai/posts/ja/gpt-6-astra-in-claude-code/img/astra-request-check.webp)

モデルに「あなたは誰か」と聞く方法は、証拠としては弱いと考えてください。LiteLLM経由のテストではAstraが「I am GPT-6 Astra (`gpt-6-astra`)」と答えましたが、後述のCodexプラグインのテストでは同じAstraが「I'm Codex, based on GPT-6.」と答えました。そのときCodexのセッションファイルには`"model":"gpt-6-astra"`と記録されています。モデルの自己紹介ではなく、ログやセッションファイルのモデル名で判断するのが確実です。

## 1タスクの費用：定価で約$0.23、Claude Codeの表示は約半分

LiteLLM経由で動かした小さな修正タスクは、Astraの定価で約$0.228でした。一方、Claude Code自身が表示した費用は$0.114で、約半分です。Claude Codeは`gpt-6-astra`の単価を持っておらず、出力JSONの`costBasis`は`"unknown"`でした。この構成では、Claude Codeの費用表示を請求額の目安にしないでください。

テストは2026年11月12日、Claude Code 2.1.316、LiteLLM 1.109.1、上流laozhang.aiで、2つのバグがあるPythonファイルを直してunittestの4件を通すタスクを、effortを変えて3回実行しました。effortはAstraの`reasoning.effort`にそのまま届いています。

*注記：[laozhang.ai は当ブログ運営チームの自社サービスです](https://blog.laozhang.ai/ja/about#laozhang)。その料金は中立的な比較ではなく、自社の提示価格です。*

| Claude Codeの設定 | Astraに届いたeffort | 所要時間 | ターン数 | 出力トークン（うち推論） | 定価での費用 | Claude Codeの表示 |
| --- | --- | --- | --- | --- | --- | --- |
| 指定なし（既定） | `high` | 19.2秒 | 7 | 521（37） | $0.228 | $0.114 |
| `CLAUDE_CODE_EFFORT_LEVEL=low` | `low` | 17.5秒 | 5 | 364（0） | $0.203 | $0.101 |
| `CLAUDE_CODE_EFFORT_LEVEL=max` | `max` | 34.4秒 | 9 | 1,531（963） | $0.289 | $0.144 |

定価での費用は、ゲートウェイが返したトークン数にAstraの100万トークンあたりの定価（入力$10、キャッシュ書き込み$12.50、キャッシュ読み込み$1、出力$50）を掛けた推定で、請求額ではありません。既定の実行なら、キャッシュなし入力12、キャッシュ書き込み11,728、キャッシュ読み込み55,265、出力521トークンなので、次のようになります。

```text
(12 × $10 + 11,728 × $12.50 + 55,265 × $1 + 521 × $50) ÷ 1,000,000 = $0.228
```

![既定effortの修正1件の定価$0.228の内訳（キャッシュ書き込み約64%）と、3回の実行で定価とClaude Codeの費用表示を比べた棒グラフ](https://blog.laozhang.ai/posts/ja/gpt-6-astra-in-claude-code/img/astra-task-cost.webp)

このうち約64%（$0.147）は、最初のキャッシュ書き込みです。Claude Codeは毎回約11.7Kトークンのシステムプロンプトとツール定義を送るため、どんなに小さな依頼でもこの分が最初にかかります。実際の開発セッションはこのタスクよりずっと大きいので、金額もそれに応じて増えます。また、Astraは1回の要求の入力が272Kトークンを超えると、その要求全体が入力$20、出力$75、キャッシュ読み込み$2、キャッシュ書き込み$25の単価になります。単価の一覧と長文・Batchの計算は[GPT-6 Astra API料金：10種類の単価と長文・Batch・Fastの計算方法](https://blog.laozhang.ai/ja/posts/gpt-6-astra-api-pricing)、effortの既定値と設定方法は[Claude Code の effort とは：既定値・おすすめ・設定が効かない原因](https://blog.laozhang.ai/ja/posts/claude-code-effort-level)にあります。

3回はどれも1回ずつの実行で、易しいタスクでした。effortがそのまま届くことは確かめられましたが、どのeffortが良いかまでは、この結果からは分かりません。

## CodexプラグインでClaudeからAstraに作業を任せる手順

Claudeをメインモデルのまま使うなら、OpenAIが公開しているCodexプラグイン（`openai/codex-plugin-cc`）を入れます。必要なのはNode.js 18.18以上と、ChatGPTアカウントかOpenAI APIキーです。ChatGPTでログインした場合の使用量は、そのアカウントのCodex利用枠から引かれます。ただしAstraを指定できるのは、ChatGPTのPlus、Business、Proのプランです（各プランの枠は後述のよくある質問を参照）。

1. Claude Codeの中で、プラグインのマーケットプレイスを追加してインストールし、読み込み直してからセットアップを実行します。`/codex:setup`はCodex CLIの準備ができているかを確認し、未インストールでnpmがあれば導入を提案します。

```text
/plugin marketplace add openai/codex-plugin-cc
/plugin install codex@openai-codex
/reload-plugins
/codex:setup
```

2. 作業を渡すときは、モデルを明示して`/codex:rescue`を使います。`--model`を省くと、Codexは自分の既定モデルを選ぶので、Astraになるとは限りません。

```text
/codex:rescue --model gpt-6-astra --effort medium 失敗しているテストを直して
```

3. `--background`をつけて裏で動かした場合は、`/codex:status`で進み具合を、`/codex:result`で結果を確認します。止めるときは`/codex:cancel`です。

`/codex:rescue`の中身は`codex:codex-rescue`というサブエージェントで、インストールされたファイルを見ると、このサブエージェント自体はClaudeの`sonnet`で動き、既定で`--write`をつけてCodexにファイルの編集を許可します。つまり、Astraに任せている間もClaude側の利用量は少し消費され、Codexは作業ディレクトリのファイルを書き換えます。

2026年11月12日に、新しい設定ディレクトリへプラグイン1.0.6を入れ、ChatGPTでログインしたCodex CLI 0.166.0を使って試しました。サブエージェントがプラグインのスクリプトを呼ぶのと同じ形（`codex-companion.mjs task --write --model gpt-6-astra --effort medium`）で、LiteLLMのときと同じタスクを渡すと、28秒でテスト4件が通りました。Codexのセッションファイルには`"model":"gpt-6-astra"`と`"reasoning_effort":"medium"`が記録され、入力130,507トークン（うちキャッシュ112,128）、出力369トークンでした。対話中のClaudeセッションで`/codex:rescue`を打つ操作そのものは今回は実行しておらず、動かしたのはそれが呼び出すスクリプトです。

## 最初に出るエラー：503 no available channelsと未認識モデルの警告

Claude CodeでAstraを動かそうとして最初に出やすいのは、次の3つです。エラーの原文で探してください。

### 503「has no available channels for model gpt-6-astra」

`ANTHROPIC_BASE_URL`をlaozhang.aiに直接向け、モデル指定を4つとも`gpt-6-astra`にしてClaude Code 2.1.316を起動すると、2026年11月12日には次のエラーになりました。curlで`https://api.laozhang.ai/v1/messages`に送った場合も、ツールの有無にかかわらず同じHTTP 503で、課金はされていません。

*注記：[laozhang.ai は当ブログ運営チームの自社サービスです](https://blog.laozhang.ai/ja/about#laozhang)。その料金は中立的な比較ではなく、自社の提示価格です。*

```text
API Error: 503 Current group default has no available channels for model gpt-6-astra under billing mode [pay-as-you-go, pay-per-request] (request id: …). This is a server-side issue, usually temporary — try again in a moment. If it persists, check your inference gateway (api.laozhang.ai).
```

「usually temporary」はClaude Codeが5xxエラーに付ける共通の文言で、この場合は待っても直りません。原因は、このゲートウェイのClaude形式のエンドポイントにAstraの経路がないことです。laozhang.aiのドキュメントでも、Astraの呼び出し先はChat Completions（`/v1/chat/completions`）とResponses（`/v1/responses`）で、Claude Code向けのページにGPTモデルは載っていません（Claude Code専用のトークングループは試していませんが、その対応モデルにもGPTはありません）。対処は、上の手順のようにLiteLLMを挟んでOpenAI互換の`/v1`を使うことです。ゲートウェイによってはサーバー側で形式を変換している場合もあるので、別のゲートウェイを使うなら、まず`/v1/messages`へcurlを1回送って確かめてください。DeepSeekを同じように使う構成とその初回エラーは[Claude CodeでOpenRouterとDeepSeekを使う：経路、設定、初回エラー対応](https://blog.laozhang.ai/ja/posts/claude-code-openrouter-deepseek)にあります。

### 警告「isn't recognized · context assumed to be 200k tokens」

これはエラーではなく、Claude Codeが知らないモデルIDに対して出す警告です。作業はそのまま進みますが、Claude Codeはコンテキストウィンドウを200Kトークンと仮定し、自動の圧縮（compaction）もその大きさを基準に行います。Astraの実際のウィンドウは1,050,000トークンです。

`CLAUDE_CODE_MAX_CONTEXT_TOKENS`で別の値を宣言すると、`claude-`で始まらないIDではそれだけで反映され、警告も消えます。2026年11月12日に`272000`を設定すると、出力JSONの`contextWindow`が272000になり、200Kの警告は出なくなりました。272000にしたのは、上の費用の節にある単価の段差の手前に収めるためで、公式の推奨値ではありません。長いリポジトリで高い単価を受け入れられるなら、もっと大きな値も選べます。

### 400「Extra inputs are not permitted」

Claude Codeはゲートウェイにも、api.anthropic.comに送るのと同じ`anthropic-beta`ヘッダーや`output_config.effort`、`context_management`などのフィールドを送ります。これをそのまま形式の違う上流へ転送するゲートウェイでは、`400 Extra inputs are not permitted`のようなエラーになると、[Claude Codeのゲートウェイプロトコルの公式ドキュメント](https://code.claude.com/docs/en/llm-gateway-protocol)は説明しています。LiteLLMを`drop_params: true`で使ったテストでは、Claude Codeが8種類の`anthropic-beta`と`output_config`を送っていても、400は一度も出ませんでした。別のプロキシでこのエラーが出るなら、`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`を設定すると送られるbetaの種類を減らせます。

## WebSearch・MCP・サブエージェントは未検証：試したのは小さな修正1件

2026年11月12日のテストで確かめたのは、1台のMacで、ファイルの読み取り・編集・テスト実行で済む小さなタスクが通ることまでです。WebSearchやWebFetch、画像の入力、サブエージェント、MCP、長いセッションと自動圧縮は動かしていません。サブエージェントはセッションと同じモデルを使うので、この構成ではAstraで動くはずですが、動作は確認していません。Web検索については、LiteLLMのドキュメントに「Claude Code - WebSearch Across All Providers」という別のページがあります。こうした機能が必要な作業では、本番に入れる前に自分のリポジトリで一度試してください。

## Claude CodeでGPT-6 Astraを使うときのよくある質問

### ChatGPTのサブスクでClaude CodeからAstraを使えますか？

使えます。その場合はCodexプラグインの構成になり、使用量はChatGPTのCodex利用枠から引かれます。2026年10月26日時点のOpenAIの案内では、FreeとGoで使えるのはGPT-6 LunaでAstraではありません。PlusとBusiness（標準）はCodexで5時間あたりおよそ5〜45件のAstraのローカルメッセージ、Proには5時間の上限がありません。プランの枠は頻繁に変わるので、使う前にOpenAIの案内で確かめてください。ChatGPTのログインをCodex以外のツールに流用するコミュニティ製のプロキシもありますが、OpenAIがその使い方を認めているかは明らかではありません。月額と利用上限をツール単位で比べるなら[Claude Code と Codex の料金比較：月額、利用上限、API 実コスト](https://blog.laozhang.ai/ja/posts/claude-code-vs-codex)が参考になります。

### Claude Code Routerでも同じことができますか？

Claude Code Router（CCR）も、Claude Codeの前に置くローカルのゲートウェイです。READMEによると、2026年10月9日公開のv3.1.3はデスクトップアプリ（またはnpmの`@musistudio/claude-code-router`、Node.js 22以上）で、`http://127.0.0.1:3456`で待ち受け、上流のプロトコルとして「OpenAI Chat / Responses」を挙げています。考え方はLiteLLMと同じですが、2026年11月12日のテストではCCRを使っておらず、Astraで動くかは確かめていません。使う場合も、上の節と同じくヘッダー、`/status`、ログのモデル名で確認してください。

## 参考資料

本文で参照している外部ページを、登場順に並べています。最終更新日：2026-11-12。

- [Claude CodeのLLMゲートウェイに関する公式ドキュメント](https://code.claude.com/docs/en/llm-gateway) (code.claude.com)
- [Claude Codeのゲートウェイプロトコルの公式ドキュメント](https://code.claude.com/docs/en/llm-gateway-protocol) (code.claude.com)
