コンテンツへスキップ

アーキテクチャ

ABGはローカルの3要素で構成されます。

  • ユーザーのブラウザープロファイルで動く拡張機能。
  • ユーザーのマシンで動くnative Gateway app。
  • エージェント、script、人間が使う abg CLI。
Browser tab + ABG extension
|
| WebSocket on 127.0.0.1
v
Gateway app
- permission manager
- plugin host
- audit log
|
| local IPC
v
abg CLI
|
v
AI coding agent

拡張機能はブラウザー側のconsent surfaceです。通常のper-tab modeでは、ABG起動直後に見えるタブはありません。 ユーザーがpopupから特定タブを共有すると、拡張がtab metadataとcommand responseをローカルGatewayへ送ります。

all-tabs modeは隔離プロファイルやsandboxマシン向けです。ユーザーが明示的に有効化したあとだけoptional host accessを要求し、 OFFにするとall-tabs entryも失効します。

Gatewayはloopbackで待ち受け、runtime stateを持ちます。

  • 接続中のextension instance
  • 共有中のタブ
  • operation approval state
  • 読み込まれたplugin
  • ローカル監査ログ
  • app settingとplugin state

production appは通常のGateway state directoryを使います。development appは別portとprofile-specificなstateを使うため、 開発中のpluginやsettingがproduction stateを変更しません。

abg はエージェント向けの安定interfaceです。shell commandを実行できるtoolであれば、特定agentに依存せず共有タブを扱えます。

人間のdebugにも使えます。エージェントがタブを見つけられないときは次を確認します。

Terminal window
abg status
abg tabs --compact
abg audit --lines 20

内部では、CLI は OS ごとのローカル IPC 上で共通の JSON 契約を使います。macOS と Linux では Unix ドメインソケット、Windows では名前付きパイプを使います。macOS ではサンドボックス やパス長の制約でソケットを使えない場合、トークン認証付きのループバック WebSocket に切り替えます。 接続先の解決と後始末は ABG が担うため、呼び出し側が OS 固有の通信方式を知る必要はありません。

pluginはGatewayが読み込むローカルJavaScript moduleです。ブラウザーデータ変換、domain-specific Markdown抽出、 高レベルcommandの追加に使えます。pluginからのtab operationもCLIと同じapproval/audit pathを通ります。

詳しくはプラグインを参照してください。

最初の対象ブラウザーはChromeです。Firefoxはbrowser adapterとFirefox extension targetを使います。iPhone Safariはpaired companion経由でDOM確認とpage actionを扱います。 desktop SafariとAndroidは別のplatform trackです。

mobile / WebView supportでは、phone、tablet、embedded browser surfaceを、同じユーザーが持つdesktop Gatewayへ接続します。 desktop per-tab consentとは違い、mobileではtab共有の前に、どのdesktop Gatewayを信頼するかをpairingで確認する必要があります。

| method | fit | decision | | --- | --- | --- | | QR code | desktopが短命のpairing URLを表示でき、phone側でcameraを使える初回flowに向きます。両deviceで同じcodeを確認してからmobile sessionを作ります。 | 実装済みです。QR payloadは5分で失効し、scoped pairing tokenの初期化だけに使います。 | | manual token entry | cameraが使えない、screen sharingでQRが隠れる場合のfallbackです。 | 実装済みです。短いcodeとdesktop confirmationを組み合わせます。 | | Tailnet link | 既にprivate Tailnetを運用しているユーザーが、network越しにdesktopとmobileをpairingする場合に向きます。connectivityをユーザー管理にできます。 | 優先するprivate remote boundaryとして実装済みです。ABG運営のrelayは使いません。 | | private LAN address | Tailnet addressがない場合にtrusted LANで使います。 | 同じauthenticated pairing listenerで実装済みです。automatic LAN discoveryによるadvertiseは行いません。 |

desktop per-tab consentでは、ユーザーが同じmachineのbrowser popupから1つのtabを共有します。shareはtab referenceにscopeされ、 tab close、origin change、explicit revokeで自動失効します。mobile consentでは、その前にdevice/session layerが加わります。

  • paired mobile deviceはdefaultではtab accessを持ちません。pairingでtab_sharing scopeを付与しても、Safari extension popupからactive tabを共有する操作が別に必要です。
  • desktop Gatewayがpairing list、session lifetime、approval state、audit logを持ちます。
  • mobile approval forwardingはdesktop operationの承認または拒否だけを扱い、それだけで広いtab visibilityを付与しません。
  • mobile sessionは1つのGateway、1つのpaired device identity、approval、status、tab sharingの明示capabilityにscopeします。
  • mobile sessionをrevokeすると、そのdeviceをpairing listから外し、未処理のapproval promptとpairing tokenを失効させます。
  • iPhone Safari tab shareをrevokeすると、desktop Gatewayからそのtabを即時に削除します。tab closeとorigin changeでも自動revokeします。

iPhone Safari targetはtab list、DOM read、getter、predicate、semantic find、snapshot、table、範囲指定とfull-page screenshot、text/area annotation、明示許可したcross-origin frame、site単位のcookie確認、暗号化file upload、native Reading List追加、tab activation、wait、editable validation、storage確認、承認済みeval、DOM操作を扱います。操作はpaired iPhone appで承認します。Safari extension popupでTrusted automationを明示的に有効にした場合だけ、操作ごとの承認を省略します。共有範囲は承認時のorigin内に限定し、Safari休止後も同じMac側refへ再接続します。

local-onlyのdesktop workflowはdefaultかつ最も信頼度の高いmodeのままです。通常のCLIとextension trafficではGatewayはloopbackで待ち受け、 non-loopback networkをすべて塞いでもABGが使える状態を維持します。

Tailnet operationを優先するprivate remote boundaryとして使います。Tailnet、device enrollment、DNS、firewall policyは ユーザーまたはorganizationが管理します。ABGはofferまたはactive grantが存在する間だけremote-pairing listenerを起動します。 pairingにはdevice confirmation、後続接続にはactive scoped session tokenが必要です。

Tailnet addressがない場合はprivate LAN addressをfallbackとして使います。automatic LAN discoveryは、untrusted networkでGatewayを advertiseし、lookalike Gatewayによるphishing surfaceを増やし、複数Gatewayがある場合の挙動を分かりにくくするため使いません。

ABG運営のcloud relayは採用しません。central serviceがmetadataを観測でき、accountやabuse-preventionの境界になり、local-firstの security promiseを弱めるためです。

  • Safariにはconsoleとnetwork capture、HAR、PDF、emulation、download metadata、native low-level input、tab recordingを扱うChrome DevTools Protocol相当のAPIがありません。該当commandはplatform固有の理由とunsupported_on_safariを返します。
  • Mac clipboardは利用できません。file uploadはMacでbytesを暗号化し、file名、MIME type、digest、ciphertextだけをpaired Safari extensionへ転送します。Mac file pathは送信しません。
  • sandbox all-tabs accessはChrome限定です。
  • Androidとembedded WebView supportは別のplatform trackです。