Let AI agents drive a user's real browser via a browser extension connected outbound over WebSocket.
Project description
browser-outo
Let AI agents drive YOUR real browser — the one you're already logged into.
browser-outo is a CLI + browser extension that gives AI agents (Claude Code, OpenCode, or any script) full control over your actual Chrome or Firefox: open tabs, read pages, click, type, scroll, screenshot, and more. Everything runs 100% locally — your cookies, sessions, and credentials never leave your machine.
- No cloud browser, no fresh profile. The agent uses your browser with your logins, your cookies, your reputation. Sites that bot-drive browsers can't touch (CAPTCHAs, login walls, Cloudflare) just work — reCAPTCHA v2 passes with a single click on a well-used profile.
- No automation fingerprint. Nothing is injected into the page before you
say so, and there's no
navigator.webdriverflag. Commands run through a normal browser extension, not an automation driver. - Fully local. A tiny server on
127.0.0.1:11681bridges the CLI and the extension over WebSocket. No telemetry, no external calls.
How it works
┌─────────────┐ HTTP ┌──────────────────┐ WebSocket ┌─────────────────┐
│ browser-outo│ ────────► │ local server │ ◄────────── │ browser │
│ CLI (agent) │ │ 127.0.0.1:11681 │ (outbound) │ extension │
└─────────────┘ └──────────────────┘ └─────────────────┘
The extension connects outbound to the local server, so there's nothing
to open in your firewall and no pairing step. Multiple browsers can connect
at once — each gets a numeric EXT_ID you target per command.
Install
Two pieces, all local:
1. The agent skill (teaches your AI agent how to drive it — the skill also installs the CLI for you when needed):
npx skills add llaa33219/browser-outo
2. The browser extension — coming soon to the Chrome Web Store and Firefox Add-ons.
Then just ask your agent to do things in your browser — open pages, fill forms, read content, take screenshots. The agent handles every command through the skill; you never have to learn a CLI.
It works inside iframes too — elements from all frames (CAPTCHA widgets included) are merged into one numbered list, and clicks route to the right frame automatically.
Why not browser-use / Playwright / Chrome MCP?
| browser-outo | browser-use | Playwright (MCP) | Anthropic Chrome MCP | |
|---|---|---|---|---|
| Uses your browser + logins | ✅ | ❌ (fresh cloud/local profile) | ❌ (fresh profile) | ✅ |
| Fully local, no external calls | ✅ | ❌ (LLM API in the loop) | ✅ | ✅ |
| CAPTCHA on a real profile | ✅ passes as you | ❌ flagged as bot | ❌ flagged as bot | ✅ |
navigator.webdriver hidden |
✅ | ⚠️ patchable | ⚠️ patchable | ✅ |
| Setup | one extension + npx skills add |
Python env + LLM key + browser | Node + browser download | extension + MCP config |
| Agent integration | any CLI-capable agent (SKILL.md included) | its own agent loop | MCP servers | Claude only |
| Multi-browser at once | ✅ Chrome + Firefox simultaneously | ❌ | ❌ | ❌ |
browser-use and Playwright drive a separate, automation-controlled browser — sites see a fresh profile with an automation fingerprint and no history, which is exactly what CAPTCHAs and bot-walls punish. The Anthropic Chrome MCP shares the "your real browser" idea but only works with Claude via MCP. browser-outo is a plain CLI: any agent or script that can run shell commands can use it, against the browser you already trust.
For AI agents
The skill source lives in skills/browser-outo/SKILL.md (installed via
npx skills add llaa33219/browser-outo). It teaches the agent the full
command set, the elements→interact loop, the annotate→vision loop, and the
pitfalls (stale indices, restricted pages, trusted-event sites).
License
Apache-2.0
Project details
Release history Release notifications | RSS feed
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 browser_outo-0.1.0.tar.gz.
File metadata
- Download URL: browser_outo-0.1.0.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0bd47f133258ebef7016f22a87c9d0cb3ccf838046617b3ea841215aa5044652
|
|
| MD5 |
0ab550603f96bbcb1d6fa9a648493ba2
|
|
| BLAKE2b-256 |
622c71c0150d7c85934b495172a4a10d39ea11ce182aa93d60887b7dbdd927f4
|
Provenance
The following attestation bundles were made for browser_outo-0.1.0.tar.gz:
Publisher:
publish.yml on llaa33219/browser-outo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
browser_outo-0.1.0.tar.gz -
Subject digest:
0bd47f133258ebef7016f22a87c9d0cb3ccf838046617b3ea841215aa5044652 - Sigstore transparency entry: 2257056154
- Sigstore integration time:
-
Permalink:
llaa33219/browser-outo@c83e0c57061a88de591418ecabc454427d1241b3 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/llaa33219
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c83e0c57061a88de591418ecabc454427d1241b3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file browser_outo-0.1.0-py3-none-any.whl.
File metadata
- Download URL: browser_outo-0.1.0-py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b34b1665ea69e84b365c49555baa121e1648bcb8cc5cfc72b64f3445b6100f9
|
|
| MD5 |
72045289f2b0e37aa4789d7ccbdecc75
|
|
| BLAKE2b-256 |
fd8dd17f538feb721634677f50d4c75316ce3c3f40a0eef14ecad7e3661afb2d
|
Provenance
The following attestation bundles were made for browser_outo-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on llaa33219/browser-outo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
browser_outo-0.1.0-py3-none-any.whl -
Subject digest:
6b34b1665ea69e84b365c49555baa121e1648bcb8cc5cfc72b64f3445b6100f9 - Sigstore transparency entry: 2257056164
- Sigstore integration time:
-
Permalink:
llaa33219/browser-outo@c83e0c57061a88de591418ecabc454427d1241b3 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/llaa33219
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c83e0c57061a88de591418ecabc454427d1241b3 -
Trigger Event:
push
-
Statement type: