This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 1.9.4 instead.
Reason given by maintainers: broken build
OpenBrowse
The open-source Browser Use Cloud alternative. Self-host AI browser agents on a Raspberry Pi or any VPS, drive them through the same v3 REST API the browser-use-sdk already speaks, and watch every run live in a real browser. Built on top of the Browser Use SDK. It's cheaper, faster, and more reliable than BU Cloud.
Benchmarks
Given the same real-world extraction task (a careers page with 14 records behind an embedded, cross-origin board, requiring full schema output):
| Runtime | Model | Reasoning | Time | Tokens | LLM cost | Records |
|---|---|---|---|---|---|---|
| BU Cloud | claude-sonnet-5 | high | 2m 36s | 859k | $0.78 | 14/141 |
| OpenBrowse | gpt-5.6-terra | none | 1m 47s | 202k | $0.24 | 14/14 |
| OpenBrowse | claude-sonnet-5 | high | 4m 02s | 242k | $0.40 | 14/14 |
1 Extracted successfully, though some returned fields (e.g. job seniority) were hallucinated when not shown on the page.
Why OpenBrowse over BU Cloud?
| BU Cloud | OpenBrowse | |
|---|---|---|
| Hosting | Managed, per-task pricing | Your hardware, you pay only LLM tokens |
| How it works | Code-first: the agent scripts its way through pages | Visual-first: the agent opens real tabs you can watch live, like a human working |
| Bulk page reads | One page at a time | read_pages opens whole listings in parallel tab waves, one step |
| Structured output | Schema-validated | Schema-validated, plus a live answer store with a completeness gate the agent must pass before finishing |
| Anti-hallucination | Often fills fields the page never shows | On-screen data first, enriched from the page's own structured data (JSON-LD, APIs), never guessed: values without evidence are refused at the store boundary |
| Profiles | Cloud profiles | Import your BU Cloud profiles (cookies and localStorage) with one command |
| Live view | Replay | Real-time VNC of the actual browser, a step feed with the model's reasoning, and an IDE-style code tab that streams the agent's sandbox scripts live as they're written |
| API | v3 REST | The same v3 REST surface: point browser-use-sdk at your box and change nothing but baseUrl and apiKey |
⚡ See it in action
Here's a snippet of our benchmark run, with claude-opus-5 taking agentic actions across parallel tabs while its code streams into a live IDE.
https://github.com/user-attachments/assets/c1330d77-67b6-4a7d-bd43-7cdfa230b9d1
Model providers
Recommended models
-
For most use cases,
gpt-5.6-terra { "reasoningEffort": "none" },gpt-5.6-sol { "reasoningEffort": "none" }andclaude-sonnet-5 { "reasoningEffort": "high" }all strike a great balance of reliability, accuracy, and cost. -
For intense workflows, use
claude-opus-5 { "reasoningEffort": "medium" }orgpt-5.6-sol { "reasoningEffort": "none" }— both are great options, but watch out for token burn. -
On a budget? Use
gpt-5.6-luna { "reasoningEffort": "max" }with a tightly focused prompt. It might take a while, and it's more prone to hallucinations (especially with broad prompts), but the actual extractions are still great quality.
Comparisons
The same real-world extraction task (a careers page with 14 records behind an embedded, cross-origin board, full schema output) run against BU Cloud and against OpenBrowse on a Raspberry Pi 5 (16GB) without concurrency, ordered cheapest to most expensive:
| Runtime | Model | Reasoning | Steps | Time | Tokens | LLM cost | Records |
|---|---|---|---|---|---|---|---|
| OpenBrowse | gpt-5.6-luna | max | 36 | 17m 03s | 1.08M | $0.22 | 14/14 |
| OpenBrowse | gpt-5.6-terra | none | 11 | 1m 47s | 202k | $0.24 | 14/14 |
| OpenBrowse | claude-sonnet-5 | high | 10 | 4m 02s | 242k | $0.40 | 14/14 |
| OpenBrowse | gpt-5.6-sol | none | 8 | 2m 03s | 136k | $0.41 | 14/14 |
| OpenBrowse | claude-sonnet-5 | none | 9 | 5m 18s | 237k | $0.51 | 14/14 |
| OpenBrowse | gpt-5.6-terra | high | 17 | 5m 05s | 434k | $0.66 | 14/14 |
| BU Cloud | claude-sonnet-5 | high | 10 | 2m 36s | 859k | $0.78 | 14/141 |
| OpenBrowse | gpt-5.6-sol | medium | 16 | 5m 24s | 339k | $1.12 | 14/14 |
| OpenBrowse | claude-opus-5 | medium | 15 | 3m 56s | 398k | $1.32 | 14/14 |
| OpenBrowse | claude-opus-5 | none | 17 | 4m 53s | 480k | $1.62 | 14/14 |
1 Extracted successfully, though some returned fields (e.g. job seniority) were hallucinated when not shown on the page.
OpenAI and Anthropic models are generally at their best at the opposite ends of the reasoning dial. For example, OpenAI's GPT-5.6-Terra performs better with less reasoning, spending less time planning ahead and more time reacting to the page in front of it, while Anthropic's 5-series Claude models lean towards rabbit holes and need reasoning time to refocus on the goal.
What is "thinking" in OpenBrowse?
OpenBrowse separates two kinds of reasoning. Browser thinking is our way of describing how the platform works in "steps" (the 👁️ see / 🛝 plan / ➡️ next / 💭 thinking cards in the live feed), so it can't be disabled.
Model reasoning is different: it's the Chain-of-Thought reasoning provided by LLM providers (e.g. Anthropic's extended thinking, OpenAI's reasoning effort), and can be controlled per session by changing reasoningEffort in the API. Values are validated per model at runtime. Models will have different default reasoning levels depending on their provider, so it's a good idea to set this value explicitly.
All supported models
- OpenAI:
gpt-5.6-sol,gpt-5.6-terra,gpt-5.6-luna - Anthropic:
claude-mythos-5,claude-fable-5,claude-opus-5,claude-sonnet-5,claude-opus-4.8,claude-opus-4.8[1m],claude-opus-4.7,claude-opus-4.7[1m],claude-opus-4.6,claude-opus-4.6[1m],claude-sonnet-4.6,claude-sonnet-4.6[1m] - Google: ⚠️ Coming soon
Quick start
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install openbrowse
openbrowse start
openbrowse start registers OpenBrowse as a systemd service, so it is running now and starts automatically on every boot from here on (openbrowse stop --disable undoes that). On a machine without systemd it falls back to running in the foreground, as does openbrowse serve anywhere.
To run from source instead, clone the repo and use uv directly:
git clone git@github.com:lujstn/openbrowse.git
cd openbrowse
uv sync
uv run openbrowse serve
Open http://<your-host>:8420 in a browser. A fresh install serves a one-time setup screen that generates your API bearer key, takes your Anthropic / OpenAI / CapSolver keys, sets your dashboard password and concurrency limit, and writes .env for you.
Then from any browser-use-sdk client:
import { BrowserUse } from "browser-use-sdk";
const client = new BrowserUse({
apiKey: process.env.OPENBROWSE_API_KEY,
baseUrl: "http://<your-host>:8420/v3",
});
const task = await client.tasks.create({
task: "Find every product on this page and return the structured list.",
model: "claude-sonnet-5",
outputSchema: mySchema,
});
Full installation (Raspberry Pi system packages, Xvfb + VNC live view, systemd service): see GETTING_STARTED.md.
Updating
The server checks PyPI for new releases in the background and shows an Update available badge in the dashboard when one exists; installing it is one click on the Settings page (the server restarts itself afterwards). From a shell, openbrowse check-update and openbrowse update do the same. Set UPDATE_CHECK_HOURS=0 in .env to disable the background check.
Exposing it to the web
OpenBrowse runs on plain Python + Chromium and can be easily port forwarded. To reach it from outside that box without opening ports, put it behind Tailscale:
# private access from your own devices
tailscale up
# or expose the API publicly over TLS with Tailscale Funnel
sudo tailscale funnel --bg 8420
Features
- v3-compatible REST API: sessions, structured output schemas, cost caps, live URLs.
- Visual, tab-based browsing: parallel foreground tab waves for bulk reads; a code tab shows when the agent runs a script; everything visible over VNC.
- Schema answer store: every write validated live against your JSON Schema, coverage tracked per field, a completeness gate before
done, and mark-absent semantics for data a site genuinely does not publish. - Grounding guards: shell-read detection with automatic in-frame retry, evidence-checked enum writes, URL fields validated as absolute http(s) links at the store boundary, honest failure over invented data.
- Profile import: bring BU Cloud profiles (cookies + localStorage) via CLI or the dashboard.
- Dashboard: live session feed with model reasoning, per-step costs, JSON export (full / steps / output-only), profile management.
- CAPTCHA solving: optional CapSolver integration.
- Multi-provider: Anthropic and OpenAI models behind one API, with per-provider repair layers for each family's failure modes.
Citation
This project is licensed under the MIT License. If you use OpenBrowse as part of your research or project, please cite:
@software{openbrowse2026,
author = {Johnston Kurilov, Lucas},
title = {{OpenBrowse}: Self-hosted AI browser agents},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.21986248},
url = {https://github.com/lujstn/openbrowse}
}
| built with <з by @lujstn | |
|---|---|
|
|
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file openbrowse-1.8.1.tar.gz.
File metadata
- Download URL: openbrowse-1.8.1.tar.gz
- Upload date:
- Size: 304.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3dee78e697c6200bd33cecb00bf8a50d2dd71458ca7ad8c0d09495c90c33a95
|
|
| MD5 |
7f4322685465c61ef34f73c7f305a449
|
|
| BLAKE2b-256 |
595b4ea9b60639c7b0d6f4a428eb8d1b31e21197243275745357463ee024e5db
|
Provenance
The following attestation bundles were made for openbrowse-1.8.1.tar.gz:
Publisher:
release.yml on lujstn/openbrowse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openbrowse-1.8.1.tar.gz -
Subject digest:
f3dee78e697c6200bd33cecb00bf8a50d2dd71458ca7ad8c0d09495c90c33a95 - Sigstore transparency entry: 2530844458
- Sigstore integration time:
-
Permalink:
lujstn/openbrowse@dc2b469ca7f60b8d2c7500db2f6984e6d56b3675 -
Branch / Tag:
refs/tags/v1.8.1 - Owner: https://github.com/lujstn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dc2b469ca7f60b8d2c7500db2f6984e6d56b3675 -
Trigger Event:
push
-
Statement type:
File details
Details for the file openbrowse-1.8.1-py3-none-any.whl.
File metadata
- Download URL: openbrowse-1.8.1-py3-none-any.whl
- Upload date:
- Size: 251.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0beaa8e5653198034f8db79129dcf22e4cdfdad8882817f9b7174d9e09e1a40b
|
|
| MD5 |
cd8647bf72e4da6f35d2688f22d5cba5
|
|
| BLAKE2b-256 |
88f5214f39c49944fcb7386b1f91293d8a883c09a92e2aa974048262374116be
|
Provenance
The following attestation bundles were made for openbrowse-1.8.1-py3-none-any.whl:
Publisher:
release.yml on lujstn/openbrowse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
openbrowse-1.8.1-py3-none-any.whl -
Subject digest:
0beaa8e5653198034f8db79129dcf22e4cdfdad8882817f9b7174d9e09e1a40b - Sigstore transparency entry: 2530844508
- Sigstore integration time:
-
Permalink:
lujstn/openbrowse@dc2b469ca7f60b8d2c7500db2f6984e6d56b3675 -
Branch / Tag:
refs/tags/v1.8.1 - Owner: https://github.com/lujstn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@dc2b469ca7f60b8d2c7500db2f6984e6d56b3675 -
Trigger Event:
push
-
Statement type: