SemibotSemibot - AIデスクトップ
ガイド一覧

内蔵ブラウザ:AI Agent が Web を見て操作する仕組み

内蔵ブラウザにより、Web ページ上のボタンや段落、領域を指して Agent に説明・修正・操作を指示できる。設計上の課題は DOM を漏らさずに構造化参照を取り出すことだ。

定義: Semibot の内蔵ブラウザは、ユーザーが任意の Web ページ上の要素(ボタン、テキスト、画像、領域)を選択し、構造化参照として会話に添付できる埋め込み Web ビューだ。エージェントは選択されたコンテンツ、ページコンテキスト、領域のスクリーンショットを受け取るが、フル DOM、フォーム値、実行可能なノードハンドルは受け取らない。この設計の重要な原則は、Web コンテンツをデータとして扱い、システム命令としては扱わないということだ。ユーザーが選択したテキストがエージェントの行動を上書きすることはなく、ページの内容はあくまで参照情報としてのみ利用される。これにより、外部の Web コンテンツがエージェントの動作を意図的に操作する prompt injection 攻撃を構造的に防いでいる。

要素選択の仕組み

アドレスバーに「要素選択」のエントリポイントがある。選択モードに入るとブラウザのオートメーションレイヤーが一時停止し、選択ヒントが表示され、ホバー時に要素がハイライトされる。クリックするとページ自身のクリックハンドラを発火せずに参照をキャプチャする。これは重要な設計判断で、ユーザーが選択している間にページの状態が変わることを防いでいる。Shift クリックで複数選択が可能だ。Esc で選択モードを終了し、会話入力にフォーカスが戻る。このフローにより、ブラウザ上の情報を参照しながら会話を続けることが自然にできる。

キャプチャされた参照は BrowserElementReference という構造化オブジェクトだ。ページタイトル、サニタイズされた URL(ユーザー名、パスワード、クエリ、ハッシュを除去済み)、キャプチャ時刻、可視テキスト、要素ロール、バウンディング矩形、ローカルスクリーンショットを含む。エージェントはこのデータを受け取るが、生の DOM ノードや CDP ハンドルは受け取らない。構造化参照により、エージェントはページの文脈を理解しつつ、機密情報にはアクセスできないという安全な設計が実現されている。エージェントは参照された要素の内容を分析し、説明や比較や要約を行うことができるが、ページの DOM を直接操作することはできない。

プライバシーモデル

プライバシー境界が核心の設計制約だ。このモデルは Web コンテンツを取り扱う際の安全性を最優先に設計されており、複数のレイヤーでデータ保護が行われる。ユーザーがブラウザで閲覧している情報は機密を含むことが多く、誤ったデータがエージェントに渡ると深刻なプライバシー問題を引き起こす。以下の各レイヤーは独立して機能し、どれか一つが欠けても他のレイヤーが保護を維持する:

  • URL はサニタイズされる。 ユーザー名、パスワード、クエリパラメータ、ハッシュフラグメントは保存前に除去される。これにより、ログイン状態の URL に含まれる認証情報が漏洩するリスクを防ぐ。
  • フォーム値は含まれない。 DOM リーダースクリプトは隔離された実行ワールドで動き、入力値、非表示テキスト、機密領域を明示的に除外する。フォームに入力した個人情報やクレジットカード番号がエージェントに渡ることはない。
  • テキストと属性の上限。 キャプチャされたテキスト、属性、寸法には上限があり、過大なペイロードによるデータ流出を防ぐ。巨大なページ全体を取得するのではなく、選択された領域だけが制限付きで取り込まれる。
  • スクリーンショットは保守的。 入力コントロールや機密マーカーを含む要素はスクリーンショットから除外される。スクリーンショットはワークスペースではなくアプリのプライベートディレクトリに保存され、他のアプリやプロセスからアクセスされにくい。
  • システム命令のインジェクションなし。 Web コンテンツは会話入力のデータとしてシリアライズされる。システム命令として機能したりエージェントの動作を上書きしたりすることはない。これは prompt injection 攻撃に対する重要な防衛線だ。

制御とレースコンディション

ユーザーが選択モードに入ると、ブラウザのオートメーションは一時停止する。ユーザーが要素を選択している間、エージェントはナビゲートもクリックもスクロールもできない。これは競合状態を防ぐための設計だ。もしエージェントとユーザーが同時にブラウザを操作すると、どちらの意図が優先されるか分からなくなり、予期せぬ動作を引き起こす。制御は選択セッションが終了し、制御バージョンが一致する場合にのみ返される——これにより、以前の選択からの古いレスポンスが現在の選択に影響することを防ぐ。バージョンチェックにより、タイミングのずれによる予期せぬ動作を構造的に排除している。

ページがナビゲートされたり、タブが閉じられたり、セッションが切り替わったりすると、現在の選択はキャンセルされる。キャプチャされた参照は履歴スナップショットだ:ナビゲート後も会話履歴に残るが、同じ要素にアクションを再実行するには、ページを再観察して要素の同一性を確認する必要がある。ページの DOM 構造は動的に変化するため、キャプチャ時の参照はあくまでその瞬間の状態を記録したものだ。SPA(Single Page Application)のような頻繁に DOM が変わるページでは、参照の鮮度に注意が必要だ。

Shadow DOM と iframe 境界

DOM リーダーはテキストキャプチャ用にオープン Shadow DOM をサポートする。これにより、モダンな Web コンポーネントを使ったページでもテキストを取得できる。同一オリジンの iframe は座標変換付きでサポートされ、ネストされたコンテンツも正しく参照できる。ただしクロスオリジンの iframe、クローズド Shadow DOM、Canvas / video 要素の内部 DOM は取得できない。これはブラウザのセキュリティモデルに由来する制限であり、システムは理由を表示して既存のドラフトを保持する。これらの境界は設定ではなく強制されるもので、ユーザーが変更することはできない。将来的には対応範囲が広がる可能性があるが、セキュリティモデルとの整合性を保ったまま拡張する必要がある。

限界

内蔵ブラウザは強力な機能だが、ブラウザのセキュリティモデルと技術的な制約により、いくつかの明確な限界がある。以下を理解した上で活用することで、期待通りの結果を得やすい。これらの制約はすべて安全性を優先した設計判断の結果であり、利便性とセキュリティのトレードオフとして意図的なものだ:

  • クロスオリジン iframe やクローズド Shadow DOM からのコンテンツキャプチャはできない。これはブラウザのセキュリティモデルに起因する制限で、Semibot の設計ではなくブラウザ側の制約だ。
  • Canvas と video 要素は可視領域のスクリーンショットのみ対応で、内部状態や動画データにはアクセスできない。グラフの描画結果や動画のフレームはスクリーンショットで参照できるが、データそのものは取得できない。可視化された情報を説明することはできても、元データを抽出することはできない点に注意が必要だ。
  • 選択は現在の可視領域でのみ機能する。スクロールされたコンテンツは、ユーザーが事前にスクロールする必要がある。ページ全体のキャプチャは現時点では未サポートだが、主要なユースケースでは可視領域の選択で十分なことが多い。
  • ブラウザ要素参照はソースコードファイルやコンポーネントの所有権を証明できない——あくまで Web データであり、ワークスペースの成果物ではない。参照とコードの間に関連性を見出すのはエージェントの推論に委ねられている。
  • CDP ベースのアーキテクチャのため、ブラウザには Chromium サポートが必要だ。非 Chromium の Web ビューには対応していない。Safari や Firefox ベースのブラウザでは動作しない。これは Chromium の開発者ツールプロトコルに依存しているためで、将来的な対応範囲の拡大は Chromium 側の仕様変更にも左右される。現在は Chromium ベースのブラウザ(Chrome、Edge、Brave など)で動作する。

Agent の見方:ピクセルではなく意味のスナップショット

Semibot の内蔵ブラウザーの要素選択は、画面を読む視覚モデルに依存しません。ユーザーが要素を指すと、Agent が受け取るのは構造化された意味のスナップショットです。要素のアクセシブルなロール・名前・テキスト、サニタイズされたページアドレス、取得時刻と構造パス、そして厳しく制限された補助スクリーンショット(最大 640×480、対象の周囲のみ残し、180 KB まで、入力欄や機密領域を含む場合は保守的に省略)。選択は制御権のステートマシンを通ります。Agent はピックモードに入る前にページの自動化を一時停止し、取得要求は制御リビジョンとページリビジョンに束縛されます。ページが変わった後、古い参照は歴史的スナップショットに過ぎず、再実行には再観測と要素の同一性確認が必要です。古い座標は実行権限ではありません。

セキュリティの姿勢は一つの原則に立ちます。ウェブの内容はデータであって指示ではない。フォーム値、スクリプト、隠しテキストの読み取りは禁止され、テキストと属性の取得には長さ上限があり、URL のサニタイズは資格情報・クエリ・ハッシュを除去し、スクリーンショットは制限付き権限のアプリ専用ディレクトリに保存され、レンダラーはデバッグエンドポイントや実行可能なノードハンドルではなくスナップショットのみを受け取ります。これはプロンプト注入への構造的防御でもあります。

境界は率直に宣言されます。開かれた Shadow DOM には到達でき、同一オリジンの iframe は座標変換が必要ですが、クロスオリジンの iframe、閉じた Shadow ルート、canvas と video の内部は DOM を取得したとは主張できません。可視領域のスクリーンショットのみが可能です。工学面では、このモジュールは 141 項のデスクトップ回帰と 50 項のスタイル回帰、新しい取得モジュールで約 93% の行カバレッジと約 84% の分岐カバレッジとともに出荷され、自己評価の点数はリリースレビューと同等ではないと明記されています。

FAQ

内蔵ブラウザについてよく寄せられる質問とその回答をまとめる。プライバシーと操作性に関する疑問が特に多い:

Agent はページ上のものをクリックできるか?

明示的なブラウザオートメーションツール経由でのみ可能で、承認が必要だ。要素選択はページのクリックを発火せずに参照をキャプチャする。選択と操作は明確に分離されているため、参照のつもりでページの状態が変わることはない。クリック操作は承認ゲートを必ず通り、ユーザーの明示的な許可なしには実行されない。

Agent はパスワードフィールドを読み取れるか?

いいえ。DOM リーダーは入力値と機密領域を明示的に除外する。パスワードフィールドや hidden 属性の要素はキャプチャ対象外だ。プライバシー保護は設計の最優先事項の一つとして組み込まれており、ユーザーの個人情報が誤ってエージェントに渡ることはない。

複数の要素を選択できるか?

はい。Shift クリックで複数選択が可能だ。各要素は順序を保持した個別の参照を持つ。複数の要素を一度に選択することで、関連する情報をまとめてエージェントに渡せる。例えば表の複数行や、記事の複数段落を一度に選択して比較や分析を依頼する使い方ができる。

選択後にページが変わったらどうなるか?

キャプチャされた参照はスナップショットだ。ページが変わっても履歴には残る。ただしアクションの再実行にはページの再観察が必要で、同一の要素であることを確認するステップが入る。動的なページでは要素の位置や内容が変わるため、再確認は必須だ。参照はキャプチャ時点のページの状態を記録したものであり、その後のページ変更を追跡するものではない。

関連記事