Constructing Challenging Browser-Use Tasks by Controlled Environment Interventions
Organizations: Duke University · Amazon
Abstract
As browser-use agents improve, benchmarks keep pace by adding new tasks, websites, and applications. Doing so is costly, and because many factors change at once, it is unclear what makes the new tasks harder. In this work, we instead make existing tasks harder by changing the environment in which they are performed, so that difficulty becomes a programmable property of the environment. We introduce BreakingWeb, in which each task is run twice: once on an unmodified website and once under an intervention, a controlled change to the website's content, server state, network responses, or rendered page. Each intervention is reproducible, keeps the user instruction and success criterion fixed, can be detected and worked around by a competent user, and is labeled with the behavior that recovery from it mainly requires, such as verification. BreakingWeb contains task pairs on seven self-hosted websites, and each run is scored on the website's final backend state. We evaluate six strong browser-use agents, three agents that observe only screenshots, and human participants. Interventions lower the pass rates of the six browser-use agents by percentage points on average, and each agent fails on nearly half of the tasks it solves on the unmodified website. Humans are affected much less: their pass rate drops by points on the first attempt and by points when they repeat the task. Most failures of the six agents () are belief failures, in which the agent declares the run finished although a required change was never made. Our code, data, and environments are available at https://www.breakingweb.app.
Figures & tables
| Primitive | Recovery behavior it requires | Representative interventions |
| Grounding | Identify the correct UI target among noise, decoys, and adversarial content. | phishing emails, decoys & aliases, label-input misalignment |
| Planning | Decompose a goal into ordered sub-goals and revise the plan as new information arrives. | scrambled timestamps, missing prerequisites |
| State tracking | Track which steps are done and which are pending across a long trajectory, including out-of-order updates. | shuffled lists, scrambled timestamps, stale responses |
| Backtracking | Detect a blocked path, revert to a prior decision point, and try an alternative. | transient errors, 409 conflict, planted wrong answer |
| Patience | Wait or retry at a suitable rate when responses are slow, unreliable, or rate-limited. | tail latency, progressive delay, transient errors |
| Exploration | Find another way to act when the obvious path is blocked. | hidden target, hidden affordance, restricted affordance set |
| Per primitive | ||||||||
| Agent | Total | Grounding | Plan | State. | Back. | Patience | Expl. | Verif. |
| Gemini-3.1-Pro | 44.5 27.6 | 42.3 34.5 | 59.6 9.6 | 48.8 13.1 | 40.2 37.8 | 48.0 24.0 | 37.8 10.8 | 40.8 39.4 |
| Gemini-3-Flash | 42.6 20.6 | 34.5 22.0 | 61.5 3.8 | 47.6 13.1 | 42.7 35.4 | 48.0 4.0 | 43.2 8.1 | 39.4 33.8 |
| GPT-5.4 | 35.1 26.2 | 26.8 28.6 | 44.2 28.8 | 36.9 14.3 | 41.5 35.4 | 52.0 4.0 | 29.7 13.5 | 35.2 36.6 |
| GPT-5.4-mini | 15.2 17.9 | 15.5 14.3 | 15.4 11.5 | 17.9 8.3 | 8.5 36.6 | 8.0 20.0 | 18.9 2.7 | 19.7 28.2 |
| Opus-4.7 | 31.6 22.9 | 29.2 24.4 | 23.1 21.2 | 31.0 19.0 | 37.8 29.3 | 32.0 8.0 | 27.0 5.4 | 39.4 32.4 |
| Mode | Count | Identification rule |
| misleading success taken | 1,454 | Final action is a done verb; a positive check failed; final thought contains saved/success/submitted/confirmed/added/starred/completed/done/sent |
| premature done | 433 | Final action is a done verb; a positive check failed |
| retry loop | 790 | At least identical consecutive actions |
| plan collapse | 24 | No done verb; run length |
| silent overreach | 336 | Final action is a done verb; no positive check failed; a negative check failed |
| selector hallucination | 0 | action errors; all such runs match an earlier rule in this evaluation |
| Model | Fail | Belief | Action | Over. | FPR |
| Gemini-3.1-Pro | 288 | 70.8% | 3.1% | 26.0% | 54% |
| Gemini-3-Flash | 298 | 73.5% | 2.3% | 24.2% | 57% |
| GPT-5.4 | 337 | 76.9% | 1.8% | 21.4% | 65% |
| GPT-5.4-mini | 440 | 82.7% | 2.3% | 15.0% | 85% |
| Opus-4.7 | 245 | 61.6% | 24.5% | 13.9% | 55% |
| Sonnet-4.6 | 233 | 78.5% | 16.7% | 4.7% | 58% |
| Cond. | Attempt | Pass | Time | Events |
| clean | cold | 76.4% | 75.7 | 37 |
| clean | warm | 80.7% | 32.3 | 26.5 |
| interv. | cold | 66.4% | 82.0 | 47 |
| interv. | warm | 75.0% | 39.7 | 32 |
Appendix figures & tables33 assets
Supplementary material from the paper’s appendix.
Appendix
| ## goal: Browse the Electronics category, find the cheapest item available, and |
| add it to your cart. |
| ## last_action: click('a14') |
| ## last_action_error: |
| ## url: http://localhost:8000/env/amazon/category/electronics?sort=price-asc |
| RootWebArea "Amazon -- Electronics" |
| [a3] navigation "Primary" |
| Model family | Provider docs cited | Viewport (w h) | Aspect |
| Gemini-3.x, Qwen3-VL | default | 16:9 | |
| Claude (Opus, Sonnet) | Anthropic computer-use | 4:3 | |
| GPT-5.x, GPT-4o | OpenAI CUA | 16:9 |
| Action call | Effect |
| click(’a51’) | Click the element with bid a51 . |
| dblclick(’12’) | Double-click the element. |
| fill(’b22’, ’hello’) | Fill a text field with the given string. |
| clear(’b22’) | Clear a text field. |
| focus(’b22’) | Focus an element without clicking. |
| hover(’d7’) | Hover over an element. |
| Action call | Effect |
| mouse_click(x, y) | Click at . |
| mouse_dblclick(x, y) | Double-click at . |
| mouse_move(x, y) | Move the pointer without clicking. |
| mouse_drag_and_drop(x1, y1, x2, y2) | Drag from to . |
| keyboard_type(’text’) | Type the given string into the focused element. |
| keyboard_press(’Enter’) | Press a single key. |
| Environment | Domain | Tasks | Endpts. | Graded collections (entity type) |
| Gmail | 84 | 33 | emails ( Email ), drafts , sent , labels , filters , contacts | |
| Amazon | E-commerce | 70 | 56 | cart_items , orders ( Order ), returns , addresses , payment_methods , reviews , wishlist |
| Social | 81 | 45 | posts ( Post ), comments , messages , notifications , subscriptions , saved_post_ids | |
| Robinhood | Finance | 71 | 57 | orders , options_orders , positions , watchlists , transfers , recurring_investments |
| Booking | Travel | 78 | 53 | reservations ( Reservation ), reviews , saved_lists , messages , transactions |
| LMS | Education | 65 | 46 | assignments , grades , discussions , discussion_posts , peer_reviews , enrollments |
| Level | Tasks | Med. steps | Med. time (s) | Operational criterion |
| easy | 79 | 10 | 180 | Single-action goal on one collection (e.g. mark one email as read). |
| medium | 118 | 15 | 240 | Sequential edit on one or two collections; no set-valued obligation. |
| hard | 132 | 22 | 360 | Multi-collection goal with at least one set-valued obligation. |
| expert | 98 | 30 | 420 | Multi-collection goal that requires reading derived state (filtered list, computed total, ranking). |
| frontier | 92 | 45 | 540 | Cross-collection long-horizon goal with 3 obligations and at least one negative invariant on adjacent state. |
| Class | Key | Semantics | Example |
| Scalar | eq | exact (or fuzzy numeric) match | quantity: {eq: 1} |
| in | membership in a literal list | status: {in: [paid, pending]} | |
| between | numeric range, inclusive | rating: {between: [4, 5]} | |
| any | always true (placeholder) | added_at: {any: true} | |
| expr | sandboxed Python expression on x / target / state | {expr: "x == target[’id’]"} | |
| Collection | set_eq | set equality | labels: {set_eq: [inbox, work]} |
| Environment | Tasks | Avg. inst. words | Avg. exp. steps | Avg. time limit (s) |
| Gmail | 84 | 103.4 | 38.9 | 440 |
| 81 | 50.2 | 29.4 | 394 | |
| Amazon | 70 | 46.3 | 28.6 | 358 |
| Booking | 78 | 95.0 | 24.1 | 346 |
| Patient Portal | 70 | 45.8 | 23.4 | 349 |
| LMS | 65 | 50.2 | 20.3 | 323 |
| Environment | Ground. | Plan. | State | Backtrk. | Patience | Explore | Verify |
| Amazon | 18 | 7 | 13 | 16 | 4 | 3 | 9 |
| Booking | 35 | 4 | 5 | 10 | 5 | 1 | 18 |
| Gmail | 25 | 2 | 13 | 16 | 5 | 9 | 14 |
| LMS | 10 | 17 | 10 | 2 | 2 | 10 | 14 |
| Patient Portal | 15 | 16 | 11 | 16 | 6 | 6 | |
| 55 | 11 | 9 | 6 |
| Layer | Ground. | Plan. | State | Backtrk. | Patience | Explore | Verify | Total |
| Seed | 182 | 18 | 81 | 17 | 1 | 36 | 26 | 361 |
| Server | 20 | 31 | 32 | 0 | 6 | 11 | 2 | 102 |
| Network | 68 | 37 | 47 | 89 | 38 | 16 | 65 | 360 |
| Client | 11 | 4 | 2 | 0 | 6 | 8 | 8 | 39 |
| Layer | Families | Dispatches | Primary primitives targeted |
| Seed | 7 | 14 | grounding, state tracking, exploration, backtracking, verification |
| Server | 5 | 10 | planning, state tracking, grounding, exploration, verification |
| Network | 7 | 8 | patience, verification, backtracking, state tracking |
| Client | 10 | 16 | grounding, verification, exploration, backtracking, patience |
| Total | 29 | 48 | all seven primitives |
| Layer | Family | Primary primitives | Records | Representative dispatch |
| Seed | Decoys & aliases | ground., state | 294 | add_confusing_decoys |
| Adversarial content | ground., verify | 7 | inject_adv_content | |
| Split information | state | 0 | split_information | |
| Contradictory update | state, plan | 11 | add_contradictory_update | |
| Content inflation | ground., explore | 20 | inflate_target_content | |
| Planted wrong answer | verify, ground. | 21 | plant_wrong_answer |
| Model | Snapshot identifier | Provider | Decoding |
| Claude-Opus-4.7 | claude-opus-4-7 | Anthropic / Bedrock | default temp. |
| Claude-Sonnet-4.6 | claude-sonnet-4-6 | Anthropic / Bedrock | default temp. |
| GPT-5.4 | gpt-5.4 | OpenAI | temp. omitted, reasoning_effort=medium |
| GPT-5.4-mini | gpt-5.4-mini | OpenAI | temp. omitted, reasoning_effort=medium |
| Gemini-3.1-Pro | gemini-3.1-pro | default temp. | |
| Gemini-3-Flash | gemini-3-flash-preview | default temp. |
| Model | Clean Pass / Score | Intervention Pass / Score | Pass [95% CI] | Score [95% CI] |
| Kimi-K2.5 | 32.4% / 0.463 | 18.1% / 0.310 | 14.3 [10.0, 18.5] | 0.153 [0.116, 0.190] |
| Qwen3-VL-235B | 21.2% / 0.352 | 9.1% / 0.211 | 12.1 [8.9, 15.6] | 0.141 [0.106, 0.176] |
| Filter | Effect |
| with_clickable=True | Annotates clickable nodes with the clickable role marker so the agent can prefer them over decorative elements. |
| with_visible=True | Annotates each node with its visible flag from the BrowserGym extra-properties dict. |
| filter_visible_only=True | Drops nodes whose computed visibility is false (off-screen, display:none , or covered). |
| filter_with_bid_only=True | Drops nodes that lack an addressable bid so the agent cannot emit an action against an unaddressable target. |
| Post-formatting cleanup: | |
| ASCII-control characters ( \x00 – \x1f excluding tab and newline) are stripped before serialization. | |
| Model | Runs | Pass | Median s | Mean s | p90 s | Total hr |
| Gemini-3.1-Pro | 1038 | 58.3% | 189 | 240 | 515 | 69.3 |
| Gemini-3-Flash | 1038 | 52.9% | 98 | 128 | 260 | 36.8 |
| GPT-5.4 | 1038 | 48.2% | 129 | 165 | 364 | 47.7 |
| GPT-5.4-mini | 1038 | 24.2% | 61 | 78 | 154 | 22.6 |
| Opus-4.7 | 1038 | 43.1% | 498 | 534 | 999 | 154.0 |
| Sonnet-4.6 | 1038 | 39.2% | 692 | 783 | 1305 | 225.6 |
| Asset | Contents |
| Code | Harness, seven environment SPAs, evaluator, intervention dispatcher, and the scripts that regenerate every figure and table from the trajectory bundle. |
| Task and variant YAMLs | base task YAMLs paired one-to-one with intervention variants drawn from intervention families. |
| Trajectory bundles | Per-trajectory raw artifacts and the aggregated agent and human tables on which the paper’s numbers are computed. |
| Per primitive | ||||||||
| Model | Total | Grnd | Plan | State | Back | Patnce | Expl | Verif |
| Gemini-3.1-Pro | 72.1 44.5 p +27.6 / s +0.18 | 76.8 42.3 p +34.5 / s +0.20 | 69.2 59.6 p +9.6 / s +0.08 | 61.9 48.8 p +13.1 / s +0.04 | 78.0 40.2 p +37.8 / s +0.32 | 72.0 48.0 p +24.0 / s +0.17 | 48.6 37.8 p +10.8 / s 0.02 | 80.3 40.8 p +39.4 / s +0.29 |
| Gemini-3-Flash | 63.2 42.6 p +20.6 / s +0.14 | 56.5 34.5 p +22.0 / s +0.15 | 65.4 61.5 p +3.8 / s +0.03 | 60.7 47.6 p +13.1 / s +0.09 | 78.0 42.7 p +35.4 / s +0.28 | 52.0 48.0 p +4.0 / s +0.01 | 51.4 43.2 p +8.1 / s 0.01 | 73.2 39.4 p +33.8 / s +0.24 |
| GPT-5.4 | 61.3 35.1 p +26.2 / s +0.20 | 55.4 26.8 p +28.6 / s +0.22 | 73.1 44.2 p +28.8 / s +0.23 | 51.2 36.9 p +14.3 / s +0.09 | 76.8 41.5 p +35.4 / s +0.29 | 56.0 52.0 p +4.0 / s +0.05 | 43.2 29.7 p +13.5 / s +0.08 | 71.8 35.2 p +36.6 / s +0.30 |
| GPT-5.4-mini | 33.1 15.2 p +17.9 / s +0.18 | 29.8 15.5 p +14.3 / s +0.15 | 26.9 15.4 p +11.5 / s +0.14 | 26.2 17.9 p +8.3 / s +0.11 | 45.1 8.5 p +36.6 / s +0.36 | 28.0 8.0 p +20.0 / s +0.19 | 21.6 18.9 p +2.7 / s +0.03 | 47.9 19.7 p +28.2 / s +0.22 |
| Opus-4.7 | 54.5 31.6 p +22.9 / s +0.19 | 53.6 29.2 p +24.4 / s +0.20 | 44.2 23.1 p +21.2 / s +0.27 | 50.0 31.0 p +19.0 / s +0.15 | 67.1 37.8 p +29.3 / s +0.24 | 40.0 32.0 p +8.0 / s 0.01 | 32.4 27.0 p +5.4 / s +0.01 | 71.8 39.4 p +32.4 / s +0.25 |
| Mode | Ground. | Plan. | State | Backtrk. | Patience | Explore | Verify |
| misleading_success_taken | 443 | 91 | 132 | 216 | 37 | 66 | 149 |
| premature_done | 72 | 28 | 42 | 37 | 10 | 21 | 36 |
| retry_loop | 36 | 14 | 20 | 9 | 21 | 13 | 10 |
| plan_collapse | 0 | 0 | 3 | 2 | 2 | 0 | 1 |
| silent_overreach | 85 | 28 | 87 | 25 | 14 | 34 | 57 |
| Model | Mean steps (fail) | Mean steps (pass) | Fail Pass |
| Gemini-3.1-Pro | 15.2 | 13.4 | |
| Gemini-3-Flash | 16.9 | 11.7 | |
| GPT-5.4 | 14.6 | 14.6 | |
| GPT-5.4-mini | 10.1 | 9.4 | |
| Opus-4.7 | 13.0 | 10.3 | |
| Sonnet-4.6 | 13.8 | 9.7 |
| Merged group | Original primitives | Rationale |
| Grounding | grounding | observation / disambiguation primitive, kept distinct |
| Search/Planning | planning, exploration | both involve finding or sequencing paths |
| State reasoning | state_tracking, verification | both involve reasoning about state |
| Recovery | backtracking | recovery after a wrong or blocked path is its own behavior |
| Temporal robustness | patience | waiting / retrying under latency is distinct from recovery |
| Environment | Ground. | Plan. | State | Backtrk. | Patience | Explore | Verify |
| Amazon | 0.23 | 0.39 | 0.17 | 0.45 | -0.01 | 0.01 | 0.47 |
| Booking | 0.07 | 0.02 | 0.09 | 0.12 | -0.06 | 0.10 | 0.23 |
| Gmail | 0.08 | -0.04 | 0.03 | -0.00 | 0.09 | -0.01 | 0.27 |
| LMS | 0.08 | 0.12 | 0.07 | 0.21 | 0.00 | -0.00 | 0.12 |
| Patient Portal | 0.18 | 0.20 | 0.12 | 0.34 | 0.02 | 0.26 | |
| 0.35 | 0.25 | 0.45 | 0.42 |
| Environment ( ) | mislead. succ. | prem. done | retry_loop | plan_coll. | silent_over. |
| Amazon (237) | 69.2% | 15.6% | 3.0% | 0.0% | 12.2% |
| Booking (229) | 68.6% | 8.7% | 4.4% | 1.3% | 17.0% |
| Gmail (312) | 70.5% | 13.1% | 9.6% | 1.3% | 5.4% |
| LMS (190) | 65.3% | 14.7% | 3.2% | 0.0% | 16.8% |
| Patient Portal (226) | 72.6% | 16.8% | 4.9% | 0.4% | 5.3% |
| Reddit (404) | 57.9% | 11.6% | 4.7% | 0.0% | 25.7% |
| Case | Category | Target primitive | Layer | Model | Environment |
| A | PR / BF | grounding | seed | Opus-4.7 | Amazon |
| B | PR / BF | backtracking, verification | network | Gemini-3.1-Pro | Robinhood |
| Item | Description |
| Clarity ( – ) | Was the instruction understandable as written? |
| Realism ( – ) | Does this feel like a task a real user would attempt on the corresponding production website? |
| Fun / demo value ( – ) | Would this task work as a demo for others? |
| Intervention naturalness ( – ) | Intervention runs only: did the complication feel plausibly like something a real user might encounter? |
| Issue flags (binary): | |
| Suspected bug | Evaluator failed on what looked like a clean success, or the intervention behaved unexpectedly. |
| Statistic | Value |
| Duplicate task-conditions covered | 35 |
| Total duplicate attempts | 70 |
| Pairwise warm success agreement | 68.6 % |
| Median duplicate-warm raw-event ratio | 1.58 |
| Pairs within warm raw events | 28.6 % |
| Pairs within warm raw events | 42.9 % |
| Annotator | Cold clean | Warm clean | Cold intv. | Warm intv. |
| A1 | 88.6% | 85.7% | 68.6% | 71.4% |
| A2 | 82.9% | 82.9% | 74.3% | 71.4% |
| A3 | 74.3% | 80.0% | 62.9% | 80.0% |
| A4 | 60.0% | 74.3% | 60.0% | 77.1% |
Web Agents
Web agents use language and vision models to navigate websites, gather information, and complete tasks through interactive interfaces.
See all 174 papers