Agent, Browser, Tools, run(), final_result()) still works.
Anything 1.0 can’t honor raises a clear error before a browser starts or anything is billed, never a silent no-op. A removed feature raises <feature> was removed in browser-use 1.0, plus the 1.0 alternative when there is one and a link to the migration guide. The exception: a few tuning knobs that can’t change the result (use_vision=True, flash_mode, use_thinking, …) log one warning and are ignored.
Stay on 0.x
Pin it:uv add 'browser-use<1'. In requirements.txt or pyproject.toml: browser-use<1. The 0.x docs are under Legacy (0.x).
What changed and why
Common errors
MissingAPIKeyError: The default model (bu-fast) needs a Browser Use API key(orBrowser() (a Browser Use Cloud browser) needs a Browser Use API key): the default model andBrowser()are Browser Use Cloud now. SetBROWSER_USE_API_KEY(create a key at cloud.browser-use.com/new-api-key) or runbrowser-use login, or stay local:Agent(task, llm=ChatOpenAI(...), browser=Browser('chromium')).ValueError: Browser() (a cloud browser) does not take headless=:headless,executable_pathanduser_data_dirare for local browsers. UseBrowser('chromium', headless=True).TypeError: Agent(<option>=...) was removed in browser-use 1.0: an option 1.0 dropped. The message names the replacement when there is one; the tables below list them all.TypeError: Agent(max_steps=...) is not an option: pass it toagent.run(max_steps=...).ValueError: bu-2-0 needs browser-use<1.0: the 0.x gateway models are gone. Usebu-fast, or stay on 0.x.BrowserConfigError: No Chrome profiles match 'Gaming'. Your profiles: ...:profile=(orcloud_profile_id=) names no profile. It is aValueError, raised fromrun()before a browser starts.ModuleNotFoundError/ImportErroron a 0.x import: the message names the 1.0 replacement. Import from the top level:from browser_use import Agent, Browser, Tools, ActionResult, ChatOpenAI, ....
The ten most common 0.x patterns
The 0.x snippets are written for browser-use 0.13.14. Run as is on 1.0, each one either works or raises before a browser starts, naming the fix.1. Your own model
0.x launched a local browser by default. 1.0 starts a cloud browser, so addBrowser('chromium') to stay local. max_steps still goes to run().
2. The Browser Use model
ChatBrowserUse() meant bu-2-0 on the 0.x gateway. On 1.0 it is bu-fast on the new gateway, and it is the default, so you can drop llm=. bu-2-0, bu-1-0, bu-2-0-mini-preview and bu-latest raise: they need 0.x.
3. BrowserProfile and BrowserSession
Pass the options toBrowser(...). headless, user_data_dir, executable_path and the domain lists are kept. Window size, viewport and user agent are said in the task.
4. Your Chrome profile
Browser('chrome', profile='Default') launches a new Chrome on a temporary copy of that profile (its display name or directory): your logins, sync off, nothing written back. Browser('chrome') attaches to the Chrome you have open instead (turn on chrome://inspect/#remote-debugging once and click Allow). See Browsers.
5. Cloud browsers
Browser() is a cloud browser now; use_cloud=True still works. cloud_profile_id, cloud_proxy_country_code and cloud_timeout are kept.
6. Custom tools
@tools.action is kept. Injected parameters (browser_session, page_extraction_llm, file_system, …) are gone: a tool gets only what the model passes, and the model drives the browser itself. Return a string, any JSON-able value or ActionResult(extracted_content=...).
7. Structured output
output_model_schema is kept. Read the typed instance from result.structured_output instead of parsing final_result().
8. Logins with sensitive_data
Unchanged. The model types a value withtype_secret('x_pass') and never sees it. The 0.x <secret>x_pass</secret> placeholder is no longer replaced: code that sends it to a page raises, naming type_secret. See Secrets.
9. Follow-up tasks on one browser
keep_alive=True and add_new_task() are kept. Stop the browser with await browser.stop(); kill() and close() do the same.
10. Step hooks and history
There are no per-step actions in 1.0, soon_step_start / on_step_end and history.urls(), action_names() and the like are gone. Each step logs one line to logging.getLogger('browser_use'), and result.messages holds the full transcript. See Long tasks: Live progress.
Agent
Every 0.xAgent(...) argument, method and attribute. Removed arguments raise TypeError, removed methods and attributes raise AttributeError, both naming the 1.0 replacement. “Dropped” means there is none.
Result
run() still returns an AgentHistoryList.
Browser
Browser, BrowserSession and BrowserProfile are one class now: Browser. Importing BrowserSession, BrowserProfile, BrowserConfig, BrowserContext or BrowserContextConfig raises.
See Browsers.
Models
Importing a removed class raises an
ImportError that names its replacement. See Models.
Tools
See Tools.
Removed modules
Every 0.x module 1.0 does not have, and every 0.x name a kept module lost, raises an error naming the replacement:ModuleNotFoundError for a module, ImportError for a name. Both are ImportError, so except ImportError fallbacks still work. Import from the top level: from browser_use import Agent, Browser, Tools, ActionResult, ChatBrowserUse, ChatOpenAI, ChatAnthropic, ChatGoogle.
CLI and MCP
The CLI still runs piped Python, andbrowser-use skill install and browser-use --cli-mcp work as before. New: browser-use login / logout and a browser_login MCP tool. browser-use run, init and the 0.x subcommands (open, state, click, …) print what replaced them.
The 0.x browser-use --mcp server ran the removed engine. --mcp now prints a deprecation notice and serves the --cli-mcp tools (browser_exec, browser_screenshot, browser_login) on its own temporary Chromium. The old tool names (browser_navigate, browser_click, browser_type, browser_get_state, browser_extract_content, browser_get_html, browser_scroll, browser_go_back, browser_list_tabs, browser_switch_tab, browser_close_tab, retry_with_browser_use_agent, browser_list_sessions, browser_close_session, browser_close_all) return an error that points to browser_exec. Switch clients to --cli-mcp:
Environment variables
The same guide, with every detail of domain restrictions and the secrets trust model, is MIGRATING.md in the repo.