Adom Desktop - Fusion 360 Bridge
Public Made by Adomby adom
Drive Autodesk Fusion 360 from the cloud via Adom Desktop: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.
name: fusion-onboarding description: Onboard a brand-new Adom user who wants Fusion 360 features but doesn't have Fusion installed — the AI downloads the Fusion installer, silent-installs it, drives the Autodesk login (free/trial is enough), and auto-installs the AdomBridge add-in so the bridge can inject commands. "Complete the circuit" so fusion_* verbs work end to end. Trigger words — install fusion, no fusion, fusion not installed, set up fusion, download fusion, onboard fusion, get fusion, fusion trial, install the bridge add-in, fusion addin not running, set up the fusion bridge from scratch.
Fusion 360 onboarding — from zero to a working bridge
Goal: a new Adom user with no Fusion 360 should be able to use the Fusion bridge after a
hands-off, AI-driven setup. The AI installs Fusion, signs them in, and wires up the add-in so
fusion_* commands work. The free/trial tier is plenty for viewing files and a lot of real
work — nobody has to pay to get value.
All laptop steps run via adom-desktop --target <laptop> shell_execute / run_script /
send_files. Drive the user's own machine; don't ask them to do steps you can do.
Step 0 — Check readiness (fast, never launches Fusion)
Call fusion_readiness (or AD's bridge_readiness) FIRST - it reports installed / running
/ ready without launching anything:
installed:false→ onboard (the steps below).installed:true, running:false→ no onboarding needed, justfusion_start, then drive.ready:true→ drive Fusion directly.
NOTE (AD >=1.9.63): AD DETECTS the Fusion host app (via the bridge.json detect block - the
%LOCALAPPDATA%\Autodesk\webdeploy\production\*\FusionLauncher.exe path) but NEVER installs it -
Fusion is the user's host app. AD also provisions Python itself - a system install if one is on
PATH, else a portable, no-UAC python-build-standalone copy (pinned 3.12.13) under
~/.adom/adom-runtimes/ - and spawns the bridge from it by absolute path. So never download or
bootstrap Python here; the user sees no UAC prompt for a runtime (check state with AD's runtimes
verb). Onboarding is only about Fusion itself + the Autodesk login + deploying the add-in.
Step 1 — Download the Fusion installer
The installer is the small "Fusion Client Downloader" (it streams the full app during install).
URL: https://dl.appstreaming.autodesk.com/production/installers/Fusion Client Downloader.exe
Download it to a no-space path on the laptop (e.g. C:\tmp):
shell_execute {"command":"curl -L -o C:\\tmp\\FusionDL.exe \"https://dl.appstreaming.autodesk.com/production/installers/Fusion%20Client%20Downloader.exe\""}
(PowerShell Invoke-WebRequest works too; curl ships on modern Windows.)
Step 2 — Silent install (elevated)
"C:\tmp\FusionDL.exe" --globalinstall --quiet # system-wide, no UI
- Needs admin/elevation — run it so it elevates (UAC). On the user's own box this is one
consent. It then streams ~several GB, so it can take 10-30 min — monitor, don't block
(poll for the FusionLauncher under
%LOCALAPPDATA%\Autodesk\webdeploy\production\<hash>\). - Uninstall (if ever needed):
--globalinstall --process uninstall --quiet. - When done,
fusion_detectflips toinstalled:true(the bridge finds the newest webdeploy launcher by mtime).
Step 3 — First launch + Autodesk login (free account / trial)
fusion_start launches it; the first run needs an Autodesk login. If they have no Autodesk account,
the sign-in page has Create account (free) — and Fusion offers a free trial / personal-use
tier that's enough for viewing and a lot of work. Don't auto-enter their password/2FA; do drive
everything else.
Use the dedicated
fusion-autodesk-signinskill for the full drive — it has the complete, battle-tested sequence and every pitfall (blank webview → restart Fusion, invisible-Edge / CLIXML noise, warm Google/Apple/MS SSO, the Identity Manager protocol overlay, fast-expiring codes, andfusion_notify_ownerescalation). The summary below is the mechanism; that skill is the how-to.
The mechanism (why naive clicking fails)
Fusion's "Sign In" opens the default browser to an Autodesk OAuth page. When auth completes the
browser lands on signin.autodesk.com/idmgr/callback#code=…, whose JS posts the code to Fusion's
localhost listener via an adskidmgr:// protocol handoff. Three traps make this fail if you
click naively:
- Codes expire fast. A stale sign-in tab left open holds a dead code → "Sign-in request expired". Every retry that races an old tab loses.
desktop_ui_click(UIA Invoke) does NOT fire the protocol. Browsers block protocol launches from untrusted (synthetic-invoke) events. You need an isTrusted click:desktop_click(SendInput coordinate click) or annbrowserCDP click.- An in-page "This site is trying to open Autodesk Identity Manager?" overlay gates the launch.
It is NOT an owned popup, so
desktop_screenshot_windowsees it but popup-capture (ownedPopupCount) never will. It must be clicked "Open".
The PROVEN sequence (validated live 2026-07-05, zero password entry by the AI)
- Warm the session / clear stale tabs. If the user already authenticated Autodesk in the
browser, the session is warm. FIRST close any dead
signin.autodesk.com/ "Sign in - Autodesk" tabs (foreground the Edge window,desktop_press_key {"key":"ctrl+w"}per tab) — they only hold expired codes and cause false "expired" screens. - One fresh request.
desktop_ui_click"Retry browser sign-in" (or "Sign In") on the Fusion window to mint exactly one fresh code + open one live auth tab. - Open Product, isTrusted. On the "You're signed in" page, click "Open Product" with
desktop_click(SendInput), NOTdesktop_ui_click. - Clear the protocol overlay, FAST. When the "open Autodesk Identity Manager?" overlay appears,
desktop_clickthe "Always allow" radio (so it never blocks again) then "Open" — before the code expires. - Confirm. Poll
fusion_readiness; the Fusion window title flips "Signing in - Autodesk Fusion" → "Home - Autodesk Fusion" andreadygoes true (fusion_readinessreportsneedsSignin:truethe whole time it's blocked, so branch on that).
Headless variant: if nbrowser (the Adom browser extension, nbrowser_readiness) is driving
the same browser window Fusion opened, do steps 3-4 via CDP (nbrowser_eval to click the DOM
button) — CDP clicks are isTrusted and need no window focus, beating the expiry race. Caveat: the
auth tab must be in nbrowser's window; if Fusion opened a different Edge window, use the SendInput
path above.
NOTIFY only when you truly can't proceed. The sign-in is something you should AUTOMATE, not punt. Reserve an AD
notify_usertoast for a genuine wall (a UAC/elevation prompt, a--globalinstallconsent, license acceptance, or a 2FA/password step you must not auto-fill). As of AD 1.9.84notify_userworks directly over the bridge's direct API — you don't relay a payload to the AI anymore. If the bridge runs UNATTENDED (e.g. on a VM) and the user is on another machine, add a cross-ADtarget(a peer clientName from thetargetsverb, or"all") so the toast lands where they actually are. The bridge already fires this itself for a seat/ licensing DECISION dialog (a true wall) — seenotifyDeliveredin the launch response.
Step 4 — Complete the circuit: auto-install the AdomBridge add-in
This is what lets the bridge inject commands into Fusion after launch.
- The bridge does this for you: on start,
server.pyauto-runsinstall_addin, which lands the add-in in EVERY known Fusion add-in dir —%APPDATA%\Autodesk\FusionAddins\(what 2025+ Fusion actually scans) AND the legacyAutodesk Fusion[ 360]\API\AddIns\dirs. ⚠ Fusion MOVED this directory across versions and silently ignores the others (an add-in only in the legacy dir never loads on current Fusion — issue #63, proven live on a fresh install). Never assume one path. - ⛔ NEVER ask the user to restart Fusion or enable the add-in. After installing, YOU restart it:
fusion_stopthenfusion_start— the add-in auto-loads (runOnStartup:true, verified live: port 8774 up 20s after restart, zero manual enabling). Asking the user to do it defeats the bridge. - It auto-loads every launch:
AdomBridge.manifesthas"runOnStartup": true, so Fusion runs the add-in (and its localhost:8774 HTTP server) automatically on startup — no manual "enable" needed. (Verified: after a Fusion restart the add-in comes backaddinReady:truewith no UI interaction.) - If the add-in was just installed while Fusion was running, restart Fusion (
fusion_closethenfusion_start) so it picks up + runs the add-in.
Step 5 — Verify the circuit
fusion_addin_status {} # add-in loaded + healthy?
fusion_get_app_state {} # round-trips through the add-in to Fusion
When fusion_start returns addinReady:true and a fusion_* verb round-trips, the circuit is
complete — the bridge can drive Fusion (open/export/search/etc.).
Then: cloud search (optional, recommended)
If they'll use cloud-file search, continue with the fusion-aps-search /
fusion-aps-signin skills (one-time-per-company APS setup; each user signs in once; never
charged).
Notes / gotchas
- The big install is the slow part — monitor it (poll for the webdeploy launcher), don't sit on a blocking call.
- Admin elevation is required for
--globalinstall; expect one UAC consent on the user's box. - After a major Fusion self-update (Fusion web-deploys updates ~weekly), the add-in survives in
API/AddIns, but re-verify withfusion_addin_status; re-runinstall_addinif it drifted. - Verify the current installer URL / flags if Autodesk changes them (Sources: silentinstallhq, Autodesk deploy docs).
---
name: fusion-onboarding
description: Onboard a brand-new Adom user who wants Fusion 360 features but doesn't have Fusion installed — the AI downloads the Fusion installer, silent-installs it, drives the Autodesk login (free/trial is enough), and auto-installs the AdomBridge add-in so the bridge can inject commands. "Complete the circuit" so fusion_* verbs work end to end. Trigger words — install fusion, no fusion, fusion not installed, set up fusion, download fusion, onboard fusion, get fusion, fusion trial, install the bridge add-in, fusion addin not running, set up the fusion bridge from scratch.
---
# Fusion 360 onboarding — from zero to a working bridge
Goal: a new Adom user with **no Fusion 360** should be able to use the Fusion bridge after a
hands-off, AI-driven setup. The AI installs Fusion, signs them in, and wires up the add-in so
`fusion_*` commands work. **The free/trial tier is plenty** for viewing files and a lot of real
work — nobody has to pay to get value.
All laptop steps run via `adom-desktop --target <laptop> shell_execute` / `run_script` /
`send_files`. Drive the user's own machine; don't ask them to do steps you can do.
## Step 0 — Check readiness (fast, never launches Fusion)
Call **`fusion_readiness`** (or AD's **`bridge_readiness`**) FIRST - it reports `installed` / `running`
/ `ready` without launching anything:
- `installed:false` → onboard (the steps below).
- `installed:true, running:false` → **no onboarding needed**, just `fusion_start`, then drive.
- `ready:true` → drive Fusion directly.
NOTE (AD >=1.9.63): AD **DETECTS** the Fusion host app (via the bridge.json `detect` block - the
`%LOCALAPPDATA%\Autodesk\webdeploy\production\*\FusionLauncher.exe` path) but **NEVER installs it** -
Fusion is the user's host app. AD also **provisions Python itself** - a system install if one is on
PATH, else a portable, no-UAC python-build-standalone copy (pinned 3.12.13) under
`~/.adom/adom-runtimes/` - and spawns the bridge from it by absolute path. So **never** download or
bootstrap Python here; the user sees no UAC prompt for a runtime (check state with AD's `runtimes`
verb). Onboarding is only about Fusion itself + the Autodesk login + deploying the add-in.
## Step 1 — Download the Fusion installer
The installer is the small "Fusion Client Downloader" (it streams the full app during install).
```
URL: https://dl.appstreaming.autodesk.com/production/installers/Fusion Client Downloader.exe
```
Download it to a no-space path on the laptop (e.g. C:\tmp\):
```
shell_execute {"command":"curl -L -o C:\\tmp\\FusionDL.exe \"https://dl.appstreaming.autodesk.com/production/installers/Fusion%20Client%20Downloader.exe\""}
```
(PowerShell `Invoke-WebRequest` works too; curl ships on modern Windows.)
## Step 2 — Silent install (elevated)
```
"C:\tmp\FusionDL.exe" --globalinstall --quiet # system-wide, no UI
```
- Needs **admin/elevation** — run it so it elevates (UAC). On the user's own box this is one
consent. It then **streams ~several GB**, so it can take 10-30 min — **monitor, don't block**
(poll for the FusionLauncher under `%LOCALAPPDATA%\Autodesk\webdeploy\production\<hash>\`).
- Uninstall (if ever needed): `--globalinstall --process uninstall --quiet`.
- When done, `fusion_detect` flips to `installed:true` (the bridge finds the newest webdeploy
launcher by mtime).
## Step 3 — First launch + Autodesk login (free account / trial)
`fusion_start` launches it; the first run needs an Autodesk login. If they have no Autodesk account,
the sign-in page has **Create account** (free) — and Fusion offers a **free trial / personal-use**
tier that's enough for viewing and a lot of work. **Don't auto-enter their password/2FA; do drive
everything else.**
> **Use the dedicated `fusion-autodesk-signin` skill for the full drive** — it has the complete,
> battle-tested sequence and every pitfall (blank webview → restart Fusion, invisible-Edge / CLIXML
> noise, warm Google/Apple/MS SSO, the Identity Manager protocol overlay, fast-expiring codes, and
> `fusion_notify_owner` escalation). The summary below is the mechanism; that skill is the how-to.
### The mechanism (why naive clicking fails)
Fusion's "Sign In" opens the **default browser** to an Autodesk OAuth page. When auth completes the
browser lands on `signin.autodesk.com/idmgr/callback#code=…`, whose JS posts the code to Fusion's
**localhost** listener via an `adskidmgr://` protocol handoff. Three traps make this fail if you
click naively:
- **Codes expire fast.** A stale sign-in tab left open holds a dead code → "Sign-in request
expired". Every retry that races an old tab loses.
- **`desktop_ui_click` (UIA Invoke) does NOT fire the protocol.** Browsers block protocol launches
from untrusted (synthetic-invoke) events. You need an **isTrusted** click: **`desktop_click`**
(SendInput coordinate click) or an `nbrowser` CDP click.
- **An in-page "This site is trying to open Autodesk Identity Manager?" overlay** gates the launch.
It is NOT an owned popup, so `desktop_screenshot_window` sees it but popup-capture (`ownedPopupCount`)
never will. It must be clicked "Open".
### The PROVEN sequence (validated live 2026-07-05, zero password entry by the AI)
1. **Warm the session / clear stale tabs.** If the user already authenticated Autodesk in the
browser, the session is warm. FIRST close any dead `signin.autodesk.com` / "Sign in - Autodesk"
tabs (foreground the Edge window, `desktop_press_key {"key":"ctrl+w"}` per tab) — they only hold
expired codes and cause false "expired" screens.
2. **One fresh request.** `desktop_ui_click` **"Retry browser sign-in"** (or "Sign In") on the
Fusion window to mint exactly one fresh code + open one live auth tab.
3. **Open Product, isTrusted.** On the "You're signed in" page, click **"Open Product"** with
**`desktop_click`** (SendInput), NOT `desktop_ui_click`.
4. **Clear the protocol overlay, FAST.** When the "open Autodesk Identity Manager?" overlay appears,
`desktop_click` the **"Always allow"** radio (so it never blocks again) then **"Open"** — before
the code expires.
5. **Confirm.** Poll `fusion_readiness`; the Fusion window title flips **"Signing in - Autodesk
Fusion" → "Home - Autodesk Fusion"** and `ready` goes true (`fusion_readiness` reports
`needsSignin:true` the whole time it's blocked, so branch on that).
**Headless variant:** if `nbrowser` (the Adom browser extension, `nbrowser_readiness`) is driving
the **same** browser window Fusion opened, do steps 3-4 via CDP (`nbrowser_eval` to click the DOM
button) — CDP clicks are isTrusted and need no window focus, beating the expiry race. Caveat: the
auth tab must be in nbrowser's window; if Fusion opened a different Edge window, use the SendInput
path above.
> **NOTIFY only when you truly can't proceed.** The sign-in is something you should AUTOMATE, not
> punt. Reserve an AD **`notify_user`** toast for a genuine wall (a UAC/elevation prompt, a
> `--globalinstall` consent, license acceptance, or a 2FA/password step you must not auto-fill).
> As of **AD 1.9.84** `notify_user` works directly over the bridge's direct API — you don't relay a
> payload to the AI anymore. **If the bridge runs UNATTENDED (e.g. on a VM) and the user is on
> another machine, add a cross-AD `target`** (a peer clientName from the `targets` verb, or `"all"`)
> so the toast lands where they actually are. The bridge already fires this itself for a seat/
> licensing DECISION dialog (a true wall) — see `notifyDelivered` in the launch response.
## Step 4 — Complete the circuit: auto-install the AdomBridge add-in
This is what lets the bridge inject commands into Fusion after launch.
- **The bridge does this for you:** on start, `server.py` auto-runs `install_addin`, which lands the
add-in in **EVERY known Fusion add-in dir** — `%APPDATA%\Autodesk\FusionAddins\` (what 2025+
Fusion actually scans) AND the legacy `Autodesk Fusion[ 360]\API\AddIns\` dirs. ⚠ Fusion MOVED
this directory across versions and silently ignores the others (an add-in only in the legacy dir
never loads on current Fusion — issue #63, proven live on a fresh install). Never assume one path.
- **⛔ NEVER ask the user to restart Fusion or enable the add-in.** After installing, YOU restart it:
`fusion_stop` then `fusion_start` — the add-in auto-loads (`runOnStartup:true`, verified live:
port 8774 up 20s after restart, zero manual enabling). Asking the user to do it defeats the bridge.
- **It auto-loads every launch:** `AdomBridge.manifest` has **`"runOnStartup": true`**, so Fusion
runs the add-in (and its localhost:8774 HTTP server) automatically on startup — **no manual
"enable" needed**. (Verified: after a Fusion restart the add-in comes back `addinReady:true`
with no UI interaction.)
- **If the add-in was just installed while Fusion was running**, restart Fusion (`fusion_close`
then `fusion_start`) so it picks up + runs the add-in.
## Step 5 — Verify the circuit
```
fusion_addin_status {} # add-in loaded + healthy?
fusion_get_app_state {} # round-trips through the add-in to Fusion
```
When `fusion_start` returns `addinReady:true` and a `fusion_*` verb round-trips, the circuit is
complete — the bridge can drive Fusion (open/export/search/etc.).
## Then: cloud search (optional, recommended)
If they'll use cloud-file search, continue with the **`fusion-aps-search`** /
**`fusion-aps-signin`** skills (one-time-per-company APS setup; each user signs in once; never
charged).
## Notes / gotchas
- The big install is the slow part — **monitor** it (poll for the webdeploy launcher), don't sit
on a blocking call.
- Admin elevation is required for `--globalinstall`; expect one UAC consent on the user's box.
- After a major Fusion self-update (Fusion web-deploys updates ~weekly), the add-in survives in
`API/AddIns`, but re-verify with `fusion_addin_status`; re-run `install_addin` if it drifted.
- Verify the current installer URL / flags if Autodesk changes them (Sources: silentinstallhq,
Autodesk deploy docs).