Research · Evaluation · Oct 2026

EvoWeb

A benchmark for coding agents on evolving web applications

Can a coding agent keep an app working as the user keeps asking for more? EvoWeb gives agents 32 web apps to build and then extend, ten requests each. After every request, a browser agent tests the running app.

TL;DR

Building an app with an AI agent rarely ends at the first prompt. People come back to add features, and each new request lands on code the agent wrote earlier. Existing benchmarks score a single build. EvoWeb scores the whole journey.

Leaderboard

ModelGrade ↑Survival ↑Turns / req.$ / app
Grade (0–1) is how much working functionality the agent delivers, averaged over every level of user patience. Survival is how many of the 10 requests stay usable in a row.

Watch an app evolve

This is one real run: Fable 5 builds a lead-generation site for a credit repair company, then grows it over nine follow-ups with a score estimator, success stories, a dispute letter builder, a case tracker, a dashboard, a restyle, sign-up and booking. Each feature is adapted from a real product, Lexington Law or Credit Repair Cloud. After each request the judge runs five checks: three on the new feature, one that combines it with an earlier feature, and one re-run of an earlier check. Step through the requests and click any check.

rosycredit.app/
Base app Derived state Interactive tool Multi-page workflow Design restyle
Fable 5 on the credit repair site, request by request. Requests, checks and verdicts are taken unchanged from Fable 5's released run. The screenshots show the agent's code after each request, rebuilt from that run.

The first three requests pass every check. Request 4 adds a dispute letter that should be signed with the name from the home page's lead form. Fable 5 wired the signature to a different form, so the letter keeps signing off as "[Your Name]". Each feature works on its own. The bug is in the connection between them. Later, the restyle at request 7 misses the tracker's badges, and request 8 loses an add-on. The rest of the app keeps working, so how much it is worth depends on how patient the user is.

Scored for real users

Most sequential benchmarks stop at the first failure, as if every user quits right away. Others score every request, as if no one ever quits. EvoWeb instead averages over every level of patience. Drag the slider to see how much of an app a user with a given tolerance actually gets.

75%
–requests reached
–requests in a row that pass
–functionality delivered
–Grade: average over all users

Grade averages over every user. Illustrative scores for one ten-request trajectory. The user leaves after the first request that scores below their tolerance (red), and never sees the requests after it (grey). The area under the curve on the right is the Grade.

Not everyone asks in English

People describe what they want in their own language, even when the app itself is in English. We translated every request into French, German, Chinese, Hindi and Hebrew and kept everything else the same: the apps, the tests and the judge. Only Sonnet 4.6 holds steady, staying within 0.03 of its English Grade in every language. Other models swing in both directions, even in widely spoken languages. Agents should be tested in the language their users write in.

Request languageSonnet 4.6Haiku 4.5GPT 5.6 TerraGLM 5.2GPT 5.6 Luna
Grade by request language. The app and the tests stay in English. Blue: each model's best language. Red: its worst.

Try it

Run any model, whether through an API or served locally with vLLM, on all 32 apps:

RUN
git clone https://github.com/two-delta/EvoWeb.git && cd EvoWeb
docker build -f harness/Dockerfile -t evoweb-harness:latest .
pip install -r requirements.txt && pip install -e .

evoweb run --name haiku --model anthropic/claude-haiku-4-5
python3 -m evoweb.score_run runs/haiku

Citation

BIBTEX
@article{nukrai2026evoweb,
  title   = {EvoWeb: A Benchmark for Coding Agents on Evolving Web Applications},
  author  = {Nukrai, David and Alon, Bar and Levy, Nativ and Atad, Ido Andrew and Cohen, Ido
             and Zimerman, Itamar and Wolf, Lior and David, Eli and Naiman, Ilan},
  journal = {arXiv preprint arXiv:2610.16402},
  year    = {2026},
  url     = {https://arxiv.org/abs/2610.16402}
}
Paper · arXiv 2610.16402 Code · GitHub Dataset · Hugging Face