browser-use
0.13.8 open-sourceMake websites accessible for AI agents. Automate tasks online with ease.
import os
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(os.environ["BROWSER_USE_CDP_URL"])
page = browser.contexts[0].pages[0]
page.goto("https://example.com")
print(page.title())
session=$(curl -sS https://api.browser-use.com/api/v4/browsers \
-H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"proxyCountryCode":"us"}')
export BROWSER_SESSION_ID=$(echo "$session" | jq -r .id)
export BROWSER_USE_CDP_URL=$(echo "$session" | jq -r .cdpUrl)
curl -X PATCH \
"https://api.browser-use.com/api/v4/browsers/$BROWSER_SESSION_ID" \
-H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"stop"}'
uvx browser-use <<'PY'
new_tab("https://example.com")
print(page_info())
PY
BU_CDP_WS=ws://localhost:9222/json/version browser-use <<'PY'
new_tab("https://internal.example.com")
print(page_info())
PY
browser-use auth login
browser-use <<'PY'
start_remote_daemon("work")
PY
BU_NAME=work browser-use <<'PY'
new_tab("https://example.com")
print(page_info())
PY
BU_NAME=work browser-use <<'PY'
stop_remote_daemon("work")
PY
from browser_use import Agent, Browser, ChatBrowserUse
browser = Browser(
cloud_proxy_country_code='jp',
cloud_timeout=60,
)
agent = Agent(
task="Find the top 5 trending products on a Japanese e-commerce site",
llm=ChatBrowserUse(),
browser=browser,
)
from browser_use import Agent, Browser, ChatBrowserUse
from browser_use.browser import ProxySettings
browser = Browser(
cdp_url="http://remote-server:9222",
proxy=ProxySettings(
server="http://proxy-server:8080",
username="proxy-user",
password="proxy-pass"
),
)
agent = Agent(
task="Extract data from an internal network page",
llm=ChatBrowserUse(),
browser=browser,
)
import requests
from browser_use import Browser
resp = requests.post('https://api.browser-use.com/browsers', headers={'Authorization': 'Bearer <token>'})
data = resp.json()
browser = Browser(cdp_url=data['cdpUrl'])
# ... run your agent ...
requests.patch(f"https://api.browser-use.com/browsers/{data['id']}", json={'action': 'stop'}, headers={'Authorization': 'Bearer <token>'})
profile=$(curl -sS https://api.browser-use.com/api/v4/profiles \
-H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"My user"}')
export BROWSER_USE_PROFILE_ID=$(echo "$profile" | jq -r .id)
curl -sS https://api.browser-use.com/api/v4/browsers \
-H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"profileId\":\"$BROWSER_USE_PROFILE_ID\",\"proxyCountryCode\":\"us\"}"
from browser_use import Agent, ChatBrowserUse
import asyncio
async def main():
agent = Agent(
task='Summarize the latest browser-use release notes',
llm=ChatBrowserUse(), # now defaults to bu-2-0-mini-preview
)
await agent.run()
asyncio.run(main())
browser-use skill
record start
# ... perform automated browser actions ...
record stop
browser-use --profile "Default" open https://github.com
browser-use state
browser-use click 2
browser-use screenshot page.png
browser-use -s work open https://work.example.com
browser-use -s personal open https://gmail.com
browser-use sessions
browser-use close --all
browser-use tunnel 3000
# outputs: https://abc.trycloudflare.com
browser-use open https://abc.trycloudflare.com
browser-use state
browser-use screenshot --full result.png
browser-use tunnel stop --all
browser-use --cdp-url ws://localhost:9222 'Go to https://internal.corp/dashboard and extract the active incident list'
browser-use --browser real open http://localhost:3000
browser-use state
browser-use click 0
browser-use type "mypassword"
browser-use screenshot login-result.png
browser-use close
browser-use -s work open https://work.example.com
browser-use -s personal open https://gmail.com
browser-use sessions
BROWSER_USE_API_KEY=<your-key> browser-use --browser remote open https://example.com
browser-use screenshot result.png
browser-use close
export BROWSER_USE_DISABLE_EXTENSIONS=true
from browser_use import Agent, ChatBrowserUse
agent = Agent(
task='Research the top 5 competitors and summarize their pricing',
skills=['skill-uuid-1', 'skill-uuid-2'],
llm=ChatBrowserUse()
)
await agent.run()
from browser_use import Agent, ChatBrowserUse
agent = Agent(
task='Book the cheapest flight from NYC to London next month',
skills=['*'],
llm=ChatBrowserUse()
)
await agent.run()
AWS_ACCESS_KEY_ID=<your-key>
AWS_SECRET_ACCESS_KEY=<your-secret>
AWS_DEFAULT_REGION=us-east-1
ANTHROPIC_BEDROCK_BASE_URL=https://bedrock-runtime.us-east-1.amazonaws.com
uvx browser-use install
from browser_use import CodeAgent, ChatBrowserUse
agent = CodeAgent(
task=task,
llm=ChatBrowserUse(),
)
await agent.run()
from browser_use import Browser, Agent
from browser_use.llm.openai import ChatOpenAI
async def main():
llm = ChatOpenAI(api_key="your-api-key")
browser = Browser()
await browser.start()
page = await browser.new_page("https://github.com/login")
email_input = await page.must_get_element_by_prompt("username field", llm=llm)
await email_input.fill("your-username")
agent = Agent(browser=browser, llm=llm)
await agent.run("Complete login and navigate to my repositories")
await browser.stop()
from browser_use import Agent
agent = Agent(
task='Research pricing on allowed sites',
prohibited_domains=['malicious-site.com', 'competitor.com'],
)
BROWSER_USE_CLOUD_SYNC=false python my_agent_script.py
agent = Agent(
task='Book a flight on the airline website',
llm=llm,
reasoning_models=['qwen3']
)
CDP_USE_LOG_LEVEL=WARNING python my_agent.py
{
"seed": 42,
"top_p": 0.9,
"temperature": 0.2
}
{
"service_tier": "auto"
}
await session.navigate(url='https://example.com', new_tab=True, timeout_ms=15000)
from browser_use import BrowserSession
session = BrowserSession(user_data_dir='/home/user/.config/chrome-profile')
# If the profile dir is unusable, falls back to user_data_dir=None automatically
{
"mcpServers": {
"browser-use": {
"command": "uvx",
"args": ["browser-use[cli]", "--mcp"]
}
}
}
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
base_url='https://openrouter.ai/api/v1',
api_key='<your-openrouter-key>',
model='openai/gpt-4o',
)
agent = Agent(task='<task>', llm=llm)
agent = Agent(
task='Book a flight to NYC',
llm=llm,
highlight_elements=False
)
session = BrowserSession(keep_alive=True, stealth=True)
await session.start()
agent = Agent(task='...', browser_session=session)
await agent.run()
await session.kill() # force-close even though keep_alive=True
session = BrowserSession(
cdp_url='ws://localhost:9222',
storage_state='storage_state.json', # auto-applied on connect
)
await session.start()
browser-use -p 'get todays DOW stock price and return it as JSON, e.g.: {"dow_price": 40000.00}'
from playwright.async_api import async_playwright
from browser_use import Agent
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto('https://example.com')
agent = Agent(task='fill out this form', llm=llm, page=page)
await agent.run()
from browser_use import Controller
from playwright.async_api import Page
controller = Controller()
@controller.registry.action(
description='Highlight all cells in the selection',
allowed_domains=['https://docs.google.com']
)
async def highlight_cells(cell_range: str, page: Page):
await page.evaluate(f"document.querySelector('{cell_range}').style.background = 'yellow'")
from browser_use import Agent
agent = Agent(
task="Find the pricing page",
allowed_domains=['*.example.com'],
llm=llm,
)
from browser_use import BrowserContextConfig
config = BrowserContextConfig(window_width=1280, window_height=900, no_viewport=False)
from browser_use import Agent, BrowserConfig
browser_config = BrowserConfig(
chrome_remote_debugging_port=9222,
force_new_context=True
)
agent = Agent(task='...', llm=llm, browser_config=browser_config)
SKIP_LLM_API_KEY_VERIFICATION=true python my_agent.py
agent = Agent(
task="...",
browser=browser,
highlight_elements=False
) Summary
browser-use is an open-source ai-agent-frameworks that automates web navigation for task execution, and it has no licensing cost. It is run as a library that developers can import into existing codebases, making it suitable for application developers building custom agents. Its documentation positions it alongside other browser automation tools, fitting into the general category of web-navigation frameworks. The project maintains an active presence across its GitHub repository and other communication channels.
Make websites accessible for AI agents. Automate tasks online with ease.
What browser-use answers
What kind of web actions can it automate?
Automates web navigation for task execution
What is the required runtime environment for using this?
Runs as a library that developers can import into existing codebases
What existing components or setups can it connect with?
Suitable for application developers building custom agents
What is the scope of its operation?
Functions as an AI-agent-frameworks
How does it handle its underlying structure?
It is an open-source framework
Are there any costs associated with using it?
It has no licensing cost
Examples
Command line
No option matches that search.
| option | found in | since | description |
|---|
No option matches that search.
Values are placeholders taken from each option’s declared default. Nothing is executed here — the output shown is a recording of a run that already happened.
Release history
- docs update
browser-use Cloud adds a managed Chromium CDP API letting Playwright and Puppeteer connect to remote hardened browsers via
POST /api/v4/browsers└──▷ USE ITProvision a US-exit managed browser and connect to it with Playwright Python to automate a page — without managing any browser infrastructure.import os from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.connect_over_cdp(os.environ["BROWSER_USE_CDP_URL"]) page = browser.contexts[0].pages[0] page.goto("https://example.com") print(page.title())Create a browser session with a US residential proxy, capture the CDP URL and session ID for use in subsequent automation and teardown calls.$ session=$(curl -sS https://api.browser-use.com/api/v4/browsers \ -H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"proxyCountryCode":"us"}') export BROWSER_SESSION_ID=$(echo "$session" | jq -r .id) export BROWSER_USE_CDP_URL=$(echo "$session" | jq -r .cdpUrl)
Stop the managed cloud browser after automation completes — browser.close() alone is insufficient; the PATCH stop action is required to release cloud resources.$ curl -X PATCH \ "https://api.browser-use.com/api/v4/browsers/$BROWSER_SESSION_ID" \ -H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"action":"stop"}'
- ›Adds
POST https://api.browser-use.com/api/v4/browsersendpoint to provision a managed, hardened Chromium browser session; returns acdpUrlfor direct CDP connections and a sessionidfor lifecycle management. - ›Adds
PATCH https://api.browser-use.com/api/v4/browsers/{id}endpoint with{"action":"stop"}body to terminate managed browser sessions — required because calling browser.close() or disconnecting CDP does not stop the cloud browser. - ›Exposes
BROWSER_USE_CDP_URL(WebSocket CDP endpoint) andBROWSER_SESSION_IDfrom the session creation response, enabling Playwright and Puppeteer to connect over CDP using chromium.connectOverCDP() and puppeteer.connect({ browserWSEndpoint }) respectively. - ›Supports
proxyCountryCodefield in the session creation payload (e.g.{"proxyCountryCode":"us"}) to select the residential proxy exit country. - ›Every managed browser runs in a hardened Chromium fork with stealth, anti-fingerprinting, and residential proxies enabled by default.
+1 moreshow less
- ›Notes that Selenium's
debugger_addressonly supports localhost:portconnections and cannot be used for remote CDP over WebSocket; Playwright or Puppeteer are required for remote sessions.
- ›Adds
- docs update
browser-use CLI adds direct browser control for coding agents via local Chrome, cloud browsers, or any CDP endpoint
└──▷ TRY ITRun a quick browser automation task without installing the tool permanently — useful in CI or ephemeral environments.$ uvx browser-use <<'PY' new_tab("https://example.com") print(page_info()) PYPoint the CLI at an existing CDP endpoint (e.g. a Playwright-launched browser or managed Chrome instance) instead of attaching to the default local browser.$ BU_CDP_WS=ws://localhost:9222/json/version browser-use <<'PY' new_tab("https://internal.example.com") print(page_info()) PYStart a named cloud browser session for a headless agent, run tasks, then stop the session to avoid ongoing billing.$ browser-use auth login browser-use <<'PY' start_remote_daemon("work") PY BU_NAME=work browser-use <<'PY' new_tab("https://example.com") print(page_info()) PY BU_NAME=work browser-use <<'PY' stop_remote_daemon("work") PY- ›New
browser-useCLI tool installable viauv tool install browser-usegives coding agents a direct browser-control surface backed by Browser Harness. - ›Supports three browser modes: local Chrome/Chromium via CDP (preserving tabs, cookies, extensions, and logins), Browser Use cloud browsers, or any CDP endpoint set via
BU_CDP_URLorBU_CDP_WSenvironment variables. - ›New
browser-use skill installsubcommand registers the CLI as a callable skill in Claude Code, Codex, and other coding agents. - ›New
browser-use auth loginandbrowser-use auth statussubcommands handle authentication for Browser Use Cloud. - ›New
browser-use --doctorflag diagnoses connection failures to local or remote browsers.
+3 moreshow less
- ›New
browser-use skill showandbrowser-use telemetry statussubcommands expose skill configuration and telemetry state. - ›Cloud browser sessions are managed by name using start_remote_daemon('<name>') and stop_remote_daemon('<name>') Python calls, with
BU_NAMEenvironment variable selecting the active session — enabling parallel agent workloads. - ›Supports one-off runs without a permanent install via
uvx browser-use, accepting Python via stdin heredoc (bash/zsh/WSL) or PowerShell here-string pipe.
- ›New
- docs update
browser-use adds native cloud browser provisioning via
use_cloud,cloud_profile_id,cloud_proxy_country_code, andcloud_timeouton Browser()└──▷ USE ITProvision a geo-specific cloud browser with captcha bypass for a scraping task — no local Chrome needed.from browser_use import Agent, Browser, ChatBrowserUse browser = Browser( cloud_proxy_country_code='jp', cloud_timeout=60, ) agent = Agent( task="Find the top 5 trending products on a Japanese e-commerce site", llm=ChatBrowserUse(), browser=browser, )Connect to a self-managed or third-party remote browser via CDP URL with an authenticated proxy.from browser_use import Agent, Browser, ChatBrowserUse from browser_use.browser import ProxySettings browser = Browser( cdp_url="http://remote-server:9222", proxy=ProxySettings( server="http://proxy-server:8080", username="proxy-user", password="proxy-pass" ), ) agent = Agent( task="Extract data from an internal network page", llm=ChatBrowserUse(), browser=browser, )- ›Adds
use_cloud=Trueto Browser() to automatically provision a cloud browser without any local browser setup. - ›Adds
cloud_profile_idto Browser() to target a specific UUID browser profile in the cloud service. - ›Adds
cloud_proxy_country_codeto Browser() to route cloud sessions through a geo-specific proxy; supported values:us,uk,fr,it,jp,au,de,fi,ca,in. - ›Adds
cloud_timeoutto Browser() to set session lifetime in minutes (free users: max 15 min, paid users: max 240 min). - ›Adds
cdp_urlto Browser() to connect to any third-party remote browser via a Chrome DevTools Protocol URL (e.g.http://remote-server:9222).
+2 moreshow less
- ›Adds
ProxySettings(importable frombrowser_use.browser) to configure a proxy server, username, and password alongside acdp_urlfor authenticated remote browser connections. - ›Requires
BROWSER_USE_API_KEYenvironment variable and an API key fromcloud.browser-use.comwhen using the built-in cloud browser service.
- ›Adds
- docs update
browser-use Cloud API gains direct browser control endpoints for CDP-based remote automation
└──▷ USE ITSpin up a remote Chrome browser via the API and attach a local browser-use agent to it over CDP.import requests from browser_use import Browser resp = requests.post('https://api.browser-use.com/browsers', headers={'Authorization': 'Bearer <token>'}) data = resp.json() browser = Browser(cdp_url=data['cdpUrl']) # ... run your agent ... requests.patch(f"https://api.browser-use.com/browsers/{data['id']}", json={'action': 'stop'}, headers={'Authorization': 'Bearer <token>'})- ›Adds
POST /browsersendpoint that creates a remote Chrome browser and returns itsidandcdpUrlfor direct CDP control. - ›Adds
PATCH /browsers/{id}with{"action":"stop"}to programmatically stop a running remote browser. - ›The returned
cdpUrlconnects to a remote browser via Browser(cdp_url=...) in the browser-use library, theBU_CDP_URLenvironment variable in the Browser Use CLI, or directly from Playwright, Puppeteer, or Selenium.
- ›Adds
- docs update
browser-use cloud adds persistent login profiles, rerunnable scripts, and automatic CAPTCHA handling
└──▷ TRY ITCreate a named profile, then launch a browser attached to it so a single login session is reused across future runs.$ profile=$(curl -sS https://api.browser-use.com/api/v4/profiles \ -H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"My user"}') export BROWSER_USE_PROFILE_ID=$(echo "$profile" | jq -r .id) curl -sS https://api.browser-use.com/api/v4/browsers \ -H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"profileId\":\"$BROWSER_USE_PROFILE_ID\",\"proxyCountryCode\":\"us\"}"
- ›Adds persistent browser profiles via
POST /api/v4/profiles, withprofileIdpassed at the top level when creating browsers (POST /api/v4/browsers) or asbrowserSettings.profileIdon agent runs — enabling login-once, reuse-everywhere workflows. - ›Introduces rerunnable scripts: save a Browser Use task once and execute it repeatedly for live data extraction with self-healing runs.
- ›Cloud browsers now solve supported CAPTCHA challenges automatically, requiring no extra configuration.
- ›Adds persistent browser profiles via
- 0.13.8
browser-use 0.13.8 defaults ChatBrowserUse to bu-2-0-mini-preview and adds first-party OpenClaw skill support
└──▷ GET THIS VERSION$ git clone --branch 0.13.8 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.13.8
- ›Defaults
ChatBrowserUseto thebu-2-0-mini-previewmodel. - ›Adds first-party OpenClaw skill support to the agent.
- ›Defaults
- 0.13.8
browser-use 0.13.8 defaults ChatBrowserUse to bu-2-0-mini-preview and adds first-party OpenClaw skill support
└──▷ GET THIS VERSION$ git clone --branch 0.13.8 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.13.8
└──▷ USE ITUse the new default model implicitly — no model argument needed for agents that want the optimized bu-2-0-mini-preview.from browser_use import Agent, ChatBrowserUse import asyncio async def main(): agent = Agent( task='Summarize the latest browser-use release notes', llm=ChatBrowserUse(), # now defaults to bu-2-0-mini-preview ) await agent.run() asyncio.run(main())- ›Changes the default model for
ChatBrowserUsetobu-2-0-mini-preview, so agents using the class without an explicitmodel=argument now use the faster optimized model automatically. - ›Adds first-party OpenClaw skill support, enabling OpenClaw agents to register and use browser-use as a native skill.
└──▷ BREAKING ON UPGRADE- !The default model for
ChatBrowserUseis changed tobu-2-0-mini-preview; any code that relied on the previous default model without specifyingmodel=will now use a different model.
- ›Changes the default model for
- 0.13.5
browser-use 0.13.5 adds MCP registry support and the
bu-qa-1model alias for ChatBrowserUse.└──▷ GET THIS VERSION$ git clone --branch 0.13.5 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.13.5
- ›Accepts
bu-qa-1model alias inChatBrowserUse, enabling use of that model identifier without manual mapping. - ›Adds MCP registry support, allowing browser-use to integrate with Model Context Protocol registries.
- ›Accepts
- 0.13.3
browser-use 0.13.3 ships CLI 3.0 with
browser-use skillfor direct agent skill installation└──▷ GET THIS VERSION$ git clone --branch 0.13.3 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.13.3
└──▷ TRY ITInstall the Browser Use skill into your coding agent (e.g. Claude Code, Cursor) directly from the CLI.$ browser-use skill- ›Adds
browser-use skillsubcommand so coding agents can install the Browser Use skill directly from the CLI. - ›Launches Browser Use CLI 3.0 powered by Browser Harness, pinned to
0.1.4, with the Browser Use skill bundled in the package. - ›Extends skill install support across Claude Code, Codex, Cursor, Gemini, and OpenCode agent skill directories.
- ›Adds
- 0.13.2
browser-use 0.13.2 adds provider-prefixed model strings to ChatBrowserUse
└──▷ GET THIS VERSION$ git clone --branch 0.13.2 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.13.2
- ›Adds support for provider-prefixed model strings (e.g.
openai/gpt-5.5) inChatBrowserUse, letting callers specify the provider inline without separate configuration.
- ›Adds support for provider-prefixed model strings (e.g.
- 0.13.1
Adds Claude 4.5 ('claude fable 5') support and Anthropic extended thinking compatibility.
└──▷ GET THIS VERSION$ git clone --branch 0.13.1 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.13.1
- ›Supports Claude 4.5 (claude fable 5) as a model option for browser agents.
- ›Switches Anthropic tool choice to
autowhen extended thinking is enabled, enabling compatibility between thinking mode and tool use.
- 0.13.0
browser-use 0.13.0 ships a Rust-backed beta agent via
from browser_use.beta import Agent└──▷ GET THIS VERSION$ git clone --branch 0.13.0 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.13.0
- ›Adds
from browser_use.beta import Agent, a new Rust-backed beta agent that gives modern models a more direct browser control loop, installable viauv add 'browser-use[core]'. - ›Adds x402 skill support to the agent.
- ›Adds
- 0.12.7
browser-use 0.12.7 adds
record start/stopCLI commands for session video capture and aclosealias for BrowserSession.└──▷ GET THIS VERSION$ git clone --branch 0.12.7 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.12.7
└──▷ TRY ITCapture a video recording of a browser-use CLI session for audit or replay.$ record start # ... perform automated browser actions ... record stop- ›Adds
record startandrecord stopCLI commands for session video capture. - ›Adds
closeas an alias for BrowserSession.stop(). - ›Adds per-session auth token to the daemon socket, scoping socket access to individual sessions.
- ›Prefers Playwright-installed Chromium over system Chrome by default, with improved detection of recent Chromium versions for Mac/ARM users.
- ›Adds
- 0.12.6
browser-use 0.12.6 adds CDP navigation timeout, model pricing URL override, and an install-lite CLI script.
└──▷ GET THIS VERSION$ git clone --branch 0.12.6 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.12.6
- ›Adds
--connect/--cdp-urlCDP navigation timeout support to prevent hung sessions when connecting to external browsers. - ›Adds ability to override the model pricing URL via the tokens module (
feat(tokens): allow overriding model pricing URL). - ›Adds
install-lite.shscript for a lighter-weight CLI installation path. - ›Adds option to disable
SignalHandlerso host applications retain control of signal handling.
- ›Adds
- 0.12.3
browser-use 0.12.3 ships CLI 2.0 with direct CDP, ~50ms latency, LiteLLM support, and multi-session browser control for AI coding agents.
└──▷ GET THIS VERSION$ git clone --branch 0.12.3 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.12.3
└──▷ TRY ITAttach to an already-running Chrome with saved logins to automate a site without re-authenticating.$ browser-use --profile "Default" open https://github.com browser-use state browser-use click 2 browser-use screenshot page.png
Run two isolated browser sessions in parallel — one for work, one personal — without context bleed.$ browser-use -s work open https://work.example.com browser-use -s personal open https://gmail.com browser-use sessions browser-use close --all
Expose a local app to a cloud browser session for end-to-end testing behind a public URL.$ browser-use tunnel 3000 # outputs: https://abc.trycloudflare.com browser-use open https://abc.trycloudflare.com browser-use state browser-use screenshot --full result.png browser-use tunnel stop --all
- ›Adds
browser-use --connect open <url>to auto-discover and attach to a running Chrome instance via CDP, inheriting existing logins, cookies, and extensions. - ›Adds
browser-use --profile <name> open <url>to launch directly into an existing named Chrome profile (e.g.'Default','Profile 1'). - ›Adds
browser-use --cdp-url <ws-url> open <url>to connect to any browser via an explicit CDP WebSocket URL. - ›Adds
browser-use --headed open <url>flag to run a visible browser window for debugging. - ›Adds
browser-use -s <session> open <url>for named, parallel browser sessions;browser-use sessionslists all active sessions;browser-use close --allterminates them.
+12 moreshow less
- ›Adds
browser-use cloud connectsubcommand for a stealth cloud browser with proxies, requiringBROWSER_USE_API_KEY. - ›Adds
browser-use statecommand that returns all interactable page elements as indexed tokens (e.g.[0] button 'Submit') — optimized for low-token agent consumption. - ›Adds
browser-use click <index>,browser-use input <index> <text>,browser-use select <index> <value>,browser-use hover <index>, andbrowser-use keys <key>for index-based interaction without CSS selectors. - ›Adds
browser-use upload <index> <path>for file upload via element index. - ›Adds
browser-use get title,browser-use get html --selector <css>,browser-use get text <index>, andbrowser-use eval <js>for structured data extraction. - ›Adds
browser-use screenshot --full <path>for full-page screenshots. - ›Adds
browser-use python <expression>for a persistent Python session with variable state across calls;browser-use python --varslists currently defined variables. - ›Adds
browser-use tunnel <port>to expose a local dev server via Cloudflare tunnel;browser-use tunnel stop --alltears them down. - ›Adds
browser-use profile listto enumerate available Chrome profiles. - ›New CLI daemon architecture uses direct CDP instead of Playwright, delivering ~50ms per-command latency with no per-command browser startup cost.
- ›Adds LiteLLM as a supported model provider integration.
- ›Installs via a skill file at
~/.claude/skills/browser-use/SKILL.mdfor use with Claude Code, Codex, and other CLI coding agents.
- ›Adds
- 0.11.13
browser-use 0.11.13 adds automatic CAPTCHA solving, WebSocket reconnection, and a save-as-PDF agent action
└──▷ GET THIS VERSION$ git clone --branch 0.11.13 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.13
- ›Adds
save_as_pdfagent action for CDP-based page-to-PDF export, enabling agents to save the current page as a PDF. - ›Adds automatic CAPTCHA solver handling via a CAPTCHA watchdog, allowing agents to proceed through CAPTCHA challenges without manual intervention.
- ›Adds WebSocket reconnection support for remote browser CDP connections, improving resilience when connections drop.
- ›Adds timeouts to browser connects and waits to prevent indefinite hangs during browser setup.
- ›Adds
- 0.11.12
browser-use 0.11.12 adds Browser.from_system_chrome() for connecting to an already-running Chrome instance.
└──▷ GET THIS VERSION$ git clone --branch 0.11.12 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.12
- ›Adds Browser.from_system_chrome() class method to connect browser-use to an already-running system Chrome installation, enabling real-browser and authenticated-session workflows.
- 0.11.11
browser-use 0.11.11 adds custom HTTP headers, a max-clickable-elements parameter, file-attachment structured output, and a new direct CLI mode.
└──▷ GET THIS VERSION$ git clone --branch 0.11.11 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.11
- ›Adds
max_clickableparameter to the Agent to cap the number of clickable elements considered per step. - ›Adds custom HTTP headers support to the browser agent, letting callers inject arbitrary request headers.
- ›Adds file attachments to structured output, enabling agents to return file references alongside typed results.
- ›Introduces a new direct CLI mode for driving browser-use tasks without a Python script wrapper.
- ›Adds
- 0.11.10a2
Adds
max_clickableparameter to the Agent for limiting clickable elements.└──▷ GET THIS VERSION$ git clone --branch 0.11.10a2 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.10a2
- ›Adds
max_clickableparameter to the Agent to cap the number of clickable elements considered during a session.
- ›Adds
- 0.11.9
browser-use 0.11.9 adds agent planning, loop detection, message compaction, HAR capture, and a new read_long_content action
└──▷ GET THIS VERSION$ git clone --branch 0.11.9 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.9
- ›Adds
read_long_contentaction for agents to handle long webpages and files that exceed normal context limits. - ›Adds
HarRecordingWatchdogfor HTTPS HAR capture, enabling recording of network traffic in HAR format over HTTPS. - ›Introduces basic planning to agents, allowing the agent to reason about a plan before executing steps.
- ›Adds action loop detection with a nudge mechanism to break agents out of repetitive action cycles.
- ›Adds message compaction for agents to manage long conversation histories and stay within context limits.
+2 moreshow less
- ›Adds hidden content hints for iframes in DOM context, improving agent visibility into iframe content.
- ›Updates default
max_stepto 500, increasing the ceiling for long-running agent tasks.
- ›Adds
- 0.11.8
browser-use 0.11.8 adds schema enforcement to the extract tool for structured data extraction.
└──▷ GET THIS VERSION$ git clone --branch 0.11.8 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.8
- ›Adds schema enforcement to the extract tool, enabling structured data extraction with a defined extraction schema.
- ›Adds new capabilities to the CLI.
- 0.11.7
browser-use 0.11.7 adds a grep tool to the agent for in-browser text search.
└──▷ GET THIS VERSION$ git clone --branch 0.11.7 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.7
- ›Adds a grep tool to the agent, enabling pattern-based text search as a built-in agent capability.
- 0.11.6
browser-use 0.11.6 adds
--cdp-urlCLI flag, file-download wait action, screenshot filename param, and autocomplete field handling└──▷ GET THIS VERSION$ git clone --branch 0.11.6 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.6
└──▷ TRY ITConnect the browser-use CLI to an already-running Chrome instance (e.g. one with an active authenticated session) instead of launching a fresh browser.$ browser-use --cdp-url ws://localhost:9222 'Go to https://internal.corp/dashboard and extract the active incident list'
- ›Adds
--cdp-urlflag to the CLI to connect the agent to an already-running browser via Chrome DevTools Protocol (CDP). - ›Adds optional
file_nameparameter to the screenshot (ss) action, letting callers control the saved filename. - ›Adds a 'wait for file download' action so agents can block until a triggered download completes.
- ›Increases
MAX_MEMORY_LENGTHfrom 1,000 to 10,000 characters, expanding the context agents can retain across steps. - ›Increases default
step_timeoutfrom 120 s to 180 s, reducing spurious timeouts on slow pages.
+2 moreshow less
- ›Adds autocomplete field handling so agents can interact with typeahead/suggestion inputs.
- ›Adds step-budget awareness to the agent prompt, surfacing remaining step count to the model for better pacing.
└──▷ BREAKING ON UPGRADE- !The default
step_timeoutchanges from 120 s to 180 s; any orchestration code that relied on the previous 120 s ceiling will now wait longer before timing out.
- ›Adds
- 0.11.5
browser-use 0.11.5 launches the bu-2-0 model (83.3% accuracy) with ChatBrowserUse API key support and Gemini 3 thinking controls.
└──▷ GET THIS VERSION$ git clone --branch 0.11.5 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.5
- ›Adds ChatBrowserUse(model='bu-2-0') class supporting the new
bu-2-0premium model, authenticated via theBROWSER_USE_API_KEYenvironment variable. - ›Adds
ChatBrowserUsesupport in the CLI, reading credentials from theBROWSER_USE_API_KEYenvironment variable. - ›Adds configurable thinking level for Gemini 3 Pro models, with default thinking set to
auto. - ›Increases character limit for content extraction, unlocking longer-page scraping use cases.
- ›Expands context window to 4096-token prompts for Anthropic Opus/Haiku 4.5 models.
+2 moreshow less
- ›Detects JavaScript event listeners to identify clickable elements that lack standard HTML click attributes.
- ›New
bu-2-0model delivers 83.3% task accuracy — up 12% frombu-1-0's 74.7% — at approximately the same 60 s/task speed.
- ›Adds ChatBrowserUse(model='bu-2-0') class supporting the new
- 0.11.4
browser-use 0.11.4 ships a new CLI with headless/headed/real Chrome/remote browser modes and named multi-session support.
└──▷ GET THIS VERSION$ git clone --branch 0.11.4 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.4
└──▷ TRY ITAutomate a login flow against a local dev server using your real Chrome profile so saved credentials are already present.$ browser-use --browser real open http://localhost:3000 browser-use state browser-use click 0 browser-use type "mypassword" browser-use screenshot login-result.png browser-use close
Run parallel browser sessions to compare a work app and personal email side-by-side without sessions interfering.$ browser-use -s work open https://work.example.com browser-use -s personal open https://gmail.com browser-use sessions
Use the cloud stealth browser with proxies for a site that blocks headless traffic, using your API key.$ BROWSER_USE_API_KEY=<your-key> browser-use --browser remote open https://example.com browser-use screenshot result.png browser-use close
- ›Adds
browser-useCLI with subcommandsopen,state,click,type,screenshot, andclosefor scripting and agentic browser control from the shell. - ›Adds
--headedflag tobrowser-use openfor a visible browser window instead of the default headless mode. - ›Adds
--browser realglobal flag tobrowser-use opento drive the user's existing Chrome profile (with saved logins). - ›Adds
--browser remoteglobal flag to route sessions through a cloud stealth browser with built-in proxies and anti-detection, requiring theBROWSER_USE_API_KEYenvironment variable from cloud.browser-use.com; returns a live preview URL. - ›Adds
-s <name>flag for named, parallel browser sessions (e.g.browser-use -s work open <url>andbrowser-use -s personal open <url>running concurrently).
+3 moreshow less
- ›Adds
browser-use sessionssubcommand to list all active sessions. - ›Adds
browser-use close --allto tear down every active session at once. - ›Adds a Claude Code/Codex skill installable at
~/.claude/skills/browser-use/SKILL.mdthat teaches agents to use the new CLI for local and remote browsing.
- ›Adds
- 0.11.3
browser-use 0.11.3 adds multi-tab video recording, external skill service support, OpenAI responses model, and new env-var controls.
└──▷ GET THIS VERSION$ git clone --branch 0.11.3 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.3
└──▷ TRY ITDisable browser extensions in a CI environment where extension loading causes interference.$ export BROWSER_USE_DISABLE_EXTENSIONS=true- ›Adds
BROWSER_USE_DISABLE_EXTENSIONSenvironment variable to disable browser extensions at runtime. - ›Makes event bus timeout configurable via environment variable.
- ›Adds support for external skill service integration and fetches all available skills for the agent.
- ›Adds support for the OpenAI responses model.
- ›Adds Gemini 3 Flash Preview model support.
+6 moreshow less
- ›Adds multi-tab video recording support.
- ›Adds exponential backoff retry and minimum element load wait for improved reliability.
- ›Adds unique attribute matching and better error logging for history rerun.
- ›Adds
ax-namefallback for history rerun element matching. - ›Adds menu retry for agent rerun on failure.
- ›Removes redundant retry steps from history replay.
- ›Adds
- 0.11.2
browser-use 0.11.2 adds support for the new BU OSS model and introduces a max-wait cap between action executions.
└──▷ GET THIS VERSION$ git clone --branch 0.11.2 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.2
- ›Adds support for the open-source
browser-use/bu-30b-a3b-previewmodel (hosted on Hugging Face) as a first-party option for driving browser automation. - ›Introduces a maximum wait interval between action executions, capping idle time between browser steps.
- ›Adds support for the open-source
- 0.11.1
browser-use 0.11.1 adds sensitive-data filtering in agent history and optional coordinate exposure
└──▷ GET THIS VERSION$ git clone --branch 0.11.1 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.1
- ›Filters sensitive data from agent action history, reducing the risk of credentials or PII appearing in logs or replays.
- ›Makes element coordinates optionally available during browser interactions, giving agents access to precise positional context when needed.
- 0.11.0
browser-use 0.11.0 adds cloud skills integration, Mistral support, and fallback LLM capability
└──▷ GET THIS VERSION$ git clone --branch 0.11.0 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.11.0
└──▷ USE ITRun an agent with specific cloud skills to let it leverage pre-built capabilities without manual tool wiring.from browser_use import Agent, ChatBrowserUse agent = Agent( task='Research the top 5 competitors and summarize their pricing', skills=['skill-uuid-1', 'skill-uuid-2'], llm=ChatBrowserUse() ) await agent.run()Grant the agent access to all available cloud skills when you want maximum capability without specifying individual skill UUIDs.from browser_use import Agent, ChatBrowserUse agent = Agent( task='Book the cheapest flight from NYC to London next month', skills=['*'], llm=ChatBrowserUse() ) await agent.run()- ›Adds
skillsparameter to Agent — accepts a list of skill UUIDs (e.g.['skill-uuid-1', 'skill-uuid-2']) or['*']for all skills, enabling cloud-hosted skill execution. - ›Adds
ChatBrowserUseLLM class, importable frombrowser_use, as the provider for cloud-backed agent runs. - ›Adds Mistral as a supported chat provider via
ChatMistral(with schema sanitization and model presets). - ›Adds fallback LLM support, allowing a secondary model to be specified when the primary LLM fails.
- ›Adds
gemini-3-pro-previewto the list of verified models.
+2 moreshow less
- ›Introduces
ai_stepto replaceextract_contenton agent rerun, improving mid-run content handling. - ›Faster scroll action, improving page navigation performance.
- ›Adds
- 0.10.0
browser-use 0.10.0 adds Vercel AI Gateway support, captcha/impossible flags in AgentEvent, history rerun improvements, and an env var to disable version checks.
└──▷ GET THIS VERSION$ git clone --branch 0.10.0 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.10.0
- ›Adds
captchaandimpossibleflags toAgentEventso callers can detect when the agent hits a CAPTCHA or an unsolvable state. - ›Adds
ChatVercelmodel class withprovideroptions for Vercel AI Gateway integration, enabling routing to hosted models through Vercel. - ›Adds
CodeAgentHistoryListclass for improved agent history management in the Code Agent. - ›Adds
step_intervalcalculation to agent history rerun, variable detection from agent history, variable substitution during rerun, and an AI summary for rerun tasks — enabling more robust history replay workflows. - ›Adds an environment variable to disable the version check at startup.
+5 moreshow less
- ›Adds support for passing a Base URL to the MCP Server.
- ›Records click coordinates in the agent system state, replacing broken mouse-click handling with
ClickCoordinateEvent. - ›Newlines are now correctly executed via
send_keys, improving keyboard input fidelity. - ›New headless tabs respect the configured window size.
- ›Adds support for deepcogito/cogito-v2.1-671b model.
└──▷ BREAKING ON UPGRADE- !Pages are removed from browser state (Remove pages from browser state), which may break code that reads the
pagesfield from browser state objects.
- ›Adds
- 0.9.7
browser-use 0.9.7 adds Gemini 3 model support and configurable screenshot sizing.
└──▷ GET THIS VERSION$ git clone --branch 0.9.7 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.9.7
- ›Adds support for Gemini 3 as a usable model.
- ›Enables configurable screenshot size for browser-use models.
- 0.9.6
browser-use 0.9.6 adds structured-output opt-out, judge ground-truth/impossibility fields, image/DOCX reading, Kimi-2 support, and a fuzzy-search TUI for templates.
└──▷ GET THIS VERSION$ git clone --branch 0.9.6 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.9.6
└──▷ TRY ITConfigure the library to use AWS Bedrock-hosted models by setting the required environment variables.$ AWS_ACCESS_KEY_ID=<your-key> AWS_SECRET_ACCESS_KEY=<your-secret> AWS_DEFAULT_REGION=us-east-1 ANTHROPIC_BEDROCK_BASE_URL=https://bedrock-runtime.us-east-1.amazonaws.com- ›Adds option to disable forced structured output for LLM calls, giving more flexibility with models that handle it poorly.
- ›Adds
ground_truthfield to the judge, enabling evaluation against a known-correct answer. - ›Adds judge output fields for task impossibility and captcha detection, surfacing when a task cannot be completed.
- ›Adds
http_clientparameter to the Anthropic Chat integration for custom HTTP client configuration. - ›Adds AWS Bedrock configuration to
.env.example, documenting how to point the library at Bedrock-hosted models.
+9 moreshow less
- ›Supports reading image files (JPG/PNG) and DOCX files as agent inputs.
- ›Adds support for the Kimi-2 model.
- ›Defaults screenshot format to PNG everywhere.
- ›Defaults
visionto True, enabling visual context for all agents by default. - ›Sets a default maximum actions per step to bound agent execution.
- ›Implements a demo mode for in-browser logging.
- ›Adds a fuzzy-search TUI for template selection when starting from example templates.
- ›Improves navigate-to-URL event logic and wait mechanism for more reliable page-load detection.
- ›Adds a
perform general actioncapability to the agent action set.
- 0.9.5
browser-use 0.9.5 adds a template system, remote code upload/execution, and extra_body support for OpenRouter
└──▷ GET THIS VERSION$ git clone --branch 0.9.5 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.9.5
- ›Adds
extra_bodyparameter support for OpenRouter LLM calls, enabling pass-through of provider-specific request fields. - ›Implements a template system backed by a template-library repo, letting users bootstrap agent tasks from pre-built templates.
- ›Adds remote code upload and execution capability, enabling agents to run code on remote targets.
- ›Improves cloud parameters configuration for browser-use cloud deployments.
- ›Adds Unicode character support in filenames and improved path handling, including Windows path validation.
- ›Adds
- 0.9.4
browser-use 0.9.4 improves the session manager and removes third-party ad injection.
└──▷ GET THIS VERSION$ git clone --branch 0.9.4 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.9.4
- ›Improves the session manager for more reliable browser session handling.
- ›Removes ads injected by third-party companies from browser sessions.
- 0.9.3
browser-use 0.9.3 adds a template generation command for quick project setup and switches install to
uvx browser-use install.└──▷ GET THIS VERSION$ git clone --branch 0.9.3 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.9.3
- ›Changes the browser-use install invocation to
uvx browser-use install. - ›Adds a template generation command for quick project scaffolding.
└──▷ BREAKING ON UPGRADE- !The browser-use install command has changed: users must now run
uvx browser-use installinstead of the previous invocation.
- ›Changes the browser-use install invocation to
- 0.9.2
browser-use 0.9.2 adds direct action call API via
__getattr__, element lookup helpers onBrowserSession, and a newuvx browser-use installcommand.└──▷ GET THIS VERSION$ git clone --branch 0.9.2 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.9.2
└──▷ TRY ITInstall browser-use without a pre-existing project setup, useful for one-off automation or CI bootstrapping.$ uvx browser-use install- ›Adds
uvx browser-use installsubcommand for quick installation viauvx. - ›Adds direct action call API to Tools via
__getattr__, enabling actions to be invoked as methods directly on the Tools object. - ›Adds element lookup helper methods to
BrowserSessionfor programmatic element access. - ›Expands code-use exports to include JavaScript code blocks alongside existing output formats.
- ›Adds
- 0.9.0
browser-use 0.9.0 adds CodeAgent, a new agent class with a compatible API and dedicated LLM integration.
└──▷ GET THIS VERSION$ git clone --branch 0.9.0 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.9.0
└──▷ USE ITRun a code-driven browser automation task using the new CodeAgent and its required ChatBrowserUse LLM.from browser_use import CodeAgent, ChatBrowserUse agent = CodeAgent( task=task, llm=ChatBrowserUse(), ) await agent.run()- ›Adds
CodeAgentclass importable frombrowser_use, offering a code-oriented agent with an API compatible with the existing agent interface. - ›Adds
ChatBrowserUseLLM class required byCodeAgent, importable frombrowser_use.
- ›Adds
- 0.8.1
browser-use 0.8.1 adds visual click highlights and Oracle OCI Generative AI model integration.
└──▷ GET THIS VERSION$ git clone --branch 0.8.1 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.8.1
- ›Integrates Oracle OCI Generative AI models as a supported LLM backend.
- ›Adds browser-side visual highlights showing where the agent clicked during automation sessions.
- ›Removes the default LLM fallback behavior, making model selection explicit.
└──▷ BREAKING ON UPGRADE- !The default LLM fallback is removed; agents that relied on automatic fallback to a default model will now require an explicit model to be configured.
- 0.7.11
browser-use 0.7.11 adds IP blocking, external agent stop, Cerebras provider, cookie saving, and a screenshot tool.
└──▷ GET THIS VERSION$ git clone --branch 0.7.11 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.7.11
- ›Adds IP blocking feature to prevent the browser agent from connecting to specified IP addresses.
- ›Adds functionality to stop the agent externally, enabling programmatic interruption of running agent sessions.
- ›Adds Cerebras as a supported LLM provider.
- ›Adds cookie saving capability to persist authentication state across sessions.
- ›Adds a screenshot tool for agents to capture browser state on demand.
+2 moreshow less
- ›Adds an option to include interactive elements, giving finer control over which page elements the agent considers.
- ›Stores agent state messages in the run history for improved auditability of agent sessions.
- 0.7.10
browser-use 0.7.10 adds Laminar debug tags, improved auto PDF download, and parallel multi-agent and domain-prohibition examples.
└──▷ GET THIS VERSION$ git clone --branch 0.7.10 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.7.10
- ›Adds Laminar debug tags integration for tracing agent runs.
- ›Improves auto PDF download capabilities for browser-driven workflows.
- ›Adds parallel multi-agent example demonstrating concurrent agent execution.
- ›Adds ModelScope example and documentation for using ModelScope-hosted models.
- ›Adds examples showing how to prohibit specific domains in agent configurations.
+2 moreshow less
- ›Relaxes Pydantic length limit for Amazon Bedrock ARN strings in model config.
- ›Multiple speed-up improvements reducing latency across agent execution paths.
- 0.7.9
browser-use 0.7.9 adds Actor mode for direct element interaction and a cloud browser integration.
└──▷ GET THIS VERSION$ git clone --branch 0.7.9 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.7.9
└──▷ USE ITUse Actor mode to precisely locate and fill a specific page element by natural-language prompt, then hand off to an Agent for higher-level task completion.from browser_use import Browser, Agent from browser_use.llm.openai import ChatOpenAI async def main(): llm = ChatOpenAI(api_key="your-api-key") browser = Browser() await browser.start() page = await browser.new_page("https://github.com/login") email_input = await page.must_get_element_by_prompt("username field", llm=llm) await email_input.fill("your-username") agent = Agent(browser=browser, llm=llm) await agent.run("Complete login and navigate to my repositories") await browser.stop()- ›Adds Actor usage pattern via page.must_get_element_by_prompt() on Browser page objects, enabling precise LLM-guided element targeting and interaction without a full agent loop.
- ›Adds
cloud_browserfeature for connecting to cloud-hosted browser sessions. - ›Logs the
browser-usepip version on agent start for easier debugging and version tracing.
- 0.7.8
browser-use 0.7.8 adds prohibited-domain blocking, auto www-expansion for allowed domains, JS tool inclusion, and sensitive-data scrubbing from agent history.
└──▷ GET THIS VERSION$ git clone --branch 0.7.8 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.7.8
└──▷ USE ITBlock the agent from ever navigating to competitor or high-risk domains during an automated session.from browser_use import Agent agent = Agent( task='Research pricing on allowed sites', prohibited_domains=['malicious-site.com', 'competitor.com'], )Disable cloud-sync URL logging in a CI environment where sync traffic should be silent.$ BROWSER_USE_CLOUD_SYNC=false python my_agent_script.py- ›Supports
prohibited_domainsconfiguration to block the agent from navigating to specified domains. - ›Automatically expands allowed domains to include
wwwvariants, reducing the need to list both bare and www forms. - ›Adds a JavaScript tool inclusion capability (
include-js-tool), enabling custom JS to be surfaced as an agent action. - ›Suppresses cloud-sync URLs when the
BROWSER_USE_CLOUD_SYNCenvironment variable is set tofalse. - ›Removes sensitive data from agent history and logging output to reduce credential and PII exposure in traces.
- ›Supports
- 0.7.7
browser-use 0.7.7 adds an enhanced screenshot API and automatic PDF download detection via DownloadsWatchdog.
└──▷ GET THIS VERSION$ git clone --branch 0.7.7 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.7.7
- ›Adds an enhanced screenshot API with new capabilities for capturing browser state programmatically.
- ›Extends
DownloadsWatchdogto watchBrowserStateRequestEventand automatically handle PDF downloads. - ›Removes the hardcoded maximum iframe recursion limit, enabling DOM traversal into arbitrarily nested iframes.
- 0.7.5
browser-use 0.7.5 adds Qwen and Gemma LLM support, cross-origin iframe traversal, and exposes
reasoning_modelsandcross_origin_iframesas parameters.└──▷ GET THIS VERSION$ git clone --branch 0.7.5 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.7.5
└──▷ USE ITDeclare a Qwen reasoning model so browser-use applies the correct prompting strategy when using Qwen via Ollama or another provider.agent = Agent( task='Book a flight on the airline website', llm=llm, reasoning_models=['qwen3'] )- ›Exposes
cross_origin_iframesas a parameter with depth limits, enabling the agent to traverse and interact with cross-origin iframes during browser automation. - ›Exposes
reasoning_modelsas a configurable parameter, allowing callers to explicitly declare which models use reasoning-style prompting. - ›Adds Qwen LLM integration, expanding supported model providers.
- ›Adds Gemma LLM integration, expanding supported model providers.
- ›Adds paint-order filtering to improve accuracy of visible-element detection on complex pages.
└──▷ BREAKING ON UPGRADE- !HTTP mode has been removed from the MCP server; any setup using HTTP transport for the MCP server will stop working after upgrading.
- ›Exposes
- 0.7.4
browser-use 0.7.4 adds video recording, CDP localStorage/sessionStorage capture, pyotp 2FA, and ollama_options support
└──▷ GET THIS VERSION$ git clone --branch 0.7.4 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.7.4
- ›Adds
ollama_optionsparameter toChatOllamafor passing custom options to Ollama-backed models. - ›Adds event timeouts config to control how long the agent waits on browser events before timing out.
- ›Adds task video recording capability so agent runs can be captured as video files.
- ›Adds CDP-based capture of
localStorageandsessionStorage, withStorageStateWatchdogautomatically enabled whenuser_data_diris provided. - ›Integrates
pyotpfor TOTP-based 2FA generation within agent workflows.
+1 moreshow less
- ›Adds a URL shortener utility for condensing long URLs before passing them to the agent.
- ›Adds
- 0.7.2
browser-use 0.7.2 adds sample_images support and an AgentMail integration alongside hook API updates.
└──▷ GET THIS VERSION$ git clone --branch 0.7.2 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.7.2
- ›Adds
sample_imagesparameter to let the agent learn how to operate a platform from example screenshots. - ›New AgentMail integration for browser automation workflows involving email.
- ›Updated hooks APIs following Playwright removal, with revised documentation.
- ›Adds
- 0.7.1
browser-use 0.7.1 restores the CLI, re-enables PDF auto-download, and disables highlights by default after the CDP migration.
└──▷ GET THIS VERSION$ git clone --branch 0.7.1 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.7.1
- ›Re-enables automatic PDF downloading, restoring a capability that was dropped during the CDP rewrite.
- ›Disables browser element highlights by default, reducing overhead in standard automation runs.
- ›Generates Python-side highlights for browser screenshots instead of relying on browser-injected overlays.
- ›Adds sensitive data placeholder names to LLM prompts, surfacing masked values in the prompt context.
- ›Improves
extract structured dataaction with better input, output, and LLM call handling.
- 0.6.1
browser-use 0.6.1 adds authenticated proxy support, unexecuted-action context, and click/input coordinate tracking.
└──▷ GET THIS VERSION$ git clone --branch 0.6.1 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.6.1
- ›Adds authenticated proxy server support, enabling browser sessions to route through proxies that require credentials.
- ›Adds unexecuted actions into agent context so the agent retains awareness of planned-but-not-yet-run steps across turns.
- ›Saves click and input-text coordinates, capturing the exact screen position of each interaction for replay or debugging.
- ›Sets a default LLM, reducing required configuration for new agent setups.
- ›Adds cloud API usage examples demonstrating how to call the browser-use cloud API.
└──▷ BREAKING ON UPGRADE- !The
agent callmethod has been removed.
- 0.6.0
browser-use 0.6.0 drops Playwright in favor of cdp-use/bubus, adds cross-origin iframe support and StreamableHTTP for MCP
└──▷ GET THIS VERSION$ git clone --branch 0.6.0 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.6.0
└──▷ TRY ITSuppress verbose cdp_use debug output in CI by setting the log level to WARNING at the environment level.$ CDP_USE_LOG_LEVEL=WARNING python my_agent.py- ›Sets
CDP_USE_LOG_LEVELenvironment variable to controlcdp_uselogging verbosity independently. - ›Adds
StreamableHTTPtransport support to the MCP integration, alongside the existing transport options. - ›Replaces Playwright with
cdp-useandbubusinBrowserSession, switching to a pure CDP extraction layer for browser automation. - ›Adds support for cross-origin iframes, enabling interaction with embedded third-party content.
- ›Renames ClickEvent(new_tab) parameter to
while_holding_ctrlfor clarity in click-event semantics.
└──▷ BREAKING ON UPGRADE- !
BrowserSessionno longer uses Playwright — it now depends oncdp-useandbubus; any code that imported or configured Playwright-specific APIs throughBrowserSessionwill break on upgrade. - !ClickEvent(new_tab) parameter is renamed to
while_holding_ctrl; callers passingnew_tabby keyword will break.
- ›Sets
- 0.5.10
browser-use 0.5.10 adds GPT-5 and gpt-oss model support, plus Anthropic prompt caching improvements.
└──▷ GET THIS VERSION$ git clone --branch 0.5.10 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.5.10
- ›Adds
gpt-5models to the OpenAI LLM integration, enabling use of GPT-5 with browser-use agents. - ›Adds
gpt-ossmodels to the Groq tool-calling integration. - ›Enables prompt caching for user messages and agent history, reducing latency and cost for Anthropic models.
- ›Sets the default
frequency_penaltyto None to ensure compatibility with GPT-5 (which does not allow that parameter).
└──▷ BREAKING ON UPGRADE- !The
message_contextparameter has been removed from the API.
- ›Adds
- 0.5.8
browser-use 0.5.8 adds a helper function for retrieving formatted agent traces with metadata.
└──▷ GET THIS VERSION$ git clone --branch 0.5.8 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.5.8
- ›Adds a helper function to retrieve a nicely formatted agent trace with metadata for post-run inspection and debugging.
- 0.5.7
browser-use 0.5.7 adds a Search API, exposes seed/top_p/temperature and OpenAI service_tier params, and makes screenshot quality configurable.
└──▷ GET THIS VERSION$ git clone --branch 0.5.7 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.5.7
└──▷ USE ITFine-tune LLM output determinism for a cloud task by pinning seed and adjusting sampling — useful when you need reproducible agent runs.{ "seed": 42, "top_p": 0.9, "temperature": 0.2 }Route OpenAI calls to a specific service tier (e.g. priority capacity) without changing the rest of your agent configuration.{ "service_tier": "auto" }- ›Exposes
seed,top_p, andtemperatureparameters on the Cloud API for controlling LLM sampling behaviour. - ›Adds support for specifying the OpenAI
service_tierparameter when using OpenAI-backed models. - ›Introduces a Search API (beta) for programmatic search within browser-use.
- ›Makes vision model screenshot quality customizable, giving callers control over image fidelity sent to the LLM.
- ›Never relaunches a local browser when a CDP URL is provided, preventing unintended browser restarts.
+1 moreshow less
- ›Notifies the LLM whenever page loading is interrupted so it can invoke the
waitaction rather than proceeding on a partial page.
- ›Exposes
- 0.5.6
browser-use 0.5.6 adds CDP URL telemetry, ARIA menu dropdown support, typed package marker, and speed improvements.
└──▷ GET THIS VERSION$ git clone --branch 0.5.6 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.5.6
- ›Adds
py.typedmarker to the package, enabling type-checker support (mypy, pyright) for downstream consumers. - ›Adds CDP (Chrome DevTools Protocol) URL to Agent Telemetry events for richer session observability.
- ›Adds ARIA menu support to dropdown interaction functions, broadening the range of web UI components the agent can operate.
- ›Disables screenshot capture automatically when vision is disabled, reducing unnecessary overhead.
- ›Handles PDF viewer content via the read-file action, allowing agents to extract text from in-browser PDF viewers.
+1 moreshow less
- ›Speed improvements to browser wait logic and general agent loop performance.
- ›Adds
- 0.5.5
browser-use 0.5.5 adds Flash Mode, DeepSeek and Groq support, and OpenAI CUA fallback
└──▷ GET THIS VERSION$ git clone --branch 0.5.5 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.5.5
- ›Adds DeepSeek LLM chat model integration as a supported provider.
- ›Adds tool-calling support for Groq-hosted models.
- ›Adds OpenAI CUA (Computer-Using Agent) fallback mode for browser automation.
- ›Introduces Flash Mode for faster browser-use agent operation.
- ›Limits the
waitaction to a maximum of 10 seconds, capping runaway waits.
└──▷ BREAKING ON UPGRADE- !The Planner Prompt has been removed from the agent pipeline.
- 0.5.4
browser-use 0.5.4 adds automatic agent crash recovery and consolidates BrowserSession navigation methods
└──▷ GET THIS VERSION$ git clone --branch 0.5.4 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.5.4
└──▷ USE ITUse the unified navigation method to open a URL in a new tab with a custom timeout, replacing the old create_new_tab() / navigate_to() calls.await session.navigate(url='https://example.com', new_tab=True, timeout_ms=15000)
- ›Adds @require_healthy_browser(usable_page=True, reopen_page=True) decorator in
browser_use/browser/session.pyfor crash-resilient browser operations. - ›Combines navigate(), navigate_to(), create_new_tab(), new_page() and other redundant
BrowserSessionhelper methods into a single navigate(url: str, new_tab: bool, timeout_ms: int) method. - ›Agent now auto-recovers from crashed or stalled pages: retries the stalled page via JS page.evaluate(1), reopens the URL in a new tab, retreats to
about:blank, relaunches a crashed browser with original settings, and falls back to a tmp incognitouser_data_dir=None(withstorage_state.jsoncookies) if the browser fails to relaunch. - ›Adds PDF file creation support in the agent's file-handling actions.
- ›Exposes retry decorator @retry(timeout=5, wait=1, retries=2, ...) from
bubus/helpers.pyfor use in custom actions.
└──▷ BREAKING ON UPGRADE- !The
BrowserSessionmethods navigate_to(), create_new_tab(), and new_page() are removed and replaced by the single unified navigate(url: str, new_tab: bool, timeout_ms: int) method; any call sites using the old method names will break.
- ›Adds @require_healthy_browser(usable_page=True, reopen_page=True) decorator in
- 0.5.3
browser-use 0.5.3 adds automatic PDF downloads and graceful incognito fallback for unusable user_data_dir profiles
└──▷ GET THIS VERSION$ git clone --branch 0.5.3 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.5.3
└──▷ USE ITUse a persistent profile for logins; if that profile is corrupted or locked by another Chrome instance, the agent now continues with a blank incognito session instead of crashing.from browser_use import BrowserSession session = BrowserSession(user_data_dir='/home/user/.config/chrome-profile') # If the profile dir is unusable, falls back to user_data_dir=None automatically
- ›Adds graceful fallback to a temporary incognito profile (
user_data_dir=None) when BrowserSession(user_data_dir='/path/to/some/profile') fails to launch due to corruption,SingletonLockconflicts, or filesystem permission issues — instead of crashing. - ›Automatically downloads PDFs when the browser navigates to one, with scrolling inside PDFs via pure CDP.
- ›Takes base64 CDP screenshots directly without going through Playwright, enabling faster screen capture.
- ›Adds graceful fallback to a temporary incognito profile (
- 0.5.0
browser-use 0.5.0 adds native bidirectional MCP support, exposing external MCP tools to the agent and the agent itself as an MCP server.
└──▷ GET THIS VERSION$ git clone --branch 0.5.0 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.5.0
└──▷ USE ITExpose the Browser Use agent as an MCP server so Claude Desktop (or any MCP client) can invoke browser automation tasks directly.{ "mcpServers": { "browser-use": { "command": "uvx", "args": ["browser-use[cli]", "--mcp"] } } }- ›Adds
--mcpCLI flag (viabrowser-use[cli]) to launch the Browser Use agent as an MCP server callable by any MCP client, including Claude Desktop. - ›Adds MCP client support so external MCP servers and their tools can be connected to the Browser Use agent and used as actions.
- ›Expands
~/.config/browseruse/config.jsonschema with new fields for MCP client and server connectors. - ›Supports installing Browser Use as a Claude Desktop extension via a
browser-use.dxtfile or manual entry in the Claude DesktopmcpServersconfig block. - ›Enhances scroll actions with pixel-level control.
+1 moreshow less
- ›Adds
remove_imagesandremove_cssparameters toeval.yamlfor leaner evaluation runs.
- ›Adds
- 0.4.5
browser-use 0.4.5 adds OpenRouter support, JSON/CSV/PDF data extraction, Gmail OTP integration, and multi-image-per-step agent input.
└──▷ GET THIS VERSION$ git clone --branch 0.4.5 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.4.5
└──▷ USE ITUse OpenRouter as the LLM backend so you can route to any model OpenRouter exposes without managing provider credentials directly.from langchain_openai import ChatOpenAI llm = ChatOpenAI( base_url='https://openrouter.ai/api/v1', api_key='<your-openrouter-key>', model='openai/gpt-4o', ) agent = Agent(task='<task>', llm=llm)- ›Adds
BrowserSettingstoBrowserProfilefor configuring browser-level settings directly on the profile object. - ›Supports reading and extracting structured data from JSON, CSV, and PDF files as agent actions.
- ›Integrates the Gmail API to retrieve OTPs and email content during automated workflows.
- ›Adds OpenRouter as a supported LLM provider for driving agents.
- ›Enables multiple screenshots per agent step, each with a label, as LLM input — improving visual context for multi-action steps.
- ›Adds
- 0.4.2
browser-use 0.4.2 adds file upload action, token usage tracking, thinking parameter support, and broader model compatibility.
└──▷ GET THIS VERSION$ git clone --branch 0.4.2 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.4.2
- ›Adds
upload_fileaction to the controller, enabling agents to upload files through browser interactions. - ›Adds token usage data to agent history, allowing practitioners to track and inspect consumption per run.
- ›Adds support for a
thinkingparameter for compatible models, enabling extended reasoning modes. - ›Expands supported model roster for use with the agent.
- ›Structured output support optimized across the agent and judge system for improved reliability.
└──▷ BREAKING ON UPGRADE- !The
save_pdfaction has been removed from the controller.
- ›Adds
- 0.3.2
browser-use 0.3.2 adds a FileSystem tracker for uploads/downloads, a
highlight_elementsflag, and Gemini 2.5 Flash support.└──▷ GET THIS VERSION$ git clone --branch 0.3.2 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.3.2
└──▷ USE ITDisable element highlighting during a browser-use agent run to reduce visual noise in headless or production environments.agent = Agent( task='Book a flight to NYC', llm=llm, highlight_elements=False )- ›Adds
highlight_elementsflag to control whether the agent highlights elements on the page during automation. - ›Introduces a
FileSystemfeature that tracks all uploads and downloads the agent has access to in a unified manner. - ›Adds support for
gemini-2.5-flashas an available model. - ›Makes browser launch timeout configurable via Playwright kwargs.
- ›Improves
AgentOutputformat and reasoning style for better agent state representation.
+1 moreshow less
- ›Adds a custom function example using Mistral OCR demonstrating how to extend agent capabilities.
- ›Adds
- 0.3.0
browser-use 0.3.0 adds an EventBus for queued async agent tasks and automatic retry on mid-action page navigation.
└──▷ GET THIS VERSION$ git clone --branch 0.3.0 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.3.0
- ›Adds an
EventBusto the Agent class for queued async task dispatch, enabling event-driven orchestration of browser automation workflows. - ›Adds automatic retry logic for actions that fail due to page navigation occurring mid-action, reducing brittle task failures in dynamic sites.
└──▷ BREAKING ON UPGRADE- !The
successparameter is removed fromActionResultinservice.py; callers that pass or readsuccesswill break on upgrade.
- ›Adds an
- 0.2.6
browser-use 0.2.6 adds stealth mode, BrowserSession.kill(), new CLI flags, and auto-applied storage state for existing browsers.
└──▷ GET THIS VERSION$ git clone --branch 0.2.6 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.2.6
└──▷ USE ITForce-close a long-running keep-alive session from a multi-agent pipeline without waiting for it to finish gracefully.session = BrowserSession(keep_alive=True, stealth=True) await session.start() agent = Agent(task='...', browser_session=session) await agent.run() await session.kill() # force-close even though keep_alive=True
Reconnect to an existing browser and automatically restore saved cookies/localStorage from a prior session.session = BrowserSession( cdp_url='ws://localhost:9222', storage_state='storage_state.json', # auto-applied on connect ) await session.start()- ›Adds BrowserSession(stealth=True) and BrowserProfile(stealth=True) as a shortcut to run sessions through
patchrightfor bot-detection evasion. - ›Adds BrowserSession.kill() to force-close a session even when
keep_alive=Trueis set. - ›Adds
--cdp-url,--user-data-dir, and--profile-directoryoptions to thebrowser-useCLI. - ›Auto-applies
storage_state.json(cookies/localStorage) even when connecting to an already-running browser via CDP. - ›Every Agent,
BrowserSession, andBrowserProfileinstance now carries a unique UUID, making them straightforward to persist to a database.
+3 moreshow less
- ›CLI now uses stealth mode by default.
- ›Major async performance improvements for page-to-markdown extraction and LLM calls in multi-agent scenarios.
- ›Major stability improvements for multithreading, multiple asyncio run loops, and serial/parallel
BrowserSessionand Agent use.
└──▷ BREAKING ON UPGRADE- !
BrowserSessioninstances withkeep_alive=Truemust now be started manually before being passed to Agent() — previously the agent could start them automatically. - !
save_playwright_script_pathhas been removed.
- ›Adds BrowserSession(stealth=True) and BrowserProfile(stealth=True) as a shortcut to run sessions through
- 0.2.5
browser-use 0.2.5 adds a one-shot CLI mode via
browser-use -pfor running browser tasks directly from the command line.└──▷ GET THIS VERSION$ git clone --branch 0.2.5 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.2.5
└──▷ TRY ITFetch a live data point from the web and return structured JSON output in a single terminal command — no script required.$ browser-use -p 'get todays DOW stock price and return it as JSON, e.g.: {"dow_price": 40000.00}'
- ›Adds
browser-use -p '<prompt>'one-shot CLI mode to run a browser-use task directly from the command line and return a result without writing any Python code.
- ›Adds
- 0.2.2
browser-use 0.2.2 adds auto-detection of LLM tool-calling method and LLM API verification at startup.
└──▷ GET THIS VERSION$ git clone --branch 0.2.2 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.2.2
- ›Auto-detects the LLM tool-calling method and verifies the LLM API connection at startup, catching misconfiguration before a session begins.
- ›Improves file upload detection for more reliable browser automation workflows.
- 0.2.1
browser-use 0.2.1 ships BrowserProfile/BrowserSession, per-domain sensitive data, Patchright support, and expanded vector store providers
└──▷ GET THIS VERSION$ git clone --branch 0.2.1 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.2.1
└──▷ USE ITShare a single Playwright browser between browser-use and another tool, injecting an existing Page so no second browser is launched.from playwright.async_api import async_playwright from browser_use import Agent async with async_playwright() as p: browser = await p.chromium.launch() page = await browser.new_page() await page.goto('https://example.com') agent = Agent(task='fill out this form', llm=llm, page=page) await agent.run()Write a custom action that manipulates the live page directly via the injected Playwright Page object, scoped to a specific domain.from browser_use import Controller from playwright.async_api import Page controller = Controller() @controller.registry.action( description='Highlight all cells in the selection', allowed_domains=['https://docs.google.com'] ) async def highlight_cells(cell_range: str, page: Page): await page.evaluate(f"document.querySelector('{cell_range}').style.background = 'yellow'")- ›Introduces
BrowserProfileandBrowserSessionclasses, replacing Browser,BrowserConfig,BrowserContext, andBrowserContextConfigwith a unified API that accepts all standard Playwright launch_persistent_context() arguments directly onBrowserProfile. - ›Adds
allowed_domainsparameter toBrowserSession, now defaulting to enforcinghttps://unlesshttp://orhttp*://is explicitly included; supports globs and full scheme matching (e.g.https://*.google.com,chrome-extension://*). - ›Changes Agent(sensitive_data) to accept a new per-domain format
{domain: {key: val, ...}}instead of the flat{key: value}format, restricting credential exposure to matching domains using the same glob/scheme system asallowed_domains. - ›Allows passing existing Playwright (or Patchright) Page,
BrowserContext, and Browser objects directly intoBrowserSessionor Agent (e.g. Agent(task='...', llm=llm, page=page)). - ›Adds support for using Patchright as a stealth browser backend via
playwright=awaitasync_patchright().start() onBrowserSession.
+5 moreshow less
- ›Custom action functions decorated with @controller.registry.action(...) can now declare
page: Pageorbrowser_sessionas parameters to receive the live Playwright Page object directly, eliminating the need for a separate get_current_page() call. - ›Local browsers now launch with a dedicated persistent empty profile stored at
~/.config/browseruse/profiles/default, isolated from the system default browser profile. - ›Expands the range of supported vector store providers for agent memory.
- ›Adds support for multi-threaded agent execution including pause and resume operations.
- ›Adds new LLM model support and improved element detection methods including accessibility tree enhancements and custom event-listener detection.
└──▷ BREAKING ON UPGRADE- !Browser,
BrowserConfig,BrowserContext, andBrowserContextConfigare replaced byBrowserProfileandBrowserSession; existing code constructing those objects will break. - !Agent(sensitive_data) now requires the format
{domain: {key: val, ...}}instead of the flat{key: value}format; agents using the old flat format will no longer have credentials correctly scoped. - !BrowserSession(allowed_domains=[...]) now enforces
https://by default unlesshttp://orhttp*://is explicitly listed; setups that relied on unqualified domain globs matching plain HTTP will be blocked. - !Local browsers now refuse to start with the system default browser profile; they require the dedicated profile at
~/.config/browseruse/profiles/default, which may break setups that previously relied on ambient system cookies.
- ›Introduces
- 0.1.48
browser-use 0.1.48 adds glob pattern support for
allowed_domainsURL restrictions and automated Docker Hub publishing.└──▷ GET THIS VERSION$ git clone --branch 0.1.48 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.48
└──▷ USE ITRestrict a browser agent to only operate within subdomains of a trusted domain, preventing it from navigating to unrelated sites.from browser_use import Agent agent = Agent( task="Find the pricing page", allowed_domains=['*.example.com'], llm=llm, )- ›Adds glob pattern matching to
allowed_domains(e.g.allowed_domains=['*.example.com']), enabling wildcard-based URL allowlisting for browser agents. - ›Docker images are now automatically published to Docker Hub via CI on each release.
- ›Adds glob pattern matching to
- 0.1.47
browser-use 0.1.47 renames
GEMINI_API_KEYtoGOOGLE_API_KEYand moves CLI deps to an optional install group.└──▷ GET THIS VERSION$ git clone --branch 0.1.47 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.47
- ›Renames the
GEMINI_API_KEYenvironment variable toGOOGLE_API_KEYfor Google model authentication. - ›Moves CLI dependencies to an optional
browser-use[cli]install group, keeping the core library lighter for non-CLI users. - ›Adds LLaMA model to the built-in pricing table for cost tracking.
└──▷ BREAKING ON UPGRADE- !The
GEMINI_API_KEYenvironment variable is renamed toGOOGLE_API_KEY; any working setup that setsGEMINI_API_KEYwill stop authenticating to Google models after upgrading. - !CLI dependencies are no longer installed by default; users who rely on the CLI must now install
browser-use[cli]explicitly or the CLI will fail to run.
- ›Renames the
- 0.1.46
browser-use 0.1.46 adds a Dockerfile, switches back to Playwright, and improves element interaction and DOM integrity.
└──▷ GET THIS VERSION$ git clone --branch 0.1.46 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.46
- ›Adds Dockerfile and
.dockerignorefor containerizing browser-use deployments. - ›Switches the underlying browser automation backend from
patchrightback toplaywrightfor improved performance and stability. - ›Automatically clicks elements before typing into them, with a fallback to simulating keystrokes on the entire page for better input reliability.
- ›Adds Dockerfile and
- 0.1.45
browser-use 0.1.45 adds an interactive CLI, Google Sheets support, Azure OpenAI, and improved anti-bot fingerprint evasion.
└──▷ GET THIS VERSION$ git clone --branch 0.1.45 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.45
└──▷ USE ITSet browser window and viewport dimensions using the new flat config attributes after removing BrowserWindowContextSize.from browser_use import BrowserContextConfig config = BrowserContextConfig(window_width=1280, window_height=900, no_viewport=False)
- ›Adds flat
window_widthandwindow_heightattributes toBrowserContextConfig(replacing the removedBrowserWindowContextSizeobject), also used as viewport dimensions whenno_viewport=False. - ›New interactive CLI for
browser-use, styled like theclaudecode CLI, for running browser-use tasks directly from the terminal. - ›Adds Google Sheets support directly in the main controller.
- ›Adds support for Azure OpenAI API GPT-4 as a model provider.
- ›Improves anti-bot fingerprint detection for compatibility with Cloudflare-protected sites and Google logins.
└──▷ BREAKING ON UPGRADE- !The
BrowserWindowContextSizeobject is removed: replace BrowserContextConfig(window_size=BrowserWindowContextSize(width=1280, height=900)) with BrowserContextConfig(window_width=1280, window_height=900).
- ›Adds flat
- 0.1.42
browser-use 0.1.42 adds anti-bot detection via patchright, Playwright script generation, force_new_context flag, and embedder config for Mem0.
└──▷ GET THIS VERSION$ git clone --branch 0.1.42 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.42
└──▷ USE ITConnect to an already-running Chrome instance while still applying your custom BrowserContextConfig settings.from browser_use import Agent, BrowserConfig browser_config = BrowserConfig( chrome_remote_debugging_port=9222, force_new_context=True ) agent = Agent(task='...', llm=llm, browser_config=browser_config)- ›Adds
force_new_context=Trueflag to browser config so custom context configuration is applied when connecting to existing browsers. - ›Adds
chrome_remote_debugging_portsetting in browser config to support launching user-provided Chrome browsers. - ›Adds
GEMINI_API_KEYenvironment variable, replacingGOOGLE_API_KEYfor Gemini LLM authentication. - ›Adds Playwright script generation from agent history, enabling replay of recorded agent sessions.
- ›Adds anti-bot detection support by integrating patchright as the underlying browser automation backend, replacing playwright.
+5 moreshow less
- ›Adds embedder config support in Mem0 (
MemoryConfig) to allow different LLMs for memory embeddings. - ›Adds option to disable
mem0telemetry. - ›Adds extended system prompt capability for the planner agent.
- ›Adds support for gemma instruction-tuned models.
- ›Adds source tracking and error tracking to agent telemetry.
└──▷ BREAKING ON UPGRADE- !playwright is replaced by patchright as the underlying browser automation dependency; any code or configuration that directly references the playwright package may be affected.
- ›Adds
- 0.1.41
browser-use 0.1.41 adds multi-browser support, HAR recording, PDF saving, mobile/geo simulation, pre/post step hooks, and much more.
└──▷ GET THIS VERSION$ git clone --branch 0.1.41 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.41
└──▷ TRY ITSkip LLM API key verification at startup when deploying to a cloud environment where keys are injected at runtime.$ SKIP_LLM_API_KEY_VERIFICATION=true python my_agent.py- ›Adds
SKIP_LLM_API_KEY_VERIFICATIONenvironment variable to bypass LLM API key validation on startup (useful for cloud deployments). - ›Adds browser context options for
mobile simulation,geolocation,permissions, andtimezonesettings viaBrowserContextConfig. - ›Adds HAR file recording support, enabling network traffic capture during browser sessions.
- ›Adds
wait_for_elementaction so agents can pause until a specific element appears in the DOM. - ›Adds page-scoped action registration — actions can now be restricted to specific page URL patterns (e.g.,
*.example.com).
+15 moreshow less
- ›Adds pre- and post-step hooks to Agent.step() so developers can inject custom behavior around each agent step.
- ›Adds
save webpage as PDFaction with a configurable output path. - ›Adds multi-browser support, allowing multiple browser instances to be managed simultaneously.
- ›Adds clicking by XPath, CSS selector, or text as new element-targeting methods.
- ›Adds Dolphin browser driver support as a new browser backend.
- ›Adds flexible system prompt customization options for the agent.
- ›Adds Google Sheets support by automating keyboard shortcuts.
- ›Adds support for asking the agent to close tabs via a new action.
- ›Adds fallback handling when the LLM does not produce the expected tool call format.
- ›Adds DeepSeek R1 Distill and QwQ-32b model support.
- ›Verifies LLM API keys work on startup and adds Ctrl+C error handling.
- ›Improves Chrome launch flags with better chrome-in-docker support, anti-fingerprinting, and deterministic rendering.
- ›Improves interactive element detection using computed cursor style for more accurate DOM parsing.
- ›Processes shadow DOM children correctly so elements inside shadow roots are no longer skipped.
- ›Improves error logging for LLM API calls and missing environment variables.
- ›Adds
- 0.1.40
browser-use 0.1.40 adds metadata in agent history and support for models without native tool calling.
└──▷ GET THIS VERSION$ git clone --branch 0.1.40 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.40
- ›Enables models without native tool-calling support to operate the browser by injecting available actions directly into the prompt context.
- ›Adds metadata to agent history records, enriching run logs with additional context about each step.
- ›Introduces forced completion output to ensure agents always emit a done result rather than hanging.
- 0.1.37
browser-use 0.1.37 adds file-upload-via-dict, PDF streaming, extra Chromium args support, and improved DOM processing.
└──▷ GET THIS VERSION$ git clone --branch 0.1.37 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.37
- ›Adds
extra_chromium_argssupport for real browser sessions, enabling custom Chromium launch flags. - ›Supports file uploads specified as a dictionary (
Feature/file upload dict), expanding how files can be passed to browser actions. - ›Adds a function to stream PDF files from the browser context.
- ›Detects whether page.evaluate() works properly, surfacing compatibility issues with restricted browser environments.
- ›Generates unique file names automatically when a target file already exists, preventing silent overwrites.
+4 moreshow less
- ›Improves DOM processing for more reliable element extraction and interaction.
- ›Improves text input handling in the browser context for more robust form filling.
- ›Adds a custom function example for web search, demonstrating how to extend the agent with custom actions.
- ›Adds a streaming usage example showing how to consume agent output incrementally.
- ›Adds
- 0.1.33
browser-use 0.1.33 adds sensitive data handling, LLM-based page extraction, and screenshots in AgentHistory regardless of vision mode
└──▷ GET THIS VERSION$ git clone --branch 0.1.33 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.33
- ›Captures screenshots in
AgentHistoryeven whenuse_vision=False, enabling visual replay of agent runs without vision-mode overhead. - ›Adds LLM-based page extraction, allowing the agent to extract structured content from pages using a language model.
- ›Adds sensitive data handling to prevent secrets and credentials from leaking into agent logs or prompts.
- ›Adds an Azure OpenAI integration example covering UI and model configuration.
- ›Captures screenshots in
- 0.1.27
browser-use 0.1.27 adds initial action execution, agent callbacks, and action exclusions for more controllable browser automation.
└──▷ GET THIS VERSION$ git clone --branch 0.1.27 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.27
- ›Adds initial actions support — define setup steps (e.g., navigate to a URL, scroll) that run before LLM interactions begin.
- ›Introduces callbacks for step and done events, enabling monitoring and control hooks during agent execution.
- ›Adds the ability to exclude specific actions from the agent's available action set for finer customization.
- ›Migrates
time.sleeptoasyncio.sleepfor non-blocking async operation throughout the library. - ›Optimizes cloud infrastructure support for smoother deployments and improved scalability.
- 0.1.26
browser-use 0.1.26 adds viewport_expansion and highlight_elements controls for page context and visual output.
└──▷ GET THIS VERSION$ git clone --branch 0.1.26 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.26
└──▷ USE ITSuppress element highlights for cleaner screenshots or when visual overlays interfere with the page layout.agent = Agent( task="...", browser=browser, highlight_elements=False )- ›Adds
viewport_expansionsetting to control how much of the page is included in context, defaulting to slightly beyond the visible viewport; set it to the full page size to include all content. - ›Adds
highlight_elementssetting (set to False) to suppress element highlight overlays in the browser view.
- ›Adds
- 0.1.17
browser-use 0.1.17 enables multi-step output from the model for up to 10x faster form filling
└──▷ GET THIS VERSION$ git clone --branch 0.1.17 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.17
- ›Model can now output multiple steps at once, delivering up to 10x performance improvements in form-filling and similar multi-action workflows.
- ›More robust CSS selectors for more reliable element targeting.
- ›Expanded attribute inclusion in the DOM representation for richer context.
- ›Improved handling of multiple concurrent browser instances.
- 0.1.16
browser-use 0.1.16 enables parallel multi-agent browsing with multiple contexts per browser instance and trace/replay saving
└──▷ GET THIS VERSION$ git clone --branch 0.1.16 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.16
- ›Supports spinning up multiple browser contexts per browser instance, enabling parallel execution of as many agents as needed simultaneously.
- ›Adds the ability to save traces and replays of browser agent sessions.
- ›Improved DOM processing for more reliable page interaction.
└──▷ BREAKING ON UPGRADE- !The controller is detached from browser state — code that previously coupled the controller to browser state will break.
- !The browser service is split into separate browser and context components — any code referencing the unified browser service must be updated to address them separately.
- 0.1.12
browser-use 0.1.12 adds save-and-replay of browser sessions so recorded tasks run without an LLM.
└──▷ GET THIS VERSION$ git clone --branch 0.1.12 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.12
- ›Adds save and reload of browser history, enabling a task recorded once with an LLM to be replayed repeatedly without LLM involvement.
- ›Improves agent rerun capabilities to reliably re-execute workflows even when the DOM tree changes, using screen-based element matching.
- 0.1.7
browser-use 0.1.7 migrates to Playwright and goes fully async from agent to DOM
└──▷ GET THIS VERSION$ git clone --branch 0.1.7 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.7
- ›Switches the entire stack from agent to DOM to async, enabling non-blocking browser automation throughout the library.
- ›Replaces the previous browser backend with Playwright, improving speed and reliability for browser-driven workflows.
- ›Supports both async and sync registered functions, letting callers mix execution models when extending the agent.
- 0.1.1
browser-use 0.1.1 adds custom agent function calls, action history, and token cost approximations
└──▷ GET THIS VERSION$ git clone --branch 0.1.1 https://github.com/browser-use/browser-use.git # already have the repo? check out this version: $ git checkout 0.1.1
- ›Supports custom function calls registered alongside the agent's built-in browser functions, enabling practitioners to extend agent behavior with their own actions.
- ›Adds a history of all agent actions, giving practitioners a full audit trail of what the agent did during a session.
- ›Adds token cost approximations so practitioners can estimate LLM spend per agent run.
- ›Improves HTML processing and XPath extraction for more reliable element targeting.
- ›Highlights clickable elements with rounded overlays on screenshots for clearer visual feedback.
+1 moreshow less
- ›Introduces a testing library to support automated validation of agent workflows.