Skip to main content
Continuum integrates Codex through its app-server harness. The daemon starts and manages Codex harness sessions; Claude PTY is not used for Codex.

Requirements

The codex CLI must be installed. No separate token is needed in Continuum — Codex manages its own auth state and Continuum reads the local session files.

Plan mode

Codex plan mode maps to read-only sandboxing: Continuum spawns Codex with -s read-only. When you approve a plan, the daemon respawns Codex in workspace-write mode. Codex does not emit an ExitPlanMode event, so Continuum injects a synthetic planText so the Plan card renders the Approve button correctly. The approve-plan respawn uses cursor-agent or claude harness conventions depending on which agent is active. For Codex, the respawn uses the Codex workspace-write flags.

Reasoning effort

Pass reasoning effort to Codex via -c model_reasoning_effort="...". The effort dial in the session header maps to low, medium, high, xhigh, and max.

Usage analytics

Token events are parsed from ~/.codex/sessions/**/*.jsonl. Codex JSONL uses cumulative token counts; the parser converts these to per-event deltas before aggregation. Events are deduplicated and priced with the LiteLLM snapshot. Live rate-limit state is read directly from session files. No API token is needed in Continuum for Codex quota gauges.

Respawn lineage

Approve-plan kills the plan-mode Codex process and spawns a fresh rollout with a new JSONL file and a new Codex session ID. Continuum’s SessionFileResolver tracks this lineage:
  • resolve(session:) returns the cached JSONL URL if still valid, or scans ~/.codex/sessions/ for the newest rollout in the session’s activity window (createdAt … lastEventAt + 5min).
  • record(sessionId:rolloutURL:) caches explicit spawns.
  • invalidate(sessionId:) is called by the approve-plan handler to force a rescan for the next rollout.
This prevents the daemon from stranding on the pre-approve JSONL file when Codex’s approve-plan boundary creates a new session ID.

Sub-agent filtering

Codex can spawn multiple sub-agent worker threads for a single user turn. Continuum reads payload.thread_source and payload.agent_role from each rollout and skips rollouts tagged as subagent in the sidebar. Parent rollouts still appear as normal Recent rows.

Chat rendering

Continuum parses Codex’s response_item payload shapes — message, function_call, function_call_output, and reasoning — into the same ChatMessage model used for Claude sessions. Codex’s auto-injected <environment_context> user turns and role: developer system wrappers are filtered out. Tool-run summaries use Codex’s native names (cmd, brief, apply_patch variants).