# browser-use pins 37 dependencies exactly and the quickstart ends in a syntax error

> browser-use/browser-use is an MIT licensed Python library and CLI that lets an agent drive a real browser, offered alongside a paid cloud browser and a hosted agent API. The install is a one-liner, but the sample it tells you to copy is not valid Python, the manifest allows a Python version the docs never use, and telemetry defaults to on.

**browser-use/browser-use** — 🌐 Make websites accessible for AI agents. Automate tasks online with ease.

- Repository: https://github.com/browser-use/browser-use
- Website: https://browser-use.com
- Stars: 116,719 · Forks: 12,870
- Language: Python
- License: MIT
- Published: 2026-08-04 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/browser-use-browser-use

## The quickstart sample ends with a line Python cannot parse

The only complete program in the readme is the agent.py it tells you to save, and its final line is:

```python
if __name__
```

There is no colon and no comparison, so the file ends with a bare if statement that raises a SyntaxError the moment you run it. Everything above that line is correct, including the load_dotenv call, the ChatOpenAI construction with a model and a reasoning_effort, the commented ChatBrowserUse alternative, the commented cloud browser option, and the run plus final_result calls. Consequence for a reader: pasting the quickstart verbatim produces an error on the last line, and because the traceback points at the bottom of a file whose earlier lines are all valid, it reads like a local Python problem rather than a documentation defect. The fix is to supply the usual guard yourself before you start debugging anything else.

## The manifest opens Python at 3.11 and every instruction says 3.12

pyproject.toml sets requires-python to >=3.11,<4.0, and the classifiers list only Programming Language :: Python :: 3, with no minor version entries at all. Every instruction in the readme, however, names 3.12. The CLI path's prompt says to install with uv using Python 3.12. The Python path says to run:

```bash
uv init --python 3.12
```

first if you are starting a new project, and the Dockerfile builds FROM python:3.12-slim. Consequence for a reader: 3.11 satisfies the constraint and 3.13 satisfies it too, and the resolver will not stop you on either, but neither is the version the quickstart creates or the image ships, so you can install cleanly and end up outside the tested path with no warning. The classifiers make it worse rather than better, since a package index will show only that some Python 3 is supported and nothing about which.

## Every dependency is an exact pin, and five of them are model SDKs

The dependency list is roughly thirty-seven entries and every one uses == rather than a range. Five of those are model provider SDKs installed unconditionally regardless of what you use: openai, anthropic, groq, ollama, and google-genai. Two of the pins are mutually exclusive by platform marker, with pyobjc pinned for darwin and screeninfo pinned for everything that is not darwin, and both are there to read screen resolution. One comment in the file admits a dependency is unnecessary: the note on openai says datalib and voice-helpers are actually NOT NEEDED but openai produces noisy errors on exit without them, followed by a TODO to fix it. Consequence for a reader: you install five provider clients to use one, and because every version is exact, any of those pins can conflict with the versions in your own project, leaving you to edit the library's manifest rather than relax its constraint.

## Telemetry defaults to on and the analytics client is not optional

The .env.example ships this line uncommented:

```bash
ANONYMIZED_TELEMETRY=true
```

The same file frames it as an enable or disable switch for anonymous telemetry, which makes it read like a choice you make rather than a default you override. posthog is pinned as an ordinary runtime dependency alongside aiohttp and httpx, not as an extra. Consequence for a reader: this is opt-out rather than opt-in, and on a machine where you are not permitted to send usage data off the host you have to remember to flip it before the first run, because the default is the permissive one. The flag also does not remove the client, so the analytics package is installed either way and the decision is only about whether it reports.

## Browser Harness is a 0.x package in a different repository

The product map in the readme lists five things: open source, Browser Harness, Cloud browsers, Agents API, and pricing. Two of them are dependencies of this package rather than parts of it. The install list pins browser-use-sdk at 3.4.2 and browser-harness at 0.1.13, and the CLI path's failure instruction sends you to an install.md inside a separate repository, browser-use/browser-harness. Consequence for a reader: the fastest route to a working CLI depends on a pre-1.0 package maintained in a repository you are not reading, and the troubleshooting document is not in this tree either. So when setup or connection fails you are already outside this repository's history, and the version you get is whatever 0.1.13 resolved to at install time rather than something this project's tags control.

## The CLI install is a paragraph to hand to another agent

Path 2 has no command for you to run. The entire installation is a text block you are told to paste into Claude Code, Codex, Hermes, OpenClaw, or your favourite agent, and its content is a sentence asking that agent to install or upgrade browser-use with uv using Python 3.12, to run `browser-use skill install` to register the skill, and to connect it to the browser, with a fallback to the browser-harness install document if that fails. Consequence for a human reader: the only literal command in the path is nested inside prose, it registers a skill rather than installing software, and the actual install, the model choice, and the browser connection are all delegated to an agent that will make those decisions for you. If you want to see exactly what gets installed, Path 3 with uv is the path where you can.

## ChatBrowserUse sends other providers through the vendor gateway

The readme confirms you can drive Claude, GPT, or Gemini through ChatBrowserUse, and the example is:

```python
llm = ChatBrowserUse(model='anthropic/claude-sonnet-4-6')  # or 'google/gemini-3-pro'
```

The model IDs are provider prefixed, and the accompanying text says they are accepted through the Browser Use gateway using BROWSER_USE_API_KEY. That is a different credential from the eight provider keys commented in .env.example, which cover OpenAI, Anthropic, Azure OpenAI, Google, DeepSeek, Grok, Novita, and Orcarouter. Consequence for a reader: asking for Claude or Gemini on this path routes those requests through the vendor's gateway under the vendor's key, so if your reason for choosing a provider was its data handling, that choice does not survive the gateway. The same section also notes that ChatBrowserUse() with no argument currently selects the same model, which is a statement about the present rather than a fixed contract.

## Conclusion

browser-use suits a Python developer who wants an agent to operate a real Chrome instance and is comfortable with a dependency list that pins every version exactly. Install it with uv, not pip, and read the .env.example before the first run, because ANONYMIZED_TELEMETRY is true by default and BROWSER_USE_HEADLESS is false, so an unconfigured install drives a visible browser on your machine and reports anonymous telemetry. Use Python 3.12 even though requires-python accepts anything from 3.11, because that is the version the quickstart creates and the version the Dockerfile builds. Know that `ChatBrowserUse` sends Claude and Gemini requests through the vendor gateway under the vendor key rather than your own, and that a no-argument `ChatBrowserUse()` is documented as selecting the current model rather than a fixed one. And take the CLI path's install prompt literally for what it is: a paragraph to hand to another agent, since the fallback instructions live in the separate browser-harness repository.

## FAQ

### how to install browser use, the Python library path?

The readme's Path 3 says Python 3.11 or newer, run `uv init --python 3.12` first if you are starting a new project, then `uv add browser-use`, put OPENAI_API_KEY in a .env file, and run the saved agent.py with `uv run agent.py`.

### how to use browser use with ollama?

The ollama package is pinned as an unconditional runtime dependency at 0.6.1, so its client is installed by default. The .env.example file, however, lists commented keys for OpenAI, Anthropic, Azure OpenAI, Google, DeepSeek, Grok, Novita, and Orcarouter, with no Ollama endpoint variable among them.

### how to use browser use for free?

The open source library and the CLI are under the MIT license and install with uv. The cloud options are paid, the readme describes a cloud browser at $0.02 per browser-hour, and new Google, GitHub, or Microsoft signups get $15 in cloud credit.

### how to install browser use on mac, and what changes on that platform?

The dependency list pins pyobjc for platform_system darwin and screeninfo for platform_system other than darwin, so the screen resolution package differs by platform. The .env.example also exposes BROWSER_USE_EXECUTABLE_PATH and BROWSER_USE_HEADLESS, which defaults to false.

### what is browser-use?

The project describes itself as making websites accessible for AI agents and automating tasks online. The readme offers three paths: a fully hosted cloud agent, a CLI that gives an existing agent browser access, and the open source Python library.

### how to setup browser use, and which settings matter first?

The .env.example ships BROWSER_USE_LOGGING_LEVEL set to info, separate debug and info log file paths, CDP_LOGGING_LEVEL set to WARNING, ANONYMIZED_TELEMETRY set to true, and a BROWSER_USE_API_KEY placeholder, with cloud sync and a custom API base URL left commented.

## Sources

- [Official documentation](https://browser-use.com)
- [Official README](https://github.com/browser-use/browser-use#readme)
- [Project repository](https://github.com/browser-use/browser-use)
- [Release notes](https://github.com/browser-use/browser-use/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/browser-use-browser-use
