<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Bump the `browser-use` package version from 0.12.2 to 0.12.3 in
`pyproject.toml` to prepare the 0.12.3 release.
<sup>Written for commit 45bff34a18.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Tightens CI workflow permissions and addresses dependency advisories to
reduce risk.
- **Security**
- Set `permissions: contents: read` for `install-script`, `lint`, and
`package` workflows; set `permissions: {}` for `cloud_evals`.
- **Dependencies**
- Removed unused `authlib`; bumped `pypdf` to `6.9.1` and `pillow` to
`12.1.1`.
<sup>Written for commit 3cd7841052.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Fixes broken extension loading on Chrome 145+ by migrating defaults to
Manifest V3 and removing Chrome flags that block unpacked extensions.
Extensions now load reliably in MV3-only environments.
- **Bug Fixes**
- Stopped passing flags that block extensions on 145+
(`--disable-component-extensions-with-background-pages`,
`--test-type=gpu`).
- Replaced MV2 `uBlock Origin` with MV3 `uBlock Origin Lite`; removed
`ClearURLs` (MV2).
- Added a manifest check to skip MV2 extensions and log a warning.
<sup>Written for commit 29da480659.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
New skill providing documentation reference for writing Python code
against the browser-use library and making Cloud REST API calls.
Condensed from CLOUD.md (2700 lines of OpenAPI YAML → 530 lines of
tables) and AGENTS.md (1021 lines → 762 lines with markup stripped and
sections deduplicated).
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Adds two skills, `open-source` and `cloud`, with focused docs for the
`browser-use` Python library and Cloud APIs/SDKs. Replaces the old
combined docs skill with granular references, a v2/v3 API split with
REST examples, and three integration guides.
- **New Features**
- Split into `skills/open-source/*` (quickstart, models,
agent/browser/tools/actor, integrations/MCP, monitoring, examples) and
`skills/cloud/*` (quickstart/pricing/FAQ, v2 REST and v3 Agent API,
direct CDP browser API, sessions/profiles/1Password, features,
patterns).
- Added guides: chat UI (v3 with `liveUrl`), subagent (Cloud SDK), and
tools integration; removed open‑source imports from cloud guides.
Deleted the old `browser-use-docs` skill. Updated routing for separate
v2/v3 API files.
- Expanded v3 docs with full REST endpoints and polling, plus CDP
discovery and auto‑lifecycle details in the browser API.
- **Bug Fixes**
- v2 file upload now uses multipart POST with presigned form fields;
examples include all returned fields.
- Agent and timing fixes: defaults updated (`max_actions_per_step=5`,
`max_failures=5`, `use_vision=True`, `step_timeout=180`), `llm_timeout`
auto‑detection, `max_steps=500` (was 100), and NavigateToUrl timeout 30s
(was 15s).
- Provider/env fixes and docs polish: correct `ChatVercel`
(`provider_options.gateway`) and `AI_GATEWAY_API_KEY`; use `uv pip
install browser-use-sdk`; add `try/finally` cleanup and guard
`pw.stop()`; define `session.id` before uploads; add missing `await` on
`get_usage_summary()`; distinct MCP server name; fix TOC anchor and
relative link; set full v3 base URL; wrap chat‑ui Python example in
`async def main()` with `asyncio.run()` (removed duplicate sleep).
- Cloud corrections: v3 pricing updated (BU Mini output $4.20, BU Max
$18.00); Selenium `debugger_address` now strips `/devtools/browser/`
suffix; webhooks use `type`/`payload` with 5‑min replay protection and
sorted‑key signature verification.
- Selenium CDP connection examples now handle `wss://` URLs correctly;
webhook examples add a JSON parse guard.
<sup>Written for commit 318eb3b41e.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
- subagent.md: fix TOC anchor to match renamed heading (#python-agents-cloud-sdk)
- subagent.md: fix relative link to ../features.md from guides/ subdir
- SKILL.md: use full v3 base URL instead of .../api/v3
…back
- AGI-569: after any click that opens a new tab, automatically dispatch
SwitchTabEvent so the agent lands on the new page immediately instead of
requiring a manual switch step (~877 occurrences)
- AGI-548: for <input type="checkbox/radio">, capture checked state
before the CDP mouse click and verify it toggled afterward; if unchanged
(custom-styled or shadow-DOM-backed inputs), fall back to JS
element.click() and report the final checked state in metadata (~1,241
occurrences)
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Automatically switch to newly opened tabs after clicks and make
checkbox/radio interactions reliable with a JS fallback. Addresses
AGI-569 and AGI-548 to improve navigation flow and form handling.
- **Bug Fixes**
- Auto-switch to new tabs: detect a new tab after a click and dispatch
`SwitchTabEvent`; on failure, add a note to manually switch.
- Checkbox/radio reliability: capture pre-click checked state; if the
CDP click doesn’t toggle, fall back to `element.click()` and include the
final `checked` state in metadata.
<sup>Written for commit 4a65aea6a9.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
- agent.md: fix llm_timeout docs to match auto-detection logic (Groq 30s,
Gemini 75s, o3/Claude/DeepSeek 90s, default 75s)
- examples.md: guard pw.stop() with None check to prevent UnboundLocalError
- api-v2.md: show all S3 presigned form fields in upload example
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Make cross-origin iframe indexing reliable so elements inside them are
included consistently. Handles dynamic iframes and target-attachment
races to prevent missing content during DOM builds.
- **Bug Fixes**
- Fallback to matching iframes by sanitized `src` when `frameId` is
missing or not yet in `all_frames`.
- Use `frameTargetId` directly; fetch details via `get_target()` when
available and fall back to frame metadata if not.
- Remove race in target tracking by creating/updating `Target` inside
the same lock as `_target_sessions`.
- Skip detached targets in `get_all_frames()` by catching `ValueError`,
and wrap iframe DOM recursion in try/except to avoid failing the whole
tree.
<sup>Written for commit 03de83a069.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
- models.md: fix ChatVercel provider_options and env var (AI_GATEWAY_API_KEY)
- examples.md: add try/finally for browser cleanup in parallel and playwright examples
- agent.md: fix defaults to match source (max_actions_per_step=5, max_failures=5,
use_vision=True, llm_timeout=60, step_timeout=180)
- features.md: fix undefined session_id in workspace example
- monitoring.md: add missing await on get_usage_summary()
- api-v2.md: fix upload flow to use multipart POST with fields (S3-style)
- SKILL.md: use uv pip for cloud SDK install
- integrations.md: use distinct MCP server name for docs endpoint
New skill providing documentation reference for writing Python code against
the browser-use library and making Cloud REST API calls. Condensed from
CLOUD.md (2700 lines of OpenAPI YAML → 530 lines of tables) and AGENTS.md
(1021 lines → 762 lines with markup stripped and sections deduplicated).
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Widen retry backoff timing assertions in `tests/ci/test_llm_retries.py`
to reduce CI flakiness. Upper bounds: first 0.3s, second 0.5s; still
verify exponential growth.
<sup>Written for commit 954cf0f6f7.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Removed the code-use mode and `CodeAgent` to simplify the codebase and
drop heavy optional dependencies. This is a breaking change for projects
using `CodeAgent` or `browser_use.code_use.*`.
- **Migration**
- Replace `CodeAgent` with `Agent` and adapt to action-based flows.
- Remove imports from `browser_use.code_use.*` and `CodeAgentTools`; use
`Tools` from `browser_use.tools.service`.
- Drop usage of code-use helpers (`create_namespace`, `export_to_ipynb`,
`session_to_python_script`, `CodeCell`, `NotebookSession`, and the
code-use DOM serializer).
- Stop installing the `code` extra; if needed, add `numpy`, `pandas`,
`matplotlib`, and `tabulate` directly to your project.
<sup>Written for commit 43b5e4ce1d.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
- AGI-569: after any click that opens a new tab, automatically dispatch
SwitchTabEvent so the agent lands on the new page immediately instead
of requiring a manual switch step (~877 occurrences)
- AGI-548: for <input type="checkbox/radio">, capture checked state
before the CDP mouse click and verify it toggled afterward; if
unchanged (custom-styled or shadow-DOM-backed inputs), fall back to
JS element.click() and report the final checked state in metadata
(~1,241 occurrences)
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Rebuilt the CLI around a per‑session daemon and added a stdlib
`browser-use cloud` REST command, Chrome auto‑discovery with
`--connect`, a new `upload` command, and smarter profile resolution
(accepts display names; falls back to raw value when metadata is
missing). Also hardens liveness/ping paths to prevent duplicate daemons,
consolidates files under `~/.browser-use`, and simplifies install/setup.
- **New Features**
- Daemon: single session with socket‑as‑liveness; exits when the browser
dies; guarded signal handler awaits shutdown to avoid orphaned Chrome;
fixed socket FD leaks; `ensure_daemon` returns early on ping failure or
`success:false` to avoid duplicates; clean disconnects for external
browsers (`--connect`, `--cdp-url`, cloud); Windows liveness check via
OpenProcess.
- Cloud: `browser-use cloud` with login/logout, versioned REST (e.g.,
`v2 GET /browsers`, `v2 POST /tasks …`), polling; stdlib‑only (no
daemon). `cloud --help` shows custom usage; `cloud v2 --help` lists
OpenAPI endpoints; REST errors print bodies to stderr.
- Connections and profiles: `--connect` auto‑discovers Chrome via CDP;
`--cdp-url` attaches to running browsers; `--profile` integrates with
managed `profile-use`, accepts directory and display names
(case‑insensitive), shows available profiles on mismatch, and falls back
to the raw value if Chrome metadata can’t be read. `doctor` checks basic
network, `cloudflared`, and `profile-use` with cross‑platform tips. All
CLI files live in `~/.browser-use` (config, sockets, binaries, tunnels).
- File uploads: `browser-use upload <index> <path>` finds nearby inputs
(shared `find_file_input_near_element` on `BrowserSession`); Python REPL
adds `browser.upload(index, path)`; client resolves absolute paths.
- **Migration**
- Removed `run` and agent flags; use `browser-use cloud` for task
execution.
- Removed `--browser remote` and cloud task/session/profile subcommands;
use `browser-use cloud` or the library
(`BrowserSession(use_cloud=True)`).
- Simplified installer/setup: no install modes or API key flags;
`install.sh` just installs, scopes `INSTALL_DIR` so `profile-use`
installs to `~/.browser-use/bin/`, pinned `profile-use` to v1.0.2.
- Paths consolidated to `~/.browser-use`; override with
`BROWSER_USE_HOME` if needed.
- Dropped `portalocker` and old server/locking files; daemon uses socket
presence. `cloud connect` is mutually exclusive with `--profile` and
`--cdp-url`.
<sup>Written for commit a2c2fa33aa.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
- Updated the BrowserSession class to ensure the User-Agent header is
set correctly for both local and remote connections.
- Introduced a utility function to retrieve the browser-use version and
incorporated it into the User-Agent string.
- Ensured headers are consistently handled as dictionaries to avoid
potential issues with None values.
This change improves the reliability of the CDP client communication by
providing a proper User-Agent, which can be crucial for certain web
interactions.
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Ensure `BrowserSession` always sends a proper User-Agent and preserves
user headers. Injects default `browser-use/<version>` for remote CDP and
`/json/version` requests to improve version discovery and WebSocket
stability.
- **Bug Fixes**
- Inject default `browser-use/<version>` for `/json/version` and remote
CDP; preserve all user headers and any existing User-Agent.
- Normalize headers to dicts; pass `None` only for local when empty;
always include User-Agent for remote, even with no user headers.
- Apply in both connect and reconnect; tests tightened to verify these
cases and updated with a clearer User-Agent assertion.
<sup>Written for commit ad41865559.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
- Updated the assertion for the User-Agent header in the /json/version endpoint test to improve readability by using a multi-line format.
- This change enhances the clarity of the test's intent while maintaining the existing validation logic.
These modifications contribute to better maintainability of the test code.
- Improved assertions in tests to ensure all user-provided headers are present in the additional_headers.
- Added checks to confirm that the User-Agent header is injected for remote connections, ensuring consistent behavior across tests.
- Updated the test for the /json/version endpoint to validate the presence and format of the User-Agent header.
These changes enhance the reliability of header handling in the CDP client tests.
- Updated the BrowserSession class to ensure the User-Agent header is set correctly for both local and remote connections.
- Introduced a utility function to retrieve the browser-use version and incorporated it into the User-Agent string.
- Ensured headers are consistently handled as dictionaries to avoid potential issues with None values.
This change improves the reliability of the CDP client communication by providing a proper User-Agent, which can be crucial for certain web interactions.
If list_chrome_profiles() returns empty (permissions, corrupt Local State,
first-run Chrome), skip resolution and use the profile value as-is instead
of always raising RuntimeError.