Adom Bridge
Public Made by Adomby adom
Adom Bridge unleashes your AI onto your full PC: full power, full safety. The AI breaks out of the container it runs in and onto your real machine, managing and running your entire laptop as you: launch apps, move files, drive any window, control KiCad, Fusion 360 or your real signed-in browser. Works with any AI, cloud or local (Claude Desktop, Claude Code, Codex), no Hydrogen required. Bridge and its bridges are an operating system for AI, with managed Node and Python runtimes, and a human-onl
AD-core intercepts browser_raise_os_window/focus_window, bypassing pup's foreground gate (reason + audit trail)
What
AD-core INTERCEPTS browser_raise_os_window / browser_focus_window (native handler: resolves the window by its "(session: )" title, returns {raised, hwnd, resolvedBy}) and never forwards the verb to the puppeteer bridge. That bypasses pup 1.8.70's new FOREGROUND GATE.
The gate being bypassed
pup 1.8.70 (mirroring abe's dual-key contract) requires a foregroundReason (min 10 chars, quote/paraphrase of what the user said) for ANY foregrounding; the reason is logged, recorded in lastAgentUpdate, and surfaced as lastForeground in status so the user can audit "who put this window on my screen and why". browser_open_window {foreground:true} is gated correctly (pup receives it). But raise/focus never reach pup, so ANY thread can silently foreground any pup window with zero reason and zero audit trail.
Real incident (2026-07-15, AdomLapper)
A thread background-opened a wiki page then raised it 2 minutes later onto the user's screen. No log line anywhere; forensics required reading an in-page focus-latch timestamp. The raise went through AD's native interceptor.
Repro
adom-desktop --target ADOMGPU browser_raise_os_window {"sessionId":"<any pup session>"} → returns {raised:true, resolvedBy:"title", hwnd:...} (AD's shape); the pup bridge log shows the verb never arrived; pup's foreground_reason_required refusal never fires.
Ask (either works; first preferred)
- STOP intercepting browser_raise_os_window / browser_focus_window — forward them to the puppeteer bridge like other browser_* verbs, so the bridge's gate + audit trail apply. (If the interception exists for the title-resolution convenience, pup already does that itself.)
- OR apply the same dual-key gate natively in AD's interceptor: require foregroundReason (min 10 chars) else refuse with errorCode foreground_reason_required, and log the granted reason in the AD Activity Log.
Contract reference: abe's userRequestedForeground + foregroundReason (driving-the-extension skill) and pup 1.8.70's browser_describe entries.