Codex CLI on the Claude plan you already pay for

OpenAI's agent, on your Claude plan. Two base URLs, one key. Anthropic-shaped clients talk to http://localhost:3456; OpenAI-shaped clients — chat/completions and, since 6.3, the Responses API — talk to http://localhost:3456/v1. The key is dario (any value works until you set DARIO_API_KEY, which then has to match).

Setup

Codex CLI

# ~/.codex/config.toml
model = "claude-opus-5"
model_provider = "dario"

[model_providers.dario]
name = "dario"
base_url = "http://127.0.0.1:3456/v1"
env_key = "DARIO_API_KEY"
wire_api = "responses"

Codex CLI 0.154 dropped the chat wire for custom providers, so dario speaks the Responses API: the request is translated once at the front door and served like any Claude request — pool, failover, mid-stream continuation, the 17 KB Codex system prompt cached on the Claude side. The full agent loop runs: Claude calls exec_command, Codex executes it, the result goes back, Claude answers from it. Add a ChatGPT account too and -m gpt-5.6-sol on the same block goes to that plan through the same proxy. Walkthrough and what is dropped.

Before that

Install dario, log in, leave it running

Three commands, once. The proxy binds 127.0.0.1:3456 and holds your login; every tool on the machine shares it. Add a ChatGPT plan with dario add altman and the two fail over to each other.

terminal
$ npm install -g @askalf/dario
$ dario login        # your Claude plan: Pro, Max 5x or Max 20x
  Login successful.
$ dario proxy        # leave it running
  dario · http://localhost:3456
  Your Claude subscription is now an API.
0 runtime dependencies SLSA-attested every release Nothing phones home MIT, independent, unofficial
Other tools

Same URL, same key

Something not listed? If it reads ANTHROPIC_BASE_URL or OPENAI_BASE_URL, or has a "Base URL" field, it works. The compatibility matrix says which tools are exercised end-to-end, which are inferred from a shared code path, and which are untested — one honest cell per tool.