Closed general

ab permission mirror: two new card kinds (mesh-join, firewall), origin box on every card, cross_box_toasts setting (ab 2.1.66-2.1.69)

John Lauer · 1mo ago ·closed by John Lauer

Adom Bridge 2.1.66 to 2.1.69 changed the permission mirror that ah receives in embedded mode. ah needs four rendering and settings changes so its dialog reflects ab's prompts fully.

1. Two new card kinds on the mirror

type mesh-join (2.1.66): a machine in the account directory that no human has trusted into this box's mesh yet. Body fields: command is prose ("ConfRoomROG wants to join your Adom Mesh. Machine: confroomrog ... Only trust a machine you set up yourself."), choices is [{id:"trust",label:"Trust this machine"},{id:"deny",label:"Deny",kind:"deny"}], meshJoin:{nodeId,name,machine,version}, who is "Adom Mesh". Render the body as prose (no monospace command box) and do not add a "The AI says" line. Post the decision to ab's resolve endpoint exactly as for a shell card, with decision trust or deny. ab records it as a human decision (who, on which box, when) and carries it to the user's other boxes over the mesh.

type firewall (forwarded to ah from 2.1.69): informational only. Another box is showing a Windows firewall prompt for the Adom Mesh; a human must click Allow there and tick both profiles. One button, "Got it" (choices:[{id:"dismiss",label:"Got it"}]), nothing to resolve. Auto-expire it after about 5 minutes.

2. Say which box the decision runs on

Every mirrored card carries machine (the box the command would run on) and remote:{peer,machine,via}. Render the box name loudly, the way ab does ("ON WINVM"). A decision made in ah's dialog runs on that box, not on this one.

3. Mirrored Auto now persists

A mirrored bypass_while_running (Auto) decision now persists on the origin box, like the local Auto button (2.1.68). No ah change needed; just so the behaviour is not a surprise.

4. New whitelisted setting cross_box_toasts

Values prompts | decisions (default) | all, readable via settings_get and settable via settings_set (2.1.69). Permission prompts always cross boxes; the setting controls whether toasts that wait for an answer (decisions) and plain informational toasts (all) are mirrored to this box. Please add it to ah's settings panel next to the other ab settings.

Optional

desktop_ui_state now lists ab's cards (state.permissions[], each with kind, id, who, choices, remote box) and desktop_ui_decide {choice, kind|id|nodeId} decides one over the loopback direct API through the exact click path (loopback callers only; relay callers get human_only). ah may drive ab's own stack with these instead of keeping a separate dialog.

Contract details: adom-bridge skills/MESH.md (trust section), skills/UI_TOOLED_OUT.md, and skills/PERMISSION_MODEL.md.

3 Replies

John Lauer · 1mo ago

Shipped in Hydrogen 1.0.282 (insiders, 2026-09-08 14:35 UTC). Verified on AdomLapper and ConfRoomROG by emitting the three card shapes into the main window through the control API and reading the rendered DOM, then a screenshot.

Before (1.0.281), same payloads:

  • mesh-join rendered as "SHELL COMMAND / ON ADOMLAPPER / Command needs approval", monospace command box, an "The AI says:" line, scope label ALLOW, buttons Trust this machine / Deny.
  • firewall rendered as "SHELL COMMAND / ON CONFROOMROG", monospace box, "Got it" tried to resolve on ab and the card stayed on screen (stuck until a dismiss event).
  • a remote shell card looked identical to a local one (plain "ON WINVM" chip).

After (1.0.282):

  • mesh-join: chip "ADOM MESH", header "ConfRoomROG wants to join your Adom Mesh", sub "Only trust a machine you set up yourself...", the prose body as prose (no monospace box, no AI line), a node line "Machine confroomrog · Adom Bridge 2.1.72 · node 209d64b39da6…", meta "From Adom Mesh · about AdomLapper", buttons Trust this machine / Deny with no scope label. The choice id goes back to /permission/resolve verbatim (trust / deny), as for a shell card.
  • firewall: chip "FIREWALL", header "Windows firewall prompt on ConfRoomROG", sub "Nothing to decide here. Go to that box, click Allow on the Windows prompt, and tick both Private and Public.", prose body, one "Got it" that closes the card locally (nothing posted to ab), auto-expires after 5 min, and does not count in the "N approvals waiting" pill.
  • origin box: every card's chip reads machine, remote.machine or meshJoin.machine; a card whose remote.machine is set gets the accent-filled chip ("ON CONFROOMROG", "ON WINVM").
  • settings: "Prompts from your other boxes" (cross_box_toasts: prompts / decisions / all) under Adom Bridge > Startup next to the mesh settings, reading the live value from settings_get and writing through POST /ab/settings (applied: {cross_box_toasts: decisions} confirmed). ab 2.1.72 whitelists the key but omits it from its settings_get schema, so Hydrogen adds the row itself until the schema carries it.

Section 3 (mirrored Auto persists) needed nothing. desktop_ui_state / desktop_ui_decide not adopted; Hydrogen keeps its own stack.

Caveat that decides whether any of this is visible to Ray: a card raised on ANOTHER box still never reaches the embedded Hydrogen, because ab's render_mirrored_request shows a toast and its own card only (adom/adom-bridge#164, measured today: 4 winvm cards in AdomLapper's ab, 0 in its Hydrogen). Once ab forwards them, 1.0.282 renders them as above. mesh-join and firewall are raised locally on each box, so those two work now.

John Lauer · 1mo ago

1.0.285 follow-up: ab 2.1.74 sends the generic title "Command needs approval" on mesh-join and firewall cards, so Hydrogen now always uses its own headline for those kinds ("winvm wants to join your Adom Mesh", "Windows firewall prompt on "), and the mesh-join meta reads "trust decision for · via mesh". Verified on AdomLapper with ab's exact payload. With adom-bridge#164 closed (2.1.74/2.1.75) the cross-box cards this issue was written for now arrive for real; a winvm shell card reached the laptop's Hydrogen in 2.5 s.

John Lauer · 1mo ago

Closing. Shipped in 1.0.282 and 1.0.285, verified against ab's exact payloads for the mesh-join, firewall and cross-box cards.

Log in to reply.