Using the Codex App
Once the shim and exports are installed and the adapter is built:
- In Codex App, add a Remote connection to the host (or
localhost). The app runs its native SSH probe and bootstrap; the shim routescodex app-serverinto the adapter. - Start a thread and send a prompt. Claude Code runs the turn:
- Agent text and reasoning stream into the conversation.
Bashcalls surface as Codex command approvals.Edit/Write/MultiEditsurface as file-change approvals with a live diff.
- Approve actions in the Codex App UI as usual.
- Disconnecting closes the proxy. Once no turn is active, the daemon idles out and the in-process Claude runtime is reclaimed.
Picking a model
Codex App's model menu stays a model selector only — pick Claude Sonnet, Claude Opus, Claude Haiku, etc. The active Claude Code route (which backend serves the turn) is chosen outside the App with the shim mode; see Backends.
Localhost GUI testing on macOS
For localhost GUI testing, the adapter is launched by SSH and the in-process TS runtime invokes the Claude Code CLI directly — no external daemon to manage. Put these lightweight exports in ~/.zshenv:
bash
REPO="$HOME/path/to/claude-codex"
export PATH="$HOME/bin:$PATH"
export CLAUDE_CODEX_ADAPTER="$REPO/dist/src/adapter.mjs"
export CLAUDE_CODEX_NODE="$(command -v node)"
export CLAUDE_CODEX_CLI="$(command -v claude)"
export CODEX_REAL="$(command -v codex)"npm run acceptance:gui-ssh-localhost drives this exact path end-to-end (real daemon + proxy over SSH, real Claude turn, approval bridge, diff events) and is the closest automated check to the GUI Remote experience.