Skip to main content

Codex bridge

alc --codex <agent> starts a loopback adapter and points one agent's session at it. One codex login serves all eight.

codex login
alc --codex claude
alc --codex opencode # or pi, copilot, goose, qwen, kimi
AgentWhat the bridge serves itHow it picks a model
Claude CodeAnthropic Messages/model picker, mid-session
OpenCode, Pi, Kimi Code CLIOpenAI Responsesone model, chosen at launch
Copilot CLI, Goose, Qwen CodeOpenAI Chat Completionsone model, chosen at launch

Claude Code is the only one that can switch mid-session, because it sends the model and effort with every request, so alc pins neither on the adapter. The others are wired through the same mechanism each already uses for the openai kind, pointed at the adapter with a placeholder key — see Agents for what each one receives.

Models

Claude Code lists these in its own /model picker:

ModelUse caseCodex default effort
gpt-6-astraGPT-6. Most capable; complex, demanding workmedium
gpt-6-solGPT-6. Everyday coding and agentic work; recommended starting pointmedium
gpt-6-lunaGPT-6. Fast and the cheapest; quick fixes and high-volume workmedium
gpt-5.6-solPrevious generation; complex professional worklow
gpt-5.6-terraPrevious generation; balanced everyday codingmedium
gpt-5.6-lunaPrevious generation; fast, affordable workmedium

The bridge keeps no allowlist: whatever slug it is handed goes upstream and chatgpt.com decides, so a model alc does not track is still reachable with --model. That is why a new model works on the day Codex ships it rather than on the day alc catches up.

Every Claude model becomes a Codex model

Under alc --codex claude no request reaches a Claude model: the /model picker lists these six and nothing else, every alias Claude Code has — opus, sonnet, haiku, fable, best, opusplan — lands on one of them, and a Claude model named in full is answered by the Codex model of the same tier. Claude Code's own background work goes the same way, so a title or a summary is Codex quota rather than a request to Anthropic. Background sessions has the whole table, alias by alias.

Effort

/model's left and right arrows move the effort slider; /effort sets one directly. Every model takes low, medium, high, xhigh or max. Higher effort gives the model more room to reason, and uses more of your quota.

Every model but the two Lunas also offers ultra, which native alc codex can reach but the bridge cannot. alc clamps it to max and says so at launch, rather than letting the request be refused mid-session.

Starting somewhere else

alc --codex claude --model gpt-6-luna --effort low
alc --codex claude --model gpt-6-sol --effort medium --save

--save stores both on the provider profile. Without them a session starts on the profile's values, then the selected Codex profile, then the model's own default. Anything after -- goes to the agent untouched and wins.

A model chosen with /model applies to that session only; the next launch starts from the profile again.

Your plain claude still reaches Anthropic

Claude Code writes the model you settle on to ~/.claude/settings.json as your default for new sessions, and every session on the machine reads that file — including the ones alc did not start, which have no adapter in front of them and would ask Anthropic for a GPT model.

alc reads that one key before the launch and puts it back when the session exits. Nothing else in the file is touched, and nothing is written at all unless the value it finds is one only the adapter can serve.

Two cases it leaves alone. A real Claude model you switched to mid-session is your choice about your own default, so it stands. A session killed outright runs no cleanup — alc doctor names the file and the line, and the next bridged launch clears it.

Do not try to isolate this with CLAUDE_CONFIG_DIR: that moves Claude Code's whole configuration home, login included.

Model catalog

Synced from your ChatGPT account — the same party the adapter posts every turn to — so a model that account can drive is offered even when the installed Codex CLI has never heard of it. codex debug models is the fallback when that fetch cannot happen, and the catalog bundled into the binary is a floor neither of them can drop below: a synced list may add models, never remove one. The sync runs once a day, and again as soon as Codex is upgraded.

alc models
alc models --refresh
alc models --json

The synced context window reaches Claude Code as CLAUDE_CODE_MAX_CONTEXT_TOKENS, so a GPT model compacts at the real Codex limit rather than the 200k Claude Code assumes for an ID it does not know.

How it works

The bridge is alc's own code. For Claude Code it runs as a background process of its own on a loopback port it keeps (alc bridge), because a session moved into the background outlives the alc that started it — see Background sessions. For every other agent it runs inside the alc process on a random port, serving only the agent it launched and stopping when that session ends. It reads and may refresh ~/.codex/auth.json; no credential is ever copied into alc's own configuration.

Third-party compatibility layer

This adapter is not an official OpenAI or Anthropic integration. Review the project's THIRD_PARTY.md and your provider terms before using subscription credentials through it.