Unwait

Codex vs Claude Code, from someone who wired into both

· 5 min read claude code codex comparison ai coding agents

I run both agents daily and built integrations against both of their extension systems. This comparison skips the benchmark reposts and covers what actually differs when you live in them: automation surface, session signals, workflow shape, and how to pick.

Most Codex vs Claude Code comparisons are benchmark screenshots and pricing tables copied from two landing pages. This one is different in a specific way: I run both agents every day, and I built a product that integrates with both of their extension systems, which means I have read their hook payloads, their config files, and some of their source. That seat shows you differences the benchmark posts never touch.

Quick disclosure up front: I make Unwait, a macOS app that shows flashcards while either agent works. I need both tools to be good, and I have no stake in which one you pick. Where the two differ, I will say so plainly; where they are equivalent, I will say that too.

Where they are the same

Both are terminal coding agents: you describe work, they read your repo, edit files, run commands, and come back. Both handle multi-file changes, both respect project instruction files, both ship permission systems so the agent asks before dangerous commands. Both are bundled with subscriptions you may already pay for: Codex signs in with a ChatGPT plan (Plus and up) and Claude Code with a Claude plan. For day-to-day "implement this function, fix this bug" work, either one is genuinely fine, and anyone telling you one is unusable is selling something.

The differences show up when you push past the chat loop.

The automation surface is not close

This is the gap I know best, because I built against both.

Claude Code exposes a full lifecycle hook system. Dozens of events fire as JSON on stdin: prompt submitted, tool about to run, tool finished, turn ended, permission requested, session started and ended. Hooks can observe, but they can also decide: block a dangerous command, refuse to end the turn until tests pass, inject context. I documented the payload contract and six configs worth stealing in earlier posts. The short version: Claude Code treats external tooling as a first-class audience.

Codex exposes one key: notify. It runs a command when a turn completes, passing JSON as an argv argument. That is the whole documented surface. There is no start event, no tool events, and no ability to veto anything. In Codex's source a richer lifecycle-hooks system exists (notify is now internally a compatibility layer named legacy_notify), so this gap may narrow, but as of this writing notify is what you get, and it has real sharp edges: it must be a top-level TOML key, it executes without a shell, and only one tool can own it at a time.

A concrete consequence: with Claude Code you can measure a wait, because you get a signal when the prompt is submitted and another when the turn ends. With Codex you only learn a turn ended, never when it began. When I built wait-time features for both, Claude Code got the full experience and Codex got a reduced one, not by choice but because the signal does not exist. If you plan to build tooling around your agent, or want the ecosystem of things others have built, this is the single biggest practical difference between the products.

Session signals and multi-session work

Claude Code distinguishes "the turn ended" from "the agent is blocked waiting for your permission", and fires a separate event for the second. Codex's notify cannot tell you an agent is blocked, only that it finished. If you run one session with permission prompts off, you will not care. If you run three sessions in parallel, you will care a lot, because a blocked agent looks exactly like a working one, and unnoticed blocks are the most expensive dead time in a multi-session workflow. Claude Code payloads also carry a session id and working directory, which is what makes per-project, per-session tooling possible at all.

Workflow shape

Differences you feel in the first week, stated without benchmark theater:

Pricing

Both come bundled with consumer subscriptions, both meter usage against your plan tier, and both sell API-key escape hatches. The numbers change too often to print here; check the official pricing pages the week you decide. The structural note that stays true: if your team already pays for ChatGPT or for Claude, the bundled agent is effectively discounted, and that gravity decides more purchases than any feature list.

How to actually pick

If the wait time between prompts is the part of agent work that bothers you, that is the exact problem Unwait exists for, on both agents. And if you want the deeper technical dives behind this comparison, the hooks payload reference and the Codex notify writeup are where this post came from.

Unwait does this for you

A macOS menu bar app that watches your Claude Code and Codex sessions, shows a short card while they work, and puts a strip on screen the moment one finishes. Free for two weeks, no card and no sign up.

Try for free
← All posts