OKANE LAND

The Proof · AI tool

Codex on the ChatGPT Free plan: we gave it $0 and the same booking app

A hand-inked gauge labelled ChatGPT Free, one 30-day meter, with the needle at 37 percent above a row of twelve ticked gate boxes reading 12 gates, 12 passes, and the caption: twelve gates, twelve passes, on the $0 plan, it cost 37% of the month.
Worth it
Who it's for
A solo builder who wants to know what a $0 coding agent ships before paying for one. On the free tier Codex runs GPT-5.6 Terra by default, built a working three-room booking app from one pitch, and passed every frozen gate. Budget for about two builds of this size a month, and know that Astra and Sol are behind the paid door.
Real cost
$0. A ChatGPT Free account, the Codex CLI at version 0.154.0, and one evening. The full four-phase build consumed 37 percent of the plan's single 30-day meter. At OpenAI's list price for the model it used, the same tokens would have cost about 73 cents on the API.

We handed the free tier of OpenAI's coding agent the exact founder pitch, curveballs and frozen gates that Cursor Pro and Claude Code faced in August. It cleared all twelve, including the concurrency gate both $20 tools failed, in under ten minutes of agent time. The bill was 37 percent of a 30-day meter, and the model behind the door was not the one in the launch posts.

What's good

  • Twelve of twelve pre-registered gates from a cold clone, the same gates Cursor Pro and Claude Code faced on the same pitch. Zero operator nudges used out of twelve available.
  • It passed the concurrency gate both $20 tools failed in August: two simultaneous requests for one slot produced exactly one booking, and held under four simultaneous requests across eight rounds.
  • The four planted defects in the calendar file were all named with a reason, the New York event landed at 20:00 Paris, and the weekly 20:00 slot stayed at 20:00 across the October clock change.
  • Four pricing fixtures came back exact to the cent, off-peak and member code stacked in the right order, with the deposit rounded half up.
  • Nine minutes and thirty-six seconds of agent time for all four phases, and the app has no dependencies: one Node server file, a JSON store, and two real tests it wrote itself on the ship check.

Where it breaks

  • Astra is not on this door. The model catalog served to a Free account lists GPT-5.6 Terra, GPT-5.6 Luna and GPT-5.5. No Astra, no Sol, and Codex picked Terra without saying so.
  • The Free plan runs one 30-day meter with no five-hour or weekly window, and this build used 37 percent of it. Iterate on a real product the way you would on a paid plan and the month is gone in an afternoon.
  • The race gate passed because of the runtime rather than a guard: a single Node process reads the request, validates and saves in one synchronous step. Run two instances behind a proxy and nothing in the code stops a double booking.
  • The README tells a new user to git clone the repository, but the agent never committed a file. A real fresh clone of what it left behind would contain only the calendar import.
  • Two of its own patches failed verification mid-run and it recovered without saying so in the summary. Read the transcript rather than the final message if you want to know what happened.

How we tested

We did not write a new test for Codex. We reused the one that already has two scores on the board. In August we gave Cursor Pro and Claude Code the same founder pitch, a booking system for a three-room rehearsal studio in Paris, followed by a messy calendar import and a pricing rule set, then ran a cold ship check against twelve gates frozen before either tool started. They tied at eleven of twelve and failed the same gate. That fixture is now the yardstick, and this is the third tool to stand against it.

The plan was the point. OpenAI’s pricing page says the Free tier lets you “Explore Codex capabilities on quick coding tasks” and publishes no number for it. So we signed a Free account into the Codex CLI, updated it to the current release, and drove it the way a subscriber on that tier would: through codex exec, on the default model, with a scripted operator who could send the pitch, the two curveballs and pasted error text, and nothing else. Three nudges per phase were available. None were used.

Two conditions differ from the August runs, and both are disclosed. First, Codex ran inside its own sandbox: writes confined to the project folder, network on, approvals set to never. The earlier two tools ran with permissions bypassed. We tested the sandbox before starting and confirmed it let the agent bind a local port, reach the package registry and write its files, so it did not cost Codex anything we could measure. Second, the operator is an AI, same as in August, following a frozen script, and the gates are external code run from a fresh copy of the build. Every claim below is checkable against the transcripts and meter reads in the kit.

The door

Before the first message we dumped the model catalog Codex serves to this account. It lists three models a Free user can pick: GPT-5.6 Terra, GPT-5.6 Luna and GPT-5.5. Astra, the model in this month’s launch posts, is absent, and so is Sol. OpenAI’s help center says Astra is included with Plus, Pro and Business seats and lists no Free row. The catalog agrees with the help center. Codex chose Terra at medium reasoning without announcing it, the way Cursor chose “auto” in July.

The meter is the other thing to know before you type. Codex reports its limits in every turn, and on Free there is exactly one: a window of 43,200 minutes, which is 30 days, with a reset stamped thirty days after our first call. No five-hour window, no weekly window. That shape matters later.

Act one: the pitch

Four minutes and eleven seconds after the pitch, Codex declared done. It had read the calendar file it found in the folder, written a server in 112 lines of Node with no third-party packages, a JSON file store, a day grid for the three rooms, weekly bookings stored as local Paris wall-clock times so a 20:00 slot stays 20:00 across daylight saving, and a cancel flow that marks anything inside 24 hours as late. It started the app twice on different ports to probe its own API, created and cancelled a booking, and checked what Paris thinks today’s date is.

It also did something nobody asked for. It imported the calendar export during phase one, reporting “the valid bookings” and moving on. We let phase two ask the question that word was hiding.

The meter read 15 percent.

Curveball one: the data

The import message asks for everything in the file, with a report of anything skipped or changed and why. The calendar carries nineteen clean one-offs, a weekly rule with eleven occurrences, one event in New York time and four planted defects.

Two minutes and three seconds later the report existed as a file the app rewrites on every import, and it named all four defects with a reason each: the malformed timestamp, the event with no end, the duplicate UID, and the 23:30 session outside opening hours. The New York event was converted and the report said so in plain words: from America/New_York 14:00 to Europe/Paris 20:00, on the right day. Twenty-one imports, four skips, twenty-five events accounted for.

The meter read 22 percent.

Curveball two: the money

Three room rates, a 30 percent off-peak discount on weekday hours before 17:00 that has to split a booking spanning 17:00, a 10 percent member code stacked on top, half-hour billing with a one-hour minimum, a 50 percent deposit through a checkout in demo mode, and money rounded half up to the cent.

Codex priced in integer cents, per half-hour slot, and applied the member code after the off-peak reduction. Its own worked example, a weekday 16:00 to 18:00 in Room A with the code, came to €45.90 total and €22.95 deposit, and that is right: one discounted hour at €21 plus one full hour at €30, less ten percent. The checkout records a demo payment on the booking with no card field anywhere. Two minutes and forty-six seconds.

The booking form of the Codex build, captured from the running app: Room A on Wednesday 16 September, 16:00 to 18:00, member code OKANE10, and a green quote panel reading exact total, one hour off-peak, member discount applied, 45,90 euro, demo deposit due now 22,95 euro, above a button labelled Continue to demo checkout.

The meter read 34 percent.

The ship check

The last message says a clean machine is coming and asks for a README that covers install, test and run from a fresh clone. Codex rewrote the README and added two tests that spin up the server on a spare port and check the pricing rules and the one-hour minimum. Thirty-six seconds.

Then we did what the README said, from a fresh copy with no data folder. Install, test, import, start. Then the gates.

The day view of the Codex build on Saturday 12 September 2026: three room columns from 09:00 to 23:00, empty except one green block in Room C at 20:00 to 22:00 labelled Atlantic Standard (touring) rehearsal, the New York event landed at Paris time.

Twelve of twelve. The day view answered, the imported events were on the right days, the weekly 20:00 was still 20:00 on both sides of October 25, all four defect UIDs were in the report, four pricing fixtures matched to the cent on total and deposit, the demo checkout completed and said demo, the booking survived a restart, an overlapping request was refused with a 422 while a back-to-back one was accepted, and the secrets grep came back empty.

The scorecard: twelve pre-registered gates in rows, three columns for Cursor Pro, Claude Code and Codex Free. Every cell is a green check except the G5 race row, where the two paid tools carry coral crosses and Codex carries a check. Totals read 11 of 12, 11 of 12 and 12 of 12.

Then the gate the other two failed. Two simultaneous requests for the same Room B slot: one 201, one 422, one booking in the day view. We were suspicious enough to run it again with four simultaneous requests across eight fresh slots. Exactly one holder every time.

Here is why, because it matters for what you do with this app. The server is a single Node process. It reads the whole request body, then validates against the file and saves, all in one synchronous stretch with no await between the read and the write. Nothing can interleave. That is a property of the runtime, and the code contains no lock, no transaction and no unique constraint. Run two copies behind a load balancer and the double booking comes back. The August apps were Python servers with threads, which is the kind of detail a founder never sees until it costs a Saturday night in Room B.

The meter

The meter as Codex reports it: four horizontal bars, one per phase, filled to 15, 22, 34 and 37 percent of a single 30-day window, with the phase durations, a note that there is no five-hour or weekly meter, the token totals, and a card listing the catalog served to a Free account: GPT-5.6 Terra by default, Luna and 5.5, with Astra and Sol absent.

The full run, four phases and twenty commands, ended at 37 percent of the 30-day window. The token accounting behind that: 1.42 million input tokens, of which 1.35 million were served from cache, and 27,000 output tokens, about 4,400 of them reasoning. Priced at OpenAI’s own API list for Terra, $2 per million in, 20 cents cached and $12 out, the same work would have cost about 73 cents.

So the free tier is a good deal per token and a tight deal per month. If every build cost what this one did, you get two of them and change before the meter resets, and this build was ten minutes of agent time on a fixture we designed to be finishable. Real products are not finishable. They are iterated, and every iteration reads the whole conversation again. That cached input count is the shape of the bill: the context grew from 500 thousand tokens in phase one to 1.4 million by phase four, and Free charges the meter for it even at cache rates.

The single window cuts both ways. There is no five-hour wall to bounce off in an evening session, which paid Codex users spend a lot of time discussing. There is also no reset until day thirty.

Where it breaks

The model is the one you are not being sold. Astra is the model in the benchmarks and in our Signal on the two-tier frontier. It is not in this catalog and OpenAI’s help center does not list it for Free. What this review measured is GPT-5.6 Terra, chosen silently. That is fine for a booking app. It is worth knowing before you compare notes with someone on Pro.

Fresh clone means what you committed. The README’s first instruction is to clone the repository. The agent initialised nothing and committed nothing; the only commit in the folder is the one we made to place the calendar file. A collaborator cloning what it left would get the calendar and no app. The instructions are right for a repository that does not yet exist.

The summary hides the stumbles. Twice in the run Codex’s own patch tool refused a patch it had written, once for targeting the same file twice, once because the lines it expected in the stylesheet were not there. It recovered both times and the final messages mention neither. The transcripts do.

The import ran before you asked. Doing phase two’s work in phase one is initiative, and the word “valid” in its phase-one summary was doing quiet work until the report existed. If your data has to be imported carefully, say so in the first message, because the agent will get to it on its own.

Real cost

Free is $0 and carried the whole test. Plus is $20 and is the first tier OpenAI lists for Astra, with an estimated five to forty-five Astra messages per five-hour window and weekly limits it does not number. Pro is $100 or $200 for five and twenty times that. We tested none of the paid doors. The comparison that matters for this piece is the one you can make yourself: sign in, run one build, and read the percentage Codex prints, because on Free it is the only number the plan will ever show you.

The verdict

Worth it, for the price of an email address. We asked a $0 plan to be a founding engineer for one evening on a test two paid tools already took, and it passed every gate they passed and the one they did not, in less time. The app is small, dependency-free and readable, which is what a founder who has to maintain it should want.

Keep three things in your pocket. The model is Terra rather than Astra, and the plan will not tell you. The month is one meter and a real product will drain it faster than a fixture did. And the concurrency pass is a gift from the runtime, so the day you scale past one process, add the lock yourself. The field guide row for Codex on Free now reads tested, at $0, with those caveats attached.

One email, when there's something worth sending

Get the research in your inbox.

No fixed schedule, no filler. You get an email when we've tested something, run the numbers, or found a tool worth your time.

Free. Double opt-in, unsubscribe in one click.

Running Codex on the free tier? Get the research →

Sources

Every outside quote in this review was re-fetched from its source before we used it.

SourceLink
The full test kit: the build, all four transcripts, the frozen operator script and gates, the model catalog dump, the meter reads per phase, and the timing log (2026-09-15). okaneland.com ↗
Okane Land, Cursor vs Claude Code: the head-to-head this run reuses, with the same pitch, curveballs and twelve gates (2026-08-09). okaneland.com ↗
OpenAI, ChatGPT pricing and Codex usage page: Free is described as "Explore Codex capabilities on quick coding tasks," with no published limit for the tier (read 2026-09-15). learn.chatgpt.com ↗
OpenAI, API pricing: GPT-5.6 Terra at $2 in, $0.20 cached, $12 out per million tokens; GPT-6 Astra at $10 in and $50 out (read 2026-09-15). developers.openai.com ↗
OpenAI Help Center, managing usage with GPT-6 Astra in Work and Codex: the plans that carry Astra, and the estimated five-hour ranges for Plus and Pro (read 2026-09-15). help.openai.com ↗
Okane Land, The Signal issue 6: the frontier now ships in a public tier and a vetted tier, and what Astra's door asks for (2026-09-13). okaneland.com ↗
OpenAI Codex CLI on GitHub, the open-source agent this test drove through codex exec (release 0.154.0). github.com ↗

← The Proof