Technical Documentation: ntegrals/openbrowser
โน๏ธ Provenance: Multi-Tier Ingestion ยท CodeWiki Reference
Overview (`README.md`)
Open Browser
Give an AI agent a browser. It clicks, types, navigates, and extracts data โ autonomously completing tasks on any website. Built on Playwright with first-class support for OpenAI, Anthropic, and Google models.
Production-ready since v1.0. Contributions welcome.
Why Open Browser?
- Autonomous agents: Describe a task in natural language, and an AI agent navigates the web to complete it โ clicking, typing, scrolling, and extracting data without manual scripting
- Multi-model support: Works with OpenAI, Anthropic, and Google out of the box via the Vercel AI SDK โ swap models with a single flag
- Interactive REPL: Drop into a live browser session and issue commands interactively โ great for debugging, prototyping, and exploration
- Sandboxed execution: Run agents in resource-limited environments with CPU/memory monitoring, timeouts, and domain restrictions
- Production-ready: Stall detection, cost tracking, session management, replay recording, and comprehensive error handling
- Open source: MIT licensed, fully extensible, bring your own API keys
Quick Start
# Install dependencies
bun install
# Set up your API keys
cp .env.example .env
# Edit .env with your API keys
# Run an agent
bun run open-browser run "Find the top story on Hacker News and summarize it"
# Or open a browser interactively
bun run open-browser interactiveArchitecture
Open Browser is a monorepo with three packages:
| Package | Description |
|---|---|
open-browser |
Core library โ agent logic, browser control, DOM analysis, LLM integration |
@open-browser/cli |
Command-line interface for running agents and browser commands |
@open-browser/sandbox |
Sandboxed execution with resource limits and monitoring |
CLI Commands
Run an AI Agent
open-browser run <task> [options]Describe what you want done. The agent figures out the rest.
# Search and extract information
open-browser run "Find the price of the MacBook Pro on apple.com"
# Fill out forms
open-browser run "Sign up for the newsletter on example.com with [email protected]"
# Multi-step workflows
open-browser run "Go to GitHub, find the open-browser repo, and star it"| Option | Description |
|---|---|
-m, --model <model> |
Model to use (default: gpt-4o) |
-p, --provider |
Provider: openai, anthropic, google |
--headless / --no-headless |
Show or hide the browser window |
--max-steps <n> |
Max agent steps (default: 25) |
-v, --verbose |
Show detailed step info |
--no-cost |
Hide cost tracking |
Browser Commands
open-browser open <url> # Open a URL
open-browser click <selector> # Click an element
open-browser type <selector> <text> # Type into an input
open-browser screenshot [output] # Capture a screenshot
open-browser eval <expression> # Run JavaScript on the page
open-browser extract <goal> # Extract content as markdown
open-browser state # Show current URL, title, and tabs
open-browser sessions # List active browser sessionsInteractive REPL
open-browser interactiveDrop into a live browser> prompt with full control:
browser> open https://news.ycombinator.com
browser> extract "top 5 stories with titles and points"
browser> click .morelink
browser> screenshot front-page.png
browser> helpUsing as a Library
import { Agent, createViewport, createModel } from 'open-browser'
const viewport = await createViewport({ headless: true })
const model = createModel('openai', 'gpt-4o')
const agent = new Agent({
viewport,
model,
task: 'Go to example.com and extract the main heading',
settings: {
stepLimit: 50,
enableScreenshots: true,
},
})
const result = await agent.run()
console.log(result)Sandboxed Execution
Run agents with resource limits and monitoring:
import { Sandbox } from '@open-browser/sandbox'
const sandbox = new Sandbox({
timeout: 300_000, // 5 minute timeout
maxMemoryMB: 512, // Memory limit
allowedDomains: ['example.com'],
stepLimit: 100,
captureOutput: true,
})
const result = await sandbox.run({
task: 'Complete the checkout form',
model: languageModel,
})
console.log(result.metrics) // steps, URLs visited, CPU timeConfiguration
Environment Variables
# LLM Provider Keys (at least one required)
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_GENERATIVE_AI_API_KEY=...
# Browser
BROWSER_HEADLESS=true
BROWSER_DISABLE_SECURITY=false
# Recording & Debugging
OPEN_BROWSER_TRACE_PATH=./traces
OPEN_BROWSER_SAVE_RECORDING_PATH=./recordingsAgent Configuration
| Setting | Default | Description |
|---|---|---|
stepLimit |
100 |
Maximum agent iterations |
commandsPerStep |
10 |
Actions per agent step |
failureThreshold |
5 |
Consecutive failures before stopping |
enableScreenshots |
true |
Include page screenshots in agent context |
contextWindowSize |
128000 |
Token budget for conversation |
allowedUrls |
[] |
Restrict navigation to specific URLs |
blockedUrls |
[] |
Block navigation to specific URLs |
Viewport Configuration
| Setting | Default | Description |
|---|---|---|
headless |
true |
Run browser without visible window |
width / height |
1280 / 1100 |
Browser window dimensions |
relaxedSecurity |
false |
Disable browser security features |
proxy |
โ | Proxy server configuration |
cookieFile |
โ | Path to cookie file for persistent sessions |
How It Works
โโโโโโโโโโโโโโโ
"Book a flight" โ โ
โโโโโโโโโโโโโโโโบ โ Agent โ โโโ LLM (OpenAI / Anthropic / Google)
โ โ
โโโโโโโโฌโโโโโโโ
โ
โโโโโโโโผโโโโโโโ
โ Commands โ click, type, scroll, extract, navigate...
โโโโโโโโฌโโโโโโโ
โ
โโโโโโโโผโโโโโโโ
โ Viewport โ Playwright browser instance
โโโโโโโโฌโโโโโโโ
โ
โโโโโโโโผโโโโโโโ
โ DOM / Page โ Snapshot, interactive elements, content
โโโโโโโโโโโโโโโ- You describe a task in natural language
- The Agent sends the current page state + task to an LLM
- The LLM decides what commands to execute (click, type, navigate, extract...)
- Commands execute against the Viewport (Playwright browser)
- The agent observes the result, detects stalls, and loops until the task is complete
Model Support
| Provider | Example Models | Flag |
|---|---|---|
| OpenAI | gpt-4o, gpt-4o-mini, o1 |
-p openai |
| Anthropic | claude-sonnet-4-5-20250929, claude-opus-4-6 |
-p anthropic |
gemini-2.0-flash, gemini-2.5-pro |
-p google |
Project Structure
packages/
โโโ core/ # Core library (open-browser)
โ โโโ src/
โ โโโ agent/ # Agent logic, conversation, stall detection
โ โโโ commands/ # Action schemas and executor (25+ commands)
โ โโโ viewport/ # Browser control, events, guards
โ โโโ page/ # DOM analysis, content extraction
โ โโโ model/ # LLM adapter and message formatting
โ โโโ metering/ # Cost tracking
โ โโโ bridge/ # IPC server/client
โ โโโ config/ # Configuration types
โโโ cli/ # CLI (@open-browser/cli)
โ โโโ src/
โ โโโ commands/ # CLI command implementations
โ โโโ index.ts # Entry point
โโโ sandbox/ # Sandbox (@open-browser/sandbox)
โโโ src/
โโโ sandbox.ts # Resource-limited executionDevelopment
# Install dependencies
bun install
# Type check
bun run build
# Run tests
bun run test
# Lint
bun run lint
# Format
bun run formatContributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
License
--- METRICS ---
- Files Extracted: 1
- Estimated Token Budget: ~2474 tokens
- Canonical Reference: https://codewiki.google/github.com/ntegrals/openbrowser