Web agents: macro vs micro work, and the routes to optimise each
TL;DR
- Web agents do two jobs. Macro work, open-web research: search, read many sites, answer. Micro work, in-site action: work inside one site and change its state. The field calls them deep research and web navigation (or computer use).
- They fail differently. On 365 open-web research runs, the main failure was a fluent wrong answer (157 runs, 43%). On 95 in-site action runs, the agent never changed a record it was not asked to touch; every wrong write was the right kind of change to the wrong thing (“which Dana?”).
- They use different tools. Research runs spend 8% of their tool calls on clicks, typing and key presses; action runs spend 35%.
- When one task does both (read a date on Wikipedia, then add it to a to-do app), the research half was the cheap part: 2 to 11 tool calls out of 37 to 143, in 6 runs on three cheap models. No run carried a wrong fact into the write.
- Verdict: the split holds, but on two axes, not one. Where the truth lives (the open web, or one site’s own data) decides how an agent fails. Whether the run writes decides what has to be gated.
Two jobs, one word
“Web agent” covers two different jobs:
- Open-web research. “Which gyms near Tompkins Square Park have classes before 7 am?” The agent searches, opens many sites, reads, cross-checks and writes an answer. Success is a correct, sourced answer.
- In-site action. “Move every contact at Acme still in Lead to SQL.” The agent works inside one site: logs in, finds records, fills forms, saves. Success is the site’s data, afterwards, being right, and nothing else having changed.
We wanted to know whether this split is real or just a naming habit, and whether a product should treat the two differently. We used four kinds of evidence: how public benchmarks and products divide the work, how our own runs fail, which tools each job reaches for, and a new task that does both.
Every run here used a cheap model: mostly glm-5.3-flash, with deepseek-v4.1-flash and gemini-3.8-flash where stated. The runs are from late September to 10 October 2026.
Read this first: the lanes are not equally hard. The research tasks are public AssistantBench questions on the live web, chosen because they are hard. The in-site tasks run on our own replicas of a to-do app and a CRM, and on four live news and shopping sites, and we wrote those tasks. So “18% vs 81%” does not mean research is four times harder. What does compare across lanes is how runs fail and which tools they use. The last section is the one comparison where we held difficulty fixed.
What the field calls these
The split is old and well established. It just has no shared name.
| Open-web research | In-site action |
|---|---|
| BrowseComp: 1,266 questions built to need “persistently navigating the internet”; short answers checked against a reference.1 | WebArena: 812 tasks on self-hosted sites; a program checks the final site or database state.2 |
| DeepSearchQA: 900 prompts that each need an exhaustive answer list, scored on precision and recall.3 | WorkArena: 29 ServiceNow task types (forms, catalogue orders, list filters).4 |
| Mind2Web 2: 130 long search tasks, judged on correctness and source attribution.5 | OSWorld: 369 desktop and web tasks, each with its own state-checking script.6 |
| GAIA (466 questions) and AssistantBench (214 “time-consuming” web tasks), both graded on the answer.78 |
Where the two blur, grading gets harder. Online-Mind2Web (300 tasks on 136 live sites) mixes “find” and “do” tasks, and has to grade by human or model judgement of the trajectory, because nobody can read a live site’s database.9
What we did not find is a comparison of how the two jobs fail. Benchmarks grade one job or the other: Mind2Web 2 grades research on whether each claim is backed by a cited source,5 while ST-WebAgentBench grades in-site work on whether the final state is right and the site’s rules were kept.10 We could not find a survey or benchmark that runs both kinds of task through one agent loop and compares their failures. That comparison is what this post adds.
WebArena states the split most clearly. It sorts its tasks into information seeking, site navigation and content and configuration, grades the first by the answer and the last by “programmatic checks” of the final state.2 The grading method follows the class. If the truth is on the web, you grade the answer. If the truth is in a site’s data, you grade the data.
Products drew the same line, then merged it:
| Company | Research | Action | Today |
|---|---|---|---|
| OpenAI | Deep Research | Operator: asks before “significant” actions; hands control to the person for logins and payments11 | Merged into ChatGPT agent in July 2025, because “Operator couldn’t dive deep into analysis or write detailed reports, and deep research couldn’t interact with websites”12 |
| Gemini Deep Research | Project Mariner, a Chrome extension | Mariner shut down on 4 May 2026, “its technology voyaged to other Google products”13 | |
| Perplexity | Answer engine | Comet browser: “Ask Comet to buy something you forgot” | One browser, two surfaces, “from answers to action”14 |
| Anthropic | Research, a multi-agent search system15 | Claude for Chrome: per-site permissions; confirms before “publishing, purchasing, or sharing personal data”16 | Separate surfaces |
The literature splits the jobs; the products merge them. OpenAI’s reason for merging is the hybrid: a research agent stalls at a login, an action agent cannot synthesise. We had no data on that hybrid, so we built a task for it (the last two sections).
On the name. Size is the wrong axis: one in-site task took one of our runs 85 tool calls. The field already has deep research (or agentic search) and web navigation (or computer use). We say open-web research and in-site action because the names say where the truth lives and match WebArena’s own split.
What our runs show
Pass rates by lane
| Lane | Where the truth lives, and how it is graded | Runs | Passed | Spend |
|---|---|---|---|---|
| Open-web research: 12 AssistantBench tasks, glm-5.3-flash, live web | the web; final answer string | 365 | 66 correct (18%), 23 partial | $11.70 |
| In-site read: four live news and shopping sites | the page; checked against an independent read of the same page | 128 | 98 pass of 121 gradable (81%) | $0.48 |
| In-site action: our to-do and CRM replicas | the replica’s data: target state, nothing else changed, answer, injection fence, proof the agent read the data | 95 | 69 pass of 85 gradable (81%) | $1.06 |
| Research, then act: one Wikipedia fact, one to-do write | the replica’s data, plus proof the fact was read off-site | 6 | 5 pass; the sixth ran out of budget mid-write | $0.66 |
An in-site action run cost a median of $0.0066 (mean $0.0111, p90 $0.0244, over 95 runs). Failed runs were cheaper than passing ones ($0.0043 vs $0.0086 median): in-site action mostly fails by stopping early with a wrong answer, not by grinding. An open-web research run cost about $0.032.
How each lane fails
| Open-web research (365 runs) | In-site read, live (30 not passing) | In-site action (26 not passing) | |
|---|---|---|---|
| Wrong answer, stated confidently | 157 (43% of all runs) | 16: links to articles the page does not carry, wrong titles, wrong rows | 8: wrong count (4 vs 5), missed overdue tasks |
| Abstained or blocked (captcha, “could not”) | 62 | — | — |
| Out of time or budget | 57 with no answer | 2 | — |
| Wrong write | n/a | n/a | 5: changed the wrong Dana; a conditional bulk update missed two contacts |
| Changed something it was not asked to | n/a | n/a | 0 of 95 |
| Left the site to search the web | — | 4 | — |
| Task left undone | — | — | 3 |
| Could not be graded | — | 7 (our independent read failed) | 10 |
Three findings.
1. Research fails on facts. Action fails on things. The main research failure is a fluent, wrong answer: 157 of 365 runs. Add the 62 abstentions and only 66 were right. In-site action never wrote outside its target. Its wrong writes were all entity resolution (which of two contacts called Dana?) or conditions (which contacts qualify for the bulk update?). None invented a record.
Both patterns match published work. BrowseComp measured calibration error, how far a model’s stated confidence sits from its accuracy, and found it higher with browsing: 82% for GPT-4o with browsing against 69% without, and 91% for Deep Research. Its authors suggest “access to web tools may increase the model’s confidence in incorrect answers.”1 On the action side, ST-WebAgentBench found that three open agents completed 24.3% of its tasks on average, but only 15.0% while also keeping the site’s rules. Its examples include an agent asked to edit a CRM record that deleted a user instead, and one asked to create a single account that invented extra entries.10 Those agents date from 2024. Our runs are 2026 cheap models, and the failure has narrowed: no invented records and no stray deletions, but still the right change to the wrong thing.
So the two need different defences. Research needs source attribution and a grader that checks sources, which is why Mind2Web 2 grades attribution.5 Action needs a check before the write.
2. In-site reading is a third class, and it fails like research. The live in-site read lane never writes. Its worst failures look like open-web failures in miniature: links the page does not carry, wrong titles, and 4 runs that went off to a search engine when the answer was on the page. We added a check for that drift only because the agent does it on its own. So there are two axes, not one:
| read | write | |
|---|---|---|
| one site | in-site read | in-site action |
| open web | open-web research | research, then act |
3. The tool mix flips. In research runs, 8.4% of tool calls are interactions (click, type, key press, select); the rest is navigating (30%), running scripts (28%) and reading the page (26%). In in-site action runs, interactions are 34.6% of 1,535 calls. The research-then-act runs land on the action side, at 31.1% of 463 calls. Research agents read. Action agents operate controls. A tool that makes reading cheaper mostly helps research; a tool that makes controls explicit mostly helps action.
Each job needs different tools
Open-web research needs search and a page cache. Live-web scores cannot be repeated: pages change, search results change. So we cache every page and every search, and charge each cache hit the time the real fetch took (see Agent performance and virtual clock). That tooling exists to make research measurable. In-site action does not need it, because a replica resets to a known state.
In-site reading needs typed readers. On the four live sites, a typed reader passed the same tasks for about a third of the tokens. Medians over 18 runs per arm, glm-5.3-flash:
| How the agent reads the page | Passed | Median input tokens | Median cost |
|---|---|---|---|
| accessibility tree + scripts it writes | 17/18 | 16,519 | $0.0033 |
| typed reader | 17/18 | 6,144 | $0.0014 |
This is the WebMCP idea, a page that declares its own tools (our post on it). Its first beneficiary is reading, which also helps open-web research once the agent lands on a known site.
In-site action needs approval before a change, and typed writes. Every write our action runs got wrong was a plausible write to the wrong thing. A person reading a card that says “set Dana Levi (haifaport-tech) lifecycle to SQL” catches that; a pass rate does not. Among seven agent products we surveyed, the ones that ask first ask before named risky classes (buy, publish, send).1611 Ours asks per action, before any click that changes the page.
Typed tools for one site do not yet transfer to the next. A cheap-model generator of site tools passed 29 of 40 sites it had been developed on, and 2 of 7 it had never seen.
The hand-off: research, then act
OpenAI merged its products because of tasks that do both. The benchmarks hint that these are hard. BEARCUBS asks 111 questions that need real interaction on live pages to answer; people answer 84.7%, and the best agent it reports reached 65.8%.17 WebChoreArena adds 532 long, memory- and calculation-heavy chores to the WebArena sites.18 Neither isolates the moment a fact found in one place becomes a write in another. So we built a task that does.
The task. Read the Falkirk Wheel’s official opening date from its English Wikipedia article, then add a to-do “Falkirk Wheel anniversary” to the Personal project, due on that day and month in 2027. The date (24 May) is nowhere in the to-do app. The grader checks three things:
- the stored task: right project, due 2027-05-24, still open;
- nothing else in the app changed;
- the run reached Wikipedia and the text “24 May 2002” appeared in one of its tool results. This rules out a right answer from memory.
The replica normally refuses every connection to any other host. A task can now name the outside sites it needs, and only those are let through, via an outbound proxy system.
The runs. Six attempts across three cheap models, $0.66 in all:
| Model | Result | Tool calls | Before returning to the app | Cost | Time |
|---|---|---|---|---|---|
| glm-5.3-flash | pass | 57 | 2 | $0.059 | 116 s |
| glm-5.3-flash | pass | 81 | 6 | $0.074 | 156 s |
| glm-5.3-flash | pass | 76 | 2 | $0.122 | 151 s |
| deepseek-v4.1-flash | pass | 143 | 4 | $0.100 | 251 s |
| deepseek-v4.1-flash | pass | 69 | 3 | $0.045 | 77 s |
| gemini-3.8-flash | out of budget | 37 | 11 | $0.261 | 91 s |
It did not break at the hand-off. All six runs read 24 May from Wikipedia and carried it into the app. None wrote a wrong date. The failure we expected, a wrong fact turned into a correct-looking write, did not happen. The effort and the trouble were all on the write side:
- A login wall. In all five passing runs the app’s “Log in” dialog opened over the quick-add box mid-save; the agent signed in and carried on.
- The date picker. Three of the five passing runs gave up on the picker and set the date field’s value with a script.
- Checking its own work. Every passing run queried the app’s data 3 to 5 times to confirm the save.
- The one non-pass. gemini typed the task and date into quick-add, then started reading the app’s 324 KB JavaScript bundle to learn how it parses dates. Its input reached 306,210 tokens, it hit its $0.26 budget and was stopped before it pressed Enter. A budget cut, not a wrong write.
Same write, three lookups
To hold difficulty fixed, we ran the same write with three different lookups, graded by the same function:
- given: the date is in the prompt;
- URL given: the agent is told which Wikipedia page to read;
- find it: the agent is told to find the date on the web.
glm-5.3-flash:
| Lookup | Passed | Tool calls | Median cost |
|---|---|---|---|
| none (date given) | 2/2 | 92, 51 | $0.079 |
| URL given | 3/3 | 57, 81, 76 | $0.074 |
| find it | 2/2 | 66, 66 | $0.058 |
| search engine named (DuckDuckGo) | 1/2 | 67, 50 | $0.036 |
The lookup is noise next to the write. With no lookup at all, the same write took 51 to 92 calls and cost $0.035 to $0.123. That spread is wider than any gap between rows. At this difficulty, adding research did not measurably change cost, calls or pass rate. With two or three runs per row, that is all these numbers can say.
The search engine was the wall, not the research. In the “find it” row, both agents first tried Google, which the task did not allow, then typed the Wikipedia address from memory. So that row never searched. We reran it on 2026-10-10 with the search engine named in the prompt and allowed. Through a basic proxy system, the search engine answered both runs with a bot challenge (“Unfortunately, bots use DuckDuckGo too”). One run gave up on it within two calls, searched Wikipedia’s own search box instead, and passed. The other spent 39 of its 50 tool calls running scripts against the challenge page, never reached the to-do app, and failed. This is the first research-side failure in any of our hybrid runs, and it is about access, not reasoning: on the open web, a search page can refuse an agent outright, and the agent has to notice and route around it.
What we did not prove
- Search access. Our one real search attempt hit a bot challenge on both runs. We have not yet measured search through an advanced proxy system or a search API, which is how a product would do it.
- The research half here was easy. One fact, an unambiguous date, on a page everyone knows. The harder case, where search returns a plausible wrong date, is not measured yet. That is where we expect the hand-off to break.
- Our research grader checks the answer, not its sources. Mind2Web 2 and DeepSearchQA show how to do better.53
- We wrote the in-site tasks, so their pass rates are about our tasks, not about the web at large.
- Small samples. The hybrid and ladder rows are 2 to 6 runs each.
Prior art and how we differ
- WebArena already sorts tasks into seeking, navigating and changing, and grades each correctly.2 We add a failure-mode comparison across those classes on one agent loop, a check that nothing else changed, and a research-then-act task with proof the fact was read off-site.
- Online-Mind2Web showed that scores from earlier live-site benchmarks are inflated: agents reported “close to 90%” on an earlier live benchmark, while on its 300 tasks the best, OpenAI’s Operator, reached 61.3% by human evaluation and most others about 30%.9 We avoid part of that by grading in-site work on data we can read, at the cost of writing the tasks ourselves.
- Mind2Web 2 and DeepSearchQA grade research on attribution and completeness.53 Ours does not yet.
Verdict, in one line: the micro/macro split is real, but it is two axes, where the truth lives and whether the run writes, and at today’s difficulty the write, not the research, is where an agent spends its effort and makes its mistakes.
Footnotes
-
Wei et al., BrowseComp: A Simple Yet Challenging Benchmark for Browsing Agents, 2025. Calibration error, Table 3. https://arxiv.org/abs/2504.12516 ↩ ↩2
-
Zhou et al., WebArena: A Realistic Web Environment for Building Autonomous Agents. https://arxiv.org/abs/2307.13854 ↩ ↩2 ↩3
-
Google DeepMind, DeepSearchQA, 900 prompts across 17 fields. https://arxiv.org/abs/2601.20975 ↩ ↩2 ↩3
-
Drouin et al., WorkArena: How Capable are Web Agents at Solving Common Knowledge Work Tasks? https://arxiv.org/abs/2403.07718 ↩
-
Gou et al., Mind2Web 2: Evaluating Agentic Search with Agent-as-a-Judge, NeurIPS 2025. https://arxiv.org/abs/2506.21506 ↩ ↩2 ↩3 ↩4 ↩5
-
Xie et al., OSWorld, NeurIPS 2024. https://arxiv.org/abs/2404.07972 ↩
-
Mialon et al., GAIA: a benchmark for General AI Assistants, ICLR 2024. https://arxiv.org/abs/2311.12983 ↩
-
Yoran et al., AssistantBench: Can Web Agents Solve Realistic and Time-Consuming Tasks?, EMNLP 2024. https://arxiv.org/abs/2407.15711. Our 12-task sample (Medium and Hard only) is graded on the final answer line; 365 runs. ↩
-
Xue et al., An Illusion of Progress? Assessing the Current State of Web Agents. https://arxiv.org/abs/2504.01382 ↩ ↩2
-
Levy et al., ST-WebAgentBench: A Benchmark for Evaluating Safety and Trustworthiness in Web Agents. 222 tasks, six policy dimensions; average completion 24.3% vs 15.0% completion under policy across three open agents. https://arxiv.org/abs/2410.06703 ↩ ↩2
-
OpenAI, Introducing Operator, 2025-01-23. https://openai.com/index/introducing-operator/ ↩ ↩2
-
OpenAI, Introducing ChatGPT agent: bridging research and action, 17 July 2025. https://openai.com/index/introducing-chatgpt-agent/. Read 2026-10-07; the page now calls itself outdated. ↩
-
Google, Project Mariner. https://labs.google.com/mariner. Read 2026-10-07. Shutdown on 4 May 2026 also reported by Gigazine, 7 May 2026. https://gigazine.net/gsc_news/en/20260507-google-shuts-down-project-mariner ↩
-
Perplexity, Introducing Comet, 2025-07-09. https://www.perplexity.ai/hub/blog/introducing-comet ↩
-
Anthropic, How we built our multi-agent research system. https://www.anthropic.com/engineering/multi-agent-research-system ↩
-
Anthropic, Piloting Claude for Chrome. https://www.anthropic.com/news/claude-for-chrome ↩ ↩2
-
Song et al., BEARCUBS: A benchmark for computer-using web agents. 111 questions; human accuracy 84.7%, ChatGPT agent 65.8% (latest arXiv version). https://arxiv.org/abs/2503.07919 ↩
-
Miyai et al., WebChoreArena: Evaluating Web Browsing Agents on Realistic Tedious Web Tasks. 532 tasks on the WebArena environments. https://arxiv.org/abs/2506.01952 ↩