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
Bundled-bridge collapse adopts an exe bridge's Python sidecar as the bridge and re-pins routing to it
Follow-up to #134 from the Fusion bridge's Rust port (the exe is now the ab-spawned bridge on ConfRoomROG, with server.py as its Python sidecar).
What happened. BUNDLED_SPECS in dynamic_bridge.rs identifies the fusion360 bridge as "a python.exe whose /health body mentions Fusion". The exe's sidecar is exactly that, so the scan-based collapse adopted the sidecar as the bridge, re-pinned assigned_ports["fusion360"] to the sidecar's port (re-pinned 'fusion360' → healthy instance on port 20120 ... [was assigned 62806]), and every verb went straight to the sidecar for the rest of the session. The exe on the port ab itself had passed with --port was bypassed; nothing native ran, and nothing in the logs said so from ab's side.
Worked around on our side (1.9.355): the sidecar now runs under its own image name (adom-fusion-sidecar.exe, a copy of ab's python.exe launcher beside its DLLs), and binds outside the ephemeral range ab allocates from, so neither the image match nor the persisted-port probe can pick it. Verified: after a respawn ab still routes to the exe 90 s later.
Asks:
- When a bridge's manifest says
spawn.kind: "exe", the bundled spec'simageshould be the manifest's entrypoint exe, not the runtime interpreter. Better still, key adoption on a marker the bridge declares inbridge.json(e.g.identity: {"image": "...", "healthMarker": "..."}) so a port-scan collapse cannot adopt a helper process. - Log the re-pin as an activity entry visible to callers (
bridge_info.adLifecyclecarries spawns and reaps but not re-pins), so a bypass like this shows up in one read.