--- title: "Claude vs Codex: What Happened When We Gave Them the Same Web Portal" description: "We expected the same assignment to reveal a clear winner. It did not. On this ordinary portal, independent tests mattered more than the model name." date: "2026-08-10" tags: ["Claude", "Codex", "coding agents", "benchmarks", "code quality", "developer workflow", "security", "research"] canonical: "https://news.maestromojo.com/news/claude-vs-codex-web-portal-handoff-quality/" --- ## Maestro's take We gave Claude and Codex the same web-portal job because we expected the results to reveal an obvious winner. They did not. Fable, Sol, and Terra passed every independent check. Opus passed every check of the portal itself. Sonnet and Luna came close but left defects that their own tests missed. For this clear, ordinary project, the model name mattered less than the outside test. That was the useful result. ![Two origami developers deliver the same web portal while a neutral inspector compares an orderly handoff with one that still contains development artifacts.](https://maestromojo.s3.us-west-2.amazonaws.com/fileman/dd2b61c52a194955a85e8919127dabda/site_media/claude-vs-codex-handoff-hero_0e5b55d7.png) *Same assignment. Similar working product. Different cleanup. Original Maestro Brief illustration.* ## TL;DR Six model tiers built the same small customer-support portal. Each tier ran twice. We checked all 12 builds with the same hidden 23-test suite. - **Fable, Sol, and Terra:** passed all 46 checks across two runs. - **Opus:** passed every portal behavior check. Its one raw miss was a `TODO` inside its own cleanup test. - **Sonnet:** missed activity-history behavior in one run and a sample-data requirement in the other. - **Luna:** one run missed a sample-data requirement and left test data behind. Several models could build the requested product. Their own green test suites could not tell us which small mistakes remained. Our hidden checks could. ## Why Maestro users care Developers spend a lot of time choosing models. This experiment suggests a second question deserves equal attention: **Who checks the work after the model says it is finished?** Sonnet's portal saved a staff change but failed to record it in activity history. The page still worked. The agent's own tests still passed. A user might not notice until someone needed the missing audit trail. That is a much more ordinary failure than an AI going rogue. It is also more likely to become your problem on Monday morning. ## What we set out to learn We wanted to know whether the same detailed assignment would produce a clear Claude-versus-Codex winner. The assignment was deliberately boring: a Django portal where customers create support requests and staff assign and update them. It also needed search, filters, pagination, activity history, repeatable sample data, and a usable phone layout. Every run received the same specification from a clean starting repository. None saw our 23 acceptance checks while building. Then we tested the delivered work ourselves. ## What happened ![A two-panel benchmark graphic separates objective portal acceptance totals from observed handoff artifacts in Claude ZIPs and Codex post-test snapshots.](https://maestromojo.s3.us-west-2.amazonaws.com/fileman/dd2b61c52a194955a85e8919127dabda/site_media/claude-vs-codex-two-finish-lines_c743374e.png) *The left side checks the product. The right side shows what we observed in the delivered artifacts. They are separate questions.* Fable, Sol, and Terra each scored 46 out of 46 across two runs. Opus scored 45 out of 46, but the portal behavior passed. Its repository contained the word `TODO` inside a test designed to find `TODO` markers. Our cleanup check found it. Annoying? Yes. A broken customer feature? No. Sonnet scored 43 out of 46. One build lost required activity-history entries. The other left the administrator out of the required sample-data mix. Luna scored 45 out of 46. One build had a similar sample-data miss and retained an extra test user and request. There was no dramatic Claude-versus-Codex capability gap on this assignment. Several tiers produced the same requested portal behavior. The lower-scoring runs missed small details, not the whole application. ## The Claude packages looked cleaner—with an asterisk The Claude ZIP files we received contained no database or obvious runtime junk. Fable and Opus also documented more deployment cleanup. Opus used the safest default settings. The Codex working folders were inspected after testing. All six still contained the test database, known test accounts, development secrets, and debug settings. That sounds like a Claude victory until you notice that the work arrived differently. An operator created the Claude ZIPs. We inspected Codex directly in its post-test folders. A packaging step could explain some of the difference. The honest claim is therefore small: **the Claude packages we received were cleaner than the Codex folders we inspected. We did not prove that Claude models always produce cleaner handoffs.** ## What this test did not answer It did not give us a fair speed comparison. Claude's six builds ran together on one machine. Codex ran serially. It did not give us a fair cross-provider cost comparison. The accounting receipts used different units, and one Claude run lacked a clean receipt. It also did not test a vague product idea, a large old codebase, a difficult migration, or an architectural decision. Those jobs may produce a different result. They need their own experiment. ## Do Choose one task your team builds often. Write the acceptance checks first. Keep them outside the agent's repository so the agent cannot soften them. Run two model tiers more than once. Compare the pass rate and the cleanup left for the next developer. Then choose the model from your evidence. ## Do not Do not choose from model prestige alone. Do not trust a green suite written only by the agent that wrote the feature. Do not turn these results into a universal Claude-versus-Codex ranking. We tested one portal, not software development. ## What we found—the simple reality On this portal, several Claude and Codex tiers built the same requested product. The practical difference appeared when an independent test found the quiet mistakes the builder had missed. So the lesson is not “Claude wins” or “Codex wins.” It is simpler: **Test two models on your real job. Keep the test outside both of them. Pick the one that passes reliably and leaves the cleanest handoff.** The model picker starts the work. Your acceptance test decides whether it is done. ## Method and limits This was one Django task with two runs per model tier. The same specification and frozen 23-test suite were used for all 12 builds. Claude ZIPs were scored later under the same Python 3.12 and Django 5.2.12 acceptance environment. The qualitative code and browser review was AI-conducted. No human code review is implied. An independent editor AI reviewed this article before publication. Claude builds ran concurrently. Codex builds ran serially. The delivery workflow also differed. Another task or a shared harness could change the result. ## Sources considered - [The frozen portal specification](https://news.maestromojo.com/benchmarks/codex-web-portal-2026-08-10/specification.md) - [The frozen 23-test acceptance suite](https://news.maestromojo.com/benchmarks/codex-web-portal-2026-08-10/acceptance-tests.py) - [The original Codex methodology and run receipts](https://news.maestromojo.com/benchmarks/codex-web-portal-2026-08-10/methodology.md) - [The original Codex result data](https://news.maestromojo.com/benchmarks/codex-web-portal-2026-08-10/results.json) - [Claude and Codex comparison methodology and limits](https://news.maestromojo.com/benchmarks/claude-codex-web-portal-2026-08-10/methodology.md) - [Frozen qualitative handoff rubric](https://news.maestromojo.com/benchmarks/claude-codex-web-portal-2026-08-10/quality-rubric.md) - [Machine-readable results for all 12 runs](https://news.maestromojo.com/benchmarks/claude-codex-web-portal-2026-08-10/results.json) - [Claude run receipts and accounting caveats](https://news.maestromojo.com/benchmarks/claude-codex-web-portal-2026-08-10/claude-run-receipts.md) - [SHA-256 hashes of the six scored Claude ZIPs](https://news.maestromojo.com/benchmarks/claude-codex-web-portal-2026-08-10/artifact-hashes.txt) Maestro Brief performed the independent scoring and analysis described above. This article is original Maestro research. *Maestro's opinions and summaries are AI-generated.*