Reagan/eng 5397 make docs better for agents pt 1#201
Conversation
HTML comments are not valid MDX, so Mintlify ignored the page's frontmatter and fell back to a filename-derived sidebar title (X402). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Brand icons for Anthropic (group), OpenClaw, Hermes, n8n; monochrome icons for MCP Server, Webhooks, and x402 (Phosphor coin). Mintlify renders custom icons as <img>, so monochrome icons live under images/icons/mono/ and get theme-aware tinting via CSS filters in style.css. Also adds sidebarTitle to x402 to keep the label compact, and stages an OpenAI icon for future use. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Split Playwright/Puppeteer/Selenium into per-framework pages - Add overview, create, sessions, screenshots, pricing, performance, and OSS-vs-cloud pages - Journey-order Browser nav; split Platform features from Integrations; rename to Authentication group; retitle Profiles / Cookie sync - Claude logo on Claude Code and Claude Managed Agents
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
There was a problem hiding this comment.
2 issues found across 6 files (changes from recent commits).
Not reviewed (too large): docs/cloud/llms-full.txt (~3,078 lines), docs/llms-full.txt (~3,078 lines) - if these are generated or fixture files, add them to ignored paths to exclude them from future reviews.
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="docs/cloud/llms.txt">
<violation number="1" location="docs/cloud/llms.txt:91">
P2: The new API v4 section calls API v4 "the current REST API for long-horizon agents," but the file header still says "Always use API v3 — v2 is legacy" without referencing v4. An LLM agent reading this index will get contradictory version guidance — the header steers toward v3 while the new section frames v4 as the current API. Either the header should be updated to recommend v4 (or clarify v4's relationship to v3), or the v4 description should avoid claiming primacy over v3.</violation>
</file>
<file name="docs/open-source/llms-full.txt">
<violation number="1" location="docs/open-source/llms-full.txt:4628">
P2: The "All skills live in the `skills/` directory" link points to https://github.com/browser-use/browser-use/tree/main/skills but no `skills/` directory exists at the repository root. An LLM or user following this link will find a 404.</violation>
</file>
Reply with feedback, questions, or to request a fix.
Fix all with cubic | Re-trigger cubic
| - [1Password & 2FA](https://docs.browser-use.com/cloud/guides/1password): Auto-fill passwords and TOTP codes from 1Password during agent tasks. | ||
| - [Secrets](https://docs.browser-use.com/cloud/guides/secrets): Pass domain-scoped credentials to the agent securely. | ||
|
|
||
| ## API v4 |
There was a problem hiding this comment.
P2: The new API v4 section calls API v4 "the current REST API for long-horizon agents," but the file header still says "Always use API v3 — v2 is legacy" without referencing v4. An LLM agent reading this index will get contradictory version guidance — the header steers toward v3 while the new section frames v4 as the current API. Either the header should be updated to recommend v4 (or clarify v4's relationship to v3), or the v4 description should avoid claiming primacy over v3.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/llms.txt, line 91:
<comment>The new API v4 section calls API v4 "the current REST API for long-horizon agents," but the file header still says "Always use API v3 — v2 is legacy" without referencing v4. An LLM agent reading this index will get contradictory version guidance — the header steers toward v3 while the new section frames v4 as the current API. Either the header should be updated to recommend v4 (or clarify v4's relationship to v3), or the v4 description should avoid claiming primacy over v3.</comment>
<file context>
@@ -67,70 +88,12 @@ export BROWSER_USE_API_KEY=bu_your_key_here
- [1Password & 2FA](https://docs.browser-use.com/cloud/guides/1password): Auto-fill passwords and TOTP codes from 1Password during agent tasks.
- [Secrets](https://docs.browser-use.com/cloud/guides/secrets): Pass domain-scoped credentials to the agent securely.
+## API v4
+- [API Reference](https://docs.browser-use.com/cloud/api-v4-overview): Authenticate and start using the Browser Use API v4 — the current REST API for long-horizon agents.
+
</file context>
|
|
||
| ## Source | ||
|
|
||
| All skills live in the [`skills/` directory](https://github.com/browser-use/browser-use/tree/main/skills) of the `browser-use` repo. |
There was a problem hiding this comment.
P2: The "All skills live in the skills/ directory" link points to https://github.com/browser-use/browser-use/tree/main/skills but no skills/ directory exists at the repository root. An LLM or user following this link will find a 404.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/open-source/llms-full.txt, line 4628:
<comment>The "All skills live in the `skills/` directory" link points to https://github.com/browser-use/browser-use/tree/main/skills but no `skills/` directory exists at the repository root. An LLM or user following this link will find a 404.</comment>
<file context>
@@ -4551,6 +4592,152 @@ The scheduler processes natural language and outputs structured results:
+
+## Source
+
+All skills live in the [`skills/` directory](https://github.com/browser-use/browser-use/tree/main/skills) of the `browser-use` repo.
+
+
</file context>
| All skills live in the [`skills/` directory](https://github.com/browser-use/browser-use/tree/main/skills) of the `browser-use` repo. | |
| All skills live in individual skill docs within this documentation site. See each skill page above for installation instructions. |
There was a problem hiding this comment.
7 issues found and verified against the latest diff
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="docs/cloud/browser/selenium.mdx">
<violation number="1" location="docs/cloud/browser/selenium.mdx:54">
P2: The selenium-wire recommendation in the Alternative section is misleading. selenium-wire is an HTTP/HTTPS request-interception library that manages its own local ChromeDriver — it cannot serve as a WebSocket-to-TCP proxy that makes a remote CDP WebSocket URL appear as a local host:port for Selenium's debugger_address. It also hasn't been maintained since Jan 2024 (archived repo). Readers following this suggestion would hit a dead end. Consider replacing with a tool that actually bridges WebSocket↔TCP (e.g., websocat or a quick Python asyncio script) or, better, remove the specific tool name and describe the pattern generically.</violation>
</file>
<file name="docs/cloud/browser/sessions.mdx">
<violation number="1" location="docs/cloud/browser/sessions.mdx:52">
P1: `client.browsers.list(filter_by="active")` will raise TypeError at runtime — the v3 SDK's `list()` wrapper doesn't expose a `filter_by` parameter (it only accepts `page` and `page_size`). The REST API does accept `filterBy` as a query param, but the SDK wrapper doesn't forward it. Either drop `filter_by` from the SDK examples and suggest listing all sessions then filtering client-side, or add `filter_by` to the v3 SDK wrapper before merging this doc.</violation>
</file>
<file name="docs/cloud/open-source-vs-cloud.mdx">
<violation number="1" location="docs/cloud/open-source-vs-cloud.mdx:9">
P1: License is MIT, not Apache. The open-source library at github.com/browser-use/browser-use uses the MIT License. Update 'Apache-licensed' to 'MIT-licensed' to avoid misleading readers.</violation>
</file>
<file name="docs/cloud/browser/puppeteer.mdx">
<violation number="1" location="docs/cloud/browser/puppeteer.mdx:23">
P3: The gotchas section recommends passing `defaultViewport: null` to preserve the browser's real window size, but neither code example includes it. Add `defaultViewport: null` to both `puppeteer.connect()` calls so the examples align with the gotcha advice.</violation>
</file>
<file name="docs/cloud/browser/create.mdx">
<violation number="1" location="docs/cloud/browser/create.mdx:59">
P2: Parameter listed as standard optional param but Python SDK v3 has no typed `custom_proxy` argument — `customProxy` only works via `**extra` as camelCase, not the snake_case convention used by every other Python SDK parameter. Python users would naturally pass `custom_proxy={...}` (following the SDK's own pattern) and silently send the wrong body key. Either add `custom_proxy` as a typed param to the SDK, omit it from this table, or add a note clarifying that Python SDK users must pass `customProxy={...}` directly.</violation>
</file>
<file name="docs/cloud/agent/overview.mdx">
<violation number="1" location="docs/cloud/agent/overview.mdx:10">
P2: Code example imports v2 (`from browser_use_sdk import BrowserUse`) but links to the quickstart which uses v3 (`from browser_use_sdk.v3 import AsyncBrowserUse`). A reader following the overview example will write sync v2 code, then find the quickstart with a different async v3 import path. Stick to one API version throughout the agent section to avoid confusion — either match the quickstart's v3 import, or use the v4 client (`from browser_use_sdk.v4 import BrowserUse`) which is the current API.</violation>
</file>
<file name="docs/cloud/browser/overview.mdx">
<violation number="1" location="docs/cloud/browser/overview.mdx:35">
P3: The last bullet in Further reading reads as a sentence fragment after "and the benchmark results" — it's missing a verb. Consider either splitting into two separate bullets or rewording to something like "and the benchmark results show 84.8%..." so each list item reads as a complete thought.</violation>
</file>
Tip: instead of fixing issues one by one fix them all with cubic
Re-trigger cubic
| The SDK behavior is what lets you disconnect and reconnect to the same session, but it also means forgotten sessions keep billing. If you see `429 Too many concurrent active sessions`, list and stop the strays: | ||
|
|
||
| ```python | ||
| sessions = await client.browsers.list(filter_by="active") |
There was a problem hiding this comment.
P1: client.browsers.list(filter_by="active") will raise TypeError at runtime — the v3 SDK's list() wrapper doesn't expose a filter_by parameter (it only accepts page and page_size). The REST API does accept filterBy as a query param, but the SDK wrapper doesn't forward it. Either drop filter_by from the SDK examples and suggest listing all sessions then filtering client-side, or add filter_by to the v3 SDK wrapper before merging this doc.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/browser/sessions.mdx, line 52:
<comment>`client.browsers.list(filter_by="active")` will raise TypeError at runtime — the v3 SDK's `list()` wrapper doesn't expose a `filter_by` parameter (it only accepts `page` and `page_size`). The REST API does accept `filterBy` as a query param, but the SDK wrapper doesn't forward it. Either drop `filter_by` from the SDK examples and suggest listing all sessions then filtering client-side, or add `filter_by` to the v3 SDK wrapper before merging this doc.</comment>
<file context>
@@ -0,0 +1,82 @@
+The SDK behavior is what lets you disconnect and reconnect to the same session, but it also means forgotten sessions keep billing. If you see `429 Too many concurrent active sessions`, list and stop the strays:
+
+```python
+sessions = await client.browsers.list(filter_by="active")
+for s in sessions.items:
+ await client.browsers.stop(s.id)
</file context>
|
|
||
| Browser Use is two things with one name. The confusion is common enough to deserve its own page. | ||
|
|
||
| **The [open-source library](/open-source/introduction)** (`pip install browser-use`) is an agent framework that runs on your machine. You bring your own LLM key, it launches a local Chromium, and nothing leaves your infrastructure. Free, Apache-licensed, yours. |
There was a problem hiding this comment.
P1: License is MIT, not Apache. The open-source library at github.com/browser-use/browser-use uses the MIT License. Update 'Apache-licensed' to 'MIT-licensed' to avoid misleading readers.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/open-source-vs-cloud.mdx, line 9:
<comment>License is MIT, not Apache. The open-source library at github.com/browser-use/browser-use uses the MIT License. Update 'Apache-licensed' to 'MIT-licensed' to avoid misleading readers.</comment>
<file context>
@@ -0,0 +1,34 @@
+
+Browser Use is two things with one name. The confusion is common enough to deserve its own page.
+
+**The [open-source library](/open-source/introduction)** (`pip install browser-use`) is an agent framework that runs on your machine. You bring your own LLM key, it launches a local Chromium, and nothing leaves your infrastructure. Free, Apache-licensed, yours.
+
+**Browser Use Cloud** (this documentation) is a paid API with two services: [stealth cloud browsers](/cloud/browser/overview) you can drive with any framework, and a [hosted agent](/cloud/agent/overview) that runs tasks for you, no library install required.
</file context>
| The agent is a hosted loop: it reads the page, decides an action, executes it, and repeats until the task is complete. You send a task, you get a result. | ||
|
|
||
| ```python | ||
| from browser_use_sdk import BrowserUse |
There was a problem hiding this comment.
P2: Code example imports v2 (from browser_use_sdk import BrowserUse) but links to the quickstart which uses v3 (from browser_use_sdk.v3 import AsyncBrowserUse). A reader following the overview example will write sync v2 code, then find the quickstart with a different async v3 import path. Stick to one API version throughout the agent section to avoid confusion — either match the quickstart's v3 import, or use the v4 client (from browser_use_sdk.v4 import BrowserUse) which is the current API.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/agent/overview.mdx, line 10:
<comment>Code example imports v2 (`from browser_use_sdk import BrowserUse`) but links to the quickstart which uses v3 (`from browser_use_sdk.v3 import AsyncBrowserUse`). A reader following the overview example will write sync v2 code, then find the quickstart with a different async v3 import path. Stick to one API version throughout the agent section to avoid confusion — either match the quickstart's v3 import, or use the v4 client (`from browser_use_sdk.v4 import BrowserUse`) which is the current API.</comment>
<file context>
@@ -0,0 +1,35 @@
+The agent is a hosted loop: it reads the page, decides an action, executes it, and repeats until the task is complete. You send a task, you get a result.
+
+```python
+from browser_use_sdk import BrowserUse
+
+client = BrowserUse()
</file context>
|
|
||
| ## Alternative: keep Selenium with a local proxy | ||
|
|
||
| If you must keep the Selenium API, run a local WebSocket-to-TCP proxy so Chrome's remote debugging endpoint appears as a local `host:port`, e.g. via [selenium-wire](https://github.com/wkeeling/selenium-wire). This adds a moving part we don't manage — for new code, prefer the CDP bridge above. |
There was a problem hiding this comment.
P2: The selenium-wire recommendation in the Alternative section is misleading. selenium-wire is an HTTP/HTTPS request-interception library that manages its own local ChromeDriver — it cannot serve as a WebSocket-to-TCP proxy that makes a remote CDP WebSocket URL appear as a local host:port for Selenium's debugger_address. It also hasn't been maintained since Jan 2024 (archived repo). Readers following this suggestion would hit a dead end. Consider replacing with a tool that actually bridges WebSocket↔TCP (e.g., websocat or a quick Python asyncio script) or, better, remove the specific tool name and describe the pattern generically.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/browser/selenium.mdx, line 54:
<comment>The selenium-wire recommendation in the Alternative section is misleading. selenium-wire is an HTTP/HTTPS request-interception library that manages its own local ChromeDriver — it cannot serve as a WebSocket-to-TCP proxy that makes a remote CDP WebSocket URL appear as a local host:port for Selenium's debugger_address. It also hasn't been maintained since Jan 2024 (archived repo). Readers following this suggestion would hit a dead end. Consider replacing with a tool that actually bridges WebSocket↔TCP (e.g., websocat or a quick Python asyncio script) or, better, remove the specific tool name and describe the pattern generically.</comment>
<file context>
@@ -0,0 +1,68 @@
+
+## Alternative: keep Selenium with a local proxy
+
+If you must keep the Selenium API, run a local WebSocket-to-TCP proxy so Chrome's remote debugging endpoint appears as a local `host:port`, e.g. via [selenium-wire](https://github.com/wkeeling/selenium-wire). This adds a moving part we don't manage — for new code, prefer the CDP bridge above.
+
+<Note>
</file context>
| | `browserScreenWidth` | `int` | — | Screen width in pixels, 320–6144. | | ||
| | `browserScreenHeight` | `int` | — | Screen height in pixels, 320–3456. | | ||
| | `allowResizing` | `bool` | `false` | Allow window resizing during the session. Not recommended: resizing reduces stealth. | | ||
| | `customProxy` | `object` | — | Bring your own proxy instead of ours. | |
There was a problem hiding this comment.
P2: Parameter listed as standard optional param but Python SDK v3 has no typed custom_proxy argument — customProxy only works via **extra as camelCase, not the snake_case convention used by every other Python SDK parameter. Python users would naturally pass custom_proxy={...} (following the SDK's own pattern) and silently send the wrong body key. Either add custom_proxy as a typed param to the SDK, omit it from this table, or add a note clarifying that Python SDK users must pass customProxy={...} directly.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/browser/create.mdx, line 59:
<comment>Parameter listed as standard optional param but Python SDK v3 has no typed `custom_proxy` argument — `customProxy` only works via `**extra` as camelCase, not the snake_case convention used by every other Python SDK parameter. Python users would naturally pass `custom_proxy={...}` (following the SDK's own pattern) and silently send the wrong body key. Either add `custom_proxy` as a typed param to the SDK, omit it from this table, or add a note clarifying that Python SDK users must pass `customProxy={...}` directly.</comment>
<file context>
@@ -0,0 +1,99 @@
+| `browserScreenWidth` | `int` | — | Screen width in pixels, 320–6144. |
+| `browserScreenHeight` | `int` | — | Screen height in pixels, 320–3456. |
+| `allowResizing` | `bool` | `false` | Allow window resizing during the session. Not recommended: resizing reduces stealth. |
+| `customProxy` | `object` | — | Bring your own proxy instead of ours. |
+| `enableRecording` | `bool` | `false` | Record the session. The video is available as `recordingUrl` after the session stops. |
+
</file context>
|
|
||
| - [Stealth Browser Infrastructure](https://browser-use.com/posts/browser-infra) — how the cloud browser is built | ||
| - [Closer to the Metal: Leaving Playwright for CDP](https://browser-use.com/posts/playwright-to-cdp) — why the browser is driven over CDP | ||
| - [We stealth benchmarked every major cloud browser provider](https://browser-use.com/posts/stealth-benchmark), and the [benchmark results](https://browser-use.com/benchmarks) (84.8% BrowserBench, 81% bypass on high-security sites) |
There was a problem hiding this comment.
P3: The last bullet in Further reading reads as a sentence fragment after "and the benchmark results" — it's missing a verb. Consider either splitting into two separate bullets or rewording to something like "and the benchmark results show 84.8%..." so each list item reads as a complete thought.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/browser/overview.mdx, line 35:
<comment>The last bullet in Further reading reads as a sentence fragment after "and the benchmark results" — it's missing a verb. Consider either splitting into two separate bullets or rewording to something like "and the benchmark results show 84.8%..." so each list item reads as a complete thought.</comment>
<file context>
@@ -0,0 +1,35 @@
+
+- [Stealth Browser Infrastructure](https://browser-use.com/posts/browser-infra) — how the cloud browser is built
+- [Closer to the Metal: Leaving Playwright for CDP](https://browser-use.com/posts/playwright-to-cdp) — why the browser is driven over CDP
+- [We stealth benchmarked every major cloud browser provider](https://browser-use.com/posts/stealth-benchmark), and the [benchmark results](https://browser-use.com/benchmarks) (84.8% BrowserBench, 81% bypass on high-security sites)
</file context>
|
|
||
| const WSS_URL = "wss://connect.browser-use.com?apiKey=YOUR_API_KEY&proxyCountryCode=us"; | ||
|
|
||
| const browser = await puppeteer.connect({ browserWSEndpoint: WSS_URL }); |
There was a problem hiding this comment.
P3: The gotchas section recommends passing defaultViewport: null to preserve the browser's real window size, but neither code example includes it. Add defaultViewport: null to both puppeteer.connect() calls so the examples align with the gotcha advice.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/browser/puppeteer.mdx, line 23:
<comment>The gotchas section recommends passing `defaultViewport: null` to preserve the browser's real window size, but neither code example includes it. Add `defaultViewport: null` to both `puppeteer.connect()` calls so the examples align with the gotcha advice.</comment>
<file context>
@@ -0,0 +1,117 @@
+
+const WSS_URL = "wss://connect.browser-use.com?apiKey=YOUR_API_KEY&proxyCountryCode=us";
+
+const browser = await puppeteer.connect({ browserWSEndpoint: WSS_URL });
+const [page] = await browser.pages();
+await page.goto("https://example.com");
</file context>
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
…er-api The Getting Started eval task asks to create a session and connect Playwright, but the quickstart only showed the Agent API — agents had to leave the page, hit a 404, and dig into llms-full.txt. Add the inline create-connect-stop snippet (matching Browserbase's one-fetch quickstart) and redirect the guessed /cloud/browser-api URL.
There was a problem hiding this comment.
1 issue found across 4 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="docs/cloud/llms-full.txt">
<violation number="1">
P3: Both browser-session examples leak the cloud browser when an error occurs during page interaction. If any Playwright operation before `stop()` throws, the session remains active (and billable). Since these are copy-paste examples, consider wrapping the browser-usage block in a try/finally (Python) or try/finally (TS) to demonstrate safe cleanup that users can adopt directly.</violation>
</file>
Tip: Review your code locally with the cubic CLI to iterate faster.
Fix all with cubic | Re-trigger cubic
Slow form-filling is the intentional per-keystroke typing delay, not a tunable latency problem, so the page answered a non-question. The hedged, unverified content also scored worse in evals (61.9) than no page (70.2 baseline). Also removes the stale /cloud/introduction redirect that shadowed the new page.
…ha benchmarks, intro rewrite - New cloud/agent/sessions page; /cloud/sessions → it (agent, not browser) - Move MCP server under Integrations; redirect /cloud/mcp, /cloud/mcp-server - Redirect batch: /cloud/overview, /cloud/apis, /cloud/browser-api/stop, /cloud/cache-scripts, /cloud/workspaces, /cloud/tutorials/2fa, /cloud/browser-session - Stealth page: benchmark chart, bot-detection link, create-session + captcha links, renamed to "Stealth" - CAPTCHA page: per-vendor success table + heatmap, remove stealth overlap - Remove "Browser Use Box" from pricing - Rewrite introduction: agents run on our browsers; v2 = OSS library on our infra with bu-1-0/bu-2-0 - Regenerate llms.txt / llms-full.txt Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
1 issue found across 12 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="docs/cloud/introduction.mdx">
<violation number="1" location="docs/cloud/introduction.mdx:32">
P2: The intro mentions `bu-1-0` as one of "our **bu-1-0** and **bu-2-0** models, which are cheaper, faster, and more accurate than general-purpose models on browser tasks." However, `bu-1-0` has no model card, no documentation page, and zero references anywhere in the repository — not even in the SDK source code. `bu-2-0` has a full model card at `docs/open-source/bu-2-0-model-card.mdx`, so the asymmetry will be noticeable to readers who click through looking for `bu-1-0` details. Consider either adding a model card or reference for `bu-1-0`, or removing the reference from the intro if it's not intended to be documented yet.</violation>
</file>
Tip: Review your code locally with the cubic CLI to iterate faster.
Fix all with cubic | Re-trigger cubic
|
|
||
| ## Already using the open-source library? | ||
|
|
||
| [API v2](/cloud/api-v2-overview) is the [open-source library](/open-source/introduction) running on our infrastructure instead of your own machine — the same agent code, now on managed stealth browsers with no local setup. It also gives you our **bu-1-0** and **bu-2-0** models, which are cheaper, faster, and more accurate than general-purpose models on browser tasks. |
There was a problem hiding this comment.
P2: The intro mentions bu-1-0 as one of "our bu-1-0 and bu-2-0 models, which are cheaper, faster, and more accurate than general-purpose models on browser tasks." However, bu-1-0 has no model card, no documentation page, and zero references anywhere in the repository — not even in the SDK source code. bu-2-0 has a full model card at docs/open-source/bu-2-0-model-card.mdx, so the asymmetry will be noticeable to readers who click through looking for bu-1-0 details. Consider either adding a model card or reference for bu-1-0, or removing the reference from the intro if it's not intended to be documented yet.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/introduction.mdx, line 32:
<comment>The intro mentions `bu-1-0` as one of "our **bu-1-0** and **bu-2-0** models, which are cheaper, faster, and more accurate than general-purpose models on browser tasks." However, `bu-1-0` has no model card, no documentation page, and zero references anywhere in the repository — not even in the SDK source code. `bu-2-0` has a full model card at `docs/open-source/bu-2-0-model-card.mdx`, so the asymmetry will be noticeable to readers who click through looking for `bu-1-0` details. Consider either adding a model card or reference for `bu-1-0`, or removing the reference from the intro if it's not intended to be documented yet.</comment>
<file context>
@@ -1,36 +1,35 @@
## Already using the open-source library?
-The [Browser Use library](/open-source/introduction) runs agents on your machine with your own LLM keys. Cloud adds managed stealth browsers and a hosted agent on top. You can keep your local agent code and point it at a cloud browser, see [Open source vs Cloud](/cloud/open-source-vs-cloud).
+[API v2](/cloud/api-v2-overview) is the [open-source library](/open-source/introduction) running on our infrastructure instead of your own machine — the same agent code, now on managed stealth browsers with no local setup. It also gives you our **bu-1-0** and **bu-2-0** models, which are cheaper, faster, and more accurate than general-purpose models on browser tasks.
## Start here
</file context>
…CAPTCHA types, MCP cloud statement
From 2027.dev eval trace analysis:
- Redirects for guessed 404s: /cloud/browsers/{playwright,puppeteer,selenium},
/cloud/browser/{profiles,keep-alive,stop}, /cloud/profiles, /customize/captcha-solver
- Profiles: add browser/CDP persistence example; fix "sessions-only" persistence framing
- Proxies: add "Blocked? get a fresh IP" recipe (stop → recreate → new residential IP)
- CAPTCHA: add Supported CAPTCHA types (reCAPTCHA v2/v3, hCaptcha, Turnstile)
- MCP: state it drives a cloud browser (not local); canonical claude mcp add command
- Quickstart: PEP-668-safe install note; print cdp_url
- Regenerate llms.txt
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
1 issue found across 8 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="docs/cloud/browser/captcha.mdx">
<violation number="1" location="docs/cloud/browser/captcha.mdx:41">
P3: Minor phrasing issue on the last line of the CAPTCHA table: "All are handled on by default" reads as a mashup of two phrasings ("handled by default" and "on by default"). Suggest picking one for cleaner prose.</violation>
</file>
Tip: Review your code locally with the cubic CLI to iterate faster.
Fix all with cubic | Re-trigger cubic
| | hCaptcha | Yes | | ||
| | Cloudflare Turnstile | Yes | | ||
|
|
||
| All are handled on by default — no `captcha_type` parameter or per-widget configuration. |
There was a problem hiding this comment.
P3: Minor phrasing issue on the last line of the CAPTCHA table: "All are handled on by default" reads as a mashup of two phrasings ("handled by default" and "on by default"). Suggest picking one for cleaner prose.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/browser/captcha.mdx, line 41:
<comment>Minor phrasing issue on the last line of the CAPTCHA table: "All are handled on by default" reads as a mashup of two phrasings ("handled by default" and "on by default"). Suggest picking one for cleaner prose.</comment>
<file context>
@@ -27,6 +27,19 @@ Across the anti-bot and CAPTCHA systems agents hit most, Browser Use Cloud has t
+| hCaptcha | Yes |
+| Cloudflare Turnstile | Yes |
+
+All are handled on by default — no `captcha_type` parameter or per-widget configuration.
+
## Get started
</file context>
| All are handled on by default — no `captcha_type` parameter or per-widget configuration. | |
| All are handled by default — no `captcha_type` parameter or per-widget configuration. |
…path redirects - Replace the two-step session example with the verified run(task, profile_id=...) agent flow (create profile -> browser seeded from profile -> agent), tested live - Redirect /browser/overview -> /cloud/browser/overview and /examples/persistent-browser -> /cloud/guides/authentication (guessed 404s from traces) - Regenerate llms.txt Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
2 issues found across 4 files (changes from recent commits).
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="docs/cloud/guides/authentication.mdx">
<violation number="1" location="docs/cloud/guides/authentication.mdx:51">
P2: The new claim that profile state saves "automatically" when `run()` ends contradicts the existing Warning section which tells users to call `sessions.stop()` explicitly and warns that "a session left open or timed out may not save." A reader following the simpler `run()` pattern in the new code example won't know whether they also need to call `sessions.stop()` in a `finally`. If `run()` truly auto-saves, the Warning section needs updating too. If it does not auto-save, the new "automatically" claim is misleading.</violation>
</file>
<file name="docs/docs.json">
<violation number="1" location="docs/docs.json:504">
P2: Redirect `/examples/persistent-browser` → `/cloud/guides/authentication` is a semantic mismatch: "persistent browser" is about session lifetime and state persistence, not authentication. A user following this redirect will land on authentication guidance instead of sessions/keep-alive docs. Consider redirecting to `/cloud/browser/sessions` (where keep-alive and stop already point) or `/cloud/guides/profile-sync` (profiles/cookie sync) for a closer conceptual match.</violation>
</file>
Tip: Review your code locally with the cubic CLI to iterate faster.
Fix all with cubic | Re-trigger cubic
| ``` | ||
| </CodeGroup> | ||
|
|
||
| Passing `profile_id` to `run()` provisions the browser and runs the agent in one call — no separate session step. Profile state is saved automatically when the run ends. |
There was a problem hiding this comment.
P2: The new claim that profile state saves "automatically" when run() ends contradicts the existing Warning section which tells users to call sessions.stop() explicitly and warns that "a session left open or timed out may not save." A reader following the simpler run() pattern in the new code example won't know whether they also need to call sessions.stop() in a finally. If run() truly auto-saves, the Warning section needs updating too. If it does not auto-save, the new "automatically" claim is misleading.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/cloud/guides/authentication.mdx, line 51:
<comment>The new claim that profile state saves "automatically" when `run()` ends contradicts the existing Warning section which tells users to call `sessions.stop()` explicitly and warns that "a session left open or timed out may not save." A reader following the simpler `run()` pattern in the new code example won't know whether they also need to call `sessions.stop()` in a `finally`. If `run()` truly auto-saves, the Warning section needs updating too. If it does not auto-save, the new "automatically" claim is misleading.</comment>
<file context>
@@ -4,39 +4,52 @@ description: "Persistent browser state — cookies, localStorage, saved password
+Passing profile_id to run() provisions the browser and runs the agent in one call — no separate session step. Profile state is saved automatically when the run ends.
+
View your profile IDs at cloud.browser-use.com/settings.
</file context>
</details>
<a href="https://www.cubic.dev/action/fix/violation/08acc1be-ed2d-4265-ac41-661075df5167" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://cubic.dev/buttons/fix-with-cubic-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="https://cubic.dev/buttons/fix-with-cubic-light.svg">
<img alt="Fix with cubic" src="https://cubic.dev/buttons/fix-with-cubic-dark.svg">
</picture>
</a>
| "destination": "/cloud/browser/overview" | ||
| }, | ||
| { | ||
| "source": "/examples/persistent-browser", |
There was a problem hiding this comment.
P2: Redirect /examples/persistent-browser → /cloud/guides/authentication is a semantic mismatch: "persistent browser" is about session lifetime and state persistence, not authentication. A user following this redirect will land on authentication guidance instead of sessions/keep-alive docs. Consider redirecting to /cloud/browser/sessions (where keep-alive and stop already point) or /cloud/guides/profile-sync (profiles/cookie sync) for a closer conceptual match.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At docs/docs.json, line 504:
<comment>Redirect `/examples/persistent-browser` → `/cloud/guides/authentication` is a semantic mismatch: "persistent browser" is about session lifetime and state persistence, not authentication. A user following this redirect will land on authentication guidance instead of sessions/keep-alive docs. Consider redirecting to `/cloud/browser/sessions` (where keep-alive and stop already point) or `/cloud/guides/profile-sync` (profiles/cookie sync) for a closer conceptual match.</comment>
<file context>
@@ -496,6 +496,14 @@
+ "destination": "/cloud/browser/overview"
+ },
+ {
+ "source": "/examples/persistent-browser",
+ "destination": "/cloud/guides/authentication"
+ },
</file context>
Summary by cubic
Reorganized Cloud docs around agent workflows and stealth cloud browsers with clearer onboarding, benchmarks, and a canonical OpenAPI v3 spec at https://docs.browser-use.com/openapi.json; addresses ENG-5397.
New Features
pipinstall note.Refactors
run(task, profile_id=...); kept CDP persistence example; “fresh IP” recipe (stop → recreate).llms*.txtand generator to surface the root OpenAPI URL;.gitignoreignores OMC/harness state.Written for commit e4e322a. Summary will update on new commits.