Pagerunner — The Browser Layer That Learns について
Pagerunnerは、既存のChromeプロファイルを使って実ブラウザーを操作する、エージェント向けの自動化MCPサーバーです。セッション状態の保存、サイトアダプター、任意の個人情報匿名化を備えています。
主な機能
- 01ページ移動と操作の自動化
- 02既存のChromeプロファイルとセッションの利用
- 03スナップショットとチェックポイントの保存・復元
- 04保存済みアダプターによるサイトAPI呼び出し
- 05返却コンテンツ内の個人情報の匿名化
活用シーン
- 01ログイン済みブラウザーワークフローの自動化
- 02ブラウザーセッションをまたいだ作業の再開
- 03エージェントの結果に含まれる個人情報の低減
MCP 対応
Pagerunnerは標準入力/出力を通じて、ブラウザーセッションと操作機能をMCPツールとして公開します。MCPクライアントはChromeの起動または接続、ページの確認と操作、保存状態の管理を行えます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Pagerunner
Chrome ブラウザー自動化用の MCP サーバーです。Claude(または任意の MCP クライアント)を実際の Chrome セッションに接続し、Cookie、保存済みパスワード、履歴を含む既存のプロフィールを使用します。
警告
Pagerunner は開発初期段階のソフトウェアです(v0.x)。リリース間で API や設定形式が変更される可能性があります。
目次
- 仕組み
- セットアップ
- プロジェクトでの使用
- ツール
- サイトインテリジェンス
- セッションチェックポイント
- macOS メニューバーアプリ
- 匿名化(PII 保護)
- ステルスモード
- デーモン(複数の Claude Code セッション/永続状態)
- スナップショット
- セッション例
- 法的事項と責任ある使用
仕組み
Pagerunner は CDP(Chrome DevTools Protocol)を使用して既存のユーザープロフィールで Chrome を起動し、標準入力/標準出力経由で MCP サーバーとして公開します。これにより Claude は、実行中のブラウザーでページの移動、クリック、入力、スクリーンショットの撮影、JavaScript の実行を行えます。
セットアップ
1. インストール
# Option A — Homebrew (easiest on macOS/Linux):
brew tap enreign/pagerunner
brew 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. Chrome プロフィールを自動検出
pagerunner init
Chrome のプロフィール一覧を読み取り、~/.pagerunner/config.toml に自動的に書き込みます。
pagerunner status を実行して確認してください。
または、~/.pagerunner/config.toml を手動で作成してください。形式については pagerunner example-config を参照してください。
3. MCP サーバーとして登録
# 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
Claude Desktop の場合は、~/Library/Application Support/Claude/claude_desktop_config.json に追加してください。
{
"mcpServers": {
"pagerunner": {
"command": "/absolute/path/to/pagerunner",
"args": ["mcp"]
}
}
}
注:
mcpサブコマンドが必要です。mcpを指定せず、バイナリのパスだけを登録しても動作しません。注: Chrome はプロフィールディレクトリをロックします。Pagerunner セッションでプロフィールを開く前に、そのプロフィールを使用している Chrome ウィンドウをすべて閉じてください。
4. プロジェクトでセットアップ(任意)
CLAUDE.md または AGENTS.md がある任意のプロジェクトディレクトリで、次を実行します。
pagerunner init
Pagerunner はすぐに使える使用方法のスニペットを表示し、プロジェクトファイルへの自動追記を提案します。スクリプトから実行する場合は pagerunner init --json を使用してください。
5. (任意、--features ner ビルドのみ)NER モデルをダウンロード
pagerunner download-model # ~65MB, enables PERSON/ORG name detection
プロジェクトでの使用
エージェントへの指示の例をプロジェクトのルートにコピーして、Claude(または任意のエージェント)が Pagerunner の使い方をすぐに把握できるようにします。
# 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
または、内容を手動で貼り付け、プロジェクト固有の指示を追加してください。
Claude Code での Pagerunner の使用
4 つの異なるユースケースに合わせた包括的なガイダンス、ワークフロー、例を利用するには、Pagerunner Skill をインストールしてください。
# Install the skill (once available in skills.sh registry)
claude skill install pagerunner-skill
スキルリポジトリを直接確認することもできます:pagerunner-skill
スキルには次の内容が含まれています。
- 4 つの ICP 向けクイックスタート: 個人開発者、パワーユーザー、セキュリティ重視、サーバーサイド
- 11 種類のワークフローパターン: フォーム入力、認証、スクロール、複数ステップの操作
- 完全なリファレンス: 38 個すべてのツールとパラメーター、使用例
- セキュリティガイド: PII の匿名化、監査ログ、暗号化
- 実例: エラー処理を含むエンドツーエンドのワークフロー
- トラブルシューティング: よくある問題と解決策
まずスキルの SKILL.md を確認して、ユースケースとクイックスタートの手順を見つけてください。
ツール
セッションとタブ
| ツール | 説明 |
|---|---|
list_profiles | 設定済みの Chrome プロファイルを一覧表示します |
open_session | プロファイルで Chrome を起動し、session_id を返します |
attach_session | --remote-debugging-port を使用して既存の Chrome インスタンスに接続します |
close_session | Chrome セッションを終了します |
list_sessions | アクティブなセッションを一覧表示します |
list_tabs | セッション内の開いているタブを一覧表示します |
new_tab | 新しいタブを開き、target_id を返します |
close_tab | 指定したタブを閉じます |
ナビゲーションとコンテンツ
| ツール | 説明 |
|---|---|
navigate | タブを URL に移動します |
wait_for | CSS セレクター、URL パターン、または指定した時間を待ちます |
get_content | タブに表示されているテキストコンテンツを取得します |
screenshot | タブを PNG としてキャプチャします(一時ファイルへの保存、またはインライン base64) |
evaluate | タブ内で JavaScript を実行し、結果を返します |
操作
| ツール | 説明 |
|---|---|
click | CSS セレクターで要素をクリックします |
type_text | フォーカスされている要素、または指定したセレクターにテキストを入力します |
fill | React/Vue/Angular の合成イベントを使って入力値を設定します |
select | 値を指定してドロップダウンのオプションを選択します |
scroll | ページをピクセル単位でスクロールするか、要素が表示領域に入るまでスクロールします |
スナップショットとタブの状態
| ツール | 説明 |
|---|---|
save_snapshot | 現在のページの Cookie/localStorage を暗号化 DB に保存します |
restore_snapshot | 保存済みのスナップショットを現在のタブに復元します |
list_snapshots | 保存済みのスナップショットを一覧表示します(すべてのプロファイルを対象にすることもできます) |
delete_snapshot | 保存済みのスナップショットを削除します |
save_tab_state | 開いているすべてのタブの URL を DB に保存します |
restore_tab_state | 以前に保存したタブを再度開きます |
キーと値のストア
| ツール | 説明 |
|---|---|
kv_set | 値を永続的な名前空間に保存します |
kv_get | キーを指定して値を取得します |
kv_delete | キーを削除します |
kv_list | 名前空間内のキーを一覧表示します(プレフィックスによる絞り込みも指定できます) |
kv_clear | 名前空間内のすべてのキーを削除します |
ネットワークとコンソール
| ツール | 説明 |
|---|---|
get_network_log | セッションでキャプチャされた HTTP リクエストを確認します |
get_console_log | タブの JavaScript コンソール出力をキャプチャします |
サイトインテリジェンス
| ツール | 説明 |
|---|---|
get_site_knowledge | Pagerunner がサイトについて学習した内容(アダプター、認証トークン、セレクターの状態)を確認します |
register_adapter | サイトへの直接 API 呼び出し用の JS アダプターを保存します |
call_site_api | 保存済みのアダプターをブラウザータブ内で実行します |
generate_adapter | Claude を使ってネットワークトラフィックから JS アダプターを自動生成します(ANTHROPIC_API_KEY が必要です) |
セッションのチェックポイント
| ツール | 説明 |
|---|---|
save_session_checkpoint | セッション内のすべてのタブの状態(URL とスクロール位置)を保存します |
restore_session_checkpoint | 保存済みのすべてのタブを再度開き、保存された URL に移動します |
list_session_checkpoints | プロファイルの保存済みチェックポイントを一覧表示します |
delete_session_checkpoint | ID を指定してチェックポイントを削除します |
サイトインテリジェンス
Pagerunner は使用するにつれてサイトについて学習し、セッションの認証情報を使ってサイト API を直接呼び出せます。別途認証を設定する必要はありません。
アダプターは暗号化 DB に保存され、ブラウザータブ内で実行される短い JS 関数です。サイトが公開している API(通常はウェブ UI が使用するものと同じ API)の呼び出しに使用します。
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"})
GitHub、Linear、Jira、Notion、Gmail 用のアダプターが標準で組み込まれています。
認証トークンの検出 — ネットワークトラフィックから検出された Bearer トークン、API キー、セッション Cookie は、暗号化されたサイトの保管庫に保存されます。アダプターは credentials 引数を通じて自動的にこれらを利用できます。
セレクターの安定性 — click、fill、select はセレクターごとの成功率/失敗率を記録します。5 回以上使用したセレクターで失敗率が 30% を超えると、ツールの応答に脆弱性の警告が表示されます。
セッションのチェックポイント
開いているすべてのタブの URL とスクロール位置を含む完全なブラウザー状態を保存し、今後のセッションで復元できます。
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
チェックポイントは暗号化された DB に保存され、プロファイルごとに管理されます。
macOS メニューバーアプリ
ネイティブの Swift コンパニオンアプリが apps/menubar/ にあります。メニューバーからすべての Chrome プロファイル、アクティブなセッション、開いているタブ、デーモンの状態を確認できます。ターミナルは不要です。
機能:
- ワンクリックでセッションを開閉し、チェックポイントを保存
- エージェントプロファイルを、専用セクションに異なる CPU アイコンで表示
- プロファイルの追加フロー:未設定の Chrome プロファイルを検出するか、新しいエージェントプロファイルを作成
- macOS ネイティブ通知:デーモンの停止、セッションのクラッシュ、チェックポイントの保存
- グローバルホットキーと Sparkle 2.x による自動更新
ビルドと実行:
pagerunner daemon &
cd apps/menubar
bash scripts/package.sh # builds + bundles into scripts/Pagerunner.app
open scripts/Pagerunner.app
匿名化(PII 保護)
open_session に anonymize: true を渡すと、get_content と evaluate のすべての結果から PII が除去されてから Claude に渡されます。匿名化モードではスクリーンショットがブロックされます。
{ "tool": "open_session", "profile": "personal", "anonymize": true }
デフォルトで検出される項目: EMAIL、PHONE、CREDIT_CARD、IBAN、SSN、IP
--features ner でビルドした場合: ローカルの ONNX モデルを使って PERSON と ORG の名前も検出します
モード
- tokenize(デフォルト):PII を
[EMAIL:a3f9b2]のようなトークンに置き換えます。トークンをfill/type_textに渡すと、Pagerunner が DOM に書き込む前にトークンを元に戻します。 - redact:一方向に
[EMAIL]へ置き換えます。ボールトは使用せず、トークンを元に戻すこともできません。
NER のセットアップ(PERSON と ORG の名前検出)
# 1. Build with NER support:
cargo build --release --features ner
# 2. Download the model (one-time, ~65MB):
pagerunner download-model
~/.pagerunner/config.toml でグローバルに無効化します:
[ner]
enabled = false
ステルスモード
open_session に stealth: true を渡すと、検出対策が有効になります。自動化のシグナルを隠し、navigator.webdriver を偽装するスクリプトを挿入し、入力の間に人間らしい遅延を加えます。
{ "tool": "open_session", "profile": "personal", "stealth": true }
セッションの例
open_session(profile="personal") → session_id: abc123
new_tab(session_id, url="https://...") → target_id: TAB456
get_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)
デーモン(複数の Claude Code セッション/永続状態)
デフォルトでは、各 pagerunner mcp プロセスがデータベースを直接開くため、同時に実行できるのは 1 つだけです。2 つ目の Claude Code ウィンドウで Pagerunner を開くと、DB ロックエラーが発生します。
デーモンを一度起動すれば、任意の数のセッション間で状態を共有できます:
pagerunner daemon &
各 pagerunner mcp インスタンスはデーモンを自動的に検出し、Unix ソケット(~/.pagerunner/daemon.sock)経由で接続して、すべてのツール呼び出しをデーモン経由で中継します。すべての Claude Code ウィンドウで、同じ開いているブラウザー、KV ストア、スナップショットを共有できます。
停止するには:
pkill -f "pagerunner daemon"
バックグラウンドサービスとしてインストール(ログイン時に起動し、クラッシュ時に再起動):
./scripts/install-launchd.sh
スクリプトはインストール済みの pagerunner バイナリを自動的に検出します。ログは ~/.pagerunner/daemon.log に保存されます。
注: デーモンサービスのインストール後は、Claude Code を再起動してください。次回の起動時には、デーモンが先に起動し(launchd 経由)、MCP サーバーがプロキシモードで接続します。デーモンのインストール時に Claude Code がすでに実行中の場合、再起動が 2 回必要です。1 回目で launchd にデーモンを起動させ、2 回目で MCP サーバーをデーモンに再接続します。
スナップショット
認証済みのブラウザー状態を暗号化されたローカル DB に保存します:
save_snapshot(session_id, target_id, origin="https://github.com")
今後のセッションで復元できます:
restore_snapshot(session_id, target_id, origin="https://github.com")
スナップショットは AES-256-GCM で暗号化されます。キーは macOS Keychain の pagerunner / db_key に保存され、平文でディスクに書き込まれることはありません。
法的事項と責任ある利用
Pagerunner は、お客様が所有するブラウザーを、お客様自身の認証情報を使って自動化します。自動化するウェブサイトの利用規約、適用されるデータ保護法(GDPR、CCPA)、および認可されたアクセスに関する要件(CFAA および同等の法律)を遵守する責任はお客様にあります。
他者の個人データを処理するワークフローでは、anonymize: true の使用を推奨します。
法的免責事項、責任の制限、責任ある利用に関する義務の全文は、DISCLAIMER.md をご覧ください。
このプロジェクトがお役に立った場合は、リポジトリにスターを付けてください。ほかの人が見つけやすくなります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。