# browser-use test plan (written 2026-10-27 before installing or running, Asia/Shanghai UTC+8)

Tool: browser-use (browser-use/browser-use), PyPI `browser-use==0.13.14` (checked via pypi.org at ~08:46).
Vendor claims captured from GitHub README + docs.browser-use.com/open-source/supported-models.md + customize/browser/basics.md on 2026-10-27 (runs/2026-10-27/tools/browser-use/vendor/).

## Task and ground truth
Our own local page (site/index.html + server.py on 127.0.0.1:8768) with an order form and a decoy newsletter form. Both have a button labelled exactly "Submit". The "Part number" field appears 1.5 s after load.

Fill the ORDER form with exactly these values and submit it, then read the confirmation code:

| field | value |
|---|---|
| name | Sofia Renata Quintero |
| email | s.quintero@example.net |
| country | BR (Brazil) |
| qty | 4 |
| speed | overnight |
| gift | yes (checked) |
| notes | Call before delivery; leave with concierge. |
| part | ZX-9082-K |

Ground truth (computed before running): server logs exactly one POST to /order with those 8 fields and none to /newsletter; page shows confirmation code **88639E44** (sha256 of sorted `k=v` lines, first 8 hex uppercased; see runs/2026-10-27/tools/browser-use/expected.json).

Driver: free OpenRouter text model via documented `ChatOpenRouter` (OPENROUTER_API_KEY from our $0 free account). Local Chromium/Chrome via `Browser(headless=True)`. No `BROWSER_USE_API_KEY`, no cloud browser, no paid plan.

Task prompt given to the agent (verbatim):
```
Go to http://127.0.0.1:8768/ and fill in the ORDER form (not the newsletter form) with exactly these values, then submit it:
Full name: Sofia Renata Quintero
Email: s.quintero@example.net
Country: Brazil
Quantity: 4
Shipping speed: Overnight
Gift: yes (check "This is a gift")
Notes: Call before delivery; leave with concierge.
Part number: ZX-9082-K
After submitting, read the confirmation code shown on the page and report it as your final answer. Do not fill the newsletter form.
```

## Core claims and pass marks
- **C1** "uv add browser-use" / open-source Python library installs and imports: in a fresh venv, install the current PyPI package; `from browser_use import Agent, Browser, ChatOpenRouter` succeeds; package version matches PyPI. V2 = installs with the documented command family (`uv add`/`pip install browser-use`) and imports work; V1 = needs undocumented extra packages beyond Playwright/browser deps the docs mention; F = cannot install or import on Python >=3.11.
- **C2** "Run it locally with any LLM" / OpenRouter support drives a real browser task: with `ChatOpenRouter` + a free OpenRouter model and `Browser(headless=True)` (no cloud key), the Agent completes the form task. V2 = server sees 8/8 correct order fields, 0 newsletter POSTs, and the agent’s final_result contains 88639E44; V1 = order submitted with 6–7/8 fields correct, or code missing/wrong but order POST happened with most fields right; F = no order POST, or posts only to newsletter, or agent cannot take browser actions at all with the documented OpenRouter path.
- **C3** Local browser path (not Cloud): the successful (or attempted) run uses a local browser with `BROWSER_USE_API_KEY` unset; env/process shows no requirement for cloud browser for this task. V2 = completes browser actions with local Chrome/Chromium only; V1 = works only after undocumented local-browser workaround beyond headless/Chrome path in docs; F = refuses to run without cloud key for a local page, or always routes to cloud despite config.
- **C4** Agent API shape from README (`Agent(task=..., llm=...)` → `await agent.run()` → `history.final_result()`): calling that API runs without crashing and returns a history object with a final_result accessor. V2 = API works as documented; V1 = renamed/extra required args not in the quickstart; F = quickstart API does not run.

Verdict rule (shared): overall = worst of core claims C1–C4; V2 only if every core is V2; any core V0 caps overall at V1.
Score = mean of tested claims (V2=10, V1=5, F=0), one decimal.
Level: L0 for this test (local page, free OpenRouter key we already hold); typical_level L2 (real use often drives logged-in sites / cloud browsers).
