Last updated

Codex Router Compatible Apps — Codex, Cursor, Claude Code & More

One Codex Router service can now publish the same selected, authenticated model catalog to several coding agents. Provider keys, failover, Vision Bridge behavior and usage accounting stay on the shared local router plane; each client integration owns only the smallest configuration needed to reach it.

Supported client targets

ClientTargetWhat the integration does
Codex App & CLIcodexMerges routed models into the native picker while preserving GPT models and ChatGPT login
DeepSeek HarnessdshAdds one watched codex-router provider to Harness settings; models hot-reload
Gemini CLIgeminiAdds a marked block to ~/.gemini/.env and serves a Gemini-shaped local endpoint
Cursor Agent & Cursor AppcursorUses a local adapter for Cursor Agent and an app-only HTTPS edge for Cursor App BYOK
Claude CodeclaudeAdds a private claude-router launcher and Anthropic Messages compatibility surface
OpenClawopenclawPublishes a managed codex-router Responses provider, with one-click setup in Control Center

Install a new target directly, or add it to an existing router:

./install.sh --target dsh --auto --providers configured
./bin/model-router gemini enable
./bin/model-router claude enable
./bin/model-router openclaw enable

Use the target name with doctor, status, enable and disable. Removing one target preserves every unrelated client and retires the shared service only when no installed client still needs it.

opencode, pi, omp, Command Code and Hermes Agent

Five more coding clients keep their providers in a configuration document you also own. The Control Center Harness page lists each of them with a Route toggle. Turning Route on installs the client’s CLI where the router can and writes the one provider key the router owns into that document; turning it off removes only that router-managed entry. It does not disable the shared service or change any other client.

ClientDocument the router editsWireInstall
opencode~/.config/opencode/opencode.jsonResponsesopencode-ai
pi~/.pi/agent/models.jsonResponses@earendil-works/pi-coding-agent
omp (oh-my-pi)~/.omp/agent/models.ymlResponsesinstall omp yourself first (omp.sh; it runs on Bun)
Command Code~/.commandcode/providers.jsonAnthropic Messagescommand-code 1.30.0 or later (setup updates an older one)
Hermes Agent~/.hermes/config.yamlAnthropic Messagesinstall Hermes yourself first

From the terminal, the same action is one command per client:

./bin/control client-setup opencode
./bin/control client-setup pi
./bin/control client-setup omp
./bin/control client-setup commandcode
./bin/control client-setup hermes

./bin/control client-disconnect opencode

These clients are published into rather than installed as: there is no MODEL_ROUTER_TARGET for them and no second service. They share the router plane every other client uses, so enabling a provider, storing a key or curating a model republishes them together. Keeping them current is its own separate action — ./bin/control client-update <id> (or --all) runs each client’s own updater (opencode upgrade, pi update --self, command-code update, hermes update --yes) rather than npm install -g, so a CLI installed with Homebrew or a curl | sh script updates in place. YAML documents are spliced by line range so comments and sibling providers survive a publish; a JSON document the router cannot round-trip is refused rather than reformatted; and a codex-router provider whose base URL this router did not issue is never replaced or removed.

Important client differences

DeepSeek Harness watches its settings and normally needs no restart. Gemini CLI reads the managed environment on its next launch; if prompted for authentication, choose “Use Gemini API key” because the value is a loopback caller capability, not a Google credential.

Claude Code is launched with claude-router; use /model and choose a codex_router/anthropic/<provider>/<model> entry. The launcher keeps spawned agents and Claude’s default Opus/Sonnet/Haiku tier aliases on the routed model selected for the session, preventing a built-in alias from falling back to an Anthropic model ID the router does not serve. This compatibility path can expose non-Claude models, but Anthropic documents gateways only for Claude models.

OpenClaw receives every selected router model under codex-router/<router-slug>. Existing agents, channels, plugins, providers and an existing default model are preserved.

Cursor Agent remains local. Retail Cursor App sends OpenAI BYOK calls through Cursor’s backend, so it cannot call 127.0.0.1; its target therefore needs a stable public HTTPS hostname, typically a named Cloudflare Tunnel on a domain you control. Do not expose the main router port—the dedicated app edge publishes only the required model and chat surfaces.

T3 Code and other Codex wrappers

T3 Code drives official coding CLIs through adapters. When it uses the Codex adapter, install the codex target, fully quit and reopen T3 Code, then choose the routed model in its selector. No separate T3 target is required. The same inheritance pattern applies to another GUI that launches the official Codex CLI and reads its model catalog.

Experimental subscription agent bridges

The Control Center Harness page can also detect existing Claude Code, Cursor Agent and Gemini CLI sessions. These bridges are separate from the routed model picker: they call the installed official client and do not copy or reuse its OAuth token as an API credential.

./bin/model-router codex agents status
./bin/model-router codex agents probe anthropic
./bin/model-router codex agents probe cursor
./bin/model-router codex agents probe gemini

Bridge prompts may consume the owning client’s subscription quota. File-system and terminal capabilities are not advertised through this experimental bridge yet, and permission requests fail closed until a foreground approval surface exists.

Native GPT models in non-Codex clients

External clients carry a local caller key, not a ChatGPT session. To publish native GPT models to DeepSeek Harness, Gemini CLI, OpenClaw and future clients, first sign in through Codex and explicitly authorize the shared local plane once:

codex login
./bin/model-router codex chatgpt-session enable

Revoke that cross-client authorization with ./bin/model-router codex chatgpt-session disable; Codex stays signed in and keeps its own native models.

Related: installation, how it works, models overview, troubleshooting.