·tips

OpenCode ZenをCodex CLIのバックエンドとして使う

Codex CLIのmodel_providers + profilesでOpenCode Zenをバックエンドにする

3 min read
Writing style

まとめ

  • Codex CLIはmodel_providersでカスタムプロバイダーを定義でき、OpenCode Zenも利用可能
  • OPENAI_BASE_URLの上書きではなく、model_providers + profilesの組み合わせが正解
  • codex exec -p <profile> で起動する(ルートレベルのcodex -p <profile> execはプロファイルが伝播されないバグがある)
  • OpenCode Zenの/modelsエンドポイントはCodex CLI独自フォーマットと異なるためエラーログが出るが、動作に支障はない

問題

OpenCode ZenはOpenAI互換のAPIゲートウェイで、GPT・Claude・Gemini等のモデルに統一的にアクセスできる。Codex CLIのバックエンドとして使いたいが、単純なOPENAI_BASE_URLの上書きでは動かない。

# これは動かない
env OPENAI_BASE_URL="https://opencode.ai/zen/v1" \
  OPENAI_API_KEY="$OPENCODE_ZEN_KEY" \
  codex --model gpt-5.2-codex "hi"

解決方法

1. config.tomlにプロバイダーとプロファイルを追加

~/.codex/config.tomlに以下を追加:

[model_providers.opencode]
name = "OpenCode Zen"
base_url = "https://opencode.ai/zen/v1"
env_key = "OPENCODE_ZEN_KEY"
wire_api = "responses"

[profiles.zen]
model = "gpt-5.2-codex"
model_provider = "opencode"
model_reasoning_effort = "xhigh"

2. 環境変数を設定

export OPENCODE_ZEN_KEY="your-api-key-here"

APIキーは https://opencode.ai/auth で取得できる。

3. 起動

codex exec -p zen "hi"

対話モードも同様:

codex exec -p zen

シェル関数にしておくと便利:

zcodex() {
  : "${OPENCODE_ZEN_KEY:?export OPENCODE_ZEN_KEY=...}"
  codex exec -p zen "$@"
}

ハマりどころ

-pフラグの配置

codex -p zen exec "hi" は動かない。-pがTUI側のCLI定義に吸われ、execサブコマンドに伝播されない。必ずcodex exec -p zenの順序で指定する。

/modelsエンドポイントのエラーログ

起動時に以下のようなエラーが出るが、無視してよい:

ERROR codex_core::models_manager::manager: failed to refresh available models:
  failed to decode models response: missing field `models`

Codex CLIは/modelsに独自スキーマ({"models": [...]})を期待するが、OpenCode Zenは標準OpenAI形式({"data": [...]})を返す。ビルトインのモデル定義にフォールバックするため、実際の動作に影響はない。

利用可能なモデル

OpenCode Zenで使えるモデルは以下で確認できる:

curl -s -H "Authorization: Bearer $OPENCODE_ZEN_KEY" \
  https://opencode.ai/zen/v1/models | jq '.data[].id'

Codex CLIで使う場合はwire_api = "responses"に対応したモデル(GPT系)を選ぶ。

ref