アーキテクチャ
ABGはローカルの3要素で構成されます。
- ユーザーのブラウザープロファイルで動く拡張機能。
- ユーザーのマシンで動くnative Gateway app。
- エージェント、script、人間が使う
abgCLI。
Browser tab + ABG extension | | WebSocket on 127.0.0.1 vGateway app - permission manager - plugin host - audit log | | local IPC vabg CLI | vAI 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
Section titled “Gateway”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にも使えます。エージェントがタブを見つけられないときは次を確認します。
abg statusabg tabs --compactabg 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を通ります。
詳しくはプラグインを参照してください。
platform roadmap
Section titled “platform roadmap”最初の対象ブラウザーはChromeです。Firefoxはbrowser adapterとFirefox extension targetを使います。iPhone Safariはpaired companion経由でDOM確認とpage actionを扱います。 desktop SafariとAndroidは別のplatform trackです。
mobile consent と pairing design
Section titled “mobile consent と pairing design”mobile / WebView supportでは、phone、tablet、embedded browser surfaceを、同じユーザーが持つdesktop Gatewayへ接続します。 desktop per-tab consentとは違い、mobileではtab共有の前に、どのdesktop Gatewayを信頼するかをpairingで確認する必要があります。
pairing method
Section titled “pairing method”| 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は行いません。 |
consent と session scope
Section titled “consent と session scope”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_sharingscopeを付与しても、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へ再接続します。
network boundary
Section titled “network boundary”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を弱めるためです。
remaining limits
Section titled “remaining limits”- 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です。