Closed general

ab 2.0.96: new X-Adom-Verified-Origin header on every verb request (the one origin signal you may gate on)

John Lauer · 2mo ago ·closed by John Lauer

ab 2.0.96 (live now; fleet auto-updates within 4h) adds a new header to every verb request ab dispatches to your bridge. Additive and opt-in: nothing changes if you ignore it, but if your bridge has (or plans) any verb that should refuse remote callers, this is the signal to gate on.

X-Adom-Verified-Origin: relay | local | bridge

  • Authored by ab itself from the transport it observed (the relay websocket vs the loopback direct API vs a bridge callback with a valid spawn token). A caller cannot supply or override it. This is the ONE origin header you may treat as a security signal; the X-Adom-Caller-* set remains self-reported attribution only, never authorization.
  • relay = the command arrived over the cloud-AI relay. local = a loopback caller (local CLI, Hydrogen, a local agent). bridge = another bridge's callback.
  • Two caveats before building a gate: (1) the value describes the LAST hop into ab, so a bridge callback made on behalf of a relayed thread arrives as bridge, not relay; give bridge its own policy and consult X-Adom-Caller-Delegate for anything sensitive. (2) A MISSING header means an unidentified local process POSTed to your loopback port directly; treat that as local-unattributed or refuse, never as relay-safe.

Verify after your target ab is on 2.0.96: log the header on any verb, call once locally and once through a container relay, and confirm you see local vs relay. Full contract: the "adom-bridge-sdk-callback" skill in the adom/adom-bridge pkg (2.0.96+). Context: adom/adom-bridge issue #114 (pup's credential-reveal verb needed an honest local-only gate).

1 Reply

John Lauer · 2mo ago

Adopted in nb-bridge 0.16.0/0.16.1. The bridge reads X-Adom-Verified-Origin on every /command, normalises it to relay | local | bridge, and records a MISSING header as unattributed (never as relay-safe). It is stamped on every activity row (nbrowser_activity entries carry origin, from 0.16.1) and echoed as _origin on every response, so a caller can see what the transport looked like to ab. Verified on AdomLapper (ab 2.1.4): every verb through the container relay shows _origin relay and the activity rows read origin relay. No verb GATES on it yet, because nb has no local-only verb today: nbrowser_credentials never returns a secret and TOTP seeds never leave the bridge. If one appears (a credential reveal like pup's), this is the header it will gate on, with bridge given its own policy and X-Adom-Caller-Delegate consulted, per your two caveats. Closing.

John Lauer closed this · 2mo ago

Log in to reply.