agent-browser: AIブラウザオートメーションの高速Rust CLI
agent-browser: AIブラウザオートメーションの高速Rust CLI
なぜブラウザ自動化のために新しいツールが必要なのか?
AIエージェントはますます、実際のウェブページと対話する必要があり、UIフローのテスト、ダイナミックコンテンツのスクレイピング、e‑commerceサイトのクローリングなどが挙げられます。SeleniumやPlaywrightのような既存のツールは素晴らしいライブラリですが、学習曲線、セットアップ負担、重いランタイムが求められます。Claude、GPT‑4、Gemini などのAIシステムがブラウザを制御する場合、軽量で コマンドライン インタフェースでその機能を公開し、どの言語からも呼び出せると便利です。
Enter agent-browser – a single executable that ships a fast Rust binary on macOS, Linux, and Windows, with automatic fall‑back to Node.js when the native binary is unavailable. It talks to a Node.js daemon that owns a Playwright instance, giving you all the power of Playwright (Chromium, Firefox, WebKit) while keeping the CLI fast and deterministic.
クイックスタート
# Install globally via npm
npm install -g agent-browser
# Grab the bundled Chromium
agent-browser install
# Open a site
agent-browser open https://example.com
# Take a reference‑based snapshot
agent-browser snapshot --json
# Click a button by ref
agent-browser click @e2
# Take a screenshot
agent-browser screenshot page.png
# Close it
agent-browser close
インストールオプション
- Rust ネイティブ –
pnpm build:nativeは Rust 1.75+ が必要です。最高の起動時間を提供します。 - Node.js フォールバック – ほぼすべての環境で動作しますが、多少遅くなります。
- Linux 依存関係 –
agent-browser install --with-depsで Playwright のシステムレベルの依存関係を自動でインストールします。
機能とコマンド
| カテゴリ | コマンド | 説明 |
|---|---|---|
| コア | open <url> |
URLへ移動します(エイリアス: goto、navigate)。 |
click <sel> |
要素をクリックします。 | |
fill <sel> <text> |
入力欄をクリアしてテキストを入力します。 | |
screenshot [path] |
完全ページまたはビューポートのスクリーンショットを取得します。 | |
snapshot |
決定論的参照 (@e1, @e2) 付きのアクセシビリティツリーを出力します。 |
|
wait <selector> |
可視状態またはカスタム条件を待ちます。 | |
eval <js> |
任意の JavaScript を実行します。 | |
close |
ブラウザインスタンスを終了します。 | |
| セマンティックロケーター | find role button click --name "Submit" |
ARIA ロールと名前でクリックします。 |
find text "Sign In" click |
表示テキストでクリックします。 | |
| セッション隔離 | agent-browser --session chat1 open https://foo.com |
並行エージェント用に隔離セッションを作成します。 |
| ヘッドレス / ヘッド付き | --headed |
デバッグ用に GUI を表示します。 |
| ストリーミング | AGENT_BROWSER_STREAM_PORT=9223 agent-browser open https://example.com |
画面フレームをストリーム化する WebSocket を開きます(ペアブラウジングに便利)。 |
| 認証 & ヘッダー | --headers '{"Authorization": "Bearer <token>"}' |
API アクセス用にオリジンごとに HTTP ヘッダーを設定し、ログイン UI をスキップします。 |
| デバッグ & ロギング | trace start, trace stop |
CDP トレースを記録してデバッグします。 |
アーキテクチャ要約
- Rust CLI – コマンドを解析し、JSON DSL を構築してデーモンへ送信します。
- Node.js デーモン – Playwright ブラウザを起動・管理し、呼び出し間でプロセスを存続させます。
- クライアント-デーモン設計 – システムごとに1つのデーモンを持ち、再実行時に新しい Chromium インスタンスを起動するコストを避けます。
AI エージェントの使い方
- ページを open します。
--jsonオプションで snapshot を取得します。結果は構造化されたツリー(role、name、ref)を含みます。- AI の推論エンジンがツリーを解析し、ターゲット参照(例:メール入力欄なら
@e3)を見つけます。 - CLI コマンド(
click @e3、fill @e4 "[email protected]")を使って Act します。 - ページが変更されたら Re‑snapshot を行い、再度手順を繰り返します。
CLI の JSON 出力は小さく (~2〜3 KB) で、トークン制限のある LLM に最適です。
使い道
| シナリオ | どのように agent‑browser が役立つか |
|---|---|
| CI/CD テスト | CI ジョブでゼロ設定スクリプトで UI テストを自動化します。 |
| サーバーレス関数 | スクレイピングや連携タスク用に CLI ベースのブラウザを走らせる最小 Lambda をデプロイします。 |
| Agent‑In‑The‑Loop | WebSocket 経由でビューポートをストリームし、AI と人間をペアリングします。 |
| ヘッドレス分析 | GUI オーバーヘッドなしでフォームデータや商品価格を収集します。 |
| API バイパスフロー | ログインページをバイパスするために認証ヘッダーを直接渡し、保護された API を叩きます。 |
例: 10 行でミニスクレイパーを構築
#!/usr/bin/env node
const { execSync } = require('child_process');
execSync('agent-browser install');
execSync('agent-browser open https://books.toscrape.com');
const data = execSync('agent-browser snapshot -i --json').toString();
const snapshot = JSON.parse(data).data.snapshot;
console.log('Page has books:') ...
node scrape.js で実行すると、書籍のリンク数を素早く確認できます。
パフォーマンスと信頼性
- macOS 上ではネイティブ Rust バイナリが < 50 ms で起動します。Node だけの同等機能は 200〜300 ms かかります。
- デーモンは最初の実行後も残存し続けるため、以降のコマンドはほぼ即時です。
- すべての主要プラットフォームで動作し、バイナリは GitHub リリースから配布されます。
参加方法
- GitHub への貢献を歓迎します:フォークを作成し PR を送るか、バグの issue を開いてください。
- より多くのセマンティクスが必要ですか? 新しい
findアクションや追加ブラウザエンジンのサポートを提案してください。 - ドキュメントは常に更新されています –
docs/フォルダや CLI の--help出力で最新コマンドを確認してください。
総括
agent‑browser は、単一コマンドで AI システムや開発者の手元にウェブ自動化をもたらします。Rust の高速性、Playwright の汎用性、AI に優しい参照スナップショットの組み合わせにより、テスト、スクレイピング、エージェント中心のワークフロー構築に最適なツールです。CI パイプラインを自動化したい場合でも、大規模言語モデルとライブブラウジングをペアリングしたい場合でも、agent‑browser は軽量で決定論的、かつプログラムしやすいインターフェースを提供し、シェルやサーバーレス関数で自然に利用できます。
自動化をお楽しみください!