10299 Commits
Author SHA1 Message Date
Magnus Müller 4cbe921673 Fix Actor input semantics and add CDP primitives (#5889)
Actor input primitives can diverge from the normal Browser Use action
handlers: offscreen clicks use stale coordinates, native dropdown
selection can silently fail, and literal keys can miss character events.
This change shares the existing input, keyboard, and dropdown paths and
fixes Actor's CDP input state.

- Measure click and hover coordinates after scrolling; preserve button
and modifier semantics, release pressed buttons on errors, and surface
ambiguous click timeouts.
- Make checkbox checking idempotent. Select native options by label or
value, including option groups, with disabled-option validation and
selection verification.
- Preserve empty append operations, support native date/time filling,
and report navigation errors.
- Track mouse position and held buttons for drag/multi-click operations;
add bounded key holds, screenshot clips, element scrolling, and
browser-host file-input primitives.

Validation: required pre-commit hooks, including Ruff and Pyright; local
headless Chrome assertions for offscreen targets, dropdowns and option
groups, checkboxes, text/date input, mouse/key cleanup, screenshots,
uploads, and failed navigation. These are controlled browser checks, not
a claim of universal website compatibility.

Validation refreshed on September 24 UTC at `95967882`: all required
pre-commit hooks passed (including Ruff and Pyright); focused existing
tests passed 13 with 7 skipped; local Chrome outcome assertions passed
for keyboard input, offscreen clicks/hover, native select and optgroup
behavior, checkbox idempotence, date input, held mouse state, and
cancellation cleanup. GitHub reports 129 successful checks and one
skipped documentation deployment.
2026-09-26 00:29:32 -07:00
MagMueller 95967882f5 Align Actor selection, scrolling, and error handling 2026-09-23 18:38:45 -07:00
MagMueller b4ee353776 Preserve named Actor keys and release held chords reliably 2026-09-23 17:20:50 -07:00
MagMueller 35d65335b2 fix: make actor input operations match browser actions 2026-09-23 16:03:00 -07:00
Magnus Müller d8110c5ff8 docs: add PZERO OpenAI-compatible provider example (#5579) (#5648)
## Why

The supported-models docs already document OpenAI-compatible providers
such as Qwen, ModelScope, and Novita via `ChatOpenAI` + `base_url`.

However, PZERO users currently have to infer the API host, environment
variable, and model ID conventions themselves.

Fixes #5579.

## What changed

Added a **PZERO** section under **OpenAI-Compatible APIs** in
`skills/open-source/references/models.md`.

The documentation includes:

- `ChatOpenAI` configuration with the PZERO `/v1` base URL
- `PZERO_API_KEY` environment variable and link to the PZERO agents page
- Default model: `deepseek-v4-flash`
- Notes on using `/v1` rather than `/v1/chat/completions`
- PZERO catalog model IDs without the `openai/` prefix
- `use_vision=False` for the text-only default model
- Link to the public PZERO model catalog

No provider implementation or code changes are required; this is a
documentation-only change.

## Testing

- [ ] Verified the new PZERO section matches the existing
Novita/ModelScope documentation format
- [ ] Optional: Tested the example with a valid `PZERO_API_KEY`

<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds a PZERO section under OpenAI-Compatible APIs in
`skills/open-source/references/models.md` so PZERO users no longer have
to infer the base URL, env var, and model ID conventions. Fixes #5579.

- Documents `ChatOpenAI` with `base_url="https://api.pzero.studio/v1"`
and `api_key` read from `os.environ["PZERO_API_KEY"]`, so the key must
be set explicitly; links to the PZERO agents page for keys.
- Shows `deepseek-v4-flash` as the default model and notes that catalog
model IDs are passed without the `openai/` prefix.
- Notes the `/v1` base URL (not `/v1/chat/completions`) and the model
list endpoint at `GET https://api.pzero.studio/v1/models` (no auth
required).
- Warns that the default model is text-only, so set `use_vision=False`
unless selecting a vision-capable model.
- Docs-only change; no code changes required.

<sup>Written for commit 4b328e99c6.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/browser-use/browser-use/pull/5648?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->
2026-09-15 15:49:03 -07:00
MagMueller 4b328e99c6 docs: require the PZERO key explicitly 2026-09-15 15:46:55 -07:00
MagMueller 49f73c66df Merge remote-tracking branch 'origin/main' into pr5648 2026-09-15 15:32:13 -07:00
Magnus Müller 843819cb81 docs: point bu-30b-a3b-preview at self-hosting instead of Cloud (#5774)
**Option B of two. Do not merge both.** Sibling: #5773, which deletes
the mentions instead.

## What is broken

`browser-use/bu-30b-a3b-preview` is still a live route in the Cloud
gateway
(`backend/llm_use/gateway/pricing.py` `MODAL_MODELS`, `service.py`
`_call_modal`), but
nothing is serving it. The Modal app behind that route,
`browser-use-llm-prod` in
`browser-use/deploy-llm` (`deploy.py:18`, 2x H200 `min_containers`), was
last deployed on
2025-12-16 and has not been deployed since.

Production, service `browser-use-production-llm-use`, last 90 days: 5
Modal client
initializations and 5 `Modal LLM call failed: Error code: 503`, paired
within 14 seconds.
Every observed call failed. The gateway turns that upstream 503 into a
generic HTTP 500 for
the caller, which is why it reads as "the model does not exist".

## Why not just delete it

The weights are public and people are using them.
https://huggingface.co/browser-use/bu-30b-a3b-preview is a public repo:
31B, 2.34k downloads
in the last month, 265 likes. The model exists. Only our hosting of it
does not.

## What this PR does

Says what the model actually is - open weights you run yourself.

- `examples/models/bu_oss.py` now starts from `vllm serve` and connects
with `ChatOpenAI`
against `http://localhost:8000/v1`. No `BROWSER_USE_API_KEY`, no
dependency on the dead
Cloud route. `BU_OSS_BASE_URL` / `BU_OSS_API_KEY` override the endpoint.
- `browser_use/llm/browser_use/chat.py` - the docstring now says Cloud
does not serve it.
- `skills/open-source/references/models.md` - drops the priceless OSS
pricing row and adds a
short self-hosting section with the vLLM command from the model card and
the weights URL.

Not touched: the gateway route, and
`tests/ci/models/test_llm_browseruse.py:85`.

## Checks

`ruff check`, `ruff format --check` and `git diff --check` clean.
The rewritten example was imported and constructed in this worktree:
`ChatOpenAI(model='browser-use/bu-30b-a3b-preview',
base_url='http://localhost:8000/v1', ...)`
resolves to provider `openai` with that base URL. No agent was run, and
no GPU was started,
so the end-to-end self-hosted run is not claimed here.

<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Updates docs and the example for `browser-use/bu-30b-a3b-preview` so the
model is presented as open weights users host themselves instead of a
Browser Use Cloud model.

- `examples/models/bu_oss.py` now uses a vLLM server and connects via
`ChatOpenAI`, with optional `BU_OSS_BASE_URL`/`BU_OSS_API_KEY`
overrides.
- The `ChatBrowserUse` docstring states the model is self-hosted only
and points to the example.
- The skills model table drops the Cloud pricing row and adds the vLLM
command and weights URL.

<sup>Written for commit 09dbfcbca9.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/browser-use/browser-use/pull/5774?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->
2026-09-13 12:45:27 -07:00
Magnus Müller 09dbfcbca9 Merge branch 'main' into agency/agi-729-oss-model-self-host 2026-09-13 12:43:03 -07:00
Aabid Mohamed 4d66ec432c Merge branch 'main' into docs/pzero-supported-models 2026-09-13 23:49:43 +05:30
Magnus Müller 6e1977daa0 docs: point AI agents and crawlers to llms.txt from the README (#5775)
## Why
A neutral audit of ChatGPT, Perplexity, Google AI Mode, Gemini and
Claude (50 answers) shows every engine describes Browser Use as "an
open-source Python library" and misses the cloud browser, the hosted
agent API and Browser Harness. The README is the most-crawled page we
have, so it should say what the product is and where the
machine-readable map lives.

## Change
One blockquote above "Which Browser Use do I need?" pointing AI agents
and crawlers to https://browser-use.com/llms.txt and
https://docs.browser-use.com/llms.txt, and naming the three surfaces in
one sentence.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_016rqDxQUeLj81KTgS46m72e


<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds a blockquote to the README pointing AI agents and crawlers to the
product's `llms.txt` files so answer engines stop describing Browser Use
as a Python-only library.

The blockquote links to `browser-use.com/llms.txt` and
`docs.browser-use.com/llms.txt` and names all three product surfaces:
the open-source agent, the cloud browser, and the hosted agent API.

<sup>Written for commit d5b77ab66c.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/browser-use/browser-use/pull/5775?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->
2026-09-13 09:27:33 -07:00
MagMuellerandClaude Fable 5.1 d5b77ab66c docs: point AI agents and crawlers to llms.txt from the README
Answer engines describe Browser Use as a Python-only library because
that is what they find first. One line near the top of the README
names the product map at browser-use.com/llms.txt, the docs index, and
the three surfaces (open-source agent, $0.02/hour cloud browser, hosted
agent API).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016rqDxQUeLj81KTgS46m72e
2026-09-12 00:39:18 -07:00
MagMuellerandClaude Opus 5 6f8b0626b6 docs: point bu-30b-a3b-preview at self-hosting instead of Cloud
Browser Use Cloud does not serve `browser-use/bu-30b-a3b-preview`. The gateway
still has the route (cloud `backend/llm_use/gateway/pricing.py` MODAL_MODELS,
`service.py` _call_modal), but the Modal app behind it,
`browser-use-llm-prod` in browser-use/deploy-llm, was last deployed on
2025-12-16 and every production call since returns upstream HTTP 503, which the
gateway reports to the caller as a generic 500.

The weights are public and in use: https://huggingface.co/browser-use/bu-30b-a3b-preview
is a public repo with 2.34k downloads in the last month. So instead of dropping
the model, say what it actually is - open weights you host yourself.

- `examples/models/bu_oss.py` now starts from a vLLM server and talks to it
  through `ChatOpenAI`, so it needs no BROWSER_USE_API_KEY and does not depend
  on the dead Cloud route.
- The `ChatBrowserUse` docstring says Cloud does not serve it.
- The skills model table gains a self-hosting section with the vLLM command
  from the model card, and loses the priceless OSS row.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018oComYHNbeV4e21v22Bbdn
2026-09-12 00:22:16 -07:00
Magnus Müller 50f205533f docs: name agents in CLI setup introduction (#5762)
Name Claude Code, Codex, Hermes, and OpenClaw in the CLI quickstart
introduction so readers know where to paste the setup prompt.

Validation: pre-commit passed for README.md; git diff --check passed.


<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Names Claude Code, Codex, Hermes, and OpenClaw in the CLI quickstart so
readers know which agents can receive the browser setup prompt.

<sup>Written for commit b752b973d3.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/browser-use/browser-use/pull/5762?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->
2026-09-09 13:10:15 -07:00
MagMueller b752b973d3 docs: name agents in CLI setup introduction 2026-09-09 13:07:03 -07:00
Magnus Müller 7d17103fae docs: simplify benchmark heading and link JS harness (#5761)
Use “Browser Use Benchmark v2” as the README section heading and remove
the repeated title from the plot image so the chart follows the heading
directly.

Add Browser Harness JS to Related Repositories after confirming that it
is public and MIT-licensed. The browser-use-js repository redirects to
Browser Use Pi, which is already listed.

The plot uses a lossless JPEG crop removing only its top 80 rows.
Decoded-pixel comparison confirms that every retained pixel matches the
original.


<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Replaces the generic “Benchmark” README heading with “Browser Use
Benchmark v2” and removes the repeated title from the plot so the chart
follows the heading directly. Adds the public, MIT-licensed Browser
Harness JS repository to Related Repositories; the existing Browser Use
Pi entry remains the destination for the redirected `browser-use-js`
repository.

- The plot is a lossless crop with only its top 80 title rows removed,
so all retained pixels remain unchanged.
- The documentation README links to the source image and records the
crop rationale.

<sup>Written for commit 2957f8a1c8.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/browser-use/browser-use/pull/5761?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->
2026-09-09 13:06:26 -07:00
MagMueller 2957f8a1c8 docs: move benchmark title out of plot and link JS harness 2026-09-09 13:03:53 -07:00
Magnus Müller f5f58c6ef4 docs: restore branded header and refine README paths (#5759)
Restore the original branded README header, including the AI browser
agent artwork, downloads, GitHub stars, Discord, and other navigation
badges, while retaining the orange bridge painting beneath it.

Shorten the CLI introduction to one sentence and remove OpenCode from
the README and diagram. Update the diagram captions to “Easiest way to
scale up,” “Automate your own browser tasks,” and “Run fully local.”
Identify Browser Harness as our CLI and add Browser Use Pi, Video Use,
and macOS Harness to Related Repositories with one-line descriptions
verified against their public READMEs.

Validation: pre-commit and git diff checks passed. README anchors
resolve; both SVGs parse and contain the requested captions. The Python
examples are unchanged. Both diagram themes and the GitHub header were
visually inspected; header assets load on desktop and mobile, with no
page overflow at 390 pixels.
2026-09-09 12:54:42 -07:00
MagMueller 3ef1629408 docs: restore branded README header and clarify paths 2026-09-09 12:52:33 -07:00
Magnus Müller eb2099a545 docs: refresh README branding and related repositories (#5758)
The README header used several rows of badges before explaining how to
start. Replace them with one purpose line, a short description of the
three entry points, and Quickstart/Demos/Docs/Cloud navigation. Add the
existing orange key-bridge painting from the Browser Use website beneath
the introduction.

Add a Related Repositories section near the bottom for Browser Harness,
Cloud SDK, and Benchmark. Move community links and the download badge
into the footer, preserve the driving-test GIF and product diagram, and
document the artwork source.

Validation: pre-commit and git diff checks passed. The artwork URL
returns the original website JPEG successfully (169 kB). All README
heading anchors and the three repository links resolve. GitHub renders
the artwork at 720 pixels on desktop and 324 pixels on mobile without
page overflow; the related-repositories table fits mobile width.
2026-09-09 12:43:51 -07:00
MagMueller cc4c9e8d1d docs: simplify README header and add related repositories 2026-09-09 12:41:28 -07:00
Magnus Müller e48b974d3b docs: refresh README quickstart and FAQ (#5757)
The README left the first Python example without a run command or
visible result, and its FAQ blurred the free library, paid models,
managed browsers, and fully hosted agent.

This update keeps OpenAI Luna as the default, adds commented BU2 and
cloud-browser alternatives with API-key instructions, and completes the
save/run/result flow. It refreshes the FAQ with current model and
authentication guidance, a self-contained custom-tool example, and
separate browser/agent hosting choices. Hermes and OpenClaw now appear
consistently in the CLI copy and both diagram themes.

Validation: pre-commit passed for all changed files; all three Python
snippets and the commented alternatives parse; model/browser
configuration and custom-tool registration/execution were checked
against the current library without model calls or browser provisioning;
all 23 Markdown links resolve. Both diagram themes were visually
inspected.


<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Refreshes the README quickstart and FAQ so the Python example is
runnable end-to-end and the free library is clearly separated from paid
models, managed browsers, and the hosted agent.

The quickstart now includes the run command and output, plus commented
BU2 and cloud-browser alternatives with API-key instructions. The FAQ
updates model recommendations, replaces the custom-tool snippet with a
runnable example, and clarifies browser vs. agent hosting choices.
Hermes and OpenClaw now appear consistently in CLI copy and both diagram
themes.

<sup>Written for commit bfc01ebfad.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/browser-use/browser-use/pull/5757?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->
2026-09-09 12:36:14 -07:00
MagMueller bfc01ebfad docs: refresh README quickstart and FAQ 2026-09-09 12:33:50 -07:00
Magnus Müller c25ae8f919 docs: number the three paths and simplify README copy (#5756)
Make the three Browser Use paths consistent between the diagram and
quickstarts: fully hosted cloud, CLI, and Python library. Combine the
open source Browser Use agent and its Python library into one diagram
block connected directly to local and cloud browsers.

Rename the demo heading to “Navigate the web like a human does.” and
mention choosing a date and time. Keep the inline animation, remove the
separate Johannes link, expand the hosted-service description, and
remove the no-card text and Odysseys claim.

Validation: pre-commit, whitespace checks, Python snippet parsing,
numbered section order and anchors, SVG parsing, and single-block
structure in both diagram themes passed. Inspected both diagram themes
and the actual GitHub README on desktop and at 390px mobile width. All
three quickstart anchors resolve, the inline GIF remains present, and
there is no page overflow.
2026-09-09 12:17:24 -07:00
MagMueller 674b0dfce2 docs: clarify numbered paths and simplify README demo copy 2026-09-09 12:15:38 -07:00
Magnus Müller fcc4f01964 docs: embed driving demo and clarify the three Browser Use paths (#5754)
The README required opening X to watch the driving-test demo and did not
show how the Python library fits alongside the CLI and hosted service.
Embed the complete recording as a looping GIF and lead the product guide
with an editable diagram of all three paths.

- Fully hosted cloud runs OpenCode, Browser Use CLI, and a cloud
browser.
- The CLI connects existing agents, including Pi, to local or cloud
browsers.
- The Python library runs the Browser Use agent directly and can use
local or cloud browsers.

Remove the Playwright branch, the vertical diagram expansion, the three
artwork cards, and the duplicate open-source/cloud comparison. Follow
the graphic with the CLI quickstart, existing direct-OpenAI Luna
example, and hosted API docs. Simplify the $15 credit text and remove
the pricing text-file link.

The SVGs are adapted from the SDK's product diagram. The GIF preserves
Johannes's public 20.4-second recording at 960×540 and 10 fps; it is
hosted externally so it does not add media to repository clones.

Validation: pre-commit, whitespace checks, Python snippet parsing, local
image paths, SVG parsing, and visual inspection of both diagram themes
passed. Verified actual GitHub rendering on desktop and at 390px mobile
width, all three section anchors, and automatic GIF playback without
clicking. The public attachment downloads without authentication and
matches the local GIF byte for byte.

Demo preview:

![Browser Use V4 booking a driving
test](https://github.com/user-attachments/assets/135885e8-1141-4e10-b719-bf690ae7d260)
2026-09-09 12:06:49 -07:00
MagMueller 0acc9ce89b docs: embed driving demo and simplify the three Browser Use paths 2026-09-09 12:05:07 -07:00
Magnus Müller ac0e918bbf docs: feature driving-test demo and clarify Browser Use product choices (#5753)
The README's older form and extraction demos did not reflect the current
product or website. Feature Johannes's public driving-test booking demo
and explain the local, managed-browser, and hosted-agent options using
the website's existing artwork.

Reuse the current light/dark product diagrams from the SDK docs, with a
separate expandable vertical view for mobile. The Python quickstart
calls OpenAI directly with `ChatOpenAI(model='gpt-5.6-luna',
reasoning_effort='xhigh')`, an `OPENAI_API_KEY`, and explicit `.env`
loading. Preserve the benchmark plot and its qualification.

Sources: [driving-test
demo](https://x.com/mathisdittrich/status/2078619618265141560), [public
showcase](https://browser-use.com/showcase), and [product
guide](https://docs.browser-use.com/cloud/which-product). Asset
provenance is recorded in `static/readme/README.md`.

Validation:
- Pre-commit and `git diff --check` passed.
- All three Python snippets parse; local image references resolve and
all four SVGs parse.
- Verified actual GitHub rendering at desktop and 390px mobile widths,
including the vertical diagram disclosure. The product table fits
without horizontal scrolling.
- New website/docs links return HTTP 200. No live model invocation was
performed.
2026-09-09 11:50:06 -07:00
MagMueller cb66bf1313 docs: focus on driving-test demo and use Luna directly through OpenAI 2026-09-09 11:48:29 -07:00
MagMueller 554700d9eb docs: keep product paths readable on mobile 2026-09-09 11:40:42 -07:00
MagMueller b5963c9dc3 docs: use a real demo frame and GitHub-compatible diagram themes 2026-09-09 11:37:42 -07:00
MagMueller 5e7178f7eb docs: refresh README with branded product paths and public demos 2026-09-09 11:35:57 -07:00
Magnus Müller b1f1162c4c docs: replace README plot with hard benchmark v2 (#5752)
Replace the README's BU Bench V1 plot with the supplied Browser Use
Benchmark v2 artwork. Reduce the GPT-6 ASTRA label and 77.3% score text,
retaining the score value.

The caption links to `browser-use/benchmark`, explains that the
benchmark targets the hardest browser tasks, and notes that smaller
models can achieve very high success rates on easier tasks. Preserve the
benchmark repository's qualification that the plotted results cover a
60-task subset. Remove the outdated reference to the plot as an
open-source versus hosted-agent comparison.

Validation: pre-commit checks and `git diff --check` passed; the edited
chart's labels and plotted values were visually checked against the
supplied artwork.


<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Replaces the README's BU Bench V1 plot with the new Browser Use
Benchmark v2 artwork. Updates the caption and surrounding text to
describe the new benchmark, including its focus on the hardest browser
tasks and the 60-task subset used for the plotted results. Also removes
the outdated open-source vs hosted-agent comparison and the "see plot
above" reference in the cloud agent section.

<sup>Written for commit f40fa559fb.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/browser-use/browser-use/pull/5752?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->
2026-09-09 11:18:15 -07:00
MagMueller f40fa559fb docs: show hard benchmark v2 in README 2026-09-09 11:14:45 -07:00
Gregor Žunič 2b1f9d3779 Make the README and Cloud skill easier for agents to use (#5714)
Add concise starter choices, eligible credits, and bounded V4 guidance.
2026-09-07 12:55:33 -07:00
Gregor Žunič 293b338f26 Shorten Cloud starter guidance 2026-09-07 12:41:37 -07:00
Aabid Mohamed 84069aadd6 Merge branch 'main' into docs/pzero-supported-models 2026-09-08 00:00:46 +05:30
Gregor Žunič 47ed960772 docs: check Python run status enum correctly 2026-09-07 11:20:58 -07:00
Gregor Žunič 2db9f6ef02 docs: guide agents from free credits to a bounded Cloud run 2026-09-07 11:17:48 -07:00
Magnus Müller 8a9b5f8618 fix(openrouter): pass custom fields through SDK extra_body (#5703)
Passing OpenRouter-specific fields such as `extra_body={"provider":
{"order": ["test-provider"]}}` currently fails before any HTTP request
with `AsyncCompletions.create() got an unexpected keyword argument
'provider'`.

Both text and structured-output paths unpack `extra_body` into SDK
keyword arguments. Pass it through the SDK's `extra_body` parameter
instead, so custom fields become part of the JSON request body.

Regression tests exercise the real OpenAI SDK with an HTTPX mock
transport and verify custom fields reach the outgoing JSON for both
output modes. They also cover omitted and empty extra bodies and
structured response parsing.

Validation:
- Before the fix: 2 regression failures, 8 passing tests in the
OpenRouter model suite.
- After the fix: 15 tests passed across the OpenRouter model and
token-cost suites.
- All applicable pre-commit hooks passed, including Ruff and Pyright.
- No real API key or live provider request was used.


<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Fixes passing OpenRouter-specific fields through the SDK's `extra_body`
parameter so custom fields like provider routing reach the HTTP request
body instead of failing before any request is sent.

- Text and structured-output paths now forward `extra_body` instead of
unpacking it into SDK keyword arguments.
- Adds regression tests with a mock HTTP transport covering both output
modes and omitted or empty `extra_body` values.

<sup>Written for commit d05053ed60.
Summary will update on new commits.</sup>

<a
href="https://cubic.dev/pr/browser-use/browser-use/pull/5703?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="Review in cubic"
src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a>

<!-- End of auto-generated description by cubic. -->
2026-09-07 11:12:49 -07:00
Aabid Mohamed c0625fec07 Merge branch 'main' into docs/pzero-supported-models 2026-09-06 17:22:36 +05:30
shashank-100 d05053ed60 fix(openrouter): pass custom fields through SDK extra_body 2026-09-06 13:13:27 +05:30
Magnus Müller e25ab65e69 fix: honor MCP disable security environment setting (#5695)
## Fix

Read the documented `BROWSER_USE_DISABLE_SECURITY` setting when
resolving local MCP browser configuration.

The default remains secure. An unset variable leaves the stored profile
unchanged; explicit `true` or `false` overrides it without rewriting the
config file. Existing explicit browser-session parameters still take
priority.

Only the config declaration/mapping and its regression tests change.
This does not add a tool-controlled security switch or alter the normal
BrowserProfile default.

## Verification

- Before the mapping fix: four new regression cases failed; fourteen
passed.
- After: all eighteen focused config tests pass, including unset,
persisted true/false and explicit environment overrides.
- The related profile arguments, extension-security and lazy-config
checks also pass: twenty-seven local cases in total.
- All applicable pre-commit hooks pass.
- Four fresh owned headless Chrome sessions exercised the actual MCP
browser initialization and two synthetic loopback origins. Unset and
false kept cross-origin fetch blocked with no `--disable-web-security`
flag. True enabled the flag and allowed the synthetic response. An
explicit false session override restored the block even with the
environment set to true.
- CI's hosted task evaluation reports 2/2, but both tasks log that they
skipped because `BROWSER_USE_API_KEY` is absent. Those are not counted
as agent or provider validation.

The local proof used no provider calls, shared browser profile or
production request. No release or deployment was performed. The explicit
true setting intentionally disables browser web-security checks, as
already documented.
2026-09-05 10:28:28 -07:00
Magnus Müller fc40175e26 test: update the actual default MCP profile in precedence fixture 2026-09-05 10:25:46 -07:00
Magnus Müller 72e53e3f3b fix: honor MCP disable security environment setting 2026-09-05 10:20:11 -07:00
Magnus Müller 4970e3ad2b fix: use canonical LLM model property in cloud events (#5279)
## Summary

- use the canonical LLM model property throughout the related adapter
paths
- align the internal proxy with the canonical interface
- add focused regression coverage for a minimal adapter

## Tests

- `uv run pytest -q
tests/ci/test_beta_agent.py::test_beta_agent_runs_through_sdk_and_reuses_session_for_followup
tests/ci/test_agent_cloud_events.py`
- `uv run ruff check browser_use/beta/service.py
browser_use/agent/cloud_events.py tests/ci/test_agent_cloud_events.py
tests/ci/test_beta_agent.py`
- `uv run ruff format --check browser_use/beta/service.py
browser_use/agent/cloud_events.py tests/ci/test_agent_cloud_events.py
tests/ci/test_beta_agent.py`
- `uv run pre-commit run --all-files`
2026-09-05 09:11:06 -07:00
MagMueller d5fb0f5620 Merge remote-tracking branch 'origin/main' into HEAD 2026-09-05 07:51:52 -07:00
Magnus Müller e3251d87e0 fix(cli): support module invocation on Windows (#5552)
## Description

Closes #5539

The `uv`-generated `browser-use.exe` console-script launcher can be
blocked by Windows Smart App Control before Python starts. The package
already exposes `browser_use.cli:main`, but it had no package module
entry point, so users could not use the interpreter-based fallback.

## Type of Change

- [x] Bug fix (non-breaking change that fixes a known issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change
- [ ] Documentation update
- [ ] Performance improvement
- [ ] Code refactoring (no functional changes)

## Changes Made

- Add `browser_use/__main__.py` delegating to the existing CLI `main()`.
- Add a subprocess regression test proving `python -m browser_use doctor
--help` matches the existing CLI module entry point.

## Testing

- [x] Focused CLI tests pass (`uv run pytest -q
tests/ci/test_browser_use_cli.py`)
- [x] Ruff check passes (`uv run ruff check browser_use/__main__.py
tests/ci/test_browser_use_cli.py`)
- [x] Ruff format check passes (`uv run ruff format --check
browser_use/__main__.py tests/ci/test_browser_use_cli.py`)
- [x] Pre-commit passes on changed files (`uv run pre-commit run --files
browser_use/__main__.py tests/ci/test_browser_use_cli.py`)
- [x] New test added for the module entry point
- [ ] Full test suite
- [ ] Pyright on the full repository

### Test Output

```text
uv run pytest -q tests/ci/test_browser_use_cli.py
4 passed in 1.72s

uv run ruff check browser_use/__main__.py tests/ci/test_browser_use_cli.py
All checks passed!

uv run ruff format --check browser_use/__main__.py tests/ci/test_browser_use_cli.py
2 files already formatted

uv run pre-commit run --files browser_use/__main__.py tests/ci/test_browser_use_cli.py
all applicable hooks passed
```

## Real Behavior Proof

- Environment: Windows 10 host, CPython 3.12.14 managed by `uv`, source
checkout from `main`.
- Exact command / steps: `uv run python -m browser_use doctor --help`
and `uv run python -m browser_use.cli doctor --help`.
- Observed result: both commands exited successfully and printed `usage:
browser-use doctor [--fix-snap]`.
- Not tested: Windows 11 Smart App Control enforcement itself, because
this environment does not expose that policy state. The module path
avoids the generated console-script executable; signed distribution
remains an upstream packaging concern.

## Runtime Rollout Safety

- Rollout-managed feature(s): none.
- Minimum rollout channel: next package release.
- Stable/default behavior changed: no; this adds an alternate invocation
path.
- Kill switch / disable path: not applicable.
- Unsafe override required: none.
- Qualification impact: focused CLI tests and pre-commit checks.
- Rollback path: remove `browser_use/__main__.py` and its focused test.

## Review Readiness

- [x] I have performed a self-review
- [x] This PR is ready for human review

## Checklist

- [x] My code follows the project's style guidelines
- [x] I have performed a self-review of my code
- [x] I have added tests that prove the fix is effective
- [x] New and existing focused tests pass locally
- [x] I did **not** edit `CHANGELOG.md`

## Screenshots (if applicable)

Not applicable.

## Additional Notes

This provides the interpreter-based workaround requested in #5539
without disabling Smart App Control or changing the existing
console-script behavior.
2026-09-05 07:50:12 -07:00
MagMueller 0b2275a1a2 Merge remote-tracking branch 'origin/main' into HEAD 2026-09-05 00:00:04 -07:00
MagMueller e369e7c1ab Merge remote-tracking branch 'origin/main' into HEAD 2026-09-05 00:00:04 -07:00