agent-browser 実機検証レポート — 動くコマンド・動かないコマンド一覧【v0.5.0】

「agent-browser を入れてみたけど動かない」「ドキュメント通りに書いたのにエラーになる」

そんな経験をしたことはないでしょうか。Vercel Labs が公開したブラウザ自動化CLIツール agent-browser は、GitHub Stars 14,000超の注目プロジェクトだが、ドキュメントと実際の動作にはかなりの乖離がある。

この記事では、agent-browser v0.5.0 の全コマンドを1つずつ実機で検証した結果を報告する。動いたもの、動かなかったもの、そしてドキュメントとの差異13個を重要度ラベル付きで整理した。

目次

agent-browser とは — AIエージェント専用のブラウザ操作CLI

agent-browser は、AIエージェント(Claude Code、Cursor等)がbashコマンドとしてブラウザを操作するためのCLIツールだ。

MCP → CLI の流れ

2025年まで、AIエージェントにブラウザ操作をさせるならPlaywright MCPサーバーが定番だった。MCPサーバーを起動し、ツールとしてエージェントに渡す構成だ。

2026年に入り、この構図が変わりつつある。Playwright CLI の登場により、MCP比で約4分の1のトークン消費で同等のタスクをこなせることが報告されている。agent-browser もこのCLIベースのアプローチを採用している。

MCPプロトコルを介さず、CLIで直接ブラウザと対話する。エージェント側から見れば、bashコマンドを叩くだけなのでシンプルだ。

スナップショット方式の仕組み

agent-browser の核となるのが「スナップショット」だ。

  1. open <url> でページを開く
  2. snapshot でアクセシビリティツリーを取得
  3. 各要素に e1, e2 … のRef番号が振られる
  4. click e1fill e3 "テキスト" でRef番号を指定して操作

DOMのXPathやCSSセレクタを意識する必要がなく、テキストベースで操作が完結する。AIエージェントとの親和性が高い設計だ。

インストールとセットアップ

基本インストール

npm install -g agent-browser

Chromiumの自動インストール

初回実行時にChromiumが自動ダウンロードされる。企業環境でプロキシ配下にある場合は、環境変数 PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST を設定する必要がある場合がある。

検証環境

今回の検証は以下の環境で実施した。

項目バージョン
OSmacOS Darwin 25.3.0(Apple Silicon)
agent-browserv0.5.0(npm package 0.16.3)
Node.jsv25.7.0
Playwright-core1.57.0
検証日2026年3月7日

agent-browser の操作は3ステップのサイクルで回る。

# Step 1: ページを開く
agent-browser open "https://example.com"

# Step 2: スナップショットを取得
agent-browser snapshot -i    # インタラクティブ要素のみ

# Step 3: Ref番号で操作
agent-browser click e1       # e1要素をクリック
agent-browser fill e3 "検索キーワード"   # e3にテキスト入力

Wikipediaをテストした際、258個のインタラクティブ要素を約3,500トークンで表現できた。ページ全体のHTMLを渡すよりもはるかにトークン効率が良い。

全コマンド検証結果 — カテゴリ別テーブル

ナビゲーション — 全て正常動作

コマンド結果備考
open <url>正常
back正常
forward正常
reload正常
close正常

スナップショット — ほぼ正常

コマンド結果備考
snapshot正常全アクセシビリティツリー
snapshot -i正常インタラクティブ要素のみ。実用上はこれを多用
snapshot -c正常コンパクト出力
snapshot -d <n>正常深さ制限
snapshot -s <selector>要注意特定条件でタイムアウトが発生

要素操作 — 全て正常動作

コマンド結果
click <ref>正常
fill <ref> <text>正常
check <ref>正常
hover <ref>正常
press <key>正常
scroll <dir> [px]正常
scrollintoview <ref>正常

情報取得 — 一部に問題

コマンド結果備考
get title正常
get url正常
get text <ref>正常Refで動作
get attr <ref> <attr>正常CSSセレクタで動作
get box <ref>要注意Refで動作せず。CSSセレクタのみ
get count <ref>正常
get html <ref>要注意Refで動作せず。CSSセレクタのみ
get value <ref>動作せずRefでタイムアウト

状態チェック — 全て正常動作

コマンド結果
is visible <ref>正常
is enabled <ref>正常
is checked <ref>正常

セマンティックロケータ — 一部問題

コマンド結果備考
find role button click --name "Submit"正常
find text "テキスト" click要注意strict modeで複数マッチエラー
find first "テキスト" click動作せずExpected string, received null

待機コマンド — 全て正常動作

コマンド結果
wait 1000正常
wait --text "Example"正常
wait --url "..."正常
wait --load networkidle正常

スクリーンショット・PDF — 全て正常動作

コマンド結果備考
screenshot [path]正常PNG、1280×720
screenshot --full正常フルページ
screenshot --annotate正常アノテーション付き
pdf <path>正常PDF 1.4形式

JavaScript実行 — 一部問題

コマンド結果備考
eval "document.title"正常
eval -b <base64>動作せずBase64デコードされない

ブラウザ設定 — 一部問題

コマンド結果備考
set viewport 1920 1080正常
set device "iPhone 14"正常
set media dark動作せずValidation error
set geo 35.6762 139.6503正常
set offline on/off正常
set headers <json>正常
set credentials <user> <pass>正常

ネットワーク制御 — 一部注意

コマンド結果備考
network route <url> --body <json>正常
network unroute要注意引数なしでエラー(URLが必須)
network requests要注意–filterが必須
network requests --filter <pattern>正常

タブ管理 — 一部注意

コマンド結果備考
tab正常タブ一覧
tab new <url>要注意URLが反映されずabout:blank
tab <n>要注意0ベースインデックス
tab close <n>正常

セッション・デバッグ — 全て正常動作

session, session list, trace, console, errors, highlight — いずれも正常。

未実装コマンド(ドキュメントに記載あり)

コマンド状態
diff snapshot/screenshot/urlUnknown command: diff
keyboard type/inserttextUnknown command: keyboard

ドキュメントとの差異13個 — 重要度ラベル付き

致命的(ワークフローが壊れる)— 2件

差異1: Ref表記が @e1 ではなく e1

ドキュメントでは click @e1 のように @ 付きのRef表記が使われている。しかし実際に @e1 を渡すと一部のコマンドでエラーになる。正しくは click e1@ を外して記述する。

これはコア機能に直結する差異だ。初めてagent-browserを使う人がドキュメントを参考にすると、最初のコマンドから躓く可能性がある。

差異2: diff コマンドが未実装

ドキュメントには diff snapshot, diff screenshot, diff url が記載されているが、いずれも Unknown command: diff となる。ページの変化を検出するA/Bテストや回帰テストの基盤となるコマンドだが、v0.5.0時点では実装されていない。

要注意(回避策あり)— 7件

#差異影響回避策
3keyboard コマンド未実装pressfill で代替
4get value がRefで動作しないeval "document.querySelector('...').value"
5get html / get box がRefで動作しないCSSセレクタを直接指定
6タブインデックスが0ベースドキュメントの例は1ベース的に見えるが0始まり
7tab new <url> でURLが反映されないtab newopen <url> の2ステップ
8find first が動作しないfind role 等で代替
9Auth Vault が未記載auth save / auth login がヘルプにない

軽微(ドキュメント修正待ち)— 4件

#差異影響備考
10eval -b(Base64実行)動作せず通常のevalで代替可能
11set media dark 動作せずダークモードテストは限定ユースケース
12--version フラグ不在npm list -g agent-browser で確認可能
13network requests / network unroute に引数必須ドキュメントの例が不正確

トラブルシューティング

「@e1 でエラーになる」

@ を外して e1 を使う。これが最も頻出のハマりポイント。

# NG
agent-browser click @e1

# OK
agent-browser click e1

「get value がタイムアウトする」

eval コマンドで直接JavaScriptを実行して取得する。

# NG
agent-browser get value e3

# OK
agent-browser eval "document.querySelector('input[name=search]').value"

「tab new でURLが開かない」

2ステップに分ける。

# NG
agent-browser tab new "https://example.com"

# OK
agent-browser tab new
agent-browser open "https://example.com"

「diff コマンドが使えない」

v0.5.0時点では未実装。screenshotを2枚保存し、外部の画像比較ツールで差分を確認するか、snapshotの出力をテキストとして比較する。

「Rust CLI と書いてあるのにNode.jsが動いている」

正常な動作だ。デフォルトのインストールではNode.js + Playwright-coreベースのCLIが動作する。Rustバイナリはオプションビルドとして提供されている。実用上の影響はないが、起動速度の期待値には注意。

ドキュメントにない隠し機能

検証中に発見した、ドキュメント未記載の機能も紹介する。

  • --debug フラグ: デバッグモードで詳細なログを出力
  • --cdp <port>: Chrome DevTools Protocolで直接接続
  • AGENT_BROWSER_STREAM_PORT 環境変数: WebSocketストリーミング
  • --extension <path>: ブラウザ拡張の読み込み
  • screencast_start/stop: 画面録画
  • input_mouse/keyboard/touch: 低レベル入力コマンド

これらは --help やソースコードから発見したものだ。公式ドキュメントの更新が追いついていない可能性がある。

まとめ — コア機能は実用的。ドキュメントに注意

使えるか: コア機能(Navigate → Snapshot → Interact)は安定して動作する。AIエージェントにブラウザ操作をさせる手段として実用的だ。

注意点: ドキュメントの約25%に不正確な記述がある。特にRef表記(@e1e1)と diff コマンド未実装は致命的。ドキュメントより --help を信頼すること。

正直な所感: まだagent-browserの全貌は掴めていない。今回はコマンド単体の検証にとどまっている。実ワークフローでの耐久性や、他ツールとの比較は今後の課題だ。

次回予告: 連載第2回では、同じブラウザ操作タスクを agent-browser と Playwright MCP の両方で実行し、トークン消費量・実行時間・成功率を実測比較する予定。

関連リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次