Claude Code subagents that run on ChatGPT/Codex GPT-5.6 models — Luna, Sol, and Terra — routed through the shunt gateway.
Unlike a CLI hand-off (which drops persona and preloaded skills), shunt diverts only token generation at the inference layer. The session keeps running inside Claude Code's harness: same tool loop, same skills, same script-path resolution. Only the model that generates the tokens changes.
Agent (@-mention) |
Model id (model:) |
Native effort | Supported effort levels |
|---|---|---|---|
shunt-codex:gpt-5.6-sol |
gpt-5.6-sol |
low (fast) | low · medium · high · xhigh · max · ultra |
shunt-codex:gpt-5.6-terra |
gpt-5.6-terra |
medium | low · medium · high · xhigh · max · ultra |
shunt-codex:gpt-5.6-luna |
gpt-5.6-luna |
medium | low · medium · high · xhigh · max |
Each agent's model: frontmatter pins the request to a Codex slug, so only that
subagent diverts — the main session stays on Claude. All three share a 372k-token
context window.
Effort levels are from openai/codex's
models.json. Note the difference: Luna does not support theultralevel — its top level ismax. Sendingultrato Luna (via shunt'seffortconfig or aneffort:override) is rejected upstream. Sol and Terra acceptultra.
The agents' system prompts are written for Claude Code's harness — these models run inside Claude Code's tool loop (Read/Edit/Bash, skills), not Codex's. The
gpt-5.6-*entries inmodels.jsondo carry a substantial Codex system prompt (model_messages.instructions_template, ~16k chars, "You are Codex…"), but it describes Codex's own tools, personality, and workflow — none of which exist here. shunt diverts only token generation, not that prompt: Claude Code supplies its own system prompt, so the Codex one is never sent and there is nothing Codex-specific to reproduce in these agents.
These agents only work when a shunt gateway is running in front of Claude Code and is configured to route the model ids above to the Codex provider:
-
Run shunt and point Claude Code at it:
export ANTHROPIC_BASE_URL=http://127.0.0.1:3001 # shunt's default bind address
-
Authenticate the ChatGPT/Codex subscription shunt reuses:
codex login # writes ~/.codex/auth.json, which shunt reads + auto-refreshes -
Map the slugs in your
shunt.tomlto the Codex provider (seeshunt.toml.example):# [[routes]] is a TOML array-of-tables: one block per model slug. [[routes]] model = "gpt-5.6-sol" provider = "codex" [[routes]] model = "gpt-5.6-terra" provider = "codex" [[routes]] model = "gpt-5.6-luna" provider = "codex"
For the full setup — auth-file handling, effort, context-window sizing, and troubleshooting — see the Codex configuration reference (site guide ·
docs/codex-configuration.md).
The ChatGPT-account backend only accepts the slugs your account is entitled to. The latest are
gpt-5.6-sol/gpt-5.6-terra/gpt-5.6-luna; older accounts may only havegpt-5.5/gpt-5.4/gpt-5.2. The canonical catalog is openai/codex'smodels.json.
Without a running shunt gateway mapping these ids, Claude Code will send the
gpt-5.6-* model id straight to Anthropic and the request will fail.
/plugin marketplace add pleaseai/shunt
/plugin install shunt-codex@shunt
@shunt-codex:gpt-5.6-sol refactor this module and run the tests
Or set every subagent to a Codex model for a session with
CLAUDE_CODE_SUBAGENT_MODEL=gpt-5.6-sol.
Both require a running shunt gateway with the slug routed to the Codex provider — see Prerequisites. Without it the request fails against Anthropic.
- Codex configuration reference — the full end-to-end setup (Markdown source).
- Effort & Context — reasoning
effort,
count_tokens, and the 372k context window in depth. - Model Discovery — auto-list
Codex models in the
/modelpicker via aclaude--named alias. - ChatGPT / Codex auth spec
— how shunt reads and refreshes
~/.codex/auth.json.
MIT OR Apache-2.0, matching the shunt project.