Leaderboard
| # | Model | Harness | Effort | Combined score | S | Tokens | Cost |
|---|---|---|---|---|---|---|---|
| 1 | Grok 4.5 | cursor-agent 2026.07.01 | Med | 0.367 | 161K | $1.83 | |
| 2 | GPT-5.6-sol | codex 0.144 · high | High | 0.309 | 357K | $4.66 | |
| 3 | fable-5 | claude code 2.1.152 | High | 0.274 | 757K | $12.04 | |
| 4 | GPT-5.6-terra | codex 0.144 | High | 0.270 | 98K | $0.68 | |
| 5 | claude code 2.1.152 · z.ai | Max | 0.269 | 304K | $3.65 | ||
| 6 | Opus 4.8 | claude code 2.1.126 | High | 0.263 | 602K | $10.45 | |
| 7 | GPT-5.5 | codex 0.134 · high | High | 0.262 | 279K | $3.90 | |
| 8 | Sonnet 4.6 | claude code 2.1.152 | High | 0.248 | 252K | $3.85 | |
| 9 | Opus 4.7 | claude code 2.1.126 | High | 0.246 | 229K | $6.54 | |
| 10 | Composer 2.5 | cursor-agent 2026.06.15 | — | 0.212 | 120K | — | |
| 11 | GPT-5.5 | codex 0.134 · medium | Med | 0.205 | 272K | $3.33 | |
| 12 | MAI-Code-1-Flash | copilot 1.0.68 | — | 0.204 | 7.4M† | — | |
| 13 | GPT-5.4-mini | codex 0.134 | Med | 0.194 | 646K | $1.83 | |
| 14 | GPT-5.4 | codex 0.134 | Med | 0.190 | — | — | |
| 15 | Gemini 3.5 Flash | antigravity | Med | 0.145 | — | — | |
| 16 | Haiku 4.5 | claude code 2.1.152 | High | 0.105 | 224K | $1.03 |
Agents are ranked by the Combined score S — DOM-grounded localization × behavior on human-annotated UI anchors, averaged over 10 apps (failures count as 0). Each model runs on its latest harness release (Codex-CLI 0.134–0.144 / Claude Code 2.1.152), with a free choice of stack. Condition C4 gives the agent the richest spec: the page's rendered Figma image (a screenshot mockup) and its pruned Figma structure (the layout tree as JSON) — but no target framework.
Each harness exposes a different reasoning-effort ladder, so levels aren't directly comparable. The highlighted dot marks the level each model ran at; the row length shows the granularity available. Notably, GLM-5.2 ran at its ceiling (max), while the Claude and Codex models still had headroom above the level used.
Claude Code (6 levels) — fable-5, Opus 4.8, Opus 4.7, Sonnet 4.6, Haiku 4.5
Codex (4 levels) — GPT-5.6-sol, GPT-5.6-terra, GPT-5.5 (high runs)
Codex (4 levels) — GPT-5.5, GPT-5.4, GPT-5.4-mini
cursor-agent (Grok 4.5: medium · high · xhigh) — Grok 4.5 (ran at high = "Medium")
Antigravity (3 levels: low · medium · high) — Gemini 3.5 Flash
Cursor Composer 2.5 runs at its agent default; its effort ladder isn't published in a directly comparable form.
Cost & speed
Median over the 10 apps — the median is outlier-robust, so a single runaway or oversized task doesn't skew a model's value. Bars are colored by harness.
Harness: ■ Claude Code · ■ Codex · ■ Cursor · ■ z.ai GLM. Same 10 C4 tasks per model. Externally-provided entries (GPT-5.4, Gemini 3.5 Flash) have no local logs, and MAI-Code-1-Flash reports output-only tokens (not comparable), so all three are omitted here.
How tokens are counted: per task we take non-cached input + output — Claude/Cursor: input + cache-creation + output; Codex: (input − cached) + output + reasoning — then the median over the 10 tasks. Cached re-reads (cache_read) are excluded: they bill at ~10% and, summed over a multi-turn harness, mostly track turn count rather than usage (counting them made Claude look ~6× heavier). GLM-5.2's totals come from each run's final result event, since z.ai's endpoint leaves per-message usage empty. † MAI-Code-1-Flash (GitHub Copilot): Tokens shows real input+output — median 7.4M/task (input ~7.3M + output ~98K), captured via the Copilot CLI's OpenTelemetry export (gen_ai.usage.input_tokens/output_tokens). It is not comparable to the other rows and is excluded from the token sort: Copilot re-sends the full, growing context on each of ~55 LLM calls per task and its usage accounting exposes no cache-read discount, so the input side is inflated relative to the non-cached input+output figures above. (Copilot's plain JSONL stream reports only per-message output tokens — the input figure is available solely through the OTel export.)
How cost is estimated: real median API cost per task in USD = each run's actual billed tokens (input, cached, output/reasoning — cache included) × the provider's official published per-token pricing, then the median over the 10 tasks. Claude models use the CLI's own total_cost_usd (Anthropic's real bill). Codex/GPT and z.ai GLM-5.2 are computed from captured tokens × official pricing (OpenAI, z.ai, Anthropic): e.g. GPT-5.6-terra $2.50/$0.25/$15 and GLM-5.2 $1.40/$0.26/$4.40 per 1M input/cached/output. Note GLM's real z.ai bill (~$3.65) is far below the Anthropic-priced figure Claude Code would report (~$9.44). Grok 4.5 (also run through Cursor, which exposes no per-token or per-run cost) uses Cursor's actual billed total from the dashboard — $54.75 across all 3 rounds ÷ 30 task-builds = $1.83/task — rather than a per-token computation. Cost is left blank where even that isn't available: Composer 2.5 (no dashboard total captured; Cursor publishes only a $3/$15 fast-variant rate, no cached-token rate, and the variant used isn't confirmed), MAI-Code-1-Flash (GitHub Copilot bills in AI-credits, not USD, with no cache breakdown), and GPT-5.4 / Gemini 3.5 Flash (no local token logs captured).
Co-evolution
An agent is a model inside a harness, and both ship on their own cadence. Tracking the same model across harness releases shows the two co-evolving — sometimes lifting each other, sometimes regressing. Combined score by npm release date.
Mean C4 combined score (n=10, failures scored 0). Codex-CLI and Claude Code use independent version schemes, shown as separate panels.
How it's scored
Each task asks an agent to build and launch a multi-page web app from a visual spec. We bring the app up in Docker and, for every human-annotated UI anchor, match it to a rendered DOM element — scoring localization L (IoU / distance to the mockup position) and behavior B (interaction-specific browser checks). The headline Combined score is S = mean(L · B) over the critical anchors.
