コンテンツへスキップ

アーキテクチャ

ABG は、ブラウザー拡張機能、Gateway アプリ、abg CLI という3つのローカルの部品で、ブラウザーのタブとエージェントをつなぎます。

Browser tab + ABG extension
|
| WebSocket on 127.0.0.1:8765
v
Gateway app
- permission manager
- plugin host
- audit log
|
| local IPC
v
abg CLI
|
v
AI coding agent

エージェントがタブを見つけられないとき

Section titled “エージェントがタブを見つけられないとき”

各部品の状態はターミナルから確かめられます。

Terminal window
abg status
abg tabs --compact
abg audit --lines 20
  • abg status が gateway_not_running で失敗する: Gateway アプリが起動していません。
  • extensionCount が 0: 拡張機能が Gateway につながっていません。
  • abg tabs --compact にタブが出ない: 何も共有していないか、共有が終わりました。
  • abg audit には、共有解除を含めて Gateway が何をしたかが残ります。

拡張機能は、利用者が同意を示す場所です。タブごとに共有するモードでは、エージェントにはどのタブも見えない状態から始まります。利用者がポップアップからタブを共有すると、拡張機能はそのタブの情報とコマンドの応答をローカルの Gateway に送ります。

全タブ共有モードは、隔離したプロファイルやサンドボックス用のマシン向けのオプションです。利用者がオンにしたときだけ、任意のホスト権限を求めます。オフにすると、全タブ共有で登録したタブはすべて共有が解除されます。

Gateway はループバックで待ち受け、実行中の状態を管理します。

  • 接続中の拡張機能
  • 共有中のタブ
  • 操作の承認状態
  • 読み込んだプラグイン
  • ローカルの監査ログ
  • アプリの設定とプラグインの状態

開発版アプリは別のポート 8766 と別の状態を使うため、開発中のプラグインや設定が本番の状態を変えません。

abg はエージェント向けの安定したインターフェースです。シェルのコマンドを実行できるツールなら、どれでも共有タブを調べて操作できます。人も同じコマンドを実行して、エージェントが見ているものを確かめられます。

CLI は OS ごとのローカル IPC 上で共通の JSON 契約を使います。macOS と Linux では Unix ドメインソケット、Windows では名前付きパイプです。macOS でサンドボックスやパス長の制約によりソケットを使えない場合は、トークン認証付きのループバック WebSocket に切り替えます。接続先の解決と後始末は ABG が受け持つため、呼び出し側は OS ごとの通信方式を知らなくて済みます。

プラグインは Gateway が読み込むローカルの JavaScript モジュールです。ブラウザーから取ったデータを変換したり、ドメイン専用の Markdown 抽出やコマンドを足したりします。プラグインからのタブ操作も、CLI と同じ承認と監査の経路を通ります。プラグインを参照してください。

最初の対象ブラウザーは Chrome です。Firefox はブラウザーアダプターと Firefox 向けの拡張機能で対応します。iPhone の Safari は、ペアリングしたコンパニオンアプリを通じて、DOM の確認と Safari Web Extensions で扱えるページ操作に対応します。デスクトップの Safari と Android は別の取り組みとして進めます。

モバイルのペアリングは、スマートフォンを同じ利用者のデスクトップの Gateway につなぎます。タブの共有や承認を扱える状態になる前に、スマートフォンがどの Gateway を信頼するかをペアリングで確かめます。

ペアリングのコマンドは次のとおりです。

Terminal window
abg companion offer
abg companion offer --manual
abg companion confirm <pairing-id>
abg companion list
abg companion revoke <device-id>

offer は QR コードと手入力用のコードを表示します。confirm は、両方の端末に同じコードが表示されたことを確かめてからペアリングを完了します。revoke はスマートフォンを外し、そのセッションを閉じます。

| 方法 | 向いている場面 | 状況 | | --- | --- | --- | | QR コード | デスクトップで短時間だけ有効なペアリング URL を表示でき、スマートフォンでカメラを使える場面。両方の端末で同じコードを確かめます。 | 対応済み。QR の内容は5分で失効し、範囲を限ったペアリング用トークンを作るためだけに使います。 | | 手入力のコード | カメラが使えない、または画面共有で QR コードが隠れる場面。 | 代替手段として対応済み。短いコードとデスクトップでの確認を組み合わせます。 | | Tailnet | すでに自前の Tailnet を運用していて、ネットワークをまたいでペアリングしたい場面。 | 推奨する非公開のリモート経路として対応済み。ABG が運営する中継は使いません。 | | 非公開の LAN アドレス | Tailnet のアドレスがなく、信頼できる LAN にいる場面。 | 同じ認証付きのペアリング用リスナーで対応済み。LAN の自動検出で Gateway を知らせることはしません。 |

デスクトップでの同意は、同じマシンのブラウザー操作から始まります。利用者がタブを1つ共有し、タブを閉じる、オリジンが変わる、解除する、のいずれかで共有は終わります。モバイルでは、タブの同意の前に端末とセッションの層が加わります。

  • ペアリングしただけの端末は、タブにアクセスできません。ペアリングで tab_sharing の範囲は付きますが、Safari のタブを共有するには拡張機能のポップアップでの操作が別に要ります。
  • ペアリングの一覧、セッションの期限、承認状態、監査ログは、デスクトップの Gateway が管理します。
  • モバイルへの承認の転送では、保留中のデスクトップの操作を承認または拒否できます。転送だけでタブが見えるようにはなりません。
  • モバイルのセッションは、1つの Gateway、ペアリングした1台の端末、明示した承認・状態確認・タブ共有の機能に限られます。
  • モバイルのセッションを取り消すと、その端末はペアリングの一覧から外れ、保留中の承認とペアリング用トークンも無効になります。
  • iPhone の Safari でタブの共有を解除すると、デスクトップの Gateway からそのタブはすぐに消えます。タブを閉じたときやオリジンが変わったときも共有は解除されます。

iPhone の Safari では、タブの一覧、DOM の読み取り、値の取得、条件判定、意味に基づく要素の検索、スナップショット、表の抽出、範囲指定と全体のスクリーンショット、テキストと範囲の注釈、明示的に許可したクロスオリジンの frame、サイト単位の Cookie の確認、暗号化したファイルのアップロード、リーディングリストへの追加、タブの前面表示、待機、編集内容の検証、ストレージの確認、承認済みの eval、DOM 上のページ操作に対応します。操作には、ペアリングした iPhone アプリでの承認が必要です。Safari 拡張機能のポップアップで信頼済み自動化をオンにした場合だけ、操作ごとの承認を省きます。共有したタブは承認したオリジンの中に限られ、Safari が一時停止したあとも Mac 側の同じ ref につながり直します。

ローカルだけで完結するデスクトップの使い方が既定で、最も信頼度の高い形です。Gateway は CLI と拡張機能の通信をループバックで受け、ループバック以外の通信をすべて止めても ABG は使えます。

Tailnet は推奨する非公開のリモート経路です。Tailnet、端末の登録、DNS、ファイアウォールの方針は、利用者か組織が管理します。ABG はペアリングの申し出か有効な許可があるときだけ、リモートペアリング用のリスナーを起動します。ペアリングには端末での確認が、その後の接続には有効なセッショントークンが必要です。

Tailnet のアドレスがないときは、非公開の LAN アドレスで代用します。LAN の自動検出は使いません。信頼できないネットワークで Gateway の存在を知らせてしまい、偽の Gateway による詐欺の余地が広がり、Gateway が複数あると動きも分かりにくくなるためです。

拡張1.3.6には、ローカル・非公開ペアリングと別のCloud接続もあります。Webログインでブラウザーを登録し、AI連携の認可で共有タブへのアクセスを許可します。選択したサービスは共有メタデータや要求した結果を処理でき、ローカルだけでは完結しません。接続先・認証情報・共有の境界はCloud手順を参照してください。

  • Safari には、コンソールとネットワークの取得、HAR、PDF、エミュレーション、ダウンロード情報、低レベルの入力、タブの録画を扱える Chrome DevTools Protocol 相当の仕組みがありません。これらのコマンドは、プラットフォーム固有の理由を添えて unsupported_on_safari を返します。
  • Mac のクリップボードの内容は使えません。ファイルのアップロードでは Mac 上でデータを暗号化し、ファイル名、MIME タイプ、ダイジェスト、暗号文だけをペアリングした Safari 拡張機能に送ります。Mac のファイルパスは送りません。
  • サンドボックス用の全タブ共有は Chrome だけで使えます。
  • Android と埋め込み WebView への対応は、別の取り組みとして進めます。