OpenClawのブラウザリレー
エージェントから本物のブラウザを操作する
エージェントはページを取得できますが、取得することと使うことは同じではありません。肝心なタブはすでにログイン済みで、別の部屋のノートパソコン上にあり、Gatewayはまったく別の場所にあるサーバーで動いています。OpenClawの答えは、ブラウザ操作を実際にブラウザがあるマシンに中継し、その後もそこにとどめておくことです。
ブラウザを置ける4つの場所
- ローカル制御(デフォルト)。Gatewayがループバックの制御サービスを起動し、ローカルのブラウザを起動できます。open、navigate、openclaw browser startのようなターゲットを指定しない操作はブラウザを起動できますが、targetId、タブID、ラベルでタブを指定する操作が、停止中のブラウザを起動することはありません。新しく起動したブラウザにそのタブが存在するはずがないからです。
- ノードホストを介したリモート制御。ブラウザがあるマシンでノードホストを実行すると、Gatewayがブラウザ操作をそこにプロキシします。ノードはプロキシコマンドを通じて自身のローカルブラウザ制御サーバーを公開するため、Gatewayがブラウザのバイナリを必要とすることは一切ありません。
- リモートCDP。browser.profiles内のプロファイルにcdpUrlキーを設定するか、従来の単一プロファイル用のbrowser.cdpUrlを設定すると、リモートのChromiumベースのブラウザに接続します。その場合、OpenClawは自前のローカルブラウザを起動しません。
- 接続専用のループバックサービス。127.0.0.1で公開される外部管理のCDPサービス(よくあるのはDocker上のBrowserless)には、attachOnly: trueも設定します。attachOnlyのないループバックCDPは、OpenClawが管理するローカルプロファイルとして扱われ、OpenClawはポートが使用中だがOpenClawの所有ではない、と報告することがあります。
操作がいったんノードに届くと、その後のスナップショットや設定は、ブラウザを切り替えずにそのノードにとどまります。
ルーティングは操作ごとではなく、一度だけ決まる
自動ルーティングはホストを優先し、これには実行ファイルがインストールされているだけの停止中のマネージドブラウザも含まれます。nodeを明示的にターゲットに指定すること、ノードセレクター、またはgateway.nodes.browser.nodeはこの優先順位を上書きし、target=hostは常にホストにとどまります。そして、選ばれた所有者がすべてを保持します。existing-session、拡張機能、attach-only、リモートCDPの接続は、マネージドブラウザの実行ファイルがなくてもその所有者に属し、起動の失敗、無効な実行ファイルの設定、権限エラー、ページ操作の失敗も、別のマシンで再実行されることなく、その所有者にとどまります。選ばれたノードからホストへの自動フォールバックが許されるのは、そのノードがリクエストを処理する前だけで、これが上の一文の実際の意味です。これにより、複数ステップのブラウザタスクに一貫性が生まれます。操作の対象となるスナップショットとそれが返した要素参照は、2つではなく1つのブラウザを表しているのです。
リレーが守る境界
- プロファイルは、そのマシンの前に座って操作する場合とまったく同じように、ノード自身のbrowser.profiles設定から取得されます。Gatewayが自身のプロファイル一覧をノードに投影することはありません。
- 永続的なプロファイルの変更は、どう設定されていてもプロキシコマンド経由では拒否されます。create-profile、delete-profile、reset-profileは、allowProfilesに関係なくブロックされます。これらの変更はノード上で直接行ってください。
- nodeHost.browserProxy.allowProfilesは任意です。空のままにすると、設定済みのすべてのプロファイルがプロキシ経由で到達可能なままになります。これは従来からのデフォルトの挙動です。設定すると、OpenClawはそれを最小権限の境界として扱い、プロキシが対象にするプロファイル名を制限します。経路全体をオフにするには、ノード側でnodeHost.browserProxy.enabled=falseを使うか、Gateway側でgateway.nodes.browser.mode=offを使います。後者はautoとmanualも受け付けます。
エージェントから見えるのは、4つの構成すべてに共通する1つのツールです。単一のbrowserツールがdoctor、status、start、stop、tabs、open、focus、close、snapshot、screenshot、navigate、act、requests、errors、text、emulateをカバーし、どのブラウザかを指定するprofile引数と、どのマシンかを指定するsandbox、host、nodeのいずれかのtarget引数を取ります。同じ動詞でも、モードによって意味が異なることがあります。ローカルのマネージドプロファイルでのstopはOpenClawが起動したプロセスを終了させますが、attach-onlyやリモートCDPのプロファイルでは、アクティブな制御セッションを閉じ、ビューポート、カラースキーム、ロケール、タイムゾーン、オフラインモードに関するPlaywrightとCDPのエミュレーションの上書きを解除します。OpenClawがそこでブラウザプロセスを起動したことは一度もないにもかかわらずです。headless設定も同じルールに従い、OpenClawが起動するローカルのマネージドプロファイルにのみ影響します。すべての操作とその引数についてはbrowserツールのアクションの解説を、ノードホストとは実際に何なのか、どのようにペアリングし、ほかに何を担えるのかについてはブラウザノードの解説をご覧ください。
ホスト型ブラウザと3つのURL形式
OpenClawは3つの形式のCDP URLを受け付け、それぞれに合った接続方法を自動的に選びます。http://またはhttps://のベースは検出を意味し、OpenClawは/json/versionを呼び出してWebSocketデバッガーのURLを読み取り、接続します。WebSocketへのフォールバックはありません。/devtools/browser、page、worker、shared_worker、service_workerのパスを持つ直接のws://またはwss://エンドポイントは、/json/versionを完全にスキップします。/devtoolsパスのないWebSocketのルートだけのURL(BrowserlessやBrowserbaseが渡してくるもの)は、まずHTTPでの検出を試し、検出で使えるものが返らなければ、ルートへの直接ハンドシェイクにフォールバックします。これらのURLは通常、クエリトークンやHTTP Basic認証情報として認可情報を含んでおり、OpenClawは/json/*エンドポイントを呼び出すときも、CDPのWebSocketを開くときも、その認証を保持します。そのため、URL全体をシークレットとして扱い、設定ファイルではなく環境変数やシークレットマネージャーに保存してください。診断もランタイムの接続と同じ、検出優先でWebSocketにフォールバックするロジックを使うため、接続できるルートだけのURLがブラウザ制御APIによって到達不能と報告されることはありません。cdpUrlをまったく持たない唯一のログイン済みブラウザモードはChrome拡張機能のリレーです。このリレーは自身のループバックエンドポイントを所有し、コンピューターの前に誰もいなくても本物のタブを操作します。
Dialiでは
DialiはOpenClawをマネージドサービスとしてホストしています。各顧客は、共有プールの席ではなく、専用のエンジン上で動く自分専用のアシスタントを利用できます。エンジンの設定はダッシュボードから生成され、リリースのたびに書き直されるため、UIで設定したブラウザのブロックが、そのままエージェントの起動時に使われます。エージェントが保持するものはすべて永続ボリュームに置かれ、毎日のスナップショットとワンクリック復元は「バックアップ」アドオン(Maxに含まれます)で利用できます。ホスト型エンジンについてはDialiのマネージドOpenClawホスティングで、プランについてはDialiの料金で説明しています。
- ノードホストは、ブラウザを所有するマシンにブラウザ操作を中継します。
- 操作がいったんノードに届くと、タスクの残りはそこにとどまります。
- attachOnlyにより、ループバックのCDPサービスがマネージドプロファイルと誤認されるのを防げます。
読むだけでなく、作ってみましょう
エージェントを設定してチャネルを選べば、いつも開いているアプリの中でエージェントが働き始めます。
