Mind2Web 2
Mind2Web 2 evaluates agentic search on the live
web: each task asks for several facts that must be found, checked and cited, and a task-specific
judge (an LLM extractor and verifier over a rubric tree) checks every answer against the pages it
cites. Marina answers with its general live-web research agent (src/research/); the adapter in
benchmarks/mind2web2/ and scripts/mind2web2.ts only reads the task list, writes answers in the
official layout, exports the pages the agent read, and runs the official judge locally. Nothing in
Marina’s core knows about Mind2Web 2, nothing runs unless an operator starts it, and nothing is
sent anywhere.
Commands
Section titled “Commands”OFFICIAL=~/src/Mind2Web-2 # a checkout of github.com/OSU-NLP-Group/Mind2Web-2OUT=~/m2w2 # answers, caches, results (outside the repository)
bun run mind2web2 run --official $OFFICIAL --out $OUT --arm single --split tune --cap-usd 10bun run mind2web2 cache --official $OFFICIAL --out $OUT --arm singlebun run mind2web2 judge --official $OFFICIAL --out $OUT --arm single --cap-usd 5bun run mind2web2 score --official $OFFICIAL --out $OUT --arm lead --compare single --split heldoutbun run mind2web2 record --official $OFFICIAL --out $OUT --arm single --split heldoutrunanswers every selected task (--task <id>to pick,--runs 1,2,3for independent runs) and writesanswers/<agent>/<task_id>/answer_<k>.mdplusanswer_<k>.meta.json(time_seconds).--cap-usdis required: the batch stops before the next model turn once its spend (models and paid search) reaches it; a stopped run is recorded as not run, never as an answer. Spend also counts toward theDB_PATHworld’s daily cap.- Dev tasks come from the checkout’s
eval_scripts/dev_set/*.py(onlyTASK_IDandTASK_DESCRIPTIONare read). A test run passes the task list with--tasks <csv>(atask_idcolumn and a description column). --split tune|heldoutuses a fixed, hashed split of the dev set (three tune tasks, seven held-out) so configuration choices are made on tasks that were not used for debugging.cacheexports the pages behind every cited URL intocache/<agent>/<task_id>/in the judge’s layout (index.json, text plus screenshot, or PDF). Pages are exported as the agent read them; cited URLs the agent never read are captured by the judge at evaluation time.judgeruns the officialrun_eval.pyfrom the checkout’s Python environment (--python, default<checkout>/.venv/bin/python; install it with the checkout’s own instructions) underbenchmarks/mind2web2/judge_capped.py, which prices every judge response and stops the judge when--cap-usdis reached (unfinished answers stay unscored). It needsOPENAI_API_KEY; the judge model is the paper’so4-mini.scoreprints partial completion (mean rubric root score), success (share of perfect scores), pass@k, cost and time per run, and with--comparea paired difference over shared tasks with a bootstrap interval. A run that errored or produced nothing scores 0.recordwrites the judged run to the benchmark ledger (item ids<task>#<k>, root scores, cost; no task or answer text) and turns each answer into a judged lesson.
| Arm | Agent name | What runs |
|---|---|---|
single |
marina-single |
One research loop on anthropic/claude-opus-5-5 writes the answer. |
lead |
marina-lead |
The lead plans up to three parts; researchers each run the loop on one; the lead writes; openai/gpt-6.1-sol checks each cited claim against the text of the page it cites; the lead revises once. |
Both end with the mechanical citation audit: a cited URL the agent never opened, or one that failed to load, gets one repair pass.
The research agent
Section titled “The research agent”src/research/web-agent.ts is a tool loop over any one model: web_search (the configured search
chain — Tavily, Exa, SearXNG, DuckDuckGo, OpenRouter’s Exa plugin), fetch_page (SSRF-guarded,
paged, with the page’s links; PDFs through pdftotext when installed) and find_in_page (searches
a page already read, without a new request). It works with a single local model. Every page read
lands in a provenance cache (src/research/provenance-cache.ts): URL, status, fetch time,
sha256 of the bytes and the extracted text, so each citation in an answer can be traced to exactly
what the agent saw. The adapter’s fetcher refuses the benchmark’s own repository, dataset and
leaderboard pages.
Submitting
Section titled “Submitting”Marina never submits. The organisers accept answers (and optionally the page cache) by email; see the official submission guideline.
