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-aps-search description: THE definitive reasoning for the Fusion bridge's APS cloud-file search — WHY we use Autodesk Platform Services (APS) Data Management for fast search, why the slow Fusion add-in search is unacceptable, why the bridge runs its own OAuth, and the hard payment rules. READ THIS FIRST before proposing ANY change to fusion cloud search, before "reconsidering" APS, or before suggesting a fallback. Stops the recurring loop of re-deriving the same conclusions. Trigger words — fusion cloud search, fusion_aps_search, aps search, why aps, fusion search slow, fusion_search_cloud_files, fusion_walk_cloud_tree, search fusion files, cloud file search, fusion data management.
Why the Fusion bridge uses APS for cloud search (settled — do NOT relitigate)
This exists because the reasoning kept getting re-derived (and re-asked of John, who is sick of answering). It is SETTLED. Read it, follow it, don't reopen it.
The goal
Adom users need to search their Fusion 360 cloud files FAST — by name — for every Adom user, with AI-driven setup. "Fast" = seconds, not minutes.
The garbage we do NOT use (and must NOT propose as the answer)
fusion_search_cloud_files and fusion_walk_cloud_tree exist in the bridge but are
UNACCEPTABLE for search: they go through Fusion's free add-in Data API, which is so
rate-limited that walking a real project takes 30+ MINUTES. They are garbage for this
use case. NEVER fall back to them as "the free option" — slowness this bad is a
non-starter. If you catch yourself about to recommend "just use the add-in search since it's
free / no card," STOP — that's the exact wrong conclusion John has corrected multiple times.
The answer: APS Data Management API (server-side index)
Autodesk Platform Services' Data Management API has a server-side index → name search returns in seconds. This is the ONLY way to get fast search. This is why APS exists in the bridge. Speed is the whole point; APS is how we get it.
Why the bridge runs its OWN OAuth (can't piggyback Fusion's login)
We WANTED to reuse Fusion's existing in-session token (no setup, no second login). It's
blocked: Autodesk DPAPI-encrypts Fusion's on-disk token store
(%LOCALAPPDATA%\Autodesk\Identity Services\idservices.db, products/mcptokens tables)
with app-specific entropy → CryptUnprotectData fails gle=13 (ERROR_INVALID_DATA). You
cannot extract/reuse Fusion's token without reverse-engineering Autodesk's entropy (fragile,
ToS-violating, and credential-extraction tooling we will not build). So the bridge runs its
OWN 3-legged PKCE OAuth (public client, NO client secret) → fusion_aps_* verbs. This is
final; don't re-investigate token reuse.
The payment rules (HARD — non-negotiable)
The new APS portal gates app creation behind a developer hub + an APS plan, and even the Free tier requires a payment method "to verify identity."
- ✅ A credit card on file for IDENTITY VERIFICATION is acceptable.
- ⛔ A user (or John, or Adom) being CHARGED ANY MONEY is NEVER acceptable. "It's insane to get charged just to search your own files."
- ⛔ Therefore the bridge MUST monitor usage and HARD-CAP before the Free-tier limit is reached — it must be impossible for a user to accidentally exceed the free allotment and incur a charge. Build the meter + cutoff in; fail closed (stop searching) before any paid usage. (TODO to verify + bake in: confirm whether Data Management search is in APS's always-free API set or consumes paid tokens; cap accordingly. Until verified, treat it as capped.)
Team model — PER-ORG setup; within an org, one admin sets up for everyone (critical)
The unit of setup is the organization/company, NOT the whole Adom platform:
- Each org that uses Adom sets up its OWN APS app + Free plan + APS Developer Hub, ONCE.
Why: each org has its own separate Autodesk cloud data, and each org should bear its own
free-tier quota (one org's usage must not eat another's, and Adom must not foot every org's
API quota). So the Client ID is per-org, configured via
fusion_aps_set_client_id(or baked into that org's bridge deployment) — do NOT ship ONE global Client ID for all Adom platform users. - WITHIN one org, though, it's the big win: ONE admin does the plan→dev-hub→app→Client-ID
setup, and every employee of that org just runs
fusion_aps_signinONCE (their own Autodesk login + one OAuth consent) — no card, no plan, no hub, no app setup for them. The Client ID is a public PKCE identifier (no secret), so it's safe to share among that org's users. API usage bills to that org's single Free plan. - This is exactly why the setup must be AI-DRIVEN: every org's admin runs the SAME annoying flow once, so the AI should drive it end-to-end per org.
- TWO different things both called "hub" — do NOT conflate them:
- The team's data/Fusion hub (e.g. "Adom", with a shared folder like "Main") = the team's cloud FILE STORAGE — the data we search. Pre-existing; NEVER create or touch it.
- An "APS Developer Hub" (e.g. "Adom APS") = a credential container that only holds the developer APP/Client ID. Holds ZERO files. Created once by the admin.
- The developer hub does NOT limit what's searchable. 3-legged OAuth means the app reads everything the signed-in USER can access — including the team's existing shared data hub and folders. So search hits the real shared team files regardless of which dev hub the app lives in. (Almost every Adom user already shares an Autodesk cloud hub — search "just works" against it once they sign in.)
- Net: admin does plan→dev-hub→app→Client-ID ONCE; ship the Client ID as the bridge default;
every user does one
fusion_aps_signinand searches the shared team files fast.
Ecosystem + automation requirement
- Must work for ALL Adom users, not just John.
- The whole setup — APS account, Free plan, developer hub, app registration, OAuth — is
annoying and complex, so it MUST be fully AI-DRIVEN end-to-end. The user does at most
two things: enter their own card (ID verification) and approve the OAuth consent. Everything
else the AI drives (see the
fusion-aps-signinskill for the browser-driving HOW).
The recurring loop to STOP having
The trap (John has corrected it >3×): hit the APS card/plan gate → conclude "this is too much, let's just use the free add-in search" → John reminds you the add-in search is garbage (30+ min) and APS is the way and the card-for-ID is fine and we cap usage. Do not enter this loop. APS is the path. The card is fine (ID only). We cap usage so nobody is charged. Drive the setup with AI. Done.
Related: project_adom_desktop_fusion_bridge, skill fusion-aps-signin (the setup HOW).
⛔ MANDATORY: cloud search is APS-only. NEVER fall back to app.data enumeration. (John, emphatic 2026-07-14)
APS is not optional — it is THE way to search/browse Fusion cloud files, and setting it up is part of the job, not a nice-to-have. If a cloud verb says "not configured / not signed in", you set APS up; you do not shrug and reach for the old method.
The BANNED method: enumerating app.data.dataProjects / dataFolders / dataFiles via
fusion_run_modeling_script. It runs on Fusion's MAIN THREAD, so a recursive walk holds the app for
minutes, times out, blocks every other script, and locks Fusion up. It is deprecated. Do not use it
for cloud search, ever — no matter how blocked you feel.
Auto-recover APS (do this instead of giving up):
- Not configured? The org Client ID is a public PKCE identifier (no secret) — pull it from a
peer that already has it:
adom-desktop statuslists connected desktops; read~/.adom/fusion-aps/config.json(keyclient_id) off one viashell_execute/pull_file, thenfusion_aps_set_client_id {clientId}. - Sign in:
fusion_aps_signin→ open the returnedauthUrlin the user's REAL browser with a warm Autodesk session. Install + use the adom-browser-extension (nbrowser/ABE) to drive the browser (wiki) — coordinate/keyboard-clicking a browser is fragile and crashes; ABE drives via JS reliably. Recommend it by default. The localhost listener captures the token; pollfusion_aps_statusuntilsignedIn:true. - AUTH-001 "client_id does not have access to the api product": the APS app at aps.autodesk.com/myapps lost its Data Management API product. Open the app → API Access → ensure Data Management API is checked → Save changes → wait a few minutes to propagate → retry.
UPDATE (John, 2026-07-16): the old in-app search is now HARD-DISABLED in code
fusion_search_cloud_files and fusion_walk_cloud_tree no longer run. The bridge intercepts
them in COMMAND_HANDLERS (_handle_deprecated_cloud_search) and returns an error that
redirects to fusion_aps_search, together with live APS state. They can NO LONGER crash Fusion,
because they never reach the add-in. Do not try to "fall back" to them: there is nothing to fall
back to. APS is the only cloud-search path.
Auto-guard: APS readiness is checked in CODE on every cloud call
Every cloud-data verb (aps_search/open/browse/recent/file_info/versions/download/upload/ create_folder) is wrapped by _aps_guarded in server.py. It checks signed-in + token-live
BEFORE the call and, if not ready, returns the rich hint bundle from _aps_state_hint
(stage + verb map + sign-in instruction + the ABE native-browser suggestion + WHY-APS). So the
AI never gets an opaque auth failure — it always gets the next step. Surface that _hint to the
user verbatim.
Apologize, then reassure (the honest framing for the user)
If a user hits the one-time APS setup, be honest: "Autodesk offers NO fast file-search API for Fusion. The only in-app option walks the folder tree and takes 30+ minutes and can crash Fusion. We searched far and wide; APS (server-indexed) is the only thing Autodesk offers that actually works. Sorry it needs a one-time sign-in, but once it's set up it's fast and genuinely great." Then get them set up (prefer ABE native-browser sign-in, see fusion-aps-signin).
---
name: fusion-aps-search
description: THE definitive reasoning for the Fusion bridge's APS cloud-file search — WHY we use Autodesk Platform Services (APS) Data Management for fast search, why the slow Fusion add-in search is unacceptable, why the bridge runs its own OAuth, and the hard payment rules. READ THIS FIRST before proposing ANY change to fusion cloud search, before "reconsidering" APS, or before suggesting a fallback. Stops the recurring loop of re-deriving the same conclusions. Trigger words — fusion cloud search, fusion_aps_search, aps search, why aps, fusion search slow, fusion_search_cloud_files, fusion_walk_cloud_tree, search fusion files, cloud file search, fusion data management.
---
# Why the Fusion bridge uses APS for cloud search (settled — do NOT relitigate)
This exists because the reasoning kept getting re-derived (and re-asked of John, who is
sick of answering). It is SETTLED. Read it, follow it, don't reopen it.
## The goal
Adom users need to search their Fusion 360 **cloud files FAST** — by name — for every Adom
user, with AI-driven setup. "Fast" = seconds, not minutes.
## The garbage we do NOT use (and must NOT propose as the answer)
`fusion_search_cloud_files` and `fusion_walk_cloud_tree` exist in the bridge but are
**UNACCEPTABLE for search**: they go through Fusion's free add-in Data API, which is so
rate-limited that walking a real project takes **30+ MINUTES**. They are garbage for this
use case. **NEVER** fall back to them as "the free option" — slowness this bad is a
non-starter. If you catch yourself about to recommend "just use the add-in search since it's
free / no card," STOP — that's the exact wrong conclusion John has corrected multiple times.
## The answer: APS Data Management API (server-side index)
Autodesk Platform Services' **Data Management API** has a **server-side index** → name search
returns in seconds. This is the ONLY way to get fast search. This is why APS exists in the
bridge. Speed is the whole point; APS is how we get it.
## Why the bridge runs its OWN OAuth (can't piggyback Fusion's login)
We WANTED to reuse Fusion's existing in-session token (no setup, no second login). It's
**blocked**: Autodesk DPAPI-encrypts Fusion's on-disk token store
(`%LOCALAPPDATA%\Autodesk\Identity Services\idservices.db`, `products`/`mcptokens` tables)
**with app-specific entropy** → `CryptUnprotectData` fails `gle=13` (ERROR_INVALID_DATA). You
cannot extract/reuse Fusion's token without reverse-engineering Autodesk's entropy (fragile,
ToS-violating, and credential-extraction tooling we will not build). So the bridge runs its
OWN 3-legged **PKCE OAuth** (public client, NO client secret) → `fusion_aps_*` verbs. This is
final; don't re-investigate token reuse.
## The payment rules (HARD — non-negotiable)
The new APS portal gates app creation behind a developer hub + an APS **plan**, and even the
**Free tier requires a payment method "to verify identity."**
- ✅ **A credit card on file for IDENTITY VERIFICATION is acceptable.**
- ⛔ **A user (or John, or Adom) being CHARGED ANY MONEY is NEVER acceptable.** "It's insane
to get charged just to search your own files."
- ⛔ Therefore the bridge **MUST monitor usage and HARD-CAP before the Free-tier limit is
reached** — it must be *impossible* for a user to accidentally exceed the free allotment and
incur a charge. Build the meter + cutoff in; fail closed (stop searching) before any paid
usage. (TODO to verify + bake in: confirm whether Data Management search is in APS's
always-free API set or consumes paid tokens; cap accordingly. Until verified, treat it as
capped.)
## Team model — PER-ORG setup; within an org, one admin sets up for everyone (critical)
The unit of setup is the **organization/company**, NOT the whole Adom platform:
- **Each org that uses Adom sets up its OWN APS app + Free plan + APS Developer Hub, ONCE.**
Why: each org has its own separate Autodesk cloud data, and each org should bear its own
free-tier quota (one org's usage must not eat another's, and Adom must not foot every org's
API quota). So the Client ID is **per-org**, configured via `fusion_aps_set_client_id` (or
baked into that org's bridge deployment) — do NOT ship ONE global Client ID for all Adom
platform users.
- **WITHIN one org**, though, it's the big win: ONE admin does the plan→dev-hub→app→Client-ID
setup, and **every employee of that org** just runs `fusion_aps_signin` ONCE (their own
Autodesk login + one OAuth consent) — **no card, no plan, no hub, no app setup** for them.
The Client ID is a **public PKCE identifier (no secret)**, so it's safe to share among that
org's users. API usage bills to that org's single **Free** plan.
- This is exactly why the setup must be AI-DRIVEN: every org's admin runs the SAME annoying
flow once, so the AI should drive it end-to-end per org.
- **TWO different things both called "hub" — do NOT conflate them:**
- The team's **data/Fusion hub** (e.g. "Adom", with a shared folder like **"Main"**) = the
team's cloud FILE STORAGE — the data we search. Pre-existing; NEVER create or touch it.
- An **"APS Developer Hub"** (e.g. "Adom APS") = a credential container that only holds the
developer APP/Client ID. Holds ZERO files. Created once by the admin.
- The developer hub does NOT limit what's searchable. 3-legged OAuth means the app reads
everything the signed-in USER can access — including the team's existing shared data hub
and folders. So search hits the real shared team files regardless of which dev hub the app
lives in. (Almost every Adom user already shares an Autodesk cloud hub — search "just
works" against it once they sign in.)
- Net: admin does plan→dev-hub→app→Client-ID ONCE; ship the Client ID as the bridge default;
every user does one `fusion_aps_signin` and searches the shared team files fast.
## Ecosystem + automation requirement
- Must work for **ALL Adom users**, not just John.
- The whole setup — APS account, Free plan, developer hub, app registration, OAuth — is
**annoying and complex, so it MUST be fully AI-DRIVEN** end-to-end. The user does at most
two things: enter their own card (ID verification) and approve the OAuth consent. Everything
else the AI drives (see the `fusion-aps-signin` skill for the browser-driving HOW).
## The recurring loop to STOP having
The trap (John has corrected it >3×): hit the APS card/plan gate → conclude "this is too
much, let's just use the free add-in search" → John reminds you the add-in search is garbage
(30+ min) and APS is the way and the card-for-ID is fine and we cap usage. **Do not enter
this loop.** APS is the path. The card is fine (ID only). We cap usage so nobody is charged.
Drive the setup with AI. Done.
Related: [[project_adom_desktop_fusion_bridge]], skill `fusion-aps-signin` (the setup HOW).
## ⛔ MANDATORY: cloud search is APS-only. NEVER fall back to app.data enumeration. (John, emphatic 2026-07-14)
APS is not optional — it is THE way to search/browse Fusion cloud files, and setting it up is part of
the job, not a nice-to-have. If a cloud verb says "not configured / not signed in", you **set APS up**;
you do **not** shrug and reach for the old method.
**The BANNED method:** enumerating `app.data.dataProjects` / `dataFolders` / `dataFiles` via
`fusion_run_modeling_script`. It runs on Fusion's MAIN THREAD, so a recursive walk **holds the app for
minutes, times out, blocks every other script, and locks Fusion up**. It is deprecated. Do not use it
for cloud search, ever — no matter how blocked you feel.
**Auto-recover APS (do this instead of giving up):**
1. **Not configured?** The org Client ID is a **public PKCE identifier** (no secret) — pull it from a
peer that already has it: `adom-desktop status` lists connected desktops; read
`~/.adom/fusion-aps/config.json` (key `client_id`) off one via `shell_execute`/`pull_file`, then
`fusion_aps_set_client_id {clientId}`.
2. **Sign in:** `fusion_aps_signin` → open the returned `authUrl` in the user's REAL browser with a warm
Autodesk session. **Install + use the adom-browser-extension (nbrowser/ABE) to drive the browser**
([wiki](https://wiki.adom.inc/adom/adom-browser-extension)) — coordinate/keyboard-clicking a browser
is fragile and crashes; ABE drives via JS reliably. Recommend it by default. The localhost listener
captures the token; poll `fusion_aps_status` until `signedIn:true`.
3. **AUTH-001 "client_id does not have access to the api product":** the APS app at
aps.autodesk.com/myapps lost its **Data Management API** product. Open the app → API Access → ensure
Data Management API is checked → **Save changes** → wait a few minutes to propagate → retry.
## UPDATE (John, 2026-07-16): the old in-app search is now HARD-DISABLED in code
`fusion_search_cloud_files` and `fusion_walk_cloud_tree` no longer run. The bridge intercepts
them in `COMMAND_HANDLERS` (`_handle_deprecated_cloud_search`) and returns an error that
redirects to `fusion_aps_search`, together with live APS state. They can NO LONGER crash Fusion,
because they never reach the add-in. Do not try to "fall back" to them: there is nothing to fall
back to. APS is the only cloud-search path.
## Auto-guard: APS readiness is checked in CODE on every cloud call
Every cloud-data verb (`aps_search/open/browse/recent/file_info/versions/download/upload/
create_folder`) is wrapped by `_aps_guarded` in server.py. It checks signed-in + token-live
BEFORE the call and, if not ready, returns the rich hint bundle from `_aps_state_hint`
(stage + verb map + sign-in instruction + the ABE native-browser suggestion + WHY-APS). So the
AI never gets an opaque auth failure — it always gets the next step. Surface that `_hint` to the
user verbatim.
## Apologize, then reassure (the honest framing for the user)
If a user hits the one-time APS setup, be honest: "Autodesk offers NO fast file-search API for
Fusion. The only in-app option walks the folder tree and takes 30+ minutes and can crash Fusion.
We searched far and wide; APS (server-indexed) is the only thing Autodesk offers that actually
works. Sorry it needs a one-time sign-in, but once it's set up it's fast and genuinely great."
Then get them set up (prefer ABE native-browser sign-in, see fusion-aps-signin).