はじめに
"AIにブラウザを渡せば、あなたの代わりにそれが全インターネットに接続します。"
これは「1日1つのオープンソースプロジェクト」のシリーズ第45回の記事です。今日は Browser Harness(browser-harness)を取り上げます。
急速に進化し続けるAIエージェントの世界において、根本的な課題は依然として残っています。すなわち、LLMがブラウザと効率的かつ低コストでやり取りするにはどうすればよいのか、という点です。Playwright や Selenium のような従来の自動化ツールは強力ですが、設計の前提が 人間 です。重たいAPIの抽象化や静的なロジックは、多くの場合、エージェントの自律的な推論の障害になります。
Browser Harness は全く別の道を選びます。非常に軽量(Pythonは約600行のみ)で、Chrome DevTools Protocol(CDP)に直接ブリッジします。これにより、タスクの最中にエージェントがリアルタイムで自分自身のヘルパー関数を書いたり修正したりできるよう促します。
学べること
- 中核となる概念:「エージェント中心」のブラウザツールキットが本当に意味するもの。
- 技術的なハイライト:CDPへの直接ブリッジと自己修復(self-healing)設計。
- ユースケース:AI支援による事務作業、複雑なWeb自動化、多プラットフォームでのセッション同期。
- クイックスタート:お好みのAIアシスタントへのデプロイと接続方法。
- 比較:なぜ従来のテスティング用フレームワークよりもLLMに適しているのか。
前提条件
- Python開発の基礎知識。
- AIエージェントの概念に馴染みがあること(例:Claude Code や OpenAI GPTs)。
- Playwright のようなブラウザ自動化ツールに関する一般的な理解。
プロジェクトの背景
プロジェクト概要
Browser Harness(♞)は browser-use チームがリリースしたオープンソースツールです。これは「管理され、再現可能で、観測可能な環境」(テストハーネス)として設計されています。その思想はリッチ・サットンの『The Bitter Lesson(苦い教訓)』に由来しており、「AIを人間が定義したルールで制限すべきではなく、代わりに低レベルで透明性のある制御を提供すべきだ」と主張しています。
このプロジェクトにより、AIエージェントはChromeセッション情報を直接読み書きでき、ローカルのブラウザCookieやプロファイルを認証済みセッションのためにリモート環境へシームレスに同期できます。これにより、手動での再ログインを行わずに済みます。
著者/チーム紹介
- チーム:browser-use
- 中核となる動機:AIが人間よりも自然(かつ高速)にインターネットを使えるようにする、透明なブリッジを構築すること。
-
プロジェクト状況:
browser-useエコシステムの主要な柱として、現在も積極的に開発中です。
プロジェクト統計
- ⭐ GitHubスター:400+(急速に増加中)
- Fork:30+
- バージョン:Alpha
- ライセンス:MIT
- Webサイト:browser-use.com
主な機能
中核となるユーティリティ
Browser Harness は、AIエージェントの「オペレーティングシステム」の拡張として機能します。トークン消費を最小限に抑えながら、高精度でブラウザを操作できるようにします。
ユースケース
-
AIによる自動フォーム入力:
- ローカルのCookieを同期し、経費精算レポートのような面倒な処理を各種サイトにまたがって自動で処理します。
-
クロスプラットフォームなコンテンツ操作:
- GitHub、Medium、Quora のような特定サイトのベストプラクティスに従ってコンテンツを投稿するように、エージェントを学習(訓練)します。
-
複雑なデータスクレイピング&分析:
- 既存のスクリプトがレイアウト変更で失敗した場合、エージェントが自律的にDOMを探索し、新しい抽出用関数を書けます。
-
ユーザーとしてのエージェント:
- ログインを繰り返さずに、認証が必要なWebタスクでユーザーを代理するエージェントを有効化します。
クイックスタート
ローカルのAI開発アシスタント(Claude Code のようなもの)を使用している場合は、次の手順に従ってください:
# 1. クローンして環境をインストール
git clone https://github.com/browser-use/browser-harness
cd browser-harness
uv sync
# 2. ブラウザを起動してセットアップを実行
uv run browser-harness --setup
# 3. これをあなたのエージェントのプロンプトに入力:
# "現在のプロジェクトのinstall.mdとSKILL.mdを読み、私のChromeブラウザに接続するのを手伝って。"
重要な特徴
-
Direct CDP Bridge(CDPへの直接ブリッジ):
- Playwright のような高レベルのライブラリをスキップしてChrome DevTools Protocolに直接接続し、超高速な応答を確実にします。
-
ドメインスキル:
- GitHub、Medium、SoundCloud のような特定サイト向けの、あらかじめ最適化されたパターンを含みます(
domain-skills/にあります)。
- GitHub、Medium、SoundCloud のような特定サイト向けの、あらかじめ最適化されたパターンを含みます(
-
プロファイル同期:
- ローカルのユーザー設定をクラウドへスムーズに同期し、認証を簡単にします。
-
ミニマリストなコア:
- 小さなコードベースにより、AIがツール全体のロジックを簡単に読み取り、上書きできるため、「再帰的なツール改善(recursive tool improvement)」が可能になります。
-
待ち時間のない実行:
- 可能な場合は全文のレンダリングよりも、データ取得のためのHTTPレベルの回避策(workaround)を優先します。リソースを節約できます。
プロジェクトの利点
| 機能 | Browser Harness | Playwright / Selenium |
|---|---|---|
| 対象ユーザー | AIエージェント | 人間の開発者 / QAエンジニア |
| 思想 | 動的で自己適応的 | 静的で強い型付けのAPI |
| 統合コスト | 非常に低い(LLMが1回読めば理解できる) | 高い(複雑なドキュメントを学ぶ必要がある) |
| 柔軟性 | エージェントがコアのヘルパーを書き換えられる | 公開APIインターフェースの範囲に限定される |
詳細な分析
アーキテクチャ:「透明なブリッジ」
Browser Harness のアーキテクチャは優雅でシンプルです(daemon.py を参照)。UnixドメインソケットまたはWebsocketsを介してChromeインスタンスと永続的な接続を維持するバックグラウンドのデーモンを動作させます。
コアモジュールの分析
-
daemon.py:コマンドの待ち受けを管理し、それらをChromeへ転送します。 -
helpers.py:「クリック」「スクロール」「ページ情報の取得」といった「原子的な操作(atomic operations)」を提供します。これらはフラットで単純であるため、LLMがロジックを容易に理解し、修正できます。 -
domain_skills/:特定のWebサイト向けに、マイクロで高効率な操作モジュールを記述する方法を示すライブラリ。
# 例: ページ情報を取得するための、簡略化されたヘルパー
def page_info():
"""コアとなるページのメタデータを取得します。Agentの要約のために最適化されています"""
# ロジックはCDPを介してタイトル、URL、そして間引いたDOMツリーを直接取得します
...
「苦い教訓」の実践
「The Bitter Lesson(苦い教訓)」の中で、Suttonは「計算を活用する一般的な方法が最も効果的であり、その差は大きい」と述べています。
Browser Harnessはこれを、考え得るあらゆるWeb操作に対して人間が定義したラッパーを作ることを拒むことで実現しています。その代わりに、透明性のある低レベル環境を提供します。複雑なWebレイアウトに直面したとき、背後にあるLLMの推論力を信頼し、リアルタイムのフィードバックに基づいて、Agentが一時的で的を絞った操作用の関数を自ら構築できるようにします。
プロジェクトの住所(Address)& リソース
公式リソース
- GitHub: https://github.com/browser-use/browser-harness
- ドキュメンテーション: リポジトリ内の
SKILL.mdとinstall.mdを参照してください。 - コミュニティ: Discord
- 課題トラッカー: GitHub Issues
対象読者
- AI開発者: Webとの相互作用を必要とする自律型Agentを構築します。
- フルスタックエンジニア: AIを使って日々の反復的なWeb作業を自動化したいと考えています。
- 研究者: 動的な環境におけるLLMの計画と実行を探求しています。
私のホームページで、役に立つ知識や面白いプロダクトをもっと見つけてください




