<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Prepare preview release 0.11.10a1 by updating the package version in
pyproject.toml. This enables publishing an alpha build for early
testing.
<sup>Written for commit 90e6143ff8.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
Changes install.sh to clone from github.com/browser-use/browser-use@main
by default instead of installing from PyPI. Custom branches and repos
can still be specified via BROWSER_USE_BRANCH and BROWSER_USE_REPO
environment variables.
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Update install.sh to install browser-use from
github.com/browser-use/browser-use@main by default instead of PyPI. You
can still install a specific branch or fork by setting
BROWSER_USE_BRANCH and BROWSER_USE_REPO.
<sup>Written for commit 8af57fa19a.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
Changes install.sh to clone from github.com/browser-use/browser-use@main
by default instead of installing from PyPI. Custom branches and repos
can still be specified via BROWSER_USE_BRANCH and BROWSER_USE_REPO
environment variables.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Streamlines installation and expands the CLI with mode-based setup,
health checks, unified cloud/local management, robust tunnels, and
SDK‑verified LLM selection. Also includes minor CI lint fixes in tests.
- **New Features**
- Installer: mode-based install (--remote-only/--local-only/--full),
writes install-config.json, optional API key, cross‑platform cloudflared
install (Windows via winget/direct), venv handling, CI-friendly
non‑interactive flow, gum TUI with Windows fixes, auto PATH config
(registry + PowerShell profile), unified install URL; script moved to
browser_use/skill_cli/install.sh (public URL unchanged).
- CLI: setup and doctor (prints detailed check results); unified profile
management (local/cloud via SDK); cloud task/session ops (including
session create/share), new filters/flags (--session, --metadata,
--secret, --allowed-domain, --skill-id, --structured-output, --judge,
--judge-ground-truth, --start-url); token‑efficient monitoring
(--compact/--verbose/--last/--reverse/--step) with durations; LLM
selection via SDK‑verified lists with updated defaults (o3,
claude-sonnet-4-0, gemini-flash-latest).
- Remote tasks: async by default; --wait prints task_id/session_id
immediately, shows a simple progress indicator, forwards all cloud‑only
flags, polls without blocking, and handles Ctrl+C without canceling the
task.
- Routing/safety: local vs remote agent routing with no client‑side
defaults; metadata detects browser‑mode mismatches with clear guidance;
local mode doesn’t require a Browser‑Use API key.
- Tunnels: fully decoupled from sessions, persist across CLI exit, stop
--all supported, invoked without starting a session; implementation
consolidated into a single tunnel.py module for reliability.
- Cross‑platform fixes: Windows server stability (127.0.0.1 binding, PID
checks, no console window, port reuse); file‑lock based session server
lifecycle via portalocker to prevent race conditions/orphaned processes
(with stale cleanup and longer socket timeout); macOS PATH updates; CI
adds install.sh tests across macOS/Linux/Windows; refactor to
cloud_task.py/cloud_session.py with a shared SDK client; ruff fixes;
expanded docs and skills; minor CI lint cleanups in tests.
- **Migration**
- Installation modes: requesting an unavailable mode errors with
reinstall guidance; messages now suggest --remote-only in addition to
--full and --local-only (use install.sh with
--full/--remote-only/--local-only).
- Remote tasks return immediately; use --wait to block. With --wait, IDs
print immediately and Ctrl+C won’t cancel the remote task.
- Tunnels are independent; browser-use close no longer stops them. Use
browser-use tunnel stop <port> or --all.
- In remote workflows, --browser remote is only needed on the first
command in a session.
- LLM model selection now uses SDK‑verified lists; the browser-use/*
pattern is no longer supported. Use bu-latest/bu-1-0/bu-2-0 or provider
model IDs.
<sup>Written for commit bff682fee6.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
- Remove unused `import os` from test_doctor_command.py
- Add assert for proc.stdout in test_server_locking.py to satisfy pyright
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Removed all unittest.mock.patch usage
- Tests now use real functions and verify structure/behavior
- Use monkeypatch for env vars (acceptable for test isolation)
- Tests adapt to system state (cloudflared may or may not exist)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Previously only suggested --full, but --remote-only is a lighter-weight
option when users only need cloud browser support.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The session server had a race condition where concurrent CLI calls could
spawn multiple server processes. The old server would be orphaned when
the new one overwrote the PID file and deleted its socket.
Changes:
- Add flock-based locking using portalocker (already a dependency)
- Server acquires exclusive lock before writing PID file
- CLI checks both is_server_running() AND is_session_locked()
- Add kill_orphaned_server() to clean up servers with PID but no lock
- Increase socket timeout from 0.1s to 0.5s for reliability
- cleanup_session_files() now removes .lock and .meta files
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rename tunnel_manager.py to tunnel.py
- Remove dead code: commands/tunnel.py (session-scoped implementation never reached)
- Remove TunnelInfo dataclass and tunnels field from sessions.py
- Remove tunnel routing from server.py (unreachable code path)
- Update imports in main.py, doctor.py, setup.py, and tests
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove the interactive confirmation prompt for Windows PATH
configuration. Now behaves consistently with macOS/Linux which
automatically add to shell rc files without prompting.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update all references from browser-use.com/install.sh to
browser-use.com/cli/install.sh across documentation and code.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Reverts changes to browser_use/llm/browser_use/chat.py to keep
CLI changes isolated. Browser-use models are now hardcoded in
agent.py instead of importing from chat.py.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Forward all cloud-only flags in _handle_remote_run_with_wait
Previously only forwarded 6 params; now includes session_id, vision,
metadata, secrets, allowed_domains, skill_ids, structured_output,
judge, judge_ground_truth, plus session creation for profile/proxy
- Use asyncio.to_thread for blocking SDK call in poll_until_complete
Prevents client.tasks.get_task from blocking the event loop while
polling for task completion
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use asyncio.to_thread() for poll_until_complete to prevent time.sleep()
from blocking the async event loop when --wait is used.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace custom HTTP client with browser-use-sdk for tasks and sessions,
completing the SDK migration started in 8a992229.
## SDK Migration
- Add `sdk.py` with singleton client factory (`get_sdk_client()`)
- Rewrite `cloud_task.py` to use SDK (-300 lines)
- All functions return typed SDK models (TaskView, SessionView, etc.)
- Add `_filter_none()` to omit None values (SDK sends null, API rejects)
## No Client-Side Defaults
- Remove hardcoded defaults from CLI (max_steps, proxy_country, etc.)
- Let API use its own defaults (documented at docs.cloud.browser-use.com)
- Only pass values user explicitly sets
## New CLI Features
- `session create` - create session without task
- `session share <id>` - create/delete public share URLs
- `task list --session <id>` - filter tasks by session
- New task flags: --metadata, --secret, --allowed-domain, --skill-id,
--structured-output, --judge, --judge-ground-truth, --start-url
## Async by Default
- Change `--no-wait` to `--wait` (flip default behavior)
- Tasks return immediately with task_id by default
- Use `--wait` to block until completion
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace raw urllib HTTP calls with the official browser-use-sdk client
for all cloud profile API operations. This provides:
- Type-safe responses (ProfileView, ProfileListResponse)
- Cleaner error handling via SDK exceptions
- Consistent SDK usage pattern (matches skills/service.py)
- Removes 40 lines of manual HTTP/auth handling from main.py
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
<!-- This is an auto-generated description by cubic. -->
## Summary by cubic
Fixes select_dropdown failures when options are lazily populated by
focusing the element and retrying once after a 1s wait. Improves
reliability on pages that load options on focus; also fixes a comment
linting issue.
- **Bug Fixes**
- Detect all-empty options, call element.focus(), wait 1s, then rerun
the selection script once.
- Avoid synthetic mouse events (isTrusted=false); keep click fallback
when selectionReverted.
<sup>Written for commit 30a8b0f66c.
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
Increase the default consecutive failure threshold from 3 to 5 and
restore the original guard so only single-action step errors increment
consecutive failures (multi-action steps are handled by loop detection).
Improve browser-closed detection to trigger only on real CDP/WebSocket
connection failures, reducing false positives.
<sup>Written for commit ae3b8be538.
Summary will update on new commits.</sup>
<!-- End of auto-generated description by cubic. -->
- Move prerequisites before install commands (no longer hidden)
- Add Windows troubleshooting section with common issues
- Minor wording improvements
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Installation: one-line install with platform notes, manual install option
- Agent tasks: local and remote mode with all flags
- Task management: list, status, stop, logs
- Cloud sessions: list, get, stop
- Tunnels: expose local servers to cloud browsers
- Profile management: local and cloud profiles
- New commands: hover, dblclick, rightclick, cookies, wait, get
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Auto-install cloudflared via winget
- Use registry for PATH (works in PowerShell + Command Prompt)
- Add confirmation prompt before modifying registry
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add configure_powershell_path() to write to PowerShell profile
- Supports both PowerShell 7+ and Windows PowerShell 5.x
- Updates Next steps message to just say "Restart PowerShell"
- Updates troubleshooting docs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use CREATE_NO_WINDOW instead of DETACHED_PROCESS to prevent
a blank console window from appearing when the server starts.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The Windows zip contains a subdirectory (gum_x.x.x_Windows_x86_64/gum.exe),
not gum.exe at the root level.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Windows gum TUI installation (was skipped before)
- Show PowerShell syntax for API key export ($env: instead of export)
- Already had Windows-specific PATH instructions from previous commit
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
On Windows, show PowerShell PATH command instead of 'source ~/.bashrc'
which doesn't work in PowerShell.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add step-by-step instructions for "Failed to start session server"
- Document how to find and kill zombie processes (netstat + taskkill)
- Add section on debugging server issues with foreground mode
- Note that taskkill is needed before deleting venv
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use ctypes.OpenProcess on Windows for process existence check
(os.kill raises WinError 87 or SystemError on Windows)
- Use 127.0.0.1 instead of localhost to avoid IPv6 binding issues
- Add reuse_address=True to asyncio.start_server for TCP port reuse
Fixes issues reported in:
- #3912 (os.kill fails on Windows)
- #3918 (WinError 87 in is_server_running)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Previously doctor said "See details above" but never printed the actual
check results. Now prints each check with status icon and details.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Document known issues and solutions for Windows installation:
- Python 3.14+ asyncio breaking changes
- ARM64 Windows requiring x64 Python for package compatibility
- Multiple Python versions and py launcher behavior
- Stale venv cleanup instructions
- PowerShell PATH setup (vs Git Bash)
- Server startup troubleshooting
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>