Claude Code and Codex are both strong, and they are strong at different things. Lanes lets you run both, so you pick per task instead of committing to one tool for everything.
How Lanes does it
- Either agent, per session. Start a session as Claude Code or Codex, and switch a session's CLI anytime. The new-session picker opens a Session Settings flyout with CLI, Model, Effort, and Flags in one place, and a pill shows the current selection at a glance,
Claude Code / claude-opus-4-7 / maxfor example. - Real CLIs. Each runs as its official command in a real terminal, on your existing subscription for that provider. A session is a real PTY, so Claude Code behaves exactly as it does in your own terminal, and so does Codex. Gemini CLI is available too, and Cmd+T opens a bare terminal when you want a plain shell.
- Run them together. Put them on different issues in parallel, or as sibling sessions on the same issue, and compare the results.
The model picker lists whatever models the selected CLI supports, and Effort maps to the reasoning budget where the CLI exposes one. Repo-wide defaults come from Settings: a default CLI under General and persistent flags under CLI Flags, pre-filled into every new session and overridable per session. Lanes captures what each session actually launched with, so you can check the side panel later instead of guessing which model wrote which diff.
For a direct comparison, spawn a sibling session on the same issue and give it a different CLI or model; each sibling keeps its own transcript, status, and metrics, so you review both approaches and keep the diff you prefer. For full isolation, create two issues for the same task and let each get its own worktree and branch, then compare the branches.
Why it matters
You are not locked into one vendor's agent. Claude Code stays Claude Code, Codex stays Codex, and Lanes is the workspace around both. When a new CLI agent matters to your work, you adopt it without changing how you work.
The comparisons in Lanes with Claude Code and Lanes with Codex go deeper on what Lanes adds around each CLI. The short version is that it adds the same things to both, which is exactly why switching between them stays cheap.
Set it up
- Install both CLIs and log in to each. Lanes launches the official command with your existing auth, whichever you pick.
- Set a repo default under Settings, then General, so most sessions start with the CLI you use most.
- Override per session. Open the Session Settings flyout when starting a session and flip the CLI, model, or effort for that run only.
- Race them when it matters. Same instructions, two sessions, two diffs; merge the one you prefer.
Where this breaks without Lanes
Running two vendors' agents by hand means two terminal setups, two sets of flags in your shell history, and no record of which model produced which change. The moment you want a fair comparison on one task, you are hand-building a branch for each. One picker, per-session settings capture, and a worktree per issue make dual-CLI work routine.
Further reading
- Working with sessions: the Session Settings flyout and sibling sessions.
- Settings: repo-default CLI, flags, and environment variables.
- Worktree management: isolation when both agents touch the same repo.
- Lanes with Claude Code: what Lanes adds around the
claudeCLI. - Lanes with Codex: the same workspace around the Codex CLI.