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).
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.
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.
$ 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.
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.