wikis / Codex / wiki / syntheses / surface-picker.md view as markdown
Surface Picker: App vs CLI vs IDE Extension vs Web vs Cloud Tasks
All surfaces run the same underlying Codex agent and share configuration (config.toml, AGENTS.md, skills), so this is a question of workflow fit, not capability tiers. Local surfaces (app, CLI, IDE) run sandboxed threads on your machine; web/cloud run in isolated cloud environments cloned from GitHub.
Comparison
| Surface | What it is | Platforms | Auth | Distinctive strengths |
|---|---|---|---|---|
| Codex app (codex app) | Desktop app for parallel threads | macOS, Windows (Linux waitlist) | ChatGPT or API key | Built-in worktrees + Handoff, automations, review pane + Git ops, integrated terminal, in-app browser, computer use (macOS), Appshots, image generation, IDE-extension sync |
| Codex CLI (codex cli) | Open-source Rust terminal agent | macOS, Windows (native PowerShell sandbox or WSL2), Linux | ChatGPT or API key | Scriptable codex exec (non interactive exec), full slash-command set, -c config overrides, subagents, transcript-friendly, launches cloud tasks from terminal |
| IDE extension (codex ide extension) | VS Code (+Cursor/Windsurf forks) and JetBrains integration | macOS, Windows, Linux | ChatGPT, API key, or JetBrains AI subscription | Auto-includes open files and selections as context; Chat/Agent/Agent (Full Access) modes; cloud delegation + apply diffs locally |
| Codex web (codex web) | chatgpt.com/codex, cloud-only | Browser, iOS | ChatGPT only | Background/parallel tasks in cloud environments; PRs from results; no local machine needed |
| Cloud tasks (cloud tasks) | Cloud execution reachable from web, IDE, CLI, GitHub | n/a | ChatGPT only | Isolated environment per task, repo cloned from GitHub, parallel fan-out, @codex on issues/PRs |
Analysis
- Context acquisition differs most. The IDE extension automatically includes open files and selected text; in the CLI you must
@-mention or/mentionfiles; web tasks only see what's in the GitHub repo and environment setup. This is the documented reason the same prompt performs differently across surfaces. - Cloud requires GitHub + ChatGPT sign-in. Codex web setup is "connect your GitHub account"; cloud threads clone the repo, so uncommitted local work doesn't exist there unless you delegate from IDE/CLI, which carries over thread context and local working state ("delegate tasks from your local machine").
- The app is the orchestration layer. Worktrees, Handoff (move a thread Local ↔ Worktree), automations, and Triage inbox exist only in the app — it's positioned for running many threads in parallel without file conflicts.
- The CLI is the automation/composition layer. Only the CLI offers
codex execfor scripting and CI (non interactive exec), making it the surface for pipelines, pre-commit hooks, and the codex sdk. - Versions can drift between surfaces. The app bundles its own CLI build; a feature may land in the standalone CLI first. Compare
codex --versionagainst/Applications/Codex.app/Contents/Resources/codex --versionwhen behavior differs. - API-key users lose the cloud column entirely. No cloud tasks, GitHub code review, or Slack integration with API-key auth — see auth plan picker.
Recommendations
Pick by use case:
- Interactive feature work in a codebase you have open → IDE extension (free context from open files; selection-scoped tests/refactors).
- Tight terminal loop: repro a bug, run commands, keep a transcript → CLI.
- Scripting, CI, batch jobs, building products on Codex → CLI
codex exec/ SDK. - Many parallel workstreams, scheduled background jobs, reviewing+shipping from one window → Codex app (worktrees + automations + review pane).
- Long tasks you want off your machine, work from any device, PR-shaped output → Codex web / cloud tasks.
- Careful design + bulk implementation → hybrid: plan locally in IDE/CLI, then delegate milestones to cloud (documented "Delegate refactor to the cloud" recipe in workflow recipes).
- Repo triage without leaving GitHub →
@codexon issues/PRs via github integrations. - On Windows with heavy shell usage → CLI native PowerShell with the Windows sandbox, or WSL2 for Linux-native tooling; see sandbox approval guide.
