Adom Bridge (macOS)
Public Made by Adomby adom
Adom Bridge for macOS: the menu-bar daemon that connects AI tools to your Mac.
name: adom-desktop-bridge-ownership description: The boundary between Adom Bridge core and a bridge author — what AD owns vs what you (the bridge) own. Read before filing an AD bug about a bridge (kicad, fusion360, native-browser, puppeteer, blender, rdp, or any third-party bridge) or before editing bridge code, so you fix and report in the right place.
Who owns what: AD core vs bridge author
Read this FIRST if you're working on, debugging, or filing a bug about a bridge (kicad, fusion360, native-browser, puppeteer, blender, rdp, or any third-party bridge). It exists because an AI drove the Fusion bridge end-to-end, hit a dozen issues, and filed almost all of them against adom-desktop — when nearly every one was bridge code. The platform never stated the boundary, so the AI guessed "AD," posted to the wrong place, and hand-edited the wrong copy. Don't repeat that.
The split
Adom Bridge (AD) core owns
- The
adom-desktopCLI + the relay //commandpassthrough (AD relays a bridge's response verbatim — incl._hint/_next/relatedand every other top-level field the bridge sets; v1.9.30 made this a denylist, never an allowlist). - Bridge lifecycle: discover/register/spawn/reap, stable ports, the
bridge_*verbs, and streaming a bridge from its wiki page into the local cache (bridge_install/refresh_bridges/ the 4-h auto-sync). - The core
desktop_*verbs (input, screenshot, UIA, tunnels, wsl, …). - Generic, app-agnostic behavior. AD returns good DATA so the calling AI decides — it does NOT bake in app-specific verbs (see CLAUDE.md "AD stays GENERIC").
The bridge author owns (NOT AD)
- Every bridge-specific verb and its behavior — args, outputs, and the per-call
_hint/_next/related/pitfalls(the rich-hint contract). A wrong/missing hint is a bridge fix. - Any integration the bridge ships — e.g. Fusion's APS cloud search: its
OAuth/auth, its config, its
*_aps_*verbs, its never-charge caps. AD does NOT manage it. Divergent results from the bridge's own status verb = a bridge bug. - The bridge's add-in / plugin code AND getting it deployed into the host app.
Editing the streamed cache source is not enough if the host app loads the add-in
from elsewhere (e.g. Fusion loads from
%APPDATA%\…\API\AddIns\, not the bridges-cache) — wiring cache→host-app is the bridge's concern. - The bridge's
SKILL.md,describeverb, hero/wiki page, and version. - The edit-source → publish → bump version → reinstall loop.
The cardinal rules
- NEVER hand-edit the streamed cache (
%LOCALAPPDATA%\Adom Desktop\bridges-cache\<bridge>\). It's a download. Edit the **source** (the bridge's own repo/wiki),publish, bump the version, thenbridge_install/refresh_bridgesto pull it. A hand-edit is overwritten on the next sync and may not even be what the host app runs (cache-vs-deployed-copy gotcha). - Before filing a bridge bug against adom-desktop, ask "who owns this?" If it's verb behavior, a hint, an integration, an add-in, or the bridge's docs → it's the bridge author's repo/wiki, not AD. Cloud-owned bridges (kicad, fusion, puppeteer) live in their OWN wiki repos (see CLAUDE.md "Cloud-owned bridge repos").
- AD's job is to relay + host, generically. If AD is dropping or mangling a bridge's data, or missing a lifecycle/verb capability — THAT is an AD bug. Fix the AD VERB; don't re-absorb the bridge.
When in doubt: data-shape/relay/lifecycle/ports → AD; what a verb does, its hints, its integration, its add-in, its docs → the bridge.
Skill ownership — a bridge ships its OWN skill pkg (not bundled in AD-core)
The same boundary applies to the consumer skill (the SKILL.md that teaches a cloud container how to drive a bridge's verbs):
- The AD-core pkg (
adom-wiki pkg install adom/adom-desktop) ships ONLY core skills — desktop verbs, discovery, direct-api, installer, notify, multi-ad, bridge-sdk, bridge-ownership, windows-host. It must NOT bundle a cloud/3rd-party bridge's skill (it would go stale and isn't AD's to own). (2026-06-28:eagle-commands.md— Fusion-Electronics,fusion_electron_run— was dropped for this reason; 2026-06-29:pup-SKILL.mdwas dropped too when Puppeteer became cloud-owned. Both belong in their bridge's own pkg.) - Each cloud/3rd-party bridge publishes its OWN skill pkg carrying its SKILL.md, e.g.
adom/adom-desktop-kicad-bridge,adom/adom-desktop-fusion-bridge,adom/adom-desktop-puppeteer-bridge. The cloud thread that owns the bridge owns + bumps it. (Puppeteer's runtime still ships as an NSIS-bundled SEED for fresh-PC/offline spawn — but its skill now ships from its own page, like the other cloud bridges.) - How a container gets dynamic bridge skills: it does NOT get them from the AD-core install.
It (a) installs AD-core (CLI + core skills), then (b)
adom-desktop bridge_listagainst the live laptop AD to see which bridges are present, then (c)adom-wiki pkg install adom/adom-desktop-<bridge>-bridgefor each one it needs (andadom-wiki pkg updatekeeps them fresh, version-matched to the bridge the cloud thread published). The bridge's runtime PAYLOAD (what AD spawns on the laptop) is a SEPARATE artifact — the/filesmanifest+zip thatbridge_install/refresh_bridgespull — don't conflate it with the skill pkg. - Discoverability gap / enhancement:
bridge_listshould surface the exactadom-wiki pkg install adom/adom-desktop-<name>-bridgeline per live bridge so a container knows precisely which skill pkg to pull (today it infers the slug from the bridge'sdocs).
---
name: adom-desktop-bridge-ownership
description: The boundary between Adom Bridge core and a bridge author — what AD owns vs what you (the bridge) own. Read before filing an AD bug about a bridge (kicad, fusion360, native-browser, puppeteer, blender, rdp, or any third-party bridge) or before editing bridge code, so you fix and report in the right place.
---
# Who owns what: AD core vs bridge author
**Read this FIRST if you're working on, debugging, or filing a bug about a bridge
(kicad, fusion360, native-browser, puppeteer, blender, rdp, or any third-party
bridge).** It exists because an AI drove the Fusion bridge end-to-end, hit a dozen
issues, and filed almost all of them against **adom-desktop** — when nearly every
one was **bridge code**. The platform never stated the boundary, so the AI guessed
"AD," posted to the wrong place, and hand-edited the wrong copy. Don't repeat that.
## The split
### Adom Bridge (AD) core owns
- The `adom-desktop` CLI + the **relay / `/command` passthrough** (AD relays a
bridge's response **verbatim** — incl. `_hint`/`_next`/`related` and every other
top-level field the bridge sets; v1.9.30 made this a denylist, never an allowlist).
- **Bridge lifecycle**: discover/register/spawn/reap, stable ports, the
`bridge_*` verbs, and **streaming a bridge from its wiki page into the local
cache** (`bridge_install` / `refresh_bridges` / the 4-h auto-sync).
- The core `desktop_*` verbs (input, screenshot, UIA, tunnels, wsl, …).
- Generic, app-agnostic behavior. **AD returns good DATA so the calling AI decides
— it does NOT bake in app-specific verbs** (see CLAUDE.md "AD stays GENERIC").
### The bridge author owns (NOT AD)
- **Every bridge-specific verb and its behavior** — args, outputs, and the per-call
`_hint`/`_next`/`related`/`pitfalls` (the rich-hint contract). A wrong/missing
hint is a **bridge** fix.
- **Any integration the bridge ships** — e.g. Fusion's **APS** cloud search: its
OAuth/auth, its config, its `*_aps_*` verbs, its never-charge caps. AD does NOT
manage it. Divergent results from the bridge's own status verb = a **bridge** bug.
- **The bridge's add-in / plugin code AND getting it deployed into the host app.**
Editing the streamed cache source is not enough if the host app loads the add-in
from elsewhere (e.g. Fusion loads from `%APPDATA%\…\API\AddIns\`, not the
bridges-cache) — wiring cache→host-app is the **bridge's** concern.
- The bridge's `SKILL.md`, `describe` verb, hero/wiki page, and version.
- The **edit-source → publish → bump version → reinstall** loop.
## The cardinal rules
1. **NEVER hand-edit the streamed cache** (`%LOCALAPPDATA%\Adom Desktop\bridges-cache\<bridge>\`).
It's a download. Edit the **source** (the bridge's own repo/wiki), `publish`,
bump the version, then `bridge_install`/`refresh_bridges` to pull it. A
hand-edit is overwritten on the next sync and may not even be what the host app
runs (cache-vs-deployed-copy gotcha).
2. **Before filing a bridge bug against adom-desktop, ask "who owns this?"** If it's
verb behavior, a hint, an integration, an add-in, or the bridge's docs → it's the
**bridge author's** repo/wiki, not AD. Cloud-owned bridges (kicad, fusion, puppeteer)
live in their OWN wiki repos (see CLAUDE.md "Cloud-owned bridge repos").
3. **AD's job is to relay + host, generically.** If AD is *dropping* or *mangling*
a bridge's data, or missing a lifecycle/verb capability — THAT is an AD bug.
Fix the AD VERB; don't re-absorb the bridge.
When in doubt: data-shape/relay/lifecycle/ports → **AD**; what a verb does, its
hints, its integration, its add-in, its docs → **the bridge**.
## Skill ownership — a bridge ships its OWN skill pkg (not bundled in AD-core)
The same boundary applies to the **consumer skill** (the SKILL.md that teaches a cloud
container how to drive a bridge's verbs):
- **The AD-core pkg** (`adom-wiki pkg install adom/adom-desktop`) ships ONLY core skills —
desktop verbs, discovery, direct-api, installer, notify, multi-ad, bridge-sdk,
bridge-ownership, windows-host. It must NOT bundle a cloud/3rd-party bridge's skill (it
would go stale and isn't AD's to own). (2026-06-28: `eagle-commands.md` — Fusion-Electronics,
`fusion_electron_run` — was dropped for this reason; 2026-06-29: `pup-SKILL.md` was dropped
too when Puppeteer became cloud-owned. Both belong in their bridge's own pkg.)
- **Each cloud/3rd-party bridge publishes its OWN skill pkg** carrying its SKILL.md, e.g.
`adom/adom-desktop-kicad-bridge`, `adom/adom-desktop-fusion-bridge`,
`adom/adom-desktop-puppeteer-bridge`. The cloud thread that owns the bridge owns + bumps it.
(Puppeteer's runtime still ships as an NSIS-bundled SEED for fresh-PC/offline spawn — but its
*skill* now ships from its own page, like the other cloud bridges.)
- **How a container gets dynamic bridge skills:** it does NOT get them from the AD-core install.
It (a) installs AD-core (CLI + core skills), then (b) `adom-desktop bridge_list` against the
live laptop AD to see which bridges are present, then (c) `adom-wiki pkg install
adom/adom-desktop-<bridge>-bridge` for each one it needs (and `adom-wiki pkg update` keeps them
fresh, version-matched to the bridge the cloud thread published). The bridge's runtime PAYLOAD
(what AD spawns on the laptop) is a SEPARATE artifact — the `/files` manifest+zip that
`bridge_install`/`refresh_bridges` pull — don't conflate it with the skill pkg.
- **Discoverability gap / enhancement:** `bridge_list` should surface the exact
`adom-wiki pkg install adom/adom-desktop-<name>-bridge` line per live bridge so a container
knows precisely which skill pkg to pull (today it infers the slug from the bridge's `docs`).