Pagerunner

The browser runtime forAI agents.

Runs locally. Learns from every session. Works with any LLM. Your agent gets a real browser — already logged in, privacy-focused, persistent.

Pagerunner — 4 agents · 18 sessions active
Claude Code
Cursor
Cline
OpenClaw
The problem

Two problems kill every agent workflow.

First, the login wall — headless browsers launch blank, hit MFA and CAPTCHAs, and break before the task starts. But the bigger problem? Mid-task failure with no recovery. Your agent completes 7 of 10 steps, hits an error, and restarts from scratch.

Standard approach Pagerunner
The login wall
SessionsLaunches blank, no cookiesOpens your real Chrome profile via CDP
Auth stateNo cookies, passwords, or historyInherits all saved credentials
Bot detectionMFA / CAPTCHA blocks itGenuine human browser fingerprint
ResultTask fails before it startsExecutes immediately, already authenticated
Mid-task failure
Step 7 failsRestart from step 1Resume from checkpoint at step 5
Browser stateLost — no saved stateTabs, cookies, localStorage preserved
Site changesCSS selectors break on redesignAdapters bridge to internal logic
ResultFragile, unreliable, can't recoverStable across redesigns, recoverable
How it works

Your agent. Three real workflows.

Not a mock. These are actual Pagerunner MCP calls with real Chrome, real auth, real results.

Dev loop
Morning standup
From your phone
Claude Code — Pagerunner MCP
chrome://newtab
profilework · 8 tabs screenshots2 taken re-logins0 tokens~180 vs ~2,000 (Computer Use) resultfix committed ✓
8:00am cron → Pagerunner MCP
chrome://newtab
trigger8:00am cron PII tokens4 replaced re-logins0 resultstandup posted to Slack ✓
WhatsApp → OpenClaw → Pagerunner
9:41●●●
skyscanner.com
triggerWhatsApp message stealthbot signals masked emailnever in LLM context resultLH4829-XK booked ✓
Engineered for every stage of adoption
⚙️
The AI Builder
Rapid prototyping.
  • Cares about Claude Code integration
  • Requires the full suite of 44 MCP tools
  • Relies on Site Intelligence adapters to bridge internal site logic
🛡️
Enterprise SecOps
Risk mitigation.
  • Mandates SSRF protection and prompt injection sanitization
  • Requires immutable audit logs for compliance review
  • Enforces strict domain allowlisting per agent session
The Local Power User
Daily workflow friction.
  • Uses the native macOS menu bar app
  • Relies on persistent Daemon mode — no terminal required
  • Leverages existing personal Chrome profiles effortlessly
01 / 05

Site Intelligence: beyond the DOM

Browser automation that relies only on clicking UI elements breaks every time a site ships a redesign. Site Intelligence lets agents bridge directly to the site's internal logic — bypassing clunky UI entirely or tracking which selectors are stable over time.

  • JS Adapters — use register_adapter and generate_adapter to bridge the agent directly to internal site logic
  • Direct API Invocation — bypass clunky UI with call_site_api for rapid, API-style execution inside the authenticated session
  • Resilience Tracking — built-in selector stability tracking so agents aren't broken by minor frontend UI updates
  • Auth token detection — automatically extracts tokens from the live DOM for authenticated API calls
site intelligence
# Generate an adapter from live page
generate_adapter({
  session: "work",
  url: "jira.company.com/issues"
})
# → adapter.js with stable selectors + API map
 
# Call internal site API directly
call_site_api({
  method: "GET",
  path: "/api/v2/users/data",
  session: "work"
})
Response: authenticated · 143ms
 
# Selector stability report
get_site_knowledge("jira.company.com")
14 selectors · 12 stable · 2 fragile
02 / 05

Checkpoints & state recovery

When your agent fails mid-task, it doesn't start over. Checkpoints save complete browser state — tabs, cookies, localStorage, scroll position — so agents resume from where they left off. Not from step one.

  • Auto-checkpoints — state saved continuously, no manual trigger needed
  • Named checkpoints — save at critical milestones with save_session_checkpoint
  • Full state capture — tabs, cookies, localStorage, scroll position, form data
  • Instant resumerestore_session_checkpoint picks up exactly where it stopped
  • No other browser MCP does this
checkpoint recovery flow
# Agent completes steps 1–5
save_session_checkpoint("after-step-5")
Checkpoint saved · 3 tabs · 12 cookies
 
# Step 6 fails — network timeout
navigate("app.company.com/submit")
Timeout after 30s
 
# Resume from checkpoint, not from scratch
restore_session_checkpoint("after-step-5")
Restored · 3 tabs · cookies · localStorage
 
# Retry step 6 only
navigate("app.company.com/submit")
Page loaded · 1.2s
03 / 05

Named profiles & encrypted snapshots

You log into GitHub, Jira, your staging environment once. Pagerunner saves the authenticated state — cookies, localStorage, session tokens — encrypted with AES-256-GCM, key stored in your macOS Keychain. Every agent call that follows starts already logged in.

  • Personal vs. agent profiles — keep your own browsing separate from automation
  • pagerunner init — auto-detects your Chrome profiles, creates config in 30 seconds
  • Snapshots on demand — save state at any point, restore to any previous checkpoint
  • Shared across tools — Claude Code, Cursor, and cron jobs all use the same profile
~/.pagerunner/config.toml
# Created by pagerunner init
 
[profiles.work]
kind = "personal"
chrome_profile = "Default"
 
[profiles.agent-jira]
kind = "agent"
allowed_domains = ["jira.company.com"]
anonymize = true
snapshot workflow
# One-time setup
pagerunner init --profile work
pagerunner snapshot --profile work
State saved · encrypted · 14 sites
 
# Every agent call after this:
open_session("work")
Chrome launched · all 14 sites authenticated
04 / 05

PII anonymization, locally

A local ONNX NER model runs on your machine before get_content() returns anything to the agent. Emails, names, phone numbers, SSNs, credit cards, and IBANs are replaced with reversible tokens. The LLM works with tokens instead of real data. No anonymization is 100% guaranteed — but it's a significant layer of protection that runs entirely on your machine.

  • Tokenize modejohn@co.com[EMAIL:a3f9], reversible via vault
  • Redact mode — one-way, john@co.com[EMAIL]
  • ONNX NER — local model detects PERSON and ORG names, never calls an API
  • Form fill de-tokenizes — pass [EMAIL:a3f9] to fill(), real value written to DOM
  • No other browser MCP does this
PII anonymization flow
# Enable for a session
open_session("agent-hr", {
  anonymize: true,
  anonymization_mode: "tokenize"
})
 
# Page contains: "Contact: alice@acme.com, +1 555 0100"
 
get_content()
# Agent receives:
# "Contact: [EMAIL:a3f9], [PHONE:b2c1]"
 
# Agent can write tokens back:
fill("#email", "[EMAIL:a3f9]")
alice@acme.com written to DOM
05 / 05

Daemon + persistent agent memory

One daemon process, multiple AI clients, persistent memory outside the LLM context window. Agents remember what they learned across sessions — login patterns, site behavior, task history — without re-discovering it every run.

  • Unix socket IPC — all MCP clients auto-discover the running daemon
  • Agent memory — persistent key-value store survives across sessions, agents, and restarts
  • AES-256-GCM encryption — key stored in macOS Keychain, persists across restarts
  • macOS menu bar — see active sessions, browse KV store, view audit log
  • Runs unattended — start in the morning, agents run all day
multi-agent coordination
# Start once
pagerunner daemon &
Daemon started · socket: ~/.pagerunner/daemon.sock
 
# Claude Code agent stores a result
kv_set("standup", "2026-03-21", data)
 
# Cursor agent reads it
kv_get("standup", "2026-03-21")
Data retrieved across MCP clients
 
# Cron job uses the same session
pagerunner kv-get standup 2026-03-21
Same store, CLI or MCP
0
MCP Tools
0
CLI subcommands
AES-256-GCM
Encrypted state
1–2s
Action latency
Free
Open source
Daemon mode

The "Always-On" persistence loop.

Start once. Run all day. Sessions survive restarts, context survives across Claude windows.

STEP 01
Daemon Mode

A background service initializes, sharing one browser state across multiple Claude Code windows and MCP clients simultaneously.

STEP 02
Auto-Checkpoints

Pagerunner continuously saves the complete browser state — tabs, cookies, localStorage — so nothing is lost between agent interactions.

STEP 03
TCP Auto-Reattach

If the daemon restarts, the system automatically reattaches to the active session via TCP without losing context or requiring manual reconnection.

STEP 04
Native Menu Bar

Manage sessions, control checkpoints, and monitor the daemon entirely from a native Swift companion app — no terminal window required.

Who uses it

Every team has a browser problem.

Pagerunner is how they solve it — without writing scrapers, managing auth, or babysitting headless Chrome.

Engineer
Frontend verification loop

Edit CSS, navigate, screenshot, compare to design spec — without touching the browser yourself. Agent closes the loop.

navigate("localhost:3000") → screenshot()
Product Manager
Competitive intelligence

Track competitor pricing, feature pages, and changelog on a schedule. Morning briefing, automatically compiled.

navigate(competitor) → get_content() → kv_set()
Designer
Visual regression on every PR

Screenshot feature branches at 375px, 768px, 1440px. Pixel-diff against baseline. Flag regressions before merge.

screenshot() · --viewport 375x812
Growth
SEO rank monitoring

Track your rankings and competitors'. Surface ranking drops before they hurt traffic. No third-party SaaS required.

navigate(serp) → get_content()
Security Team
Privacy-focused web automation

Legal, HR, finance workflows where PII can't reach an external LLM. Local ONNX NER + token vault makes it possible.

get_content({ anonymize: true, mode: "tokenize" })
DevOps / SRE
Admin console runbooks

Queue depths, error counts, certificate expiry — read from dashboards that have no API. Screenshot for audit trail.

navigate(admin) → get_content() → screenshot()
Sales
Pre-call account research

Website, LinkedIn, Crunchbase, press in 2 minutes before every call. Agent reads, synthesizes, CRM field updated.

navigate(prospect) → get_content() → fill(crm)
Founder
Morning intelligence brief

Revenue, support queue, competitor mentions, PR status — all pulled, summarized, waiting in Slack at 8am.

open_session("agent") → kv_set("brief", data)
Security

The zero-trust security shield.

Three layers of protection around your Chrome profile and credentials. Browser automation without guardrails is dangerous — Pagerunner ships with controls most tools never considered.

SSRF protection

Blocks navigation to private IPs (RFC1918), loopback, file://, javascript:, and embedded-credential URLs. An agent can't be tricked into leaking internal resources.

file://, 127.0.0.1, 192.168.x.x → blocked
🧹
Prompt injection sanitization

Strips hidden elements (display:none, visibility:hidden), HTML tags, and zero-width Unicode characters from page content before it reaches the agent.

Hidden text injection → removed before LLM sees it
🔒
AES-256-GCM encrypted state

All session snapshots and KV store data encrypted at rest. Encryption key stored in macOS Keychain. On Linux, set PAGERUNNER_DB_KEY env var.

Key in Keychain · AES-256-GCM · ReDB storage
📋
Append-only audit log

Every tool call logged to ~/.pagerunner/audit.log with timestamp, tool name, session, and result. File permissions 0600. Cannot be modified retroactively.

~/.pagerunner/audit.log · 0600 · append-only
🏔️
Domain allowlisting

Restrict any session to an explicit list of domains. An agent running a Jira automation can't navigate to Stripe or your internal admin console, even if instructed to.

allowed_domains: ["jira.company.com"]
Snapshot integrity verification

Before restoring a saved snapshot, Pagerunner verifies the origin matches. A snapshot saved for github.com cannot be injected into a different origin.

Origin checked before cookies injected

For Enterprise SecOps: enforceable guardrails.

Responsible Automation: The anonymize: true flag ensures workflows processing third-party data never leak PII to external LLM providers. GDPR/CCPA compliance without re-engineering your agent.

Blast Radius Containment: Domain allowlisting and SSRF protections prevent autonomous agents from pivoting into internal corporate networks or unauthorized applications — even if the agent is given malicious instructions.

config.toml — SecOps profile
[profiles.agent-finance]
kind = "agent"
 
[profiles.agent-finance.security]
allowed_domains = [
  "internal.corp",
  "api.partner.com"
]
ssrf_protection = true
anonymize_pii = true
audit_log = true
 
# Blocks RFC1918, loopback, file://, javascript:
# PII stripped before LLM · every call logged
How it stacks up

The honest comparison.

Most browser tools were built for testing. Pagerunner was built for agents.

Capability Pagerunner Computer Use Playwright MCP agent-browser Browserbase
Action latency1–2s30–60s1–3s1–2s2–5s
Tokens per action50–200~2,00050–20050–20050–200
Persistent auth✓ Encrypted snapshots✗ Re-login every run~ Session only✓ Auth vault~ Managed sessions
Checkpoint / recovery✓ Resume from checkpoint
Site adapters✓ Stable across redesigns
PII anonymization✓ Local ONNX NER
Daemon + KV store✓ Shared across clients✓ Basic
CLI parity✓ All 44 tools
Bot detection bypass✓ Stealth mode✗ Blocked frequently~ Headless tells~ Basic~ Cloud IP
SSRF protection✓ RFC1918 blocked~ Network isolation
Audit log✓ Append-only~ Cloud logs
Data locality✓ Never leaves machine✗ To Anthropic cloud✓ Local✓ Local✗ Cloud execution
CostFree · Open sourceUsage-basedFreeFree$20–$99/mo

agent-browser has recently added auth vault and basic daemon support. It still doesn't strip PII or protect against SSRF.  ·  Browserbase is the right choice for 100+ parallel sessions. For developer-scale work, local + free wins.

More comparisons: vs Browser Use  ·  vs Chrome DevTools MCP  ·  vs Project Mariner

Get started in 60 seconds

Your agent is waiting.

Pick your client. Copy. Paste. Done.

Claude Code
Cursor
Windsurf
bash
# 1. Install
brew install enreign/tap/pagerunner
 
# 2. Register with Claude Code
claude mcp add pagerunner -- pagerunner mcp
 
# 3. Create a profile (Chrome opens — log in to your sites)
pagerunner init --profile work
 
# 4. Snapshot your auth state
pagerunner snapshot --profile work
 
# 5. Tell Claude to use it
echo "Use pagerunner MCP for browser tasks" >> CLAUDE.md
.cursor/mcp.json
# First: brew install enreign/tap/pagerunner
 
{
  "mcpServers": {
    "pagerunner": {
      "command": "pagerunner",
      "args": ["mcp"]
    }
  }
}
~/.codeium/windsurf/mcp_config.json
# First: brew install enreign/tap/pagerunner
 
{
  "mcpServers": {
    "pagerunner": {
      "command": "pagerunner",
      "args": ["mcp"]
    }
  }
}
FAQ

Frequently Asked Questions

What is Pagerunner?

A browser automation MCP server that gives your AI coding agent a real Chrome browser. Your agent can navigate, screenshot, click, fill forms, and read content from pages you're already logged into. It runs on your machine, learns from every session through site adapters, and works with any MCP-compatible AI tool.

Is Pagerunner free?

Yes. Pagerunner is free and open source under the Apache-2.0 license. No subscription, no usage limits, no API keys required.

What AI tools does it work with?

Any MCP-compatible client: Claude Code, Cursor, Windsurf, Codex CLI, OpenClaw, Gemini CLI, and more. Pagerunner is LLM-agnostic — it's a browser runtime, not tied to any specific AI provider.

Does my data leave my machine?

Pagerunner itself runs entirely locally — your browser sessions, profiles, cookies, and stored state never leave your machine. However, page content your agent reads is sent to whatever LLM you're using (Claude, GPT, etc.). If you enable PII anonymization, Pagerunner strips sensitive data before it reaches the model, but no anonymization is 100% guaranteed. If you're working with sensitive data and using cloud models, review what your agent sees carefully.

How is it different from Computer Use?

Computer Use takes screenshots and clicks pixels. Pagerunner reads the DOM directly via Chrome DevTools Protocol. For browser-specific tasks, this means sub-second actions (vs 30-60s per screenshot), no token cost for screenshots, and reliable CSS selectors instead of pixel coordinates. Computer Use is better for native desktop apps — Pagerunner is better for everything in a browser.

How is it different from Playwright MCP?

Playwright MCP is great testing infrastructure adapted for AI. Pagerunner was built for AI agents from the start. The key difference: Pagerunner learns from usage through site adapters and selector tracking, so it gets better over time. Playwright persists cookies — Pagerunner compounds knowledge. Playwright supports cross-browser (Firefox, WebKit); Pagerunner is Chrome-only.

What does "learns from every session" mean?

Pagerunner builds site knowledge over time. It tracks which CSS selectors work reliably on each site, discovers API endpoints, and lets you register site adapters — structured rules for interacting with specific sites. This means your agent gets more reliable and efficient the more you use it, instead of starting from scratch every time.

Do I need a daemon running?

No. The simplest setup is just the MCP server — your AI client launches it on demand. The daemon is optional and adds shared state between clients, session persistence across restarts, multi-agent coordination, and cron scheduling. Start without it, add it when you need it.

Does it work with sites that have bot detection?

Yes. Pagerunner uses a real Chrome browser (not headless) with your actual browser fingerprint. Stealth mode further reduces automation signals. Because it uses your real profiles with existing cookies and history, most sites treat it as a normal browser session.

What operating systems are supported?

macOS is the primary platform. Linux support is available but some features (menu bar app, Keychain-backed secrets) are macOS-specific. Windows support is planned.

Give any AI agent a browser
on your machine, not theirs.

The browser runtime for AI agents. Runs locally. Learns from every session. Works with any LLM.
Free forever. Open source.

Responsible Use: You are responsible for complying with the Terms of Service of any website you automate and applicable data protection laws. Run your browser responsibly.