Skip to content

The Claude Code, Codex and Cursor feature matrix compares the three coding agents capability by capability: surfaces, parallel work, context, guardrails, review, unattended runs and administration. On 2026-10-12 the three share most capabilities by name. They differ in where the agent runs, which controls block an action rather than steer it, and what checks a result before merge.

You are standardising your team on one agent, or adding a second one for CI, and every vendor page lists “subagents, MCP, hooks, cloud agents”. The checkbox columns all come out full. This page is for the developer who has to live with the choice, the tech lead who has to make it repeatable, and the CTO who signs off. It shows which rows really differ, and how to test the rows that decide it in an afternoon.

  • One version-stamped table per capability area, with the exact command, flag or feature name for each tool.
  • The rows that let you prove an agent’s output is correct, separated from the rows that make it faster.
  • A four-step check you run on your own repository, with two copy-paste prompts and the headless command for each tool.
  • The failure modes of choosing from a matrix, and how to recover from each.

Claude Code cells were checked against the installed CLI 2.1.296 and its documentation, and Codex cells against CLI 0.162.1 and its source. Both were checked on 2026-10-12. Cursor cells come from Cursor’s documentation, help pages and versioned release notes as read on 2026-10-12 (Cursor 3.24, released 2026-10-09), except the PR Routing & Approval cell, which comes from Cursor’s docs page as read on 2026-10-13. A Cursor cell that says “not checked for this page” holds no verified fact here yet. Re-check a Cursor cell before you automate against it. Earlier versions of this page were checked on 2026-09-26 against Claude Code 2.1.283 and Codex CLI 0.157.1, and their Cursor cells were read on 2026-08-28 from Cursor’s documentation; the 2026-10-12 check replaces both.

If you have not narrowed the field yet, start with the tool comparison overview.

Two more rules apply to every table below:

  • Steer or enforce. Rules, skills and instruction files steer the model. Hooks, sandboxes and approval policies can block an action. Where a table mixes the two, the row says which it is.
  • Channel matters for Claude Code. Claude Code ships a latest channel (v2.1.302 on 2026-10-17) and a stable channel (v2.1.292), which runs about a week behind. A cell that needs v2.1.293 or later is true on latest only and says so; the other version gates named in this table (v2.1.277 to v2.1.292) hold on both channels.

Prices and context windows are not in these tables. They change monthly, so they live on the models hub and the pricing analysis.

CapabilityClaude Code 2.1.296Codex 0.162.1Cursor 3.24 (docs, 2026-10-12)
Terminal agentCLI (claude)CLI (codex)Cursor CLI (agent)
EditorVS Code and JetBrains extensions (agent panel, diffs, checkpoints)IDE extension; /ide adds your selection and open files to a CLI sessionThe Cursor editor itself, with Tab completion and inline edit
Desktop appmacOS, Windows, Linux (beta)codex app launches the desktop app (it opens the installer if the app is missing)The Cursor editor and the Agents Window, Cursor’s agent-first interface for local, cloud and remote SSH agents
Cloud runsWeb sessions (claude --cloud)Codex cloud (codex cloud, experimental)Cloud Agents, each on its own dedicated machine; self-hosted machines (My Machines and Team pools) since 2026-09-02
Chat and tracker hand-offsSlack (Claude Tag, Public Beta, for Team and Enterprise); others through MCPSlack (@ChatGPT, with Cloud delegation to a Codex Cloud task) and Linear (@Codex); checked 2026-10-12Automations triggered by a schedule, Slack (public channels), Linear, GitHub, GitLab, Bitbucket Cloud, webhooks, Sentry and PagerDuty
CapabilityClaude Code 2.1.296Codex 0.162.1Cursor 3.24 (docs, 2026-10-12)
Plan before codePlan mode (/plan, Shift+Tab, --permission-mode plan)/planPlan Mode (the modes are Agent, Ask, Plan and Debug; Shift+Tab cycles them)
SubagentsBuilt-ins Explore, Plan and general-purpose; custom in .claude/agents//subagents; multi-agent on by defaultSubagents in the editor, the CLI and Cloud Agents, including on their own VMs; custom in .cursor/agents/ (it also reads .claude/agents/); the docs name Explore and Browser as built-ins
Git worktree isolation--worktree [name] (-w)--worktree flag or /worktreeWorktrees (.cursor/worktrees.json customises setup in the Agents Window, the editor and the CLI)
Background sessions--bg, then claude attach, logs, stopcodex agents command centerCloud Agents; agent persist for CLI sessions; Projects (beta since 2026-09-10)
Work until a condition holds/goal, judged by a separate evaluator model each turn/goal (feature goals, stable)/goal, marked “Rolling out” (Cursor docs, checked 2026-10-12)
Repeat a prompt on a cadence/loop bundled skill (alias /proactive)No /loop in Codex 0.162.1 (checked 2026-10-12); use /goal or CI/loop bundled skill since 3.5
Rewind a bad stepCheckpoints and /rewind (Esc Esc)No rewind or undo command in the 0.162.1 slash-command list (checked 2026-10-12); /fork forks the chat. Use Git for file stateCheckpoints, stored locally and separate from Git; restoring one reverts files only

The goal and loop rows link to the /goal guide and the /loop guide.

CapabilityClaude Code 2.1.296Codex 0.162.1Cursor 3.24 (docs, 2026-10-12)
Project instructions (steer)CLAUDE.md; reads AGENTS.md when there is no CLAUDE.md (v2.1.277+, both channels)AGENTS.md (/init creates one)Rules (.cursor/rules/*.mdc); also reads AGENTS.md (root and subdirectories) and CLAUDE.md (always applied)
Keep a file out of reach (enforce)Read deny rules in .claude/settings.json, for example Read(./.env)A permission profile with a deny filesystem rule (still beta on 2026-10-12); --sandbox alone restricts writes, not readsHooks (the beforeReadFile event); a Workspace read-access mode since 3.23 (Cursor docs, Run Modes page)
Extra directories--add-dir--add-dir (writable)Not checked for this page (checked 2026-10-12)
Web searchWebSearch and WebFetch tools--search (live web search)Not checked for this page (checked 2026-10-12)
MCP clientclaude mcp add, .mcp.json; local (stdio) servers negotiate MCP 2026-07-28 by default from v2.1.292 (both channels on 2026-10-17; MCP_PROTOCOL_NEGOTIATION=legacy opts out)codex mcp add, config.toml; mcp_2026_07_28 is still under development and off in 0.162.1 (checked 2026-10-12)MCP (settings open in Customize)
Runs as an MCP serverclaude mcp serveNo; codex mcp-server was removed in 0.154.0, and 0.162.1 has no mcp-server subcommand (checked 2026-10-12)Not checked for this page (checked 2026-10-12)
Skills.claude/skills/; bundled /code-review, /batch, /simplify/skills; sample skills ship with the CLIAgent Skills in .cursor/skills/ and .agents/skills/; it also loads .claude/skills/ and .codex/skills/
Pluginsclaude plugincodex pluginPlugins: Agent Plugins (plugin.json) and Cursor Plugins (.cursor-plugin/plugin.json)

Skills install into all three with the same CLI, npx skills add OWNER/REPO (package skills 1.7.0 on npm, 2026-09-26). Replace OWNER/REPO with the skill’s GitHub repository. Installing and managing skills covers scope and review, and the MCP hub covers servers.

CapabilityClaude Code 2.1.296Codex 0.162.1Cursor 3.24 (docs, 2026-10-12)
Approval modelPermission modes: Manual (default), acceptEdits, plan, auto, dontAsk, bypassPermissionsApproval policy (-a takes only on-request or never in 0.157.1 and 0.162.1) plus automatic review (--approve-for-me)Run modes: Auto-review, Allowlist and Run Everything, under Settings > Agents > Approvals & Execution; Cloud Agents do not use run modes (Cursor docs, checked 2026-10-12)
Starting modeAuto mode for interactive terminal and VS Code sessions (v2.1.283, both channels); claude -p starts in Manual (auto mode on third-party providers or with telemetry off, from v2.1.285)on-requestAuto-review, the recommended default since 3.6 (2026-05-29; Cursor docs, checked 2026-10-12)
OS sandboxSandboxed Bash: macOS Seatbelt, Linux and WSL2 bubblewrap--sandbox read-only, workspace-write, danger-full-access; permission profiles (beta)Auto-review runs shell commands in a sandbox when possible; sandbox.json configures it (Cursor docs, checked 2026-10-12)
Hooks33 events; command, http, mcp_tool, prompt and agent handlers; onFailure (continue or block) on command and HTTP hooks from v2.1.295 (latest only)12 events; need persisted trust before they run20 event names on the hooks page, for example preToolUse, beforeShellExecution, beforeMCPExecution, afterFileEdit and stop
Organisation policyManaged settings: availableModels, permissions.disableAutoMode, deniedModels (v2.1.283)requirements.toml: allow_managed_hooks_only, permission_profile, mcp_serversTeam rules, team model restrictions and managed policies such as AgentRemoteWorkspaceAuthorities (3.24); Privacy Mode can be enforced org-wide

Permissions and sandboxes across the three tools compares the enforcement side in depth.

CapabilityClaude Code 2.1.296Codex 0.162.1Cursor 3.24 (docs, 2026-10-12)
Review in the session/code-review (--fix, --comment)/review/review built-in skill
Review from the shell or CIclaude ultrareview (cloud, multi-agent); managed Code Review (Team and Enterprise; generally available per Anthropic, checked 2026-10-16)codex review, codex exec reviewBugbot on the pull request
Review on the pull requestanthropics/claude-code-action@v1@codex review on GitHub and GitLab; openai/codex-action@v1Bugbot (configured in Automations); the Rollouts bot monitors each pull request through to production (Teams and Enterprise)
Security review/security-review@codex security reviewSecurity Agents (Security Reviewer on pull requests, Vulnerability Scanner on a schedule); the Security Review bot (Teams and Enterprise); /review-security skill
Reviewer routing and approvalThrough your own CI and CODEOWNERSThrough your own CI and CODEOWNERSPR Routing & Approval (can approve low-risk PRs; Cursor docs, read 2026-10-13)

Unattended runs: headless, CI, schedules and SDKs

Section titled “Unattended runs: headless, CI, schedules and SDKs”
CapabilityClaude Code 2.1.296Codex 0.162.1Cursor 3.24 (docs, 2026-10-12)
Headless runclaude -pcodex exec (alias e)Print mode (agent -p)
Machine-readable output--output-format json or stream-json; --json-schema--json (JSONL events); --output-schema FILE; -o FILE (--output-last-message, the final message only)--output-format text is documented; other formats not checked for this page (checked 2026-10-12)
GitHub Actionsanthropics/claude-code-action@v1openai/codex-action@v1Not checked for this page (checked 2026-10-12)
Scheduled runsRoutines (/schedule, research preview)Scheduled tasks, and local automations in the desktop appAutomations (a cron schedule is one trigger)
SDKClaude Agent SDK: npm @anthropic-ai/claude-agent-sdk 0.3.296, PyPI claude-agent-sdk 0.2.165Codex SDK: npm @openai/codex-sdk 0.162.1, PyPI openai-codex 0.162.1npm @cursor/sdk 1.0.37, PyPI cursor-sdk 1.0.37
Start a cloud run from codeRoutines with an API trigger (research preview)codex cloud (experimental)Cloud Agents API and webhooks; in the CLI, a leading & hands a message to a Cloud Agent
CapabilityClaude Code 2.1.296Codex 0.162.1Cursor 3.24 (docs, 2026-10-12)
Model familiesAnthropic models; also via Amazon Bedrock, Google Cloud, Microsoft Foundry, Claude Platform on AWS and LLM gatewaysOpenAI models; also Amazon Bedrock and local models through --oss (LM Studio, Ollama)Cursor’s own models (the Cursor Models pool: Grok 4.7, Grok 4.6, Grok 4.5 and Composer 2.5) and third-party models in one picker, billed at API price
Default modelClaude Opus 5.5 from v2.1.280 (both channels; Microsoft Foundry still defaults to Sonnet 4.5, which retires 2026-11-30 on Anthropic-operated platforms)GPT-6.1 Sol, the bundled default since CLI 0.159.1 (2026-09-29); low effort in CodexNo single default model; Hobby uses Auto (Cursor, checked 2026-10-12)
Switch mid-session/model/modelModel picker
Plans and seat pricesPricing analysisPricing analysisPricing analysis

Start on each tool’s default model and raise effort before you switch model. The models hub holds the context windows, prices and the evidence for that rule.

Which rows actually differ between the tools?

Section titled “Which rows actually differ between the tools?”

Most rows now read “yes” in all three columns. These are the ones where the difference changes how you work:

  • Where the loop lives. Cursor keeps the agent in the editor, next to Tab and inline edit, or in the Agents Window. Claude Code starts in the terminal and runs the same session in the IDE, desktop and web. Codex spreads one agent across the CLI, the IDE extension, the desktop app, cloud tasks and Slack and Linear hand-offs.
  • Enforcement depth. Claude Code documents 33 hook events against Codex’s 12, with five handler types, and adds Read deny rules. Codex pairs an OS sandbox with an approval policy and a reviewer model that decides sandbox-boundary approvals. Cursor’s hooks page lists 20 event names, and its run modes are Auto-review, Allowlist and Run Everything (Cursor docs, checked 2026-10-12).
  • Review on the pull request. Codex reviews on a mention (@codex review) without a separate workflow file. Cursor adds Bugbot, Security Agents, the Rollouts and Security Review bots (Teams and Enterprise) and reviewer routing. Claude Code’s pull-request review runs through its GitHub Action or managed Code Review.
  • Unattended surfaces. All three run headless and on a schedule. Claude Code can also serve as an MCP server; Codex removed that in 0.154.0, and 0.162.1 has no mcp-server subcommand (checked 2026-10-12).

Which rows let you prove the agent’s output is correct?

Section titled “Which rows let you prove the agent’s output is correct?”

A feature that makes the agent faster earns nothing until a gate checks the result. Four rows carry the proof, and each tool fills them differently:

GateWhat it provesClaude CodeCodexCursorWho signs off
Post-edit hook runs tests and typesEvery edit keeps the build greenPostToolUse hookHook (trusted)afterFileEdit hookThe developer, from the hook log
Headless run with a schemaThe agent’s report is machine-checkable--json-schema--output-schemaPrint mode, then parseCI
Independent review passA second model reads the diff, not the author/code-review, Code Review@codex reviewBugbotThe reviewer approves findings, not every line
Sandbox during the runThe agent could not touch what it should notSandboxed Bash, deny rules--sandbox workspace-write (writes confined to the workspace)Run modes (Auto-review sandboxes shell commands when possible)The tech lead, once, in config

Keep the merge decision on your own test suite and CI, not on the review bot’s comment. Protecting the oracle explains why the agent must not be able to edit the tests that judge it, and reviewing agent pull requests covers what the human still reads.

How do you check the matrix against your own repository?

Section titled “How do you check the matrix against your own repository?”

A matrix tells you a feature exists. Only a run on your code tells you whether it works for you. This check takes an afternoon. Before a team-wide purchase, run the full bake-off protocol, which replays 10 to 20 of your closed issues through each candidate.

  1. Pick the rows that decide. Choose three to five rows from the tables above that your team cannot work without. For most teams they are a headless mode for CI, a hook that can block, and review on the pull request.

  2. Confirm the version you run. Features differ by version and, for Claude Code, by release channel. In a terminal:

    Terminal window
    claude --version && claude --help | grep -E -- '--worktree|--json-schema|--bg'
    codex --version && codex features list | grep -E '^(goals|hooks|multi_agent) '

    For Cursor, run agent --version for the CLI. For the editor, open the About dialog and compare it with Cursor’s versioned release notes (cursor.com/docs/release-notes, 3.24 on 2026-10-09).

  3. Ask each agent to prove its own rows. Paste the first prompt below into each tool, in the repository you plan to use it on. The answer must cite command output or a file, never the agent’s memory.

  4. Run one bounded task headless and compare the gates. Use the second prompt as the task file, run it in a throwaway worktree per tool, and apply the same gate to each result. Save the second prompt as trial-task.txt next to your repository directory (one level up from the repo root), and save the report schema below beside it as trial-report.schema.json. Both headless commands pass it, so the report is validated against the schema rather than trusted to the prompt.

trial-report.schema.json
{"type": "object", "additionalProperties": false,
"required": ["files_changed", "tests_command", "tests_passed", "handlers_skipped"],
"properties": {"files_changed": {"type": "array", "items": {"type": "string"}},
"tests_command": {"type": "string"}, "tests_passed": {"type": "boolean"},
"handlers_skipped": {"type": "array", "items": {"type": "object", "additionalProperties": false,
"required": ["file", "reason"], "properties": {"file": {"type": "string"}, "reason": {"type": "string"}}}}}}

Run the trial task the same way in each tool, one worktree each, so the three runs cannot collide. The commands differ; the gate does not.

A new worktree checks out tracked files only, so it has no node_modules, and neither headless run can install them: the Claude Code allowlist permits only npm test, and the Codex workspace-write sandbox has no network access by default. Each block below therefore runs npm ci in your own shell before the agent starts. npm ci installs exactly what the committed package-lock.json pins; with another package manager, use its frozen-lockfile install.

Terminal window
git worktree add ../trial-claude && cd ../trial-claude && npm ci
claude -p --output-format json \
--json-schema "$(cat ../trial-report.schema.json)" \
--permission-mode dontAsk \
--allowedTools "Read Edit Write Bash(npm test *)" < ../trial-task.txt > ../claude-run.json

claude -p starts in Manual mode (auto mode on third-party providers or with telemetry off, from v2.1.285, where a classifier decides), so the command passes --permission-mode dontAsk: it denies everything that would prompt (file reads in the working directories and read-only Bash commands still run), and --allowedTools adds the commands the run needs.

Then apply one gate to all three worktrees. Run it from the repository root, where BASE is the commit the worktrees started from:

Terminal window
BASE=$(git rev-parse HEAD)
for d in ../trial-claude ../trial-codex ../trial-cursor; do
echo "== $d"
(cd "$d" && npm test && npx tsc --noEmit && git add -A && git diff --cached --stat "$BASE" -- tests/ '*test*.config.*' package.json)
done

A run passes when the tests and type check pass, the final git diff prints nothing (no changes to tests/, test configuration or package.json, tracked or untracked), and the agent’s JSON report matches the diff. You compare three results against one gate; you do not read three diffs line by line.

SituationStart withWhy, from the matrix
The team works in a VS Code-style editor and wants to steer each changeCursorTab, inline edit, Plan Mode and the agent in one window
The work should run with less supervision, gated by hooks and CIClaude Code33 hook events, deny rules, claude -p with a schema
One agent across desktop, CLI, IDE, cloud tasks, Slack and LinearCodexMulti-surface by design; review on @codex review
Pull-request review and reviewer routing matter mostCursor or CodexBugbot and PR routing, or review on a mention
An editor agent for interactive work plus a CLI agent in CITwo toolsBoth keep instructions in files; see the tool map

For a head-to-head on two tools, read Cursor vs Claude Code or Codex vs Cursor and Claude Code. For agents beyond these three, see the coding-agent landscape and the GitHub Copilot page.

What goes wrong when you choose a tool from a feature matrix?

Section titled “What goes wrong when you choose a tool from a feature matrix?”
  • The matrix is stale by the time you read it. Claude Code ships roughly one release a day (13 releases from 2.1.284 to 2.1.296 between 2026-09-28 and 2026-10-09), and Codex went from 0.153.4 to 0.157.1 between 2026-09-04 and 2026-09-26, then to 0.162.1 across ten stable releases by 2026-10-09. Recovery: run step 2 above and trust your --help output over any table, including this one.
  • A feature exists, but not on your channel or plan. On 2026-10-17 both Claude Code channels have the Opus 5.5 default and AGENTS.md reading (stable is v2.1.292), but a feature from v2.1.293 or later, such as the haiku alias for Haiku 5.5 (v2.1.293), is on latest only. Recovery: check claude --version and the autoUpdatesChannel setting before you file a bug.
  • Two features share a name but not a guarantee. A worktree isolates files, not your database, secrets or cloud account. Rules steer; hooks can block. Recovery: for each row you rely on, ask “can this stop the action, or only ask the model not to?”
  • You build CI on a preview. Routines, codex cloud and Cursor’s /goal are marked research preview, experimental or rolling out (checked 2026-10-12). Recovery: keep the scheduled job in your own CI until the feature is generally available, and pin the CLI version in the job.
  • A Codex hook silently does not run in CI. Codex hooks need persisted trust, and a fresh runner has none. Recovery: confirm the hook’s output appears in the job log. Use --dangerously-bypass-hook-trust only in automation that already vets the hook source.
  • Review becomes the gate. A review bot’s comment is advice. Recovery: require tests, types and your own CI to pass before merge, and treat review findings as input to that decision.

Did this guide help you?

One tap, no sign-in.

not at all a lot

Frequently asked questions

Which of Claude Code, Codex and Cursor has the most features?

None of them wins every row. On 2026-10-12 all three have subagents, worktrees, skills, hooks, MCP, a headless mode, an SDK and scheduled runs (Routines in the cloud for Claude Code, Automations in the cloud for Cursor, scheduled tasks and local automations in the desktop app for Codex). They differ in where the agent runs, how guardrails are enforced and what review runs on a pull request, so test the rows that decide your choice on your own repository.

Which tool runs best in CI?

All three have a headless mode: claude -p with --output-format json, codex exec with --json or --output-schema, and Cursor's CLI print mode (agent -p). Claude Code and Codex also ship GitHub Actions (anthropics/claude-code-action@v1, openai/codex-action@v1). Choose on the gate your CI runs after the agent, not on the agent flag.

Do all three tools support hooks?

Yes. Claude Code documents 33 hook events and Codex 12; Cursor's hooks page lists 20 event names, such as preToolUse, beforeShellExecution and afterFileEdit (checked 2026-10-12). Codex hooks need persisted trust before they run, which matters on a fresh CI runner.

Which project instruction file does each tool read?

Claude Code reads CLAUDE.md and, from v2.1.277 (both release channels on 2026-10-12), AGENTS.md when a project has no CLAUDE.md. Codex reads AGENTS.md. Cursor uses Rules (.cursor/rules/*.mdc), reads AGENTS.md in the project root and in subdirectories, and reads CLAUDE.md the same way (checked 2026-10-12).

Where are the prices and context windows?

Not on this page. Context windows and prices live on the models hub, and plan prices on the pricing analysis page. The default-model row here is version-stamped; re-check it with /model.

Primary sources & references