Skip to main content
browser-use drives Chrome over the DevTools protocol and lets a model decide each step. It can launch a browser itself, but its default switches change what a page sees, so start Apostate yourself and let browser-use connect to it.
This page was tested with browser-use 0.13.10 and Apostate 0.4.3. browser-use changes quickly; check the names below against your version.

Why not let browser-use launch it

browser-use adds its own switches to every browser it launches. Among them: It also emulates the viewport in headless mode, grants clipboard and notification permissions to every site, and draws highlight boxes into pages when it clicks. Starting the browser yourself and connecting over CDP avoids all of it.

The example

examples/agents/browser-use/agent.py starts Apostate with a DevTools port and connects browser-use to it:
python3 agent.py --check starts the browser and connects without calling a model:
The two parts that matter:
  • The environment holds the locale variables the Python package would set, and GOOGLE_API_KEY=no with the two client variables, which keep Chromium’s “Google API keys are missing” bar off the first tab of a launch without a driver.
  • The user data directory keeps the machine. Its first launch draws one and stores the seed; later launches present the same machine. Add --fingerprint=SEED to pin one instead.
  • headless=False stops browser-use from emulating a viewport. The browser is already headless.
  • permissions=[] and highlight_elements=False keep browser-use from granting permissions to every site and from injecting overlays.

Behind a proxy

Add --proxy-server=socks5://user:pass@proxy.example:1080 to args. Apostate takes the credential off the switch and answers the proxy’s authentication itself. Set --fingerprint-locale and --fingerprint-timezone to the exit’s, since this route skips the package’s GeoIP lookup. Proxies and Locale and timezone cover both.

Telemetry

browser-use sends anonymous usage data unless ANONYMIZED_TELEMETRY=false. The example sets it and BROWSER_USE_CLOUD_SYNC=false before importing browser-use.