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-demo description: > Run a FIRST-TIME-USER demo of the Fusion 360 bridge - the guided tour Hydrogen Desktop's installer fires when someone new wants to see what this thing does. Covers the one verb (fusion_demo), the staged loop, and the two rules that make or break it: FINISH the Autodesk sign-in (never leave a new user parked on the sign-in page) by driving the user's NATIVE browser via ABE/nbrowser_* (already signed into Autodesk) instead of pup (anonymous), and SET UP APS cloud search rather than just mentioning it, then prove it with a live sample search. Then show real work in order: electronics PROJECT -> SCHEMATIC -> 2D BOARD -> 3D BOARD. Trigger words - fusion demo, demo the bridge, show me fusion, first time user demo, hd installer demo, demo verb, guided tour, showcase fusion, new user onboarding demo, fusion_demo.
Demoing the Fusion bridge to a brand-new user
Why this exists
HD's installer ran a "demo" that opened Fusion and then sat on the Autodesk sign-in page doing nothing (John, 2026-07-20). A first-time user watched an app open and stall. That is the single worst first impression this bridge can make, and this skill exists to make it impossible.
A demo is not "launch the app." A demo finishes the blockers and shows real work.
The one verb
adom-desktop fusion_demo '{}' # start / resume the tour
adom-desktop fusion_demo '{"query":"BQ25792"}' # demo a specific design
adom-desktop fusion_demo '{"stage":"skip_aps"}' # user declined cloud-search setup
It is staged and resumable. Every call advances as far as it safely can and returns:
| Field | Use it for |
|---|---|
stage |
where you are: not_installed, signin, aps_setup, open_design, done, ... |
done |
keep calling fusion_demo until this is true |
narrate |
say this to the user, verbatim-ish. It is written for a newcomer, not an engineer |
screenshots |
[{label,path}] - SHOW these; labels are project, schematic, board_2d, board_3d |
steps |
what it actually did, for your own logging |
_hint |
the exact next action, including the nbrowser_* calls for the browser leg |
Loop: call it, do what _hint says, narrate, call it again. Do not improvise a different order.
Rule 1: FINISH the sign-in, in the user's NATIVE browser
fusion_demo does not just tell you to do this - at stage:"signin" it already opened the
Autodesk sign-in in the user's own browser, in the BACKGROUND, so their current work is never
interrupted. The response tells you where it landed:
| Field | Meaning |
|---|---|
signinOpened |
true if the background tab is up |
signinWhere |
the EXACT place, e.g. "Chrome - John Personal ([email protected])" - say this verbatim |
signinProfileChoices |
every profile (describe/email/displayName/active/live/extensionInstalled) |
signinProfile / signinSession |
the ABE profile + sessionId (fusion-signin) to drive it |
Pick the profile by EVIDENCE, never by "whichever is active"
fusion_demo probes every live profile with
nbrowser_login_state {profile, url:"https://accounts.autodesk.com/"} and picks the one that
actually holds an Autodesk session (auth cookies), reporting why in signinProfileReason and the
per-profile autodesk / autodeskConfidence / autodeskCookies in signinProfileChoices.
This exists because the first version just grabbed the active profile and landed in John's personal Chrome with no analysis at all - on another machine that would have been simply wrong. A user's Autodesk seat can live in any profile, and it is frequently NOT the one they happen to be using. Ask the browser; do not assume.
- Relay the reason to the user ("I used X because it's the profile actually signed into Autodesk").
- If
signinProfileAmbiguousis true (nothing signed in anywhere, or several are), ASK which account their Autodesk login belongs to rather than picking for them. - Profiles that are asleep or lack the extension come back
unprobed- say so instead of silently skipping them.
Never say "it's in your browser" or even "your Chrome". A power user runs several profiles -
personal, work, media - and a vague pointer sends them hunting through windows. Always name the
browser AND the identity from signinWhere. If signinProfileChoices has more than one, say which
one you used and offer to switch to another. If the profile they want shows
extensionInstalled:false, it needs the one-time extension install in THAT specific profile
(extensions are per-profile).
Always tell the user where it is waiting, then offer all three paths:
- They finish it themselves, whenever they like - it is sitting there, backgrounded.
- You bring it to the front for them (foreground that nb window) if they would rather do it now.
- You drive it for them - ASK first (
AskUserQuestion), then click through "Continue with Google/Apple/Microsoft" on their warm session.
Never silently sit and wait, and never foreground it uninvited.
Then:
- Use ABE (
nbrowser_*), never pup. pup is an anonymous browser, so Autodesk demands a full login with password + 2FA. The user's real Chrome/Edge profile is typically already signed into Autodesk, so the same flow is one click.nbrowser_profileslists their real profiles; ABE exposes these verbs even before the browser extension is installed. - Click Fusion's Sign In in the BACKGROUND (
desktop_find_control+desktop_ui_click), never a coordinate click, never steal focus. - That fires the OAuth at the default browser. If that is the signed-in profile it completes
itself; if it lands logged-out, re-open the auth URL with
nbrowser_open_window {profile:"chrome:<their account>"}. - The handoff back is the Autodesk Identity Manager overlay: tick "Always allow", click "Open".
- Never type their password or 2FA. If a secret is demanded,
fusion_notify_ownertoasts their machine so they type it. Sign-in codes expire in ~2 minutes; if it expires, click Sign In again for a fresh one.
Full detail: the fusion-autodesk-signin skill.
Rule 2: SET UP APS, don't just name-drop it
When stage:"aps_setup", actually configure it (fusion_aps_status -> fusion_aps_set_client_id
if unconfigured -> fusion_aps_signin driven in the native browser -> poll until tokenLive:true).
Then the demo runs a live sample search so the user watches their whole Autodesk hub return
results in about two seconds.
If they decline, call fusion_demo {stage:"skip_aps"} and still TELL them what it is: server-indexed
search across the team hub in seconds. The old in-app search took 30+ minutes and crashed Fusion, so
it is disabled - APS is the only cloud-search path. See fusion-aps-search.
Rule 3: the tour order is fixed
electronics PROJECT -> SCHEMATIC -> 2D BOARD -> 3D BOARD. That sequence tells the story of how a
board is actually made, and each step is screenshotted so you can show it. Always open the PROJECT
(EcadDesignProductType), never a .brd/.sch/3D child - a child opens an isolated, often empty
view and the demo looks broken.
Landing it
Close by offering next steps in the user's own words, not verb names: "export the Gerbers", "make me
a SOIC-8 with my part number etched on it", "check this against JLCPCB rules", "find my other
boards". The full catalog is fusion_describe.
If Fusion isn't installed: offer it, and say what they actually get
Do not just report "not installed". OFFER, and be concrete AND honest about the tiers:
- Free 30-day trial: fully featured. Every step of this demo works - electronics design, schematic, 2D board, 3D board, Gerber/BOM/CPL exports, APS cloud search. This is the one to start on; there is no reason to hedge about it.
- After the trial: Fusion for Personal Use is free for non-commercial work. Still genuinely useful for hobby PCBs, but it LIMITS electronics (roughly 2 layers, 2 schematic sheets, a modest board area) and some export options. Say that plainly rather than letting them discover it.
- Even an expired / read-only install still OPENS and VIEWS designs (it only blocks save/export/modify), so nothing they make gets locked away.
Then fusion_install_fusion (no shell approval needed, streams the installer, 10-30 min), poll
fusion_readiness until installed:true, and call fusion_demo again to pick the tour back up.
Full flow: fusion-onboarding.
If something else is missing
- Nothing to open -> ask which board, or
fusion_aps_searchand open the first hit. - Never end a demo on an error screen. If a stage fails, say what you tried, and offer the next thing.
---
name: fusion-demo
description: >
Run a FIRST-TIME-USER demo of the Fusion 360 bridge - the guided tour Hydrogen Desktop's installer
fires when someone new wants to see what this thing does. Covers the one verb (fusion_demo), the
staged loop, and the two rules that make or break it: FINISH the Autodesk sign-in (never leave a new
user parked on the sign-in page) by driving the user's NATIVE browser via ABE/nbrowser_* (already
signed into Autodesk) instead of pup (anonymous), and SET UP APS cloud search rather than just
mentioning it, then prove it with a live sample search. Then show real work in order: electronics
PROJECT -> SCHEMATIC -> 2D BOARD -> 3D BOARD. Trigger words - fusion demo, demo the bridge, show me
fusion, first time user demo, hd installer demo, demo verb, guided tour, showcase fusion, new user
onboarding demo, fusion_demo.
---
# Demoing the Fusion bridge to a brand-new user
## Why this exists
HD's installer ran a "demo" that opened Fusion and then **sat on the Autodesk sign-in page doing
nothing** (John, 2026-07-20). A first-time user watched an app open and stall. That is the single
worst first impression this bridge can make, and this skill exists to make it impossible.
**A demo is not "launch the app." A demo finishes the blockers and shows real work.**
## The one verb
```bash
adom-desktop fusion_demo '{}' # start / resume the tour
adom-desktop fusion_demo '{"query":"BQ25792"}' # demo a specific design
adom-desktop fusion_demo '{"stage":"skip_aps"}' # user declined cloud-search setup
```
It is **staged and resumable**. Every call advances as far as it safely can and returns:
| Field | Use it for |
|---|---|
| `stage` | where you are: `not_installed`, `signin`, `aps_setup`, `open_design`, `done`, ... |
| `done` | keep calling `fusion_demo` until this is `true` |
| `narrate` | say this to the user, verbatim-ish. It is written for a newcomer, not an engineer |
| `screenshots` | `[{label,path}]` - SHOW these; labels are `project`, `schematic`, `board_2d`, `board_3d` |
| `steps` | what it actually did, for your own logging |
| `_hint` | the exact next action, including the `nbrowser_*` calls for the browser leg |
Loop: call it, do what `_hint` says, narrate, call it again. Do not improvise a different order.
## Rule 1: FINISH the sign-in, in the user's NATIVE browser
`fusion_demo` does not just tell you to do this - at `stage:"signin"` it **already opened the
Autodesk sign-in in the user's own browser, in the BACKGROUND**, so their current work is never
interrupted. The response tells you where it landed:
| Field | Meaning |
|---|---|
| `signinOpened` | true if the background tab is up |
| `signinWhere` | the EXACT place, e.g. "Chrome - John Personal ([email protected])" - say this verbatim |
| `signinProfileChoices` | every profile (describe/email/displayName/active/live/extensionInstalled) |
| `signinProfile` / `signinSession` | the ABE profile + sessionId (`fusion-signin`) to drive it |
### Pick the profile by EVIDENCE, never by "whichever is active"
`fusion_demo` probes **every live profile** with
`nbrowser_login_state {profile, url:"https://accounts.autodesk.com/"}` and picks the one that
actually holds an Autodesk session (auth cookies), reporting why in `signinProfileReason` and the
per-profile `autodesk` / `autodeskConfidence` / `autodeskCookies` in `signinProfileChoices`.
This exists because the first version just grabbed the *active* profile and landed in John's
**personal** Chrome with no analysis at all - on another machine that would have been simply wrong.
A user's Autodesk seat can live in any profile, and it is frequently NOT the one they happen to be
using. **Ask the browser; do not assume.**
- **Relay the reason** to the user ("I used X because it's the profile actually signed into Autodesk").
- If `signinProfileAmbiguous` is true (nothing signed in anywhere, or several are), **ASK which
account their Autodesk login belongs to** rather than picking for them.
- Profiles that are asleep or lack the extension come back `unprobed` - say so instead of silently
skipping them.
**Never say "it's in your browser" or even "your Chrome".** A power user runs several profiles -
personal, work, media - and a vague pointer sends them hunting through windows. Always name the
browser AND the identity from `signinWhere`. If `signinProfileChoices` has more than one, say which
one you used and offer to switch to another. If the profile they want shows
`extensionInstalled:false`, it needs the one-time extension install in THAT specific profile
(extensions are per-profile).
**Always tell the user where it is waiting, then offer all three paths:**
1. **They finish it themselves**, whenever they like - it is sitting there, backgrounded.
2. **You bring it to the front** for them (foreground that nb window) if they would rather do it now.
3. **You drive it for them** - ASK first (`AskUserQuestion`), then click through
"Continue with Google/Apple/Microsoft" on their warm session.
Never silently sit and wait, and never foreground it uninvited.
Then:
- **Use ABE (`nbrowser_*`), never pup.** pup is an anonymous browser, so Autodesk demands a full
login with password + 2FA. The user's real Chrome/Edge profile is **typically already signed into
Autodesk**, so the same flow is one click. `nbrowser_profiles` lists their real profiles; ABE
exposes these verbs even before the browser extension is installed.
- Click Fusion's **Sign In** in the BACKGROUND (`desktop_find_control` + `desktop_ui_click`), never a
coordinate click, never steal focus.
- That fires the OAuth at the **default** browser. If that is the signed-in profile it completes
itself; if it lands logged-out, re-open the auth URL with
`nbrowser_open_window {profile:"chrome:<their account>"}`.
- The handoff back is the **Autodesk Identity Manager** overlay: tick "Always allow", click "Open".
- **Never type their password or 2FA.** If a secret is demanded, `fusion_notify_owner` toasts their
machine so they type it. Sign-in codes expire in ~2 minutes; if it expires, click Sign In again for
a fresh one.
Full detail: the **fusion-autodesk-signin** skill.
## Rule 2: SET UP APS, don't just name-drop it
When `stage:"aps_setup"`, actually configure it (`fusion_aps_status` -> `fusion_aps_set_client_id`
if unconfigured -> `fusion_aps_signin` driven in the native browser -> poll until `tokenLive:true`).
Then the demo runs a **live sample search** so the user watches their whole Autodesk hub return
results in about two seconds.
If they decline, call `fusion_demo {stage:"skip_aps"}` and still TELL them what it is: server-indexed
search across the team hub in seconds. The old in-app search took 30+ minutes and crashed Fusion, so
it is disabled - APS is the only cloud-search path. See **fusion-aps-search**.
## Rule 3: the tour order is fixed
**electronics PROJECT -> SCHEMATIC -> 2D BOARD -> 3D BOARD.** That sequence tells the story of how a
board is actually made, and each step is screenshotted so you can show it. Always open the PROJECT
(`EcadDesignProductType`), never a `.brd`/`.sch`/3D child - a child opens an isolated, often empty
view and the demo looks broken.
## Landing it
Close by offering next steps in the user's own words, not verb names: "export the Gerbers", "make me
a SOIC-8 with my part number etched on it", "check this against JLCPCB rules", "find my other
boards". The full catalog is `fusion_describe`.
## If Fusion isn't installed: offer it, and say what they actually get
Do not just report "not installed". OFFER, and be concrete AND honest about the tiers:
- **Free 30-day trial: fully featured.** Every step of this demo works - electronics design,
schematic, 2D board, 3D board, Gerber/BOM/CPL exports, APS cloud search. This is the one to start
on; there is no reason to hedge about it.
- **After the trial: Fusion for Personal Use is free** for non-commercial work. Still genuinely
useful for hobby PCBs, but it LIMITS electronics (roughly 2 layers, 2 schematic sheets, a modest
board area) and some export options. Say that plainly rather than letting them discover it.
- **Even an expired / read-only install still OPENS and VIEWS designs** (it only blocks
save/export/modify), so nothing they make gets locked away.
Then `fusion_install_fusion` (no shell approval needed, streams the installer, 10-30 min), poll
`fusion_readiness` until `installed:true`, and call `fusion_demo` again to pick the tour back up.
Full flow: **fusion-onboarding**.
## If something else is missing
- Nothing to open -> ask which board, or `fusion_aps_search` and open the first hit.
- Never end a demo on an error screen. If a stage fails, say what you tried, and offer the next thing.