Pagerunner — The Browser Layer That Learns

io.github.Enreign由 GitHub 帳號 Enreign 發布v0.8.0更新於 Oct 27, 2026

Real Chrome profiles with site intelligence — already logged in, PII anonymization, sessions persist

概覽

AI 產生的概覽

Chrome 瀏覽器自動化 MCP 伺服器,使用你現有的 Chrome 設定檔、Cookie 與登入狀態操作真實瀏覽器,並可選擇進行 PII 匿名化。

可以做什麼
  • 管理工作階段與分頁:列出設定檔,開啟、附加或關閉工作階段,新增與關閉分頁
  • 導覽與讀取頁面:前往網址、等待選擇器、取得可見文字、截圖、執行 JavaScript
  • 與頁面互動:點擊、輸入、以相容框架的事件填寫表單、選擇下拉選項、捲動頁面
  • 儲存與還原狀態:加密的 Cookie/localStorage 快照、分頁狀態以及完整工作階段檢查點
  • 儲存資料並檢視流量:持久化鍵值儲存,以及網路請求與主控台日誌
  • 網站智慧:檢視已學習的網站資訊,註冊並呼叫針對網站 API 的 JS 轉接器,從網路流量產生轉接器
適用情境
適合讓助理在你已登入的瀏覽器中操作:填寫表單、完成多步驟流程、擷取登入後才看得到的頁面,或用你的工作階段呼叫網站本身的 API。也適合在不同工作階段之間儲存與還原已驗證的分頁狀態。
執行需求
以 stdio 本機程序執行;README 提供 Homebrew、Cargo 或預先編譯二進位檔的安裝方式,而清單列出的是 npm 套件。需要安裝 Chrome 且至少有一個設定檔,並透過 init 指令初始化;註冊時必須加上 mcp 子指令。轉接器產生工具需要 ANTHROPIC_API_KEY。選用的 NER 人名辨識需另行建置功能並下載約 65MB 模型。macOS 選單列應用程式為選用項目。
安裝前請注意
它會以你真實的設定檔啟動 Chrome,助理因此能憑你的 Cookie、已儲存密碼與瀏覽紀錄操作,並可在真實網站上點擊、輸入與送出。偵測到的驗證權杖與 Cookie 會存入本機加密保管庫,轉接器可讀取。快照與檢查點會將工作階段狀態持久化到磁碟。隱匿模式會掩蓋自動化特徵,且你須自行遵守網站服務條款與資料保護法規。屬 v0.x 早期軟體,API 可能變動。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Pagerunner — The Browser Layer That Learns,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Pagerunner

[CI] [Release] [License: MIT] [Rust 1.91+]

A Chrome browser automation MCP server. Connect Claude (or any MCP client) to a real Chrome session — using your existing profiles with their cookies, saved passwords, and history.

[!WARNING] Pagerunner is early-stage software (v0.x). APIs and configuration formats may change between releases.

Contents

How it works

Pagerunner launches Chrome with your existing user profile via CDP (Chrome DevTools Protocol) and exposes it as an MCP server over stdin/stdout. Claude can then navigate, click, type, screenshot, and run JavaScript in the live browser.

Setup

1. Install

bash
# Option A — Homebrew (easiest on macOS/Linux):brew tap enreign/pagerunnerbrew install pagerunner
# Option B — Cargo (if you have Rust):cargo install pagerunner# Note: if you get "requires rustc 1.91+" despite having a newer Rust installed,# Homebrew's Rust may be shadowing rustup's. Fix: export PATH="$HOME/.cargo/bin:$PATH"
# Option C — Pre-built binary (no dependencies):
# macOS arm64 (Apple Silicon):curl -L https://github.com/Enreign/pagerunner/releases/latest/download/pagerunner-macos-arm64 \  -o pagerunner && chmod +x pagerunner
# macOS x86_64 (Intel):curl -L https://github.com/Enreign/pagerunner/releases/latest/download/pagerunner-macos-x86_64 \  -o pagerunner && chmod +x pagerunner
# Linux x86_64:curl -L https://github.com/Enreign/pagerunner/releases/latest/download/pagerunner-linux-x86_64 \  -o pagerunner && chmod +x pagerunner
# macOS: if Gatekeeper blocks the binary on first run:xattr -d com.apple.quarantine pagerunner
# Option B — install via cargo (requires Rust):cargo install --git https://github.com/Enreign/pagerunner --locked
# Option C — build locally:cargo build --release

2. Auto-detect Chrome profiles

bash
pagerunner init

This reads Chrome's profile list and writes ~/.pagerunner/config.toml automatically. Run pagerunner status to verify.

Alternatively, write ~/.pagerunner/config.toml by hand — see pagerunner example-config for the format.

3. Register as MCP server

bash
# If installed (Options A or B — binary is in PATH):claude mcp add pagerunner "$(which pagerunner)" mcp
# If built locally (Option C):claude mcp add pagerunner "$(pwd)/target/release/pagerunner" mcp

For Claude Desktop, add to ~/Library/Application Support/Claude/claude_desktop_config.json:

json
{  "mcpServers": {    "pagerunner": {      "command": "/absolute/path/to/pagerunner",      "args": ["mcp"]    }  }}

Note: The mcp subcommand is required — registering just the binary path without mcp will not work.

Note: Chrome locks profile directories. Close any Chrome window using a profile before opening a Pagerunner session on it.

4. Set up in your project (optional)

In any project directory with a CLAUDE.md or AGENTS.md:

bash
pagerunner init

Pagerunner prints a ready-to-use usage snippet and offers to append it to your project file automatically. For scripting: pagerunner init --json.

5. (Optional, --features ner builds only) Download the NER model

bash
pagerunner download-model   # ~65MB, enables PERSON/ORG name detection

Using with your project

Copy the example agent instructions into your project root so Claude (or any agent) immediately knows how to use Pagerunner:

bash
# Claude Code projects:curl -sL https://raw.githubusercontent.com/Enreign/pagerunner/main/docs/examples/CLAUDE.md -o CLAUDE.md
# Other agents (Gemini, Codex, etc.):curl -sL https://raw.githubusercontent.com/Enreign/pagerunner/main/docs/examples/AGENTS.md -o AGENTS.md

Or paste the content manually and extend it with project-specific instructions.

Using Pagerunner with Claude Code

For comprehensive guidance, workflows, and examples tailored to 4 different use cases, install the Pagerunner Skill:

bash
# Install the skill (once available in skills.sh registry)claude skill install pagerunner-skill

Or explore the skill repository directly: pagerunner-skill

The skill includes:

  • Quick starts for 4 ICPs: Solo Developer, Power User, Security-Conscious, Server-Side
  • 11 workflow patterns: form filling, authentication, scrolling, multi-step interactions
  • Complete reference: all 38 tools with parameters and examples
  • Security guide: PII anonymization, audit logging, encryption
  • Real-world examples: end-to-end workflows with error handling
  • Troubleshooting: common issues and solutions

Start with the skill's SKILL.md to find your use case and quick start path.

Tools

Sessions & tabs

ToolDescription
list_profilesList configured Chrome profiles
open_sessionLaunch Chrome for a profile, returns session_id
attach_sessionAttach to an existing Chrome instance via --remote-debugging-port
close_sessionKill a Chrome session
list_sessionsList active sessions
list_tabsList open tabs in a session
new_tabOpen a new tab, returns target_id
close_tabClose a specific tab

Navigation & content

ToolDescription
navigateNavigate a tab to a URL
wait_forWait for a CSS selector, URL pattern, or fixed delay
get_contentGet visible text content of a tab
screenshotCapture a tab as PNG (saved to temp file or inline base64)
evaluateRun JavaScript in a tab, returns the result

Interactions

ToolDescription
clickClick an element by CSS selector
type_textType text at the focused element or a given selector
fillSet input value with React/Vue/Angular synthetic events
selectChoose a dropdown option by value
scrollScroll the page by pixels or scroll an element into view

Snapshots & tab state

ToolDescription
save_snapshotSave current page cookies/localStorage to the encrypted DB
restore_snapshotRestore a saved snapshot into the current tab
list_snapshotsList saved snapshots (optionally across all profiles)
delete_snapshotDelete a saved snapshot
save_tab_stateSave all open tab URLs to the DB
restore_tab_stateReopen the previously saved tabs

Key-value store

ToolDescription
kv_setStore a value in a persistent namespace
kv_getRetrieve a value by key
kv_deleteDelete a key
kv_listList keys in a namespace (with optional prefix filter)
kv_clearDelete all keys in a namespace

Network & console

ToolDescription
get_network_logInspect HTTP requests captured in a session
get_console_logCapture JavaScript console output from a tab

Site intelligence

ToolDescription
get_site_knowledgeInspect what Pagerunner has learned about a site (adapters, auth tokens, selector health)
register_adapterStore a JS adapter for direct API calls against a site
call_site_apiExecute a stored adapter in the browser tab
generate_adapterAuto-generate a JS adapter from network traffic using Claude (requires ANTHROPIC_API_KEY)

Session checkpoints

ToolDescription
save_session_checkpointSave full tab state (URLs + scroll positions) for all tabs in a session
restore_session_checkpointReopen all saved tabs and navigate to stored URLs
list_session_checkpointsList saved checkpoints for a profile
delete_session_checkpointRemove a checkpoint by ID

Site Intelligence

Pagerunner learns about sites as you use them and can call site APIs directly using your session credentials — no separate auth setup required.

Adapters are short JS functions stored in the encrypted DB and executed in the browser tab. Use them to call APIs that a site exposes (typically the same API the web UI uses):

register_adapter(origin="https://github.com", name="list-issues",  description="List open issues for a repo",  js_code="async ({owner, repo}) => { const r = await fetch(...); return r.json() }")
call_site_api(session_id, target_id, origin="https://github.com",  name="list-issues", params={"owner": "Enreign", "repo": "pagerunner"})

Seed adapters for GitHub, Linear, Jira, Notion, and Gmail are built in.

Auth token detection — Bearer tokens, API keys, and session cookies discovered in network traffic are stored in the encrypted site vault. Adapters automatically have access to them via the credentials argument.

Selector stability — click, fill, and select track success/failure rates per selector. A fragility warning appears in the tool response when a selector fails >30% of the time over ≥5 uses.

Session Checkpoints

Save complete browser state (all open tabs with URLs and scroll positions) and restore it in any future session:

save_session_checkpoint(session_id, name="before-review")  → checkpoint_id: cp_abc123
restore_session_checkpoint(session_id, checkpoint_id="cp_abc123")  → reopens all saved tabs at their stored URLs

Checkpoints are stored in the encrypted DB and scoped to a profile.

macOS Menu Bar App

A native Swift companion app lives at apps/menubar/. It shows all Chrome profiles, active sessions, open tabs, and daemon status from the menu bar — no terminal required.

Features:

  • One-click open/close sessions and save checkpoints
  • Agent profiles shown with a distinct CPU icon in a separate section
  • Add Profile flow: discovers unconfigured Chrome profiles or creates new agent profiles
  • macOS native notifications: daemon stopped, session crashed, checkpoint saved
  • Global hotkey and auto-update via Sparkle 2.x

Build and run:

bash
pagerunner daemon &cd apps/menubarbash scripts/package.sh   # builds + bundles into scripts/Pagerunner.appopen scripts/Pagerunner.app

Anonymization (PII protection)

Pass anonymize: true to open_session to strip PII from all get_content and evaluate results before they reach Claude. Screenshots are blocked in anonymization mode.

json
{ "tool": "open_session", "profile": "personal", "anonymize": true }

Detected by default: EMAIL, PHONE, CREDIT_CARD, IBAN, SSN, IP With --features ner build: also detects PERSON and ORG names via a local ONNX model

Modes

  • tokenize (default): replaces PII with tokens like [EMAIL:a3f9b2]. Pass tokens back to fill/type_text — Pagerunner de-tokenizes before writing to the DOM.
  • redact: one-way replacement with [EMAIL] — no vault, no de-tokenization.

NER setup (PERSON and ORG name detection)

bash
# 1. Build with NER support:cargo build --release --features ner
# 2. Download the model (one-time, ~65MB):pagerunner download-model

Disable globally in ~/.pagerunner/config.toml:

toml
[ner]enabled = false

Stealth mode

Pass stealth: true to open_session to enable anti-detection: hides automation signals, injects scripts to mask navigator.webdriver, and adds human-like delays between inputs.

json
{ "tool": "open_session", "profile": "personal", "stealth": true }

Example session

open_session(profile="personal")          → session_id: abc123new_tab(session_id, url="https://...")    → target_id: TAB456get_content(session_id, target_id)        → "page text..."click(session_id, target_id, "#button")type_text(session_id, target_id, "hello", selector="#input")screenshot(session_id, target_id)         → "data:image/png;base64,..."close_session(session_id)

Daemon (multiple Claude Code sessions / persistent state)

By default each pagerunner mcp process opens the database directly — only one can run at a time. If you open Pagerunner in a second Claude Code window you'll hit a DB lock error.

Start the daemon once to share state across any number of sessions:

bash
pagerunner daemon &

Each pagerunner mcp instance automatically detects the daemon, connects to it over a Unix socket (~/.pagerunner/daemon.sock), and proxies all tool calls through it. All Claude Code windows share the same open browsers, KV store, and snapshots.

To stop:

bash
pkill -f "pagerunner daemon"

Install as a background service (starts at login, restarts on crash):

bash
./scripts/install-launchd.sh

The script detects your installed pagerunner binary automatically. Logs at ~/.pagerunner/daemon.log.

Note: After installing the daemon service, restart Claude Code. On the next launch, the daemon starts first (via launchd) and the MCP server connects to it in proxy mode. If Claude Code is already running when you install the daemon, you need two restarts: one to let launchd start the daemon, and one for the MCP server to reconnect to it.

Snapshots

Save authenticated browser state to the encrypted local DB:

save_snapshot(session_id, target_id, origin="https://github.com")

Restore it in any future session:

restore_snapshot(session_id, target_id, origin="https://github.com")

Snapshots are encrypted with AES-256-GCM. The key is stored in macOS Keychain under pagerunner / db_key — never written to disk in plaintext.

Legal & Responsible Use

Pagerunner automates a browser you own, using your own credentials. You are responsible for complying with the Terms of Service of any website you automate, applicable data protection laws (GDPR, CCPA), and authorized-access requirements (CFAA and equivalents).

Using anonymize: true is recommended for any workflow that involves processing personal data belonging to other people.

See DISCLAIMER.md for the full legal disclaimer, limitation of liability, and responsible use obligations.


If this project helps you, star the repo — it helps others find it.

來源:README.md,提交 1d22837

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.8.0最新Sep 16, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。