Repo of the Day
billy-enrizky/openbrowser-ai
Published: Feb 23, 2026
Open repository ↗OpenBrowser is a framework for intelligent browser automation. It combines direct CDP communication with a CodeAgent architecture, where the LLM writes Python code executed in a persistent namespace, to navigate, interact with, and extract information from web pages autonomously.
Summary
OpenBrowser is a Python framework for AI-driven browser automation that combines direct Chrome DevTools Protocol (CDP) communication with a CodeAgent architecture, where the LLM writes Python code executed in a persistent Jupyter-like namespace. It ships as a PyPI package (openbrowser-ai) under the MIT license, requires Python 3.12+, and auto-detects any installed Chromium-based browser. The project also includes an MCP server, a persistent CLI daemon, and plugins for Claude Code, Codex, and OpenCode.
What it is useful for
OpenBrowser is useful when you need an LLM to drive a real browser end-to-end: scraping paginated sites, filling multi-step forms and login flows, navigating dynamic SPAs, extracting structured data from JavaScript-rendered pages, or scripting e2e tests for web apps. The CodeAgent design batches multiple actions in a single Python snippet, which the README's benchmarks show uses 2.1–2.6x fewer tokens than browser-use, agent-browser, and playwright-cli across six task types, and 3.2x fewer tokens than Playwright MCP and 6.0x fewer than Chrome DevTools MCP. The MCP server exposes a single execute_code tool, so it plugs into Claude Desktop, Claude Code, Codex, and OpenCode without separate API keys (the MCP client supplies the LLM). The seven bundled Claude Code skills cover deep research, web scraping, form filling, e2e testing, page analysis, accessibility audit, and file download. Documented limitations include: the MCP server's per-process profile is not automatically reused by later MCP processes unless you set OPENBROWSER_USER_DATA_DIR, and configuring the same OPENBROWSER_USER_DATA_DIR for multiple servers causes the profile lease to reject the second owner. Coordinate actions use CSS viewport pixels, not screenshot pixels, so screenshots with a non-1 devicePixelRatio require dividing coordinates by window.devicePixelRatio first.
How engineers can use it
Install with one of the documented methods. The zero-install route runs through uvx:
uvx openbrowser-ai --mcp
For local development, install from source:
git clone https://github.com/billy-enrizky/openbrowser-ai.git
cd openbrowser-ai
uv pip install -e ".[agent]"
The README documents a BrowserProfile for direct browser control (headless, viewport_width, proxy, record_video_dir) and a CodeAgent for LLM-driven tasks. Set provider keys via env vars (GOOGLE_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, etc.) and pick a model class like ChatGoogle(model="gemini-3-flash") or ChatAnthropic(model="claude-sonnet-4-6"). The CLI daemon supports one-shot code execution with uvx openbrowser-ai -c "await navigate('https://example.com')", with state persisting across calls until 10 minutes of inactivity. For full deployment and benchmark methodology, the README points to docs.openbrowser.me.