Chrome 拡張機能と CLI で、エージェントがあなたの実際のブラウザを操作 — ログイン状態、拡張機能、Cookie がすでに利用可能。ヘッドレスインスタンス不要、ボット検出なし、余分なメモリ消費なし。GitHub で Star

他のブラウザ MCP は新しい Chrome を起動します — ログインなし、拡張機能なし、即座にボット検出、メモリ2倍消費。RunBrowser は実行中のブラウザに接続します。Chrome 拡張機能1つで、完全な CDP アクセス、すでにログイン済みのすべてのサイトにアクセス可能。

はじめに

3ステップでエージェントがブラウジングを開始。

  1. CLI をインストール:
npm i -g @jiweiyuan/runbrowser
  1. Chrome に拡張機能をロード:chrome://extensions/ を開き、デベロッパーモードを有効化、パッケージ化されていない拡張機能を読み込むをクリック、packages/extension/dist フォルダを選択

  2. タブの拡張機能アイコンをクリック — 緑色に変わります。使い始めましょう:

runbrowser navigate https://example.com runbrowser snapshot runbrowser click @e5

セッション管理は不要 — 最初のコマンドでセッションが自動作成されます。拡張機能がブラウザを localhost:19988 のローカル WebSocket リレーに接続します。CLI がリレーを通じて CDP コマンドを送信。リモートサーバーなし、アカウント不要。

skill もインストールしましょう — エージェントに RunBrowser の使い方を教えます:

npx -y skills add runbrowser/runbrowser

拡張機能アイコン 緑 = 接続済み。グレー = このタブに未接続。

仕組み

タブの拡張機能アイコンをクリック — chrome.debugger で接続し、ローカルリレーへの WebSocket を開きます。エージェント(CLI または MCP)が同じリレーに接続。CDP コマンドが拡張機能を通じて直接 Chrome に流れます — Playwright なし、中間層なし。

┌─────────────────────┐ ┌──────────────────────┐ ┌─────────────────┐ │ BROWSER │ │ LOCALHOST │ │ CLIENT │ │ │ │ │ │ │ │ ┌───────────────┐ │ │ WebSocket Server │ │ ┌───────────┐ │ │ │ Extension │<───────┬───> :19988 │ │ │ CLI / MCP │ │ │ └───────┬───────┘ │ WS │ │ │ └───────────┘ │ │ │ │ │ /extension │ │ │ │ │ chrome.debugger │ │ │ │ │ v │ │ v │ │ v │ │ ┌────────────┐ │ │ ┌───────────────┐ │ │ CDPExecutor │ │ │ HTTP API │ │ │ │ Tab 1 (green) │ │ │ (direct CDP) │ │ │ /api/* │ │ │ │ Tab 2 (green) │ │ └──────────────────────┘ │ └────────────┘ │ │ │ Tab 3 (gray) │ │ │ │ └─────────────────────┘ Tab 3 not controlled └─────────────────┘

リレーはセッションを多重化するため、複数のエージェントや CLI インスタンスが同時にブラウザを操作可能。すべてのブラウザコマンドは CDP で直接実行 — Playwright 依存なし。

コラボレーション

エージェントがあなたのブラウザで動作するため、コラボレーションが可能。すべてをリアルタイムで確認 — クリックごとにターゲット要素に緑のハイライトが表示され、コマンドごとに微妙なボーダーの光が点滅。CAPTCHA が出たらあなたが解決。Cookie 同意が出たら、クリックして通過。エージェントが詰まったら、そのタブで拡張機能を無効化、手動で修正、再度有効化すれば、エージェントは中断したところから再開。

リモート画面を見ているのでも、事後にログを読んでいるのでもない。ブラウザを共有しているのです。

アクセシビリティスナップショット

エージェントは操作前にページを見る必要があります。アクセシビリティスナップショットは、すべてのインタラクティブ要素をテキストで返し、@ref ラベルが付きます。スクリーンショットの 100KB+ に対して 5~20KB — 安価、高速、ビジョンなしで解析可能。

runbrowser snapshot # 出力: # - banner: # - link "Home" @e1 # - navigation: # - link "Docs" @e2 # - link "Blog" @e3 # - main: # - heading "Welcome" @e4 # - button "Get started" @e5

各行の @ref をコマンドに直接渡せます。スナップショットをページを読む主要な方法として使用。

# スナップショットの ref でインタラクション runbrowser click @e5 runbrowser fill @e3 "検索キーワード" runbrowser get text @e4 # インタラクティブ要素のみフィルタ runbrowser snapshot -i # CSS セレクタでスコープ runbrowser snapshot -S "main"

CLI コマンド

RunBrowser はカテゴリ別に整理された 50+ コマンドを提供。すべてのコマンドが --json 出力と自動セッション作成をサポート。

# ナビゲーション runbrowser navigate https://example.com runbrowser back runbrowser forward runbrowser reload runbrowser close # 観察 runbrowser snapshot # @refs 付きアクセシビリティツリー runbrowser snapshot -i # インタラクティブ要素のみ runbrowser screenshot shot.png # スクリーンショット保存 runbrowser get url # 現在の URL runbrowser get title # ページタイトル runbrowser get text @e5 # 要素のテキスト runbrowser is visible @e5 # 要素状態チェック # インタラクション runbrowser click @e5 # 要素クリック runbrowser fill @e3 "hello world" # 入力フィールドクリア+入力 runbrowser type "検索キーワード" # 現在のフォーカスでタイプ runbrowser press Enter # キー押下 runbrowser select @e5 "option-value" # ドロップダウン選択 runbrowser check @e5 # チェックボックス runbrowser scroll down # スクロール runbrowser hover @e5 # ホバー runbrowser viewport 1280 720 # ビューポートサイズ設定 # 待機条件 runbrowser wait @e5 # 要素が表示されるまで待機 runbrowser wait 2000 # ミリ秒待機 runbrowser wait --text "Welcome" # テキスト出現待機 # セマンティックロケーター runbrowser find role button click --name "Submit" runbrowser find text "ログイン" click # タブ&フレーム管理 runbrowser tab list runbrowser tab new https://example.com runbrowser frame "iframe#embed" runbrowser frame main # 実行 runbrowser eval 'document.title' # ブラウザで JS 実行 runbrowser cdp Page.captureScreenshot '{}' # 生の CDP コマンド

ホットパスにはフラットコマンド。管理にはサブグループ。eval はその他すべて。

サイトコマンド

任意のウェブサイトを CLI コマンドに変換。サイトコマンドは TypeScript プラグインで、ナビゲーション、スクレイピング、データ抽出を再利用可能なコマンドにカプセル化。1つのコマンドで構造化 JSON を取得。

# GitHub トレンドリポジトリを構造化データとして取得 runbrowser github trending --limit 5 # RANK NAME STARS LANGUAGE # --- ---- ----- -------- # 1 denoland/deno 5.2k Rust # 2 tauri-apps/tauri 3.8k Rust # エージェント向け JSON 出力 runbrowser github trending --limit 3 --json

~/.runbrowser/commands/.ts ファイルを置くだけでカスタムコマンドを作成。TypeScript、IDE サポート完備。

// ~/.runbrowser/commands/github/trending.ts export const description = 'GitHub trending repositories' export const columns = ['rank', 'name', 'stars', 'language'] export const args = { limit: { type: 'number', default: 20, description: 'Number of items' }, } export async function run(ctx, args) { await ctx.navigate('https://github.com/trending') const data = await ctx.evaluate(` [...document.querySelectorAll('article.Box-row')].map(el => ({ name: el.querySelector('h2 a')?.textContent?.trim(), stars: el.querySelector('.octicon-star')?.parentElement?.textContent?.trim(), language: el.querySelector('[itemprop="programmingLanguage"]')?.textContent?.trim(), })) `) return data.slice(0, args.limit).map((item, i) => ({ rank: i + 1, ...item })) }

TypeScript プラグイン。構造化データ。ナビゲーション→スナップショット→解析の代わりに1コマンド。

コマンド拡張

runbrowser/commands リポジトリからコミュニティメンテナンスのコマンドをインストール。クローン不要、ビルド不要 — インストールしてすぐに使用。

# 利用可能なコマンド拡張を一覧表示 runbrowser commands list # Available command extensions: # # reddit # youtube # x ✓ installed # hackernews # producthunt # 拡張をインストール runbrowser commands install reddit # ✓ Installed reddit/ # → ~/.runbrowser/commands/reddit/hot.ts # → ~/.runbrowser/commands/reddit/search.ts # すぐに使用可能 runbrowser reddit hot --limit 5 runbrowser reddit search "ブラウザ自動化" # アンインストール runbrowser commands uninstall reddit # ✓ Uninstalled reddit/

コミュニティコマンドは TypeScript ファイルとして ~/.runbrowser/commands/<site>/ にダウンロードされます。カスタムサイトコマンドと同じ形式 — 閲覧、修正、フォークが可能。

仕組み: CLI が runbrowser/commands GitHub リポジトリから .ts ファイルを取得しローカルに保存。リレーサーバーが jiti で実行時にロード — コンパイル不要。各拡張は1つ以上のコマンドファイルを含むディレクトリ。

自分のコマンドを貢献: runbrowser/commands リポジトリにディレクトリを作成し、.ts ファイルを置いて PR を提出。あなたのコマンドが runbrowser commands install で全員に利用可能に。

一貫したサブコマンドパターン。コミュニティメンテナンス。カスタムコマンドと同じ TypeScript 形式。

セッション

セッションは自動作成 — コマンドを実行するだけで動作。高度な用途では明示的にセッションを管理。

runbrowser session new # セッション作成、id を出力 runbrowser session list # セッションと状態キーを表示 runbrowser session delete 1 # セッション削除

複数のエージェントを同時に実行しても互いに干渉しません。各セッションは独立したサンドボックス。ブラウザタブは共有、セッション状態は独立。

# 明示的なセッション指定 runbrowser navigate https://a.com -s 1 runbrowser navigate https://b.com -s 2 # デフォルトセッションの設定 export RUNBROWSER_SESSION=1 runbrowser snapshot # セッション1を使用

画面録画

エージェントの操作を MP4 動画として録画chrome.tabCapture を使用し拡張機能コンテキストで実行するため、ページナビゲーション後も継続

# 録画開始 runbrowser record start -o recording.mp4 # ナビゲーション、インタラクション — 録画はページをまたいで継続 runbrowser navigate https://example.com runbrowser click @e5 # 停止して保存 runbrowser record stop

ネイティブタブキャプチャ。ナビゲーションを越えて持続。H.264 MP4 に自動トランスコード。

MCP 連携

RunBrowser は 2ツールの MCP モデルskillrun。ツールの肥大化なし、スキーマの膨張なし。

{ "mcpServers": { "runbrowser": { "command": "npx", "args": ["-y", "@jiweiyuan/runbrowser-mcp@latest"] } } }

エージェントは skill で利用可能なコマンドを学習し、run で実行:

skill() → 完全な CLI ドキュメント + サイトコマンドを返す run({ command: "navigate https://example.com" }) run({ command: "snapshot" }) run({ command: "click @e1" }) run({ command: "eval document.title" })

run ツールは CLI と同じ構文。エージェントは別の API を学ぶ必要なし。

┌──────────────────────────────────────────────────────────────────────┐ │ MCP クライアント │ │ (Claude, Cursor, Windsurf...) │ └──────────────┬──────────────────────────────┬────────────────────────┘ │ │ skill() run(command) │ │ v v ┌──────────────────────────────────────────────────────────────────────┐ │ RunBrowser MCP サーバー │ │ │ │ ┌─────────────────┐ ┌──────────────────────────┐ │ │ │ skill ツール │ │ run ツール │ │ │ │ │ │ │ │ │ │ CLI ドキュメント │ │ コマンド文字列を解析 │ │ │ │ + サイトコマンド │ │ リレーに転送 │ │ │ │ 一覧を返す │ │ 結果を返す │ │ │ └─────────────────┘ └────────────┬─────────────┘ │ │ │ │ └─────────────────────────────────────────────────┼───────────────────┘ │ HTTP / WS │ v ┌─────────────────────────┐ │ リレー :19988 │ │ CDPExecutor │ └────────────┬────────────┘ │ chrome.debugger │ v ┌─────────────────────────┐ │ あなたの Chrome │ └─────────────────────────┘

比較

他の選択肢との比較。

vs Playwright MCP
Playwright MCPRunBrowser
ブラウザ新しい Chrome を起動あなたの Chrome を使用
拡張機能なし既存のものをそのまま
ログイン状態新規ログイン済み
ボット検出常に検出される回避可能
コラボレーション別ウィンドウユーザーと同じブラウザ
vs BrowserUse
BrowserUseRunBrowser
言語PythonTypeScript / Node.js
ブラウザ新しい Chrome を起動(Playwright)あなたの Chrome を使用
アプローチAI エージェントフレームワーク(LLM が判断)CLI + MCP ツール(エージェントがコマンド送信)
ログイン状態新規ログイン済み
CLIなしあり — 50+ コマンド
vs Agent Browser
Agent BrowserRunBrowser
ブラウザヘッドレス Chromium を起動実行中の Chrome
コマンド数~90(肥大化)~50(精選)
コマンド拡張なしあり — コミュニティコマンドをインストール
CLIRust CLI → Node デーモンNode CLI → リレー(シンプル)
ボット検出常に検出される回避可能
リアルタブいいえはい

リモートアクセス

リモートマシンの Chrome を操作 — ヘッドレス Mac mini、クラウド VM、devcontainer。パブリックバインドとトークンでリレーサーバーを起動。

# ホストマシンで — リレーサーバー起動 runbrowser serve --host 0.0.0.0 --token <secret> # どこからでも — 環境変数を設定して通常通り使用 export RUNBROWSER_HOST=192.168.1.10 export RUNBROWSER_TOKEN=<secret> runbrowser navigate https://example.com

devcontainer や Docker にも対応 — RUNBROWSER_HOST=host.docker.internal を使用。

セキュリティ

すべてがあなたのマシンで動作。リレーは localhost:19988 にバインドし、拡張機能からの接続のみ受付。リモートサーバーなし、アカウント不要、テレメトリなし。

  • ローカルのみ — WebSocket サーバーは localhost にバインド。データがマシンから出ることはない。
  • オリジン検証 — RunBrowser 拡張機能のオリジンのみ受付。悪意あるサイトは接続不可。
  • 明示的同意 — 拡張機能アイコンをクリックしたタブのみ制御。バックグラウンドアクセスなし。
  • 可視の自動化 — 制御中のタブに自動化バナーを表示。すべてのエージェント操作に視覚フィードバック(緑のハイライト)。
RunBrowser - エージェントが実際のブラウザを操作できる Chrome 拡張機能と CLI