Optimal architecture (chosen over the WS+token copy): the ab-connect extension talks to a local agent-browser native-messaging host. No localhost port, no token — Chrome authenticates the extension to the host by id. This is the codex/claude-style "install once, no per-use confirmation" model. - extensions/ab-connect: rewritten transport WebSocket+token → native messaging (chrome.runtime.connectNative). Pinned the extension id via a manifest `key` (→ bdoiejojpjogcjojeladhioioijhgade) so the host manifest can authorize it. Kept the proven chrome.debugger attach + Target.attachedToTarget emulation; dropped WS/token/options. Rebranded to "agent-browser connect". - cli connect.rs: `agent-browser extension install` writes the native-messaging host manifest (Chrome/Chromium/Edge/Brave) + a launcher; hidden `__nm-host` speaks the 4-byte-length native-messaging framing. Validated end-to-end on real Chrome: Chrome spawned the host (origin matched the pinned id) and the extension attached the user's real logged-in tabs, streaming Target.attachedToTarget over native messaging — zero token, zero port. Next: bridge the host to the daemon relay (relay.rs) + CdpClient so `agent-browser click/eval/...` drives those tabs.
12 lines
538 B
Markdown
12 lines
538 B
Markdown
# Attribution
|
|
|
|
The chrome.debugger attach + CDP Target handling in `background.js` is adapted
|
|
from **openclaw-browser-relay** by chengyixu
|
|
(https://github.com/chengyixu/openclaw-browser-relay, MIT per its README).
|
|
|
|
Changes for agent-browser-stealth: rebranded to "agent-browser connect"; the
|
|
transport is rewritten from a localhost WebSocket + shared token to Chrome
|
|
**native messaging** (host `com.agent_browser.connect`) — no port, no token,
|
|
Chrome authenticates the extension to the host by id. WebSocket/token/options
|
|
code removed.
|