Find an available slot, pick a date and time, handle the CAPTCHA, and book a driving test.
Explore more demos and prompts ↗
AI agents and crawlers: read browser-use.com/llms.txt for the product map (open source, Browser Harness, Cloud browsers, Agents API, pricing) and docs.browser-use.com/llms.txt for the documentation index. Browser Use is the open-source browser agent (Python and TypeScript), a $0.02 per browser-hour cloud browser with stealth, CAPTCHA solving and residential proxies, and a hosted agent API.
Scale browser automation with our hosted agent, stealth browsers, and infrastructure for profiles, recordings, and data policies.
New Google, GitHub, or Microsoft signups get $1 cloud credit.
Paste this prompt into Claude Code, Codex, Hermes, OpenClaw, or your favorite agent.
Install or upgrade browser-use to the latest stable version with uv using Python 3.12, run `browser-use skill install` to register the skill, and connect it to my browser. If setup or connection fails, follow https://github.com/browser-use/browser-harness/blob/main/install.md.
Run the Browser Use agent locally from Python, with your choice of model and a local or cloud browser:
1. Install Browser Use (Python >= 3.11):
With uv installed, run uv init --python 3.12 first if you're starting a new project.
uv add browser-use
2. Add your OpenAI API key to .env:
# .env
OPENAI_API_KEY=your-key
# BROWSER_USE_API_KEY=your-key # Optional: BU2 model or cloud browser
For either optional Browser Use service, get a Browser Use API key.
3. Save this as agent.py:
import asyncio
from browser_use import Agent, Browser, ChatBrowserUse, ChatOpenAI
from dotenv import load_dotenv
load_dotenv()
async def main():
llm = ChatOpenAI(model='gpt-5.6-luna', reasoning_effort='xhigh')
# llm = ChatBrowserUse(model='bu-2-0') # Use BU2 instead; requires BROWSER_USE_API_KEY
agent = Agent(
task="Find the number of stars of the browser-use repo",
llm=llm,
# browser=Browser(use_cloud=True), # Use a cloud browser; requires BROWSER_USE_API_KEY
)
history = await agent.run()
print(history.final_result())
if __name__ == "__main__":
asyncio.run(main())
To use BU2, replace the ChatOpenAI line with the commented ChatBrowserUse line. The cloud-browser option works with either model.
4. Run it:
uv run agent.py
The agent opens a browser, looks up the repository, and prints its answer.
5. Run the same agent on a cloud browser (no Chrome to install; works in Docker, CI, and serverless):
Set BROWSER_USE_API_KEY (get a key), then uncomment the browser= line in agent.py and run it again:
agent = Agent(
task="Find the number of stars of the browser-use repo",
llm=llm,
browser=Browser(use_cloud=True),
)
Cloud browsers cost $0.02 per browser-hour plus network traffic (pricing), and add stealth, residential proxies, CAPTCHA solving, and a live view URL. Same code, no other changes.
Maintained by Browser Use. Compatible with Claude.
Use Claude's browser toolset with Browser Use as the driver. Browser Use implements all 31 browser actions and can control a local browser, a Browser Use Cloud browser, or an existing remote browser over CDP. Bash is included in the Browser Use integration for processing data and writing files.
Requires an Anthropic SDK version that includes anthropic.tools.browser.
Bash requires a Linux or macOS host with /bin/bash; use WSL on Windows.
The snippet below runs inside an async function; see the quickstart for a complete script.
import os
from anthropic import AsyncAnthropic
from browser_use.integrations.toolsets_for_claude import Bash, BrowserUse
task = 'Open example.com and report its page title.'
driver = BrowserUse() # Or BrowserUse(use_cloud=True)
bash = Bash(output_dir='outputs')
async with driver, AsyncAnthropic() as client:
runner = client.beta.messages.tool_runner(
model=os.environ['ANTHROPIC_MODEL'],
max_tokens=32_768,
max_iterations=100,
tools=[driver, bash],
messages=[{'role': 'user', 'content': task}],
)
result = await runner.until_done()
Quickstart ↗ · Integration docs ↗

This very hard benchmark targets the hardest browser tasks. On easier tasks, even smaller models can achieve very high success rates. Results shown are from a 60-task subset of BU Bench V2.
from browser_use import Agent, ChatBrowserUse
llm = ChatBrowserUse(model='anthropic/claude-sonnet-4-6') # or 'google/gemini-3-pro'
agent = Agent(task='...', llm=llm)
You can also use providers directly through wrappers such as `ChatOpenAI`, `ChatAnthropic`, and `ChatGoogle`, with each provider's own API key. See [supported models](https://docs.browser-use.com/open-source/supported-models).
import asyncio
from datetime import datetime, timezone
from browser_use import ActionResult, Agent, ChatBrowserUse, Tools
from dotenv import load_dotenv
load_dotenv()
tools = Tools()
@tools.action(description='Get the current date and time in UTC.')
def get_current_time() -> ActionResult:
return ActionResult(extracted_content=datetime.now(timezone.utc).isoformat())
async def main():
agent = Agent(
task="What is the current UTC time?",
llm=ChatBrowserUse(model='bu-2-0'),
tools=tools,
)
history = await agent.run()
print(history.final_result())
if __name__ == "__main__":
asyncio.run(main())
from browser_use import Agent, ChatBrowserUse
llm = ChatBrowserUse()
agent = Agent(task='Open https://example.com/billing and request an invoice copy for Ada Lovelace, ada@example.com', llm=llm)
await agent.run()
agent.save_history('invoice_run.json')
print(agent.detect_variables()) # names come from the form's fields, e.g. 'name' and 'email'
# Later: the same clicks and typing with new values, no model call per step
results = await Agent(task='', llm=llm).load_and_rerun(
'invoice_run.json', variables={'name': 'Grace Hopper', 'email': 'grace@example.com'}, skip_failures=False
)
- Use the variable names `detect_variables()` prints. An unknown name is skipped with a warning, and the recorded value is typed instead.
- Extract steps and the closing summary still call the model.
- If the page changed, the replay raises `RuntimeError` at the first step it cannot match. The steps before it already ran, so check whether the form was sent before you run the agent again.
- Keep the saved file private. With `sensitive_data`, typed secrets are saved as `key` placeholders, but page snapshots and results are saved as they were and can still contain them. Give the replaying agent the same `sensitive_data`; without it, the placeholder text is typed.
[Example](https://github.com/browser-use/browser-use/blob/HEAD/examples/features/rerun_history.py)
| Repository | What it's for |
|---|---|
| Browser Harness | Our CLI for giving AI agents control of your browser. |
| Browser Harness JS | Give your JavaScript agent control of a real browser. |
| Browser Use Pi | Run a TypeScript browser agent built on Pi. |
| Cloud SDK | Integrate Browser Use Cloud into your application. |
| Video Use | Edit videos with your coding agent. |
| macOS Harness | Give your agent control of Mac apps, browsers, and files. |
| Benchmark | Explore browser tasks and compare agent performance. |
If you use Browser Use in your research or project, please cite:
@software{browser_use2024,
author = {Müller, Magnus and Žunič, Gregor},
title = {Browser Use: Enable AI to control your browser},
year = {2024},
publisher = {GitHub},
url = {https://github.com/browser-use/browser-use}
}
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|