Angular and Vaadin: complete Codex and Claude results
Vaadin vanilla scored higher in both harnesses: 80% versus Angular’s 25% with Codex, and 85% versus 60% with Claude Code. The effect of MCP and skills differs between harnesses.
Pass rates, with harnesses kept separate
Codex
Claude Code
Each bar contains four model/effort combinations × five trials. Angular was run with vanilla only. Compare vanilla rows for the technology comparison; MCP-only and skills + MCP measure additional configurations. Codex and Claude use different models and agent harnesses, so their results are not pooled.
Results, running time and cost — all completed trials
Codex
| Technology / configuration | Passed | Pass rate | Avg. agent | Avg. full trial | Avg. tokens | Avg. cost | Total cost |
|---|---|---|---|---|---|---|---|
| Angular · vanilla | 5/20 | 25% | 3m 10s | 5m 14s | 870.4K | $0.626 | $12.516 |
| Vaadin · vanilla | 16/20 | 80% | 2m 39s | 4m 29s | 816.3K | $0.618 | $12.366 |
| Vaadin · MCP only | 13/20 | 65% | 2m 49s | 4m 58s | 820.5K | $0.479 | $9.577 |
| Vaadin · skills + MCP | 19/20 | 95% | 2m 31s | 4m 03s | 994.2K | $0.660 | $13.210 |
Claude Code
| Technology / configuration | Passed | Pass rate | Avg. agent | Avg. full trial | Avg. tokens | Avg. cost | Total cost |
|---|---|---|---|---|---|---|---|
| Angular · vanilla | 12/20 | 60% | 6m 49s | 9m 09s | 3.14M | $0.832 | $16.632 |
| Vaadin · vanilla | 17/20 | 85% | 5m 45s | 7m 13s | 3.07M | $0.737 | $14.746 |
| Vaadin · MCP only | 18/20 | 90% | 5m 21s | 7m 20s | 2.37M | $0.601 | $12.024 |
| Vaadin · skills + MCP | 16/20 | 80% | 4m 39s | 6m 17s | 2.61M | $0.634 | $12.670 |
Averages include successes and failed tests. Agent time excludes setup and verification; full-trial time includes both. Queue waits are excluded. Token totals equal input + output; cached input is already included in input. Costs are recorded USD estimates, not subscription invoices.
Comparison for each model and effort
Codex
| Model / effort | Angular · vanilla | Vaadin · vanilla | Vaadin · MCP only | Vaadin · skills + MCP |
|---|---|---|---|---|
| Luna 6medium | 2/51m 21s agent · 3m 36s full517.5K tokens · $0.011 / trialInput 512.7K · cached 478.8KOutput 4.8K | 3/50m 58s agent · 3m 13s full355.0K tokens · $0.009 / trialInput 351.9K · cached 308.8KOutput 3.1K | 2/51m 18s agent · 3m 16s full355.3K tokens · $0.008 / trialInput 352.5K · cached 321.5KOutput 2.8K | 4/51m 08s agent · 2m 38s full362.8K tokens · $0.009 / trialInput 359.8K · cached 318.6KOutput 3.0K |
| Luna 6xhigh | 2/53m 15s agent · 5m 28s full912.8K tokens · $0.025 / trialInput 893.1K · cached 829.2KOutput 19.7K | 3/51m 44s agent · 3m 34s full398.1K tokens · $0.013 / trialInput 389.4K · cached 335.7KOutput 8.7K | 1/52m 01s agent · 4m 52s full503.2K tokens · $0.016 / trialInput 492.5K · cached 424.3KOutput 10.7K | 5/52m 06s agent · 3m 41s full748.7K tokens · $0.020 / trialInput 737.9K · cached 656.8KOutput 10.8K |
| Sol 6.1medium | 1/53m 44s agent · 5m 45s full814.1K tokens · $0.275 / trialInput 805.4K · cached 749.0KOutput 8.7K | 5/54m 26s agent · 6m 06s full1.20M tokens · $0.306 / trialInput 1.19M · cached 1.13MOutput 6.5K | 5/54m 24s agent · 6m 17s full1.56M tokens · $0.357 / trialInput 1.56M · cached 1.49MOutput 7.2K | 5/53m 30s agent · 5m 06s full1.51M tokens · $0.373 / trialInput 1.50M · cached 1.42MOutput 7.3K |
| Astra 6medium | 0/5*4m 18s agent · 6m 06s full1.24M tokens · $2.193 / trialInput 1.23M · cached 1.16MOutput 7.4K | 5/53m 30s agent · 5m 04s full1.31M tokens · $2.145 / trialInput 1.31M · cached 1.24MOutput 5.1K | 5/53m 33s agent · 5m 27s full861.1K tokens · $1.534 / trialInput 856.1K · cached 808.7KOutput 5.0K | 5/53m 20s agent · 4m 49s full1.36M tokens · $2.240 / trialInput 1.35M · cached 1.28MOutput 5.0K |
Claude Code
| Model / effort | Angular · vanilla | Vaadin · vanilla | Vaadin · MCP only | Vaadin · skills + MCP |
|---|---|---|---|---|
| Haiku 5.5medium | 4/54m 55s agent · 7m 16s full2.01M tokens · $0.144 / trialInput 1.96M · cached 1.86MOutput 44.8K | 5/53m 51s agent · 5m 05s full2.10M tokens · $0.093 / trialInput 2.07M · cached 1.99MOutput 28.3K | 4/53m 42s agent · 6m 05s full1.68M tokens · $0.070 / trialInput 1.65M · cached 1.57MOutput 26.4K | 5/52m 54s agent · 4m 09s full1.52M tokens · $0.047 / trialInput 1.49M · cached 1.42MOutput 23.3K |
| Haiku 5.5xhigh | 4/510m 40s agent · 13m 48s full5.43M tokens · $0.556 / trialInput 5.32M · cached 5.14MOutput 109.6K | 4/510m 33s agent · 12m 35s full4.54M tokens · $0.439 / trialInput 4.47M · cached 4.31MOutput 75.0K | 4/59m 48s agent · 12m 04s full3.64M tokens · $0.378 / trialInput 3.57M · cached 3.41MOutput 67.1K | 5/58m 11s agent · 9m 26s full4.64M tokens · $0.451 / trialInput 4.57M · cached 4.41MOutput 72.0K |
| Sonnet 5medium | 0/57m 41s agent · 9m 27s full4.00M tokens · $1.487 / trialInput 3.97M · cached 3.87MOutput 32.5K | 3/55m 43s agent · 7m 03s full4.59M tokens · $1.530 / trialInput 4.56M · cached 4.46MOutput 23.7K | 5/54m 51s agent · 6m 26s full3.23M tokens · $1.180 / trialInput 3.21M · cached 3.12MOutput 20.1K | 2/54m 54s agent · 7m 32s full3.31M tokens · $1.206 / trialInput 3.29M · cached 3.19MOutput 20.0K |
| Opus 5.5medium | 4/54m 00s agent · 6m 03s full1.10M tokens · $1.140 / trialInput 1.08M · cached 1.01MOutput 18.9K | 5/52m 53s agent · 4m 10s full1.05M tokens · $0.887 / trialInput 1.04M · cached 985.1KOutput 11.3K | 5/53m 04s agent · 4m 46s full950.7K tokens · $0.777 / trialInput 940.6K · cached 890.9KOutput 10.1K | 4/52m 36s agent · 4m 01s full973.5K tokens · $0.830 / trialInput 962.8K · cached 908.5KOutput 10.7K |
Each cell contains five trials. Time, tokens and costs are means over all five; cached input is a subset of input. The CSV contains full-precision counts, including cache-creation tokens where available.
Token usage and estimated cost
Codex
| 20 completed trials per row | Input | Cached input | Cache creation | Output | Total cost | Cost / trial | Cost / pass |
|---|---|---|---|---|---|---|---|
| Angular · vanilla | 17.21M | 16.11M | 0.0K | 202.9K | $12.516 | $0.626 | $2.503 |
| Vaadin · vanilla | 16.21M | 15.08M | 0.0K | 116.7K | $12.366 | $0.618 | $0.773 |
| Vaadin · MCP only | 16.28M | 15.21M | 0.0K | 128.8K | $9.577 | $0.479 | $0.737 |
| Vaadin · skills + MCP | 19.75M | 18.39M | 0.0K | 130.5K | $13.210 | $0.660 | $0.695 |
Claude Code
| 20 completed trials per row | Input | Cached input | Cache creation | Output | Total cost | Cost / trial | Cost / pass |
|---|---|---|---|---|---|---|---|
| Angular · vanilla | 61.68M | 59.43M | 2.25M | 1.03M | $16.632 | $0.832 | $1.386 |
| Vaadin · vanilla | 60.74M | 58.74M | 2.00M | 691.1K | $14.746 | $0.737 | $0.867 |
| Vaadin · MCP only | 46.88M | 44.98M | 1.90M | 618.9K | $12.024 | $0.601 | $0.668 |
| Vaadin · skills + MCP | 51.57M | 49.64M | 1.93M | 630.1K | $12.670 | $0.634 | $0.792 |
Costs are available for 160 completed trials. Values come from each trial’s agent_result.cost_usd, not a recalculation using current prices. Harbor’s Codex adapter can estimate costs from pricing tables; Claude reports session costs. Both harnesses use subscription authentication. These estimates are not invoices and exclude subscription fees, infrastructure and verification costs. Different pricing/recording paths limit direct cross-harness cost comparisons.
Cost / pass = total recorded cost of completed trials ÷ passes, including spend on failures. It describes this sample, not a forecast. Cached reads and cache-creation tokens are included in input; they must not be added to it again. Output already includes recorded reasoning tokens. Counts sum usage over requests, including repeated context, rather than counting unique prompt text. K = thousand; M = million.
Passing trials only, grouped by task
Only completed trials with reward = 1 contribute to this section’s times, tokens and costs. Each row has one task, one harness, one model, one effort and one configuration. No averages combine tasks or models. Passed is shown out of five scheduled trials.
Angular Petclinic task
angular-petclinic-vets-simple
Codex
| Model / effort | Configuration | Passed | Avg. agent | Avg. full trial | Avg. tokens | Avg. cost | Total cost |
|---|---|---|---|---|---|---|---|
| Luna 6medium | Vanilla | 2/5 | 0m 58s | 3m 24s | 323.9KInput 319.4Kof which cached 293.3KOutput 4.5K | $0.008 | $0.016 |
| Luna 6xhigh | Vanilla | 2/5 | 3m 31s | 6m 14s | 860.7KInput 841.1Kof which cached 772.0KOutput 19.6K | $0.024 | $0.049 |
| Sol 6.1medium | Vanilla | 1/5 | 4m 11s | 7m 08s | 955.4KInput 945.5Kof which cached 887.3KOutput 9.9K | $0.305 | $0.305 |
| Astra 6medium | Vanilla | 0/5* | No passing trials; metrics unavailable | ||||
Claude Code
| Model / effort | Configuration | Passed | Avg. agent | Avg. full trial | Avg. tokens | Avg. cost | Total cost |
|---|---|---|---|---|---|---|---|
| Haiku 5.5medium | Vanilla | 4/5 | 4m 52s | 7m 31s | 2.04MInput 2.00Mof which cached 1.90MOutput 44.4K | $0.146 | $0.584 |
| Haiku 5.5xhigh | Vanilla | 4/5 | 10m 15s | 13m 47s | 5.07MInput 4.97Mof which cached 4.79MOutput 103.6K | $0.512 | $2.049 |
| Sonnet 5medium | Vanilla | 0/5 | No passing trials; metrics unavailable | ||||
| Opus 5.5medium | Vanilla | 4/5 | 4m 02s | 6m 12s | 1.13MInput 1.11Mof which cached 1.04MOutput 19.1K | $1.155 | $4.621 |
Vaadin Petclinic task
flow-petclinic-vets-simple
Codex
| Model / effort | Configuration | Passed | Avg. agent | Avg. full trial | Avg. tokens | Avg. cost | Total cost |
|---|---|---|---|---|---|---|---|
| Luna 6medium | Vanilla | 3/5 | 0m 59s | 2m 38s | 382.4KInput 379.2Kof which cached 330.2KOutput 3.2K | $0.010 | $0.029 |
| Luna 6medium | MCP only | 2/5 | 1m 39s | 3m 32s | 386.2KInput 383.6Kof which cached 349.8KOutput 2.6K | $0.008 | $0.016 |
| Luna 6medium | Skills + MCP | 4/5 | 1m 11s | 2m 50s | 370.6KInput 367.6Kof which cached 330.2KOutput 3.0K | $0.009 | $0.034 |
| Luna 6xhigh | Vanilla | 3/5 | 1m 47s | 3m 25s | 451.9KInput 442.8Kof which cached 400.0KOutput 9.1K | $0.013 | $0.038 |
| Luna 6xhigh | MCP only | 1/5 | 1m 40s | 3m 38s | 513.6KInput 504.6Kof which cached 457.5KOutput 9.1K | $0.014 | $0.014 |
| Luna 6xhigh | Skills + MCP | 5/5 | 2m 06s | 3m 41s | 748.7KInput 737.9Kof which cached 656.8KOutput 10.8K | $0.020 | $0.100 |
| Sol 6.1medium | Vanilla | 5/5 | 4m 26s | 6m 06s | 1.20MInput 1.19Mof which cached 1.13MOutput 6.5K | $0.306 | $1.531 |
| Sol 6.1medium | MCP only | 5/5 | 4m 24s | 6m 17s | 1.56MInput 1.56Mof which cached 1.49MOutput 7.2K | $0.357 | $1.785 |
| Sol 6.1medium | Skills + MCP | 5/5 | 3m 30s | 5m 06s | 1.51MInput 1.50Mof which cached 1.42MOutput 7.3K | $0.373 | $1.867 |
| Astra 6medium | Vanilla | 5/5 | 3m 30s | 5m 04s | 1.31MInput 1.31Mof which cached 1.24MOutput 5.1K | $2.145 | $10.726 |
| Astra 6medium | MCP only | 5/5 | 3m 33s | 5m 27s | 861.1KInput 856.1Kof which cached 808.7KOutput 5.0K | $1.534 | $7.671 |
| Astra 6medium | Skills + MCP | 5/5 | 3m 20s | 4m 49s | 1.36MInput 1.35Mof which cached 1.28MOutput 5.0K | $2.240 | $11.198 |
Claude Code
| Model / effort | Configuration | Passed | Avg. agent | Avg. full trial | Avg. tokens | Avg. cost | Total cost |
|---|---|---|---|---|---|---|---|
| Haiku 5.5medium | Vanilla | 5/5 | 3m 51s | 5m 05s | 2.10MInput 2.07Mof which cached 1.99MOutput 28.3K | $0.093 | $0.464 |
| Haiku 5.5medium | MCP only | 4/5 | 3m 55s | 5m 44s | 1.74MInput 1.72Mof which cached 1.63MOutput 26.9K | $0.077 | $0.308 |
| Haiku 5.5medium | Skills + MCP | 5/5 | 2m 54s | 4m 09s | 1.52MInput 1.49Mof which cached 1.42MOutput 23.3K | $0.047 | $0.237 |
| Haiku 5.5xhigh | Vanilla | 4/5 | 11m 07s | 12m 28s | 4.60MInput 4.53Mof which cached 4.37MOutput 77.0K | $0.457 | $1.826 |
| Haiku 5.5xhigh | MCP only | 4/5 | 9m 06s | 10m 46s | 3.42MInput 3.36Mof which cached 3.20MOutput 63.2K | $0.351 | $1.404 |
| Haiku 5.5xhigh | Skills + MCP | 5/5 | 8m 11s | 9m 26s | 4.64MInput 4.57Mof which cached 4.41MOutput 72.0K | $0.451 | $2.254 |
| Sonnet 5medium | Vanilla | 3/5 | 5m 38s | 6m 58s | 4.33MInput 4.30Mof which cached 4.20MOutput 24.6K | $1.502 | $4.505 |
| Sonnet 5medium | MCP only | 5/5 | 4m 51s | 6m 26s | 3.23MInput 3.21Mof which cached 3.12MOutput 20.1K | $1.180 | $5.898 |
| Sonnet 5medium | Skills + MCP | 2/5 | 4m 08s | 5m 22s | 2.95MInput 2.93Mof which cached 2.85MOutput 17.9K | $1.081 | $2.163 |
| Opus 5.5medium | Vanilla | 5/5 | 2m 53s | 4m 10s | 1.05MInput 1.04Mof which cached 985.1KOutput 11.3K | $0.887 | $4.435 |
| Opus 5.5medium | MCP only | 5/5 | 3m 04s | 4m 46s | 950.7KInput 940.6Kof which cached 890.9KOutput 10.1K | $0.777 | $3.887 |
| Opus 5.5medium | Skills + MCP | 4/5 | 2m 39s | 3m 58s | 968.5KInput 957.7Kof which cached 903.0KOutput 10.8K | $0.834 | $3.336 |
Compare matching model/effort rows across the two tasks. These successful-run subsets are small and unequal. A dash indicates no passing trials, not zero cost or time. Average cost here is the mean cost of a passing run, while the main report’s cost / pass also includes failed-run spending. Failed trials and their spending are excluded here. Data export: passing-trials.csv.
What the completed results show
- The vanilla comparison favors Vaadin in both harnesses. The observed gap is 55 percentage points with Codex and 25 points with Claude Code.
- Tooling effects differ. Codex scores 16/20 vanilla, 13/20 with MCP only and 19/20 with skills + MCP. Claude scores 17/20, 18/20 and 16/20 respectively. MCP only does not improve both harnesses in this sample.
- A combined tooling advantage is not consistent across harnesses. Skills + MCP adds three passes over vanilla for Codex but loses one for Claude. These are small samples; they do not establish a general causal effect.
- Keep model-level comparisons visible. Model prices, effort levels and successful-run subsets differ. Use the per-model tables rather than pooled successful-run cost or timing averages.
Comparability and limits
Both tasks use the same one-line instruction and identical UC-002 use-case text and shared business rules in the inspected submissions. Both allow 2 CPUs, 4 GB RAM, a 60-minute agent phase and a 20-minute verifier phase. Fixture code, the 1,000-vet dataset, a 200-result-row loading-step budget and 20-second browser interaction timeouts are matched.
The complete stacks differ: Angular + Quarkus + JPA versus Vaadin Flow + Spring Boot + jOOQ. Angular needs frontend/backend integration and its own paging UI; Vaadin supplies a Grid component and backend data-provider integration. Angular checks browser-visible behavior; Vaadin combines server-side component tests with browser tests and requires a Vaadin Grid. Their scroll-driving mechanisms differ. Those differences are part of this benchmark.
There is one task pair and five repetitions per model/effort/configuration. A single trial changes a model cell by 20 percentage points. Results are descriptive scores under these verifiers, not a general ranking of frontend technologies or application runtime performance. MCP-only trials ran later in a separate suite; order and provider state are not randomized.
One original Claude attempt ended with a revoked OAuth token and was replaced after authentication recovered. The 160 scored results use the valid replacement and exclude the interrupted attempt’s time and cost. This report covers scored trial estimates, not all money or quota consumed while operating the suites. No benchmark tests or submitted solutions were modified for this report.
* Astra, Angular: All five trials sorted vets by database ID (order by v.id) rather than the surname/first-name order enforced by both verifiers. They failed the ordering assertion and timed out waiting for Lazy0001 on the initial page. That timeout alone does not demonstrate a scrolling defect. Builds, navigation, empty-list handling and welcome-page tests passed. The linked UC-002 specification explicitly orders specialties alphabetically but does not explicitly require surname/first-name veterinarian ordering. Therefore these are failures against an additional verifier expectation, not established violations of that written requirement. The recorded scores have been retained.