クイックスタート
5 分で ego lite をインストールし、Agent CLI から最初のブラウザタスクを動かす。
5 分で ego lite をインストールし、Agent CLI から最初のブラウザタスクを走らせます。
動作環境
- macOS 12.0 以降
- Agent CLI のいずれか: Claude Code、OpenAI Codex、Cursor、Continue、Gemini CLI、Hermes Agent、OpenClaw、Opencode
インストール
お好みの方法を選んでください。
macOS インストーラーをダウンロード
ダブルクリックでインストールします。初回起動時、ego lite はマシン上にインストール済みの Agent CLI を検出し、それぞれの skill ディレクトリに ego-browser skill を書き込みます。
コマンドラインからインストール
任意の Agent CLI のターミナルで実行します:
curl -fsSL https://lite.ego.app/install.sh | sh
このコマンドで ego lite ブラウザと ego-browser helper がインストールされ、マシン上のすべての Agent CLI に skill が登録されます。
ego lite を初めて起動すると、1 つだけ質問されます。ブラウザのデータを移行しますか?続いて対応するブラウザを選んで確定すれば、ログイン状態、cookie、拡張機能、Profile がそのまま引き継がれ、エージェントもそのまま利用できます。
最初のタスク
Agent CLI で / を入力して skill ピッカーを開き、/ego-browser を選んで、自然言語でタスクを記述します:
/ego-browser follow @ego_agent on x.com for me
skill のコンテキストを読み込んだあと、エージェントは次のコードを生成して実行します:
ego-browser nodejs <<'EOF'
await useOrCreateTaskSpace('follow-ego-agent')
await openOrReuseTab('https://x.com/ego_agent', { wait: true })
await snapshotText()
// 返ってくるのは @ego_agent のプロフィールページ。ref が数百ある SPA です。
// Follow ボタンの accessible name は "Follow @ego_agent"。この実行では ref が @92 になります。
await click('@92')
await wait(3) // X が follow を反映して再レンダリングするまで 3 秒待ちます
await snapshotText()
// click 後、同じボタンのラベルが "Follow @ego_agent" から "Following @ego_agent" に変わります。ref は変わりません。
cliLog('Done. @ego_agent followed.')
EOF
このコードで注目したいのは 2 点です:
- エージェントが操作するのは
snapshotText()が返す ref(@92)であって、CSS セレクタではありません。ref は要素を人がどう知覚するかを反映していて(ボタンの accessible name は実際に"Follow @ego_agent"です)、X がクラス名をどう入れ替えても壊れません。ref はスナップショットごとに割り振られるので、実際に見える番号は例とは違います。 - エージェントは Chrome から移行した X のログイン状態を使います。再ログインや cookie の貼り付け、OAuth フローは不要です。最初のスナップショットの時点で、すでにログイン済みなので Follow ボタンはクリック可能な状態になっています。
エージェントの作業を見る
タスクが走り出したら、ego lite を開き、サイドバーの Space パネルをクリックしてください。実行中の Space がハイライトされます。そこに入ると、エージェントの操作がリアルタイムで見えます。遷移、スクロール、スナップショット、データ抽出のすべてです。
Space ビュー下部にはボタンが 2 つあります:
- 引き継ぐ (Take over): 現在のタブをエージェントから受け取り、自分で操作します。
- 停止 (Stop): タスクを即座に終了します。
ページを操作する
click は ref ベースの操作のひとつにすぎません。fill、type、pressKey、hover、select も同じ流れで使えます。一度スナップショットを取り、対象の ref を選び、それに対して操作します。ログインフローの例です:
ego-browser nodejs <<'EOF'
await useOrCreateTaskSpace('example-login')
await openOrReuseTab('https://example.com/login', { wait: true })
await snapshotText()
// 返ってくる内容はだいたいこんな感じです:
// @3 [input type="email"] placeholder="Email"
// @4 [input type="password"] placeholder="Password"
// @5 [button type="submit"] "Continue"
await fill('@3', 'user@example.com')
await fill('@4', 'your-password')
await click('@5')
await waitForLoad()
const tab = await currentTab()
cliLog('Logged in:', tab.url)
EOF
オンボーディングで Chrome データを移行していて、そもそも Chrome がこのサイトにログインしていれば、openOrReuseTab はそのままログイン後のページにエージェントを連れていきます。スナップショットはログインフォームではなくダッシュボードを返し、エージェントはフォーム入力をスキップして次の手に進めます。
複数のタスクを並列で動かす
各 Space は useOrCreateTaskSpace に渡した名前で識別されます。名前が違えば衝突しないので、同時に動かせます:
# Claude Code をひとつのターミナルで
ego-browser nodejs <<'EOF'
await useOrCreateTaskSpace('leads-enrichment')
await openOrReuseTab('https://www.linkedin.com', { wait: true })
EOF
# 同時に、別のターミナルで Codex
ego-browser nodejs <<'EOF'
await useOrCreateTaskSpace('qa-regression')
await openOrReuseTab('https://staging.example.com', { wait: true })
EOF
次に読むもの
- ego-browser — helper の全リスト、ページ側
js()コンテキスト、生 CDP アクセス - Space — Space のライフサイクルと命名規則
- Snapshot — ref と
loc=セレクタ - ブラウザタスク実践 — エンドツーエンドのウォークスルー