Cursor vs Claude Code vs Codex: feature comparison matrix
PLThe 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.
What this capability matrix gives you
Section titled “What this capability matrix gives you”- 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.
How to read the matrix
Section titled “How to read the matrix”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
latestchannel (v2.1.302 on 2026-10-17) and astablechannel (v2.1.292), which runs about a week behind. A cell that needs v2.1.293 or later is true onlatestonly 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.
Which capabilities does each tool have?
Section titled “Which capabilities does each tool have?”Where the agent runs
Section titled “Where the agent runs”| Capability | Claude Code 2.1.296 | Codex 0.162.1 | Cursor 3.24 (docs, 2026-10-12) |
|---|---|---|---|
| Terminal agent | CLI (claude) | CLI (codex) | Cursor CLI (agent) |
| Editor | VS Code and JetBrains extensions (agent panel, diffs, checkpoints) | IDE extension; /ide adds your selection and open files to a CLI session | The Cursor editor itself, with Tab completion and inline edit |
| Desktop app | macOS, 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 runs | Web 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-offs | Slack (Claude Tag, Public Beta, for Team and Enterprise); others through MCP | Slack (@ChatGPT, with Cloud delegation to a Codex Cloud task) and Linear (@Codex); checked 2026-10-12 | Automations triggered by a schedule, Slack (public channels), Linear, GitHub, GitLab, Bitbucket Cloud, webhooks, Sentry and PagerDuty |
Plan, build and run work in parallel
Section titled “Plan, build and run work in parallel”| Capability | Claude Code 2.1.296 | Codex 0.162.1 | Cursor 3.24 (docs, 2026-10-12) |
|---|---|---|---|
| Plan before code | Plan mode (/plan, Shift+Tab, --permission-mode plan) | /plan | Plan Mode (the modes are Agent, Ask, Plan and Debug; Shift+Tab cycles them) |
| Subagents | Built-ins Explore, Plan and general-purpose; custom in .claude/agents/ | /subagents; multi-agent on by default | Subagents 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 /worktree | Worktrees (.cursor/worktrees.json customises setup in the Agents Window, the editor and the CLI) |
| Background sessions | --bg, then claude attach, logs, stop | codex agents command center | Cloud 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 step | Checkpoints 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 state | Checkpoints, 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.
Context, instructions and extensions
Section titled “Context, instructions and extensions”| Capability | Claude Code 2.1.296 | Codex 0.162.1 | Cursor 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 reads | Hooks (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 search | WebSearch and WebFetch tools | --search (live web search) | Not checked for this page (checked 2026-10-12) |
| MCP client | claude 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 server | claude mcp serve | No; 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 CLI | Agent Skills in .cursor/skills/ and .agents/skills/; it also loads .claude/skills/ and .codex/skills/ |
| Plugins | claude plugin | codex plugin | Plugins: 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.
Guardrails: what can block an action
Section titled “Guardrails: what can block an action”| Capability | Claude Code 2.1.296 | Codex 0.162.1 | Cursor 3.24 (docs, 2026-10-12) |
|---|---|---|---|
| Approval model | Permission modes: Manual (default), acceptEdits, plan, auto, dontAsk, bypassPermissions | Approval 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 mode | Auto 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-request | Auto-review, the recommended default since 3.6 (2026-05-29; Cursor docs, checked 2026-10-12) |
| OS sandbox | Sandboxed 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) |
| Hooks | 33 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 run | 20 event names on the hooks page, for example preToolUse, beforeShellExecution, beforeMCPExecution, afterFileEdit and stop |
| Organisation policy | Managed settings: availableModels, permissions.disableAutoMode, deniedModels (v2.1.283) | requirements.toml: allow_managed_hooks_only, permission_profile, mcp_servers | Team 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.
Review and verification
Section titled “Review and verification”| Capability | Claude Code 2.1.296 | Codex 0.162.1 | Cursor 3.24 (docs, 2026-10-12) |
|---|---|---|---|
| Review in the session | /code-review (--fix, --comment) | /review | /review built-in skill |
| Review from the shell or CI | claude ultrareview (cloud, multi-agent); managed Code Review (Team and Enterprise; generally available per Anthropic, checked 2026-10-16) | codex review, codex exec review | Bugbot on the pull request |
| Review on the pull request | anthropics/claude-code-action@v1 | @codex review on GitHub and GitLab; openai/codex-action@v1 | Bugbot (configured in Automations); the Rollouts bot monitors each pull request through to production (Teams and Enterprise) |
| Security review | /security-review | @codex security review | Security Agents (Security Reviewer on pull requests, Vulnerability Scanner on a schedule); the Security Review bot (Teams and Enterprise); /review-security skill |
| Reviewer routing and approval | Through your own CI and CODEOWNERS | Through your own CI and CODEOWNERS | PR 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”| Capability | Claude Code 2.1.296 | Codex 0.162.1 | Cursor 3.24 (docs, 2026-10-12) |
|---|---|---|---|
| Headless run | claude -p | codex 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 Actions | anthropics/claude-code-action@v1 | openai/codex-action@v1 | Not checked for this page (checked 2026-10-12) |
| Scheduled runs | Routines (/schedule, research preview) | Scheduled tasks, and local automations in the desktop app | Automations (a cron schedule is one trigger) |
| SDK | Claude Agent SDK: npm @anthropic-ai/claude-agent-sdk 0.3.296, PyPI claude-agent-sdk 0.2.165 | Codex SDK: npm @openai/codex-sdk 0.162.1, PyPI openai-codex 0.162.1 | npm @cursor/sdk 1.0.37, PyPI cursor-sdk 1.0.37 |
| Start a cloud run from code | Routines 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 |
Models and administration
Section titled “Models and administration”| Capability | Claude Code 2.1.296 | Codex 0.162.1 | Cursor 3.24 (docs, 2026-10-12) |
|---|---|---|---|
| Model families | Anthropic models; also via Amazon Bedrock, Google Cloud, Microsoft Foundry, Claude Platform on AWS and LLM gateways | OpenAI 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 model | Claude 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 Codex | No single default model; Hobby uses Auto (Cursor, checked 2026-10-12) |
| Switch mid-session | /model | /model | Model picker |
| Plans and seat prices | Pricing analysis | Pricing analysis | Pricing 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
Readdeny 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-serversubcommand (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:
| Gate | What it proves | Claude Code | Codex | Cursor | Who signs off |
|---|---|---|---|---|---|
| Post-edit hook runs tests and types | Every edit keeps the build green | PostToolUse hook | Hook (trusted) | afterFileEdit hook | The developer, from the hook log |
| Headless run with a schema | The agent’s report is machine-checkable | --json-schema | --output-schema | Print mode, then parse | CI |
| Independent review pass | A second model reads the diff, not the author | /code-review, Code Review | @codex review | Bugbot | The reviewer approves findings, not every line |
| Sandbox during the run | The agent could not touch what it should not | Sandboxed 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.
-
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.
-
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 --versionfor 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). -
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.
-
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.txtnext to your repository directory (one level up from the repo root), and save the report schema below beside it astrial-report.schema.json. Both headless commands pass it, so the report is validated against the schema rather than trusted to the prompt.
{"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.
git worktree add ../trial-claude && cd ../trial-claude && npm ciclaude -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.jsonclaude -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.
git worktree add ../trial-codex && cd ../trial-codex && npm cicodex exec --json --sandbox workspace-write \ --output-schema ../trial-report.schema.json - < ../trial-task.txt > ../codex-run.jsonlThe - reads the prompt from stdin, and workspace-write confines writes to the worktree and blocks network access, which is why the install happens before the run.
Create the worktree and install dependencies the same way (git worktree add ../trial-cursor && cd ../trial-cursor && npm ci), open it in Cursor, and paste the task into Agent. For a scripted run, use the Cursor CLI’s print mode (agent -p, Cursor’s CLI docs, checked 2026-10-12).
Then apply one gate to all three worktrees. Run it from the repository root, where BASE is the commit the worktrees started from:
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)doneA 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.
Which tool fits which situation?
Section titled “Which tool fits which situation?”| Situation | Start with | Why, from the matrix |
|---|---|---|
| The team works in a VS Code-style editor and wants to steer each change | Cursor | Tab, inline edit, Plan Mode and the agent in one window |
| The work should run with less supervision, gated by hooks and CI | Claude Code | 33 hook events, deny rules, claude -p with a schema |
| One agent across desktop, CLI, IDE, cloud tasks, Slack and Linear | Codex | Multi-surface by design; review on @codex review |
| Pull-request review and reviewer routing matter most | Cursor or Codex | Bugbot and PR routing, or review on a mention |
| An editor agent for interactive work plus a CLI agent in CI | Two tools | Both 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
--helpoutput 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.mdreading (stableis v2.1.292), but a feature from v2.1.293 or later, such as thehaikualias for Haiku 5.5 (v2.1.293), is onlatestonly. Recovery: checkclaude --versionand theautoUpdatesChannelsetting 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 cloudand Cursor’s/goalare 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-trustonly 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.
Where to go next after the feature matrix
Section titled “Where to go next after the feature matrix”Did this guide help you?
One tap, no sign-in.
What will you do with it?
How did it read?
What got in the way? Pick any that apply
Your role?
Thanks. I read every answer. Michał Jaskólski
Did this guide help?
One tap each. Close whenever you like.
no sign-in
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.