<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ezra Zhao</title>
    <description>The latest articles on DEV Community by Ezra Zhao (@ezrazhao).</description>
    <link>https://dev.to/ezrazhao</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4167549%2F163ceacd-453a-4419-ab24-108176eb332d.jpg</url>
      <title>DEV Community: Ezra Zhao</title>
      <link>https://dev.to/ezrazhao</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ezrazhao"/>
    <language>en</language>
    <item>
      <title>Claude Code vs Codex CLI vs Cursor: An Honest Field Guide for Working Developers</title>
      <dc:creator>Ezra Zhao</dc:creator>
      <pubDate>Wed, 07 Oct 2026 01:04:24 +0000</pubDate>
      <link>https://dev.to/ezrazhao/claude-code-vs-codex-cli-vs-cursor-an-honest-field-guide-for-working-developers-pm3</link>
      <guid>https://dev.to/ezrazhao/claude-code-vs-codex-cli-vs-cursor-an-honest-field-guide-for-working-developers-pm3</guid>
      <description>&lt;h1&gt;
  
  
  Claude Code vs Codex CLI vs Cursor: An Honest Field Guide for Working Developers
&lt;/h1&gt;

&lt;p&gt;I use all three. Not because I enjoy collecting tools, but because they genuinely think differently — and picking the wrong one for a task costs real time.&lt;/p&gt;

&lt;p&gt;Last week I sat down and turned my notes into a proper cheatsheet repo: &lt;a href="https://github.com/Ezra-Zhao/ai-coding-cheatsheet" rel="noopener noreferrer"&gt;ai-coding-cheatsheet&lt;/a&gt;. Every command, shortcut, and config option in it was checked line by line against the official docs on 2026-10-06, and anything I couldn't verify got deleted rather than guessed at. These tools move fast, so treat anything version-sensitive as "check the official docs."&lt;/p&gt;

&lt;p&gt;This article is the companion piece: not the command list, but the &lt;em&gt;judgment&lt;/em&gt; — what each tool is actually for, and the habits that make them work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code: the terminal assistant with a memory
&lt;/h2&gt;

&lt;p&gt;Claude Code's defining idea is that the AI should remember your project. That memory lives in &lt;code&gt;CLAUDE.md&lt;/code&gt;: put one at the project root (committed, shared with the team), keep personal preferences in &lt;code&gt;~/.claude/CLAUDE.md&lt;/code&gt;, and keep local-only notes in &lt;code&gt;CLAUDE.local.md&lt;/code&gt; — which belongs in &lt;code&gt;.gitignore&lt;/code&gt;. An &lt;code&gt;AGENTS.md&lt;/code&gt; file is read too, so the two conventions can coexist.&lt;/p&gt;

&lt;p&gt;The second defining idea is permission control. Claude Code asks before it acts, and you tune how much: &lt;code&gt;plan&lt;/code&gt; mode makes it propose before touching anything, and the blunt instruments like &lt;code&gt;--dangerously-skip-permissions&lt;/code&gt; exist for trusted environments only. Inside a session, &lt;code&gt;Shift+Tab&lt;/code&gt; cycles the permission modes, and &lt;code&gt;/init&lt;/code&gt; scaffolds a &lt;code&gt;CLAUDE.md&lt;/code&gt; draft for you to refine by hand.&lt;/p&gt;

&lt;p&gt;Two habits matter most. First, write &lt;em&gt;verifiable&lt;/em&gt; instructions in your memory files — "run &lt;code&gt;npm test&lt;/code&gt; before committing" beats "write good code" every time. Keep each file under about 200 lines; long workflows deserve their own skill file instead. Second, for anything big, start in plan mode: let the AI lay out which files it will change, nod, and only then let it type. One task, one session — don't pile unrelated work into a single conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codex CLI: the agent that separates "what" from "when"
&lt;/h2&gt;

&lt;p&gt;Codex CLI's signature design decision is splitting two questions most tools blur together: &lt;em&gt;what the agent is allowed to touch&lt;/em&gt; (sandbox) and &lt;em&gt;when it has to ask you&lt;/em&gt; (approval). The sandbox (&lt;code&gt;read-only&lt;/code&gt; / &lt;code&gt;workspace-write&lt;/code&gt; / &lt;code&gt;danger-full-access&lt;/code&gt;) and the approval policy (&lt;code&gt;on-request&lt;/code&gt; by default, or &lt;code&gt;never&lt;/code&gt;) are independent knobs. Once you see it, you can't unsee how useful that is.&lt;/p&gt;

&lt;p&gt;Its superpower for automation is &lt;code&gt;codex exec "fix the failing tests"&lt;/code&gt; — non-interactive, made for scripts and CI. It reads &lt;code&gt;AGENTS.md&lt;/code&gt; from the project root on every run (build commands, code standards, forbidden actions), accepts an image in the first prompt for things like error screenshots, and can hand work off to the cloud. The VS Code plugin shares the same &lt;code&gt;AGENTS.md&lt;/code&gt;, config, and MCP servers as the CLI, so your setup follows you into the editor.&lt;/p&gt;

&lt;p&gt;The honest caveat: the flags with "dangerously" in the name mean it. Only bypass approvals and sandboxes in an isolated environment you can afford to rebuild.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cursor: the IDE where AI is a first-class citizen
&lt;/h2&gt;

&lt;p&gt;Cursor's whole pitch fits in three shortcuts: &lt;code&gt;Cmd/Ctrl+K&lt;/code&gt; edits the selected code inline, &lt;code&gt;Cmd/Ctrl+L&lt;/code&gt; opens a chat with your selection already in context, and &lt;code&gt;Cmd/Ctrl+I&lt;/code&gt; hands the wheel to the Agent for multi-file rewrites. Learn those three and you know most of the tool.&lt;/p&gt;

&lt;p&gt;Context control is explicit: &lt;code&gt;@Files&lt;/code&gt;, &lt;code&gt;@Codebase&lt;/code&gt; (semantic search across the repo), &lt;code&gt;@Docs&lt;/code&gt;, &lt;code&gt;@Web&lt;/code&gt;, &lt;code&gt;@Git&lt;/code&gt;, or just &lt;code&gt;@&lt;/code&gt; a filename. Project rules live in &lt;code&gt;.cursor/rules/&lt;/code&gt; as one &lt;code&gt;.mdc&lt;/code&gt; file each, with four attachment modes — Always, Auto Attached, Agent Requested, Manual — so rules can follow file patterns instead of living in one giant document. And the Agent itself has three postures: Ask (read-only, good for exploring unfamiliar code), Agent (edits files, you confirm each diff), and Plan (proposal first). One honest note from my cheatsheet: Cursor's interface changes fast, so for anything UI-related, check the official docs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Claude Code&lt;/th&gt;
&lt;th&gt;Codex CLI&lt;/th&gt;
&lt;th&gt;Cursor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Home turf&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Terminal, any editor&lt;/td&gt;
&lt;td&gt;Terminal, scripts &amp;amp; CI&lt;/td&gt;
&lt;td&gt;Inside the IDE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Getting started&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;claude&lt;/code&gt; to chat; &lt;code&gt;/init&lt;/code&gt; scaffolds project memory&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;npm install -g @openai/codex&lt;/code&gt;, then &lt;code&gt;codex&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Install, learn the three shortcuts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Permission modes (&lt;code&gt;plan&lt;/code&gt; → auto), tuned per session&lt;/td&gt;
&lt;td&gt;Sandbox and approval as separate knobs&lt;/td&gt;
&lt;td&gt;Per-diff confirmation in Agent mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Project memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;CLAUDE.md&lt;/code&gt; (&lt;code&gt;AGENTS.md&lt;/code&gt; also read)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt;, auto-read every run&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;.cursor/rules/&lt;/code&gt; + &lt;code&gt;@&lt;/code&gt; references&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Long-lived terminal workflows with team-shared conventions&lt;/td&gt;
&lt;td&gt;Scripted and automated agent runs, cloud handoff&lt;/td&gt;
&lt;td&gt;Day-to-day editing where you live in the editor&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Five habits that work across all three
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Plan before typing.&lt;/strong&gt; Every tool here has a plan mode. Use it for anything bigger than a typo fix — a 30-second plan review saves 30-minute cleanups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the machine-readable rules down.&lt;/strong&gt; &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;.cursor/rules/&lt;/code&gt; — whichever your tool reads, the payoff is the same: stop re-explaining your build commands and taboos every session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep secrets out of the chat.&lt;/strong&gt; Keys, tokens, private keys, customer data — never paste them in. API keys belong in environment variables, and &lt;code&gt;.env&lt;/code&gt; belongs in &lt;code&gt;.gitignore&lt;/code&gt;, never in the repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Respect the "dangerously" flags.&lt;/strong&gt; They exist for isolated environments you can rebuild — not your laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small steps, visible diffs.&lt;/strong&gt; One task per session, &lt;code&gt;git diff&lt;/code&gt; before moving on, and make the AI show test results — "run the tests and paste the output" beats "make sure it works."&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;I'm still learning these tools, and they change fast — if anything above is out of date or just wrong, I'd genuinely like to know. The full command-level cheatsheet (Chinese, Spanish, and Brazilian Portuguese versions included) lives here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Ezra-Zhao/ai-coding-cheatsheet" rel="noopener noreferrer"&gt;https://github.com/Ezra-Zhao/ai-coding-cheatsheet&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm building in public at github.com/Ezra-Zhao — corrections welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
