app
Fusion - the Fusion 360 Bridge
Public Made by Adomby adom
Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.
← Commit history
Update 72 file(s)
14 files changed
+79−23
BRIDGE_VERSION+1−1CLAUDE.md+2−1adom-bridge-fusion-manifest.json+4−4bridge.json+1−1dashboard/Cargo.lock+1−1dashboard/Cargo.toml+1−1install.sh+1−1package.json+1−1page.json+11−8skills/fusion-driving/SKILL.md+14skills/fusion-eagle-commands/SKILL.md+1−1skills/fusion-libraries/SKILL.md+14skills/fusion-multipart-libraries/SKILL.md+16skills/fusion-onboarding/SKILL.md+11−3BRIDGE_VERSION+1−1@@ -1 +1 @@-1.9.229+1.9.230
CLAUDE.md+2−1@@ -85,8 +85,9 @@ wrong dir is SILENTLY ignored (Fusion runs fine, port 8774 never comes up - issu live). `install_addin.py` therefore installs to ALL of them (TARGET_CANDIDATES); NEVER assume a single path, and if a future Fusion stops loading the add-in, FIRST suspect the dir moved again (hunt for new dirs under %APPDATA%\Autodesk yourself). NOT from this repo or the cache.-⛔ NEVER ask the user to restart Fusion or enable the add-in - YOU restart (fusion_stop ++⛔ NEVER make the user restart Fusion or enable the add-in BY HAND - YOU do it (fusion_stop + fusion_start); runOnStartup does the rest. The exact, watched-it-happen release sequence (AFTER publishing to the wiki):+ ⚠️ But ASK FIRST when a human is there with documents open (the Adonis incident): "never make them do it" is not "restart it out from under them". A verb returning addin_restart_required hands you userMessage + openDocuments/unsavedDocuments to ask with; then fusion_restart_for_addin {save:true} does it and refuses rather than discarding a never-saved document. 1. **`bridge_install {"manifestUrl": ".../adom-bridge-fusion-manifest.json"}`** - streams the new zip into the CACHE via `method: in_place_merge`. Updates the cache ONLY; it does NOT touch Fusion's
adom-bridge-fusion-manifest.json+4−4@@ -1,10 +1,10 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.9.229",- "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.229/adom-bridge-fusion-v1.9.229.zip",- "sha256": "dafb503099f9b14c3f9e4dda99afd40acea8ba68008c52e58780d5c7ed0fab58",- "size": 525216,+ "version": "1.9.230",+ "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.230/adom-bridge-fusion-v1.9.230.zip",+ "sha256": "bf8a05aa093a23c28c711f208bcf495794c39fc6d565280941af035c670a344d",+ "size": 525215, "verbPrefixes": [ "fusion_" ],
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.9.229",+ "version": "1.9.230", "description": "Drive Autodesk Fusion 360 from the cloud: launch Fusion, electronics board layout, design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers/BOM/CPL), fast APS server-indexed cloud search plus browse/recent/file-info/versions, cloud file download/upload and folder creation, and in-app parametric modeling (fusion_run_modeling_script). Never-charge: APS calls are capped to the free tier.", "homepage": "https://wiki.adom.inc/adom/fusion-bridge", "author": "Adom Inc.",
dashboard/Cargo.lock+1−1@@ -4,7 +4,7 @@ version = 4 [[package]] name = "fusion-dashboard"-version = "1.9.229"+version = "1.9.230" dependencies = [ "serde_json", ]
dashboard/Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "fusion-dashboard"-version = "1.9.229"+version = "1.9.230" edition = "2021" [dependencies]
install.sh+1−1@@ -21,7 +21,7 @@ echo "Installed fusion-bridge skills: $(ls "$PKG_DIR/skills" 2>/dev/null | tr '\ # binary (the three-artifact pattern: bridge zip -> ab, THIS pkg -> container skills + # this download, page media -> wiki). Per the wiki's PKG_VS_RELEASE policy, binaries are # platform-tagged RELEASE assets, never tarball content - the installer fetches them.-DASH_VERSION="1.9.229"+DASH_VERSION="1.9.230" DASH_URL="https://wiki.adom.inc/download/adom/fusion-bridge/${DASH_VERSION}/fusion-dashboard" DEST="" if [ -w /usr/local/bin ]; then DEST=/usr/local/bin
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "fusion-bridge",- "version": "1.9.229",+ "version": "1.9.230", "type": "app", "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.", "dependencies": {
page.json+11−8@@ -1,6 +1,6 @@ { "slug": "fusion-bridge",- "version": "1.9.229",+ "version": "1.9.230", "type": "app", "description": "This package installs the bridge's SKILLS into your container so your AI knows how to drive it; Adom Bridge loads the bridge runtime itself from the release zip.", "dependencies": {@@ -11,6 +11,10 @@ "uninstall": "./uninstall.sh" }, "tags": [+ "ab",+ "bridge",+ "fusion",+ "desktop-app", "fusion360", "autodesk", "cad",@@ -75,7 +79,10 @@ "build a basic parts library", "add a 3d model to a component", "make a fusion 360 library with 3d",- "set up the fusion bridge"+ "set up the fusion bridge",+ "fusion dashboard",+ "fusion status page",+ "open the fusion launch page" ], "discovery_pitch": "Use the Adom Bridge Fusion 360 bridge when the user wants to DRIVE Autodesk Fusion 360 from the cloud: open/search their team's Fusion cloud designs, lay out a PCB or do electronics, export STEP/IGES/STL/Gerbers/BOM, or build a component library with real rendering 3D. It runs Fusion on the user's own machine via Adom Bridge. NOT for web/browser/login/form-filling (that's the native-browser extension) and NOT for KiCad (that's the kicad bridge).", "brief": "Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.",@@ -104,9 +111,5 @@ "label": "Part volume", "prompt": "How much material does each printed part in this assembly use?" }- ],- "author": {- "name": "John Lauer",- "email": "[email protected]"- }-}+ ]+}
skills/fusion-driving/SKILL.md+14@@ -225,3 +225,17 @@ project the point onto the sketch plane. A wrong off-plane coordinate passes str through into the resulting geometry, silently, offset by exactly the plane offset. This caused a real bug: a body landed at the wrong Z with a perfectly clean-looking render. Verify geometry with `fusion_inspect_bodies` (bbox in mm) instead of trusting the viewport.++## Fusion not running is a STEP, never a refusal++Verbs auto-launch Fusion when it is closed, folding the launch into the ETA, so "Fusion 360+is installed but not running" should never reach a user. If a launch genuinely fails you get+`fusion_autostart_failed`, which states the command was never run and points at+`needsSignin` (Autodesk sign-in is a human step, not a bug).++The one state you must ASK about rather than fix silently: `addin_restart_required` means the+add-in was installed while Fusion was already open. Its payload carries `userMessage` plus+`openDocuments`/`unsavedDocuments` so you can ask, then `fusion_restart_for_addin {save:true}`.++For a costed plan before any of it, `fusion_plan_library_import` reports state and timings+without doing work.
skills/fusion-eagle-commands/SKILL.md+1−1@@ -22,7 +22,7 @@ These commands open modal prompts EAGLE waits on forever. Your call will hang un | Command | Why it blocks | Use instead | |---|---|---| | `ADD` | Prompts for component placement | Edit source .sch/.brd via import commands |-| `SHOW` | Opens an info dialog | `fusion_board_info`, `fusion_schematic_info` |+| `SHOW` | Opens an info dialog | `fusion_board_info` (boards). There is no `fusion_schematic_info`: for a schematic use `fusion_export_source` / `fusion_export_eagle_source` and read the XML, or `fusion_get_app_state` | | `MOVE` | Interactive picker | Edit source files offline | | `CHANGE` (interactive form) | Picker for target object | Use with explicit object: `CHANGE WIDTH 0.3 (1 2)` is OK | | `WRITE` | Cloud: opens "Version Description" dialog even with path arg (tested 2026-04-10). Local: opens Save As. | `fusion_save_to_cloud`, `fusion_export_source`, `fusion_export_eagle_source` |
skills/fusion-libraries/SKILL.md+14@@ -127,3 +127,17 @@ variant model that lets an automotive-grade part and a baseline one share one sy footprint and one 3D body, are covered in **`fusion-part-metadata`**. Check `fusion_library_parts {libraryPath}` before calling any library complete - `ok: true` from preflight only means the file OPENS.++## Before you import: pre-flight, and the add-in restart trap++**Pre-flight first.** `fusion_plan_library_import {parts}` does no work and changes nothing.+It tells you whether Fusion is installed, running, or needs its add-in loaded, and returns a+costed plan whose bind estimate scales with the part count. Call it before committing a user+to a long import, so they see what is about to happen instead of a silent spinner.++**The trap that catches new users:** if ab installed or updated the add-in while Fusion was+already open, Fusion cannot see it — add-ins load only at launch. Verbs then return+`addin_restart_required`, carrying `userMessage`, `openDocuments` and `unsavedDocuments`.+**Ask the user**, then `fusion_restart_for_addin {save:true}`, which saves first and refuses+with `unsaved_named_document` rather than discarding a never-saved document. Do not+silently restart a Fusion someone is working in.
skills/fusion-multipart-libraries/SKILL.md+16@@ -237,3 +237,19 @@ variant model that lets an automotive-grade part and a baseline one share one sy footprint and one 3D body, are covered in **`fusion-part-metadata`**. Check `fusion_library_parts {libraryPath}` before calling any library complete - `ok: true` from preflight only means the file OPENS.++## The one-call path, and the state that stops mid-build evidence++Everything here is the manual recipe. For a normal import prefer+`fusion_create_library {parts:[...]}` — it chains bind and prove behind one `runId`, streams+each artifact as it lands, and treats one part as N=1 rather than a special case.++Two states worth knowing while a build runs:+- `build_in_progress` — a capture during a 3D build photographs the build editor, not the+ view it claims. Wait; the marker survives a bridge respawn so the refusal is not silently lost.+- `addin_restart_required` — the add-in was installed while Fusion was open. Ask, then+ `fusion_restart_for_addin {save:true}`.++Before calling a multi-part library done, run `fusion_library_parts {libraryPath}`: with many+parts it is easy to ship one whose part numbers never made it, and `stage: done` does not+check that.
skills/fusion-onboarding/SKILL.md+11−3@@ -114,9 +114,17 @@ This is what lets the bridge inject commands into Fusion after launch. 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.+- **⛔ NEVER make the user restart Fusion or enable the add-in BY HAND.** After installing, YOU do+ it: `fusion_stop` then `fusion_start` — the add-in auto-loads (`runOnStartup:true`, verified live:+ port 8774 up 20s after restart, zero manual enabling). Handing them the chore defeats the bridge.+- **⚠️ BUT ASK FIRST WHEN A HUMAN IS SITTING THERE WITH DOCUMENTS OPEN** (the Adonis incident,+ 2026-08-27, and John's "that was really rude" before it). "Never make them do it" is not "restart+ their Fusion out from under them". The two rules resolve as: **get consent, then do the work+ yourself.** During ONBOARDING, on a machine with nothing open, just restart. When a verb returns+ `addin_restart_required`, its payload carries `userMessage`, `openDocuments` and+ `unsavedDocuments` precisely so you can ask — then call `fusion_restart_for_addin {save:true}`,+ which saves first and refuses with `unsaved_named_document` rather than discarding a never-saved+ document. An AI on an unattended box may call it directly. - **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`