skill
EDA Bridge Standard: one way for an AI to drive every PCB tool
Public Made by Adomby adom
The standard every Adom EDA bridge follows so one AI can drive Altium, KiCad, Fusion 360 and any future PCB tool the same way: shared verb names in tiers, the board model JSON, reply and refusal conventions, and a coverage table of each bridge against the Altium reference.
← Commit history
fusion-lane: the 22 cloud verbs at platform tier; since 0.31.0 on the four new verbs
1 file changed
+589−4
tools/proposed/fusion-lane.json+589−4@@ -539,7 +539,7 @@ "longRunning": false, "timeoutSeconds": 120, "proposedBy": "fusion-lane",- "since": "0.30.14",+ "since": "0.31.0", "agreedBy": [ "altium-lane", "kicad-lane"@@ -573,7 +573,7 @@ "longRunning": false, "timeoutSeconds": 30, "proposedBy": "fusion-lane",- "since": "0.30.14",+ "since": "0.31.0", "agreedBy": [ "altium-lane", "kicad-lane"@@ -611,7 +611,7 @@ "longRunning": false, "timeoutSeconds": 30, "proposedBy": "fusion-lane",- "since": "0.30.14",+ "since": "0.31.0", "agreedBy": [ "altium-lane", "kicad-lane"@@ -641,10 +641,595 @@ "longRunning": false, "timeoutSeconds": 30, "proposedBy": "fusion-lane",- "since": "0.30.14",+ "since": "0.31.0", "agreedBy": [ "altium-lane", "kicad-lane" ]+ },+ {+ "name": "aps_status",+ "tier": "platform",+ "summary": "APS state: configured, signed in, token live, never-charge meter. When configured:false the hint sends you to your org's shared app ID on the wiki (adom-wiki settings get <org> autodesk-aps) before anything else; the fusion-aps-org-setup skill covers new boxes and first-time orgs.",+ "input": {},+ "output": {+ "configured": "bool",+ "neverCharge": "bool",+ "signedIn": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {},+ "longRunning": false,+ "timeoutSeconds": 20,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_signin",+ "tier": "platform",+ "summary": "Open the Autodesk sign-in in the REMEMBERED browser+profile (not the OS default); a background listener captures the token. Pass {exe,profileDir,name} to use+remember a specific browser, or {allowDefaultBrowser:true} to fall back to the OS default. If nothing is remembered, returns needsExtensionOpen so the caller opens authUrl in the user's real browser via nbrowser_open_window.",+ "input": {+ "allowDefaultBrowser": "optional bool",+ "exe": "optional str (browser binary to launch+remember)",+ "name": "optional str",+ "profileDir": "optional str (e.g. 'Default','Profile 2')"+ },+ "output": {+ "authUrl": "str",+ "needsExtensionOpen": "bool",+ "openedVia": "str",+ "success": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {},+ "longRunning": false,+ "timeoutSeconds": 30,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_set_client_id",+ "tier": "platform",+ "summary": "Set the org's APS (PKCE) client id used for cloud search. Get it from your org's members-only wiki settings: adom-wiki settings get <org> autodesk-aps (never from another machine's config file). When the org has none yet, the reply's hint gives the adom-wiki settings set command that shares it, so every other box adopts it in two calls (fusion-aps-org-setup skill). Public identifier, no secret.",+ "input": {+ "clientId": "required str"+ },+ "output": {+ "success": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "clientId": "D5nn...EPAq"+ },+ "longRunning": false,+ "timeoutSeconds": 20,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_browse",+ "tier": "platform",+ "summary": "Browse hubs/projects/folders without launching Fusion.",+ "input": {+ "folderId": "optional str",+ "hubId": "optional str",+ "projectId": "optional str"+ },+ "output": {+ "items": "[{name,type,id}]"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {},+ "longRunning": false,+ "timeoutSeconds": 60,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_search",+ "tier": "platform",+ "summary": "Server-indexed search across the whole team hub: about 20-30 s hub-wide, a few seconds with projectId (not a 30-min folder walk). Budget 120 s. A ZERO from the server index is not absence: the reply then carries data.fallback (a name scan of the newest 400 items), data.completeness, and a hint to fusion_aps_browse a known sibling's folder (issue #85).",+ "input": {+ "hubId": "optional str",+ "limit": "optional int (default 50)",+ "projectId": "optional str",+ "query": "required str"+ },+ "output": {+ "count": "int",+ "results": "[{name,id,projectName,lastModified}]"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "limit": 10,+ "query": "Molecule"+ },+ "longRunning": false,+ "timeoutSeconds": 120,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_recent",+ "tier": "platform",+ "summary": "Most-recently-modified designs across the team hub, newest first.",+ "input": {+ "limit": "optional int (default 25)"+ },+ "output": {+ "count": "int",+ "results": "[...]"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "limit": 25+ },+ "longRunning": false,+ "timeoutSeconds": 120,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_file_info",+ "tier": "platform",+ "summary": "Version history + who/when/size for a file (tip + recent versions).",+ "input": {+ "query": "str OR projectId+urn"+ },+ "output": {+ "tip": "{...}",+ "versionCount": "int",+ "versions": "[...]"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "query": "BME690 Molecule"+ },+ "longRunning": false,+ "timeoutSeconds": 40,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_versions",+ "tier": "platform",+ "summary": "Full (uncapped) version history of a file.",+ "input": {+ "query": "str OR projectId+urn"+ },+ "output": {+ "versionCount": "int",+ "versions": "[...]"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "query": "BME690 Molecule"+ },+ "longRunning": false,+ "timeoutSeconds": 40,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_download",+ "tier": "platform",+ "summary": "Download a cloud file to the local machine (no Fusion needed).",+ "input": {+ "fileName": "optional str",+ "query": "str OR projectId+urn",+ "saveDir": "optional str"+ },+ "output": {+ "bytes": "int",+ "path": "str"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "query": "BME690 Molecule"+ },+ "longRunning": false,+ "timeoutSeconds": 90,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_upload",+ "tier": "platform",+ "summary": "Upload a local file as a NEW cloud file (free Data Management; needs data:write scope). ⛔ FOLDER HYGIENE: NEVER pass a project ROOT folderId - the bridge REFUSES it (refused_root_upload). Loose files in a shared root clutter the team's cloud. Create/choose a real subfolder first (fusion_aps_create_folder under an 'Adom AI Workspace' folder), or just use fusion_make_3d_package / fusion_build_library_3d which auto-target a non-root workspace. To RELOCATE an existing file, MOVE it (preserves its urn) - do NOT delete + re-upload (mints a new urn, breaks 3D bindings). See the fusion-cloud-hygiene skill.",+ "input": {+ "fileName": "optional str",+ "folderId": "required str (NON-ROOT subfolder)",+ "localPath": "required str",+ "projectId": "required str"+ },+ "output": {+ "bytes": "int",+ "itemUrn": "str"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "folderId": "urn:...",+ "localPath": "C:/x.f3d",+ "projectId": "a.YnVz..."+ },+ "longRunning": false,+ "timeoutSeconds": 90,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_create_folder",+ "tier": "platform",+ "summary": "Create a subfolder in a project (free; needs data:create scope). Use this to make an 'Adom AI Workspace' folder + per-task subfolders so the bridge never dumps loose files in the shared project root. See fusion-cloud-hygiene.",+ "input": {+ "name": "required str",+ "parentFolderId": "required str",+ "projectId": "required str"+ },+ "output": {+ "folderId": "str"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "name": "Adom AI Workspace",+ "parentFolderId": "urn:...",+ "projectId": "a.YnVz..."+ },+ "longRunning": false,+ "timeoutSeconds": 50,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "aps_open",+ "tier": "platform",+ "summary": "Find a cloud design by name and open it in Fusion (any folder depth). Fire-and-poll.",+ "input": {+ "query": "required str",+ "wait": "optional bool"+ },+ "output": {+ "match": "{name}",+ "opening": "bool",+ "statusVerb": "str"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "query": "BME690 Molecule"+ },+ "longRunning": true,+ "timeoutSeconds": 60,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "list_cloud_projects",+ "tier": "platform",+ "summary": "List the cloud PROJECTS visible to the signed-in Fusion session (hub walk - slow on big teams; prefer fusion_aps_search for finding files).",+ "input": {},+ "output": {+ "projects": "list",+ "success": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {},+ "longRunning": true,+ "timeoutSeconds": 120,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "list_cloud_files",+ "tier": "platform",+ "summary": "List files/folders in a cloud project (optionally a subfolder).",+ "input": {+ "folderPath": "optional str",+ "projectName": "optional str (defaults to active project)"+ },+ "output": {+ "files": "list",+ "success": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "projectName": "Main"+ },+ "longRunning": true,+ "timeoutSeconds": 120,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "create_cloud_folder",+ "tier": "platform",+ "summary": "Create a subfolder in a cloud project through the signed-in Fusion session's Data API (no APS needed). Idempotent: an existing folder of that name is returned with alreadyExisted:true instead of a duplicate. Folder names are matched case-insensitively. For an APS-side create without Fusion running, use fusion_aps_create_folder.",+ "input": {+ "folderName": "required str",+ "parentPath": "optional str (parent folder path; default the project root)",+ "projectName": "optional str (default the active project)"+ },+ "output": {+ "alreadyExisted": "bool (only when it already existed)",+ "folderId": "str",+ "folderName": "str",+ "parentFolder": "str",+ "project": "str",+ "success": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "folderName": "AI-Scratch",+ "projectName": "Main"+ },+ "longRunning": false,+ "timeoutSeconds": 60,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "delete_cloud_file",+ "tier": "platform",+ "summary": "DESTRUCTIVE: delete ONE cloud file through the signed-in Fusion session's Data API. Looks in exactly one folder (projectName + folderPath, no recursion) for an exact case-insensitive name match, or for the lineage urn when fileId is given (the precise form; prefer it in shared folders). Refuses without fileName or fileId. Large folders time out on the scan; give a precise folderPath. Use fusion_cleanup_cloud_files to delete a LIST of urns with dryRun support.",+ "input": {+ "fileId": "optional str (lineage urn for a precise delete; lineageUrn is accepted as an alias)",+ "fileName": "required str unless fileId is given (exact name match in one folder)",+ "folderPath": "optional str (default the project root)",+ "projectName": "optional str (default the active project)"+ },+ "output": {+ "fileId": "str",+ "fileName": "str",+ "folder": "str",+ "project": "str",+ "success": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "fileName": "verbtest-scratch",+ "folderPath": "AI-Scratch",+ "projectName": "Main"+ },+ "longRunning": false,+ "timeoutSeconds": 60,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "cleanup_cloud_files",+ "tier": "platform",+ "summary": "PRECISELY delete a list of cloud files by lineage urn - SAFE cleanup of AI-created clutter. Deletes ONLY the exact fileIds given (never name-guessing), so it can't touch a teammate's file in a shared folder. Loops server-side. Get the ids from fusion_aps_browse (item .id). Use this to remove f3d files the bridge created. A big list takes minutes (relay may time out at ~60s while deletes continue server-side - re-browse to confirm).",+ "input": {+ "fileIds": "required [<lineage urn>]",+ "folderPath": "optional str (default root - where the files live)",+ "projectName": "optional str (default active project)"+ },+ "output": {+ "deletedCount": "int",+ "failed": "[{fileId,error}]",+ "failedCount": "int",+ "success": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {+ "fileIds": [+ "urn:adsk.wipprod:dm.lineage:abc123"+ ],+ "projectName": "Adom"+ },+ "longRunning": true,+ "timeoutSeconds": 1800,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "managed_library_create",+ "tier": "platform",+ "summary": "Create a NEW managed library on library.io FROM the library in front (which must already be saved in a Fusion Hub). Drives MANAGE > LIBRARY.IO > Push, then completes Fusion's Create Managed Library dialog. PITFALL: a managed library created under one Autodesk account is NOT visible to another account until its managed FOLDER is shared on library.io - proven live, so do not assume hub membership shares it.",+ "input": {+ "description": "optional str",+ "name": "optional str (defaults to the library's own name)"+ },+ "output": {+ "alerts": "[...]",+ "library": "str",+ "success": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {},+ "longRunning": true,+ "timeoutSeconds": 240,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "managed_library_link",+ "tier": "platform",+ "summary": "Link the library IN FRONT to an existing managed library on library.io. With no name, opens Fusion's Select Managed Library picker, returns its rows as records (name/type/version/managedFolder/description) and CANCELS - a safe read-only listing of what this Autodesk account can reach. With name, selects that row and confirms. SAFETY: after linking, Fusion offers to force-update your library FROM the managed one; 'Replace Local Library' would destroy your parts, so this verb answers CANCEL by default - pass onUpdatePrompt to choose deliberately. A managed library owned by ANOTHER Autodesk account does NOT appear until its managed FOLDER is shared with this account on library.io; being in the same Fusion hub is not enough.",+ "input": {+ "name": "optional str (exact library name from the picker; omit to list read-only)",+ "onUpdatePrompt": "optional str cancel|merge|replace (default cancel; replace OVERWRITES the local library)"+ },+ "output": {+ "alerts": "[...]",+ "linkedTo": "str?",+ "listedOnly": "bool?",+ "managedLibraries": "[{name,type,version,managedFolder,description}]",+ "success": "bool",+ "updatePrompt": "obj?"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {},+ "longRunning": true,+ "timeoutSeconds": 180,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "managed_library_push",+ "tier": "platform",+ "summary": "Push a NEW VERSION of the library in front up to its linked managed library on library.io. Clicking the menu item alone does NOT push: Fusion raises a CEF 'Create New Version' confirmation and THAT is what creates the version, so this verb completes it and fails with confirm_missing rather than reporting a false pass. On a library that is not linked yet, Fusion offers Create Managed Library instead and this reports not_linked_yet - use fusion_managed_library_create. NOTE: Library Manager keeps showing the IMPORTED version number after a push, so the row gains an update-available badge instead of incrementing.",+ "input": {+ "onConfirm": "optional str create|cancel (default create)"+ },+ "output": {+ "alerts": "[...]",+ "confirmed": "obj",+ "library": "str",+ "success": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {},+ "longRunning": true,+ "timeoutSeconds": 240,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "managed_library_pull",+ "tier": "platform",+ "summary": "Pull the newest version FROM library.io into the linked library in front. A pull ends in ONE of two CEF dialogs and BOTH block the add-in until answered: the force-update prompt when content differs (answered MERGE by default, since pull is an explicit request for the managed content - pass onUpdatePrompt:'replace' to overwrite local parts entirely, or 'cancel' to back out), or 'Up to Date' when already current. If neither appears, nothing was pulled and this reports failure rather than a false pass - Fusion greys Pull out on a library that was never linked.",+ "input": {+ "onUpdatePrompt": "optional str merge|replace|cancel (default merge)"+ },+ "output": {+ "alerts": "[...]",+ "library": "str",+ "success": "bool",+ "upToDate": "bool",+ "updatePrompt": "obj?"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {},+ "longRunning": true,+ "timeoutSeconds": 240,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ]+ },+ {+ "name": "managed_library_unlink",+ "tier": "platform",+ "summary": "Unlink the library in front from its managed library on library.io. Fusion greys this out on a library that was never linked, so a silent no-op there is expected.",+ "input": {},+ "output": {+ "alerts": "[...]",+ "library": "str",+ "success": "bool"+ },+ "hint": "Fusion's cloud (the Autodesk hub, library.io), the counterpart of Altium 365's a365_* verbs.",+ "pitfalls": [],+ "related": [],+ "example": {},+ "longRunning": true,+ "timeoutSeconds": 180,+ "proposedBy": "fusion-lane",+ "since": "0.31.0",+ "agreedBy": [+ "standard-lane"+ ] } ]