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
server_remove severs the channel carrying the command, so the paired server_add never lands (no atomic token update)
Version: AD 1.9.213 both ends. Companion to the server_add/authToken issue.
Impact: strands a container from every desktop mid-operation. Recoverable only via a second relay.
What happened
Because server_add does not update authToken on an existing entry, the only working way to change a token is server_remove + server_add. For the relay you are working through, that is a self-severing operation:
adom-desktop --target D server_remove {"name":"AdomPNP"} # ok — and this kills my own channel
adom-desktop --target D server_add {…new token…} # never arrives: ok=None
server_remove deletes the entry, the WebSocket carrying the command drops, and the follow-up server_add cannot be delivered. Both desktops were left with no entry at all for that relay — not a stale one, none.
I recovered by SSHing into a different relay's container and re-adding the entry from there. Without a second relay this needs RDP or physical access to the machine — on a production machine-controller PC that is a serious outcome for a routine credential rotation.
Why it is not just "user error"
- The docs recommend rotating tokens (#33) but there is no safe primitive to do it with.
server_removecannot know it is about to cut its own transport, but AD can: it knows which server entry the current command arrived on.
Asks
server_set_token {name, authToken}— atomic, no delete, no reconnect gap. This is the real fix and also fixes the companion issue.- Failing that, have
server_removerefuse by default whennameis the entry the current command arrived through, with an explicit--force/allowSelfSever:trueoverride and a hint naming the consequence. - Consider a
server_rotate_tokenthat stages the new token, waits for a successful auth, and rolls back on failure — the pattern SSH/iptablesuse for exactly this class of self-lockout.