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
standard 0.23.7: coverage reads Fusion 1.13.23 (219)
5 files changed
+47−22
README.md+3−2@@ -63,9 +63,9 @@ verb by verb: [docs/coverage.md](docs/coverage.md). | **core** | 93 | 93 | 90 | 89 | | **native** | 47 | 47 | 43 | 40 | | **checks** | 37 | 37 | 35 | 37 |-| **app** | 62 | 62 | 44 | 49 |+| **app** | 62 | 62 | 44 | 53 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 239 | 239 | 212 | 215 |+| standard (all but platform) | 239 | 239 | 212 | 219 | <!-- coverage:end --> The **checks** tier is where the other bridges are furthest behind, and it is the cheapest to close: those verbs are@@ -158,6 +158,7 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue ## Status +Version 0.23.7: coverage reads Fusion 360 bridge 1.13.23 (219 of 239: diagnostics, instances, progress, foreground; panel and selection unsupported). Version 0.23.6: `variants` moves from platform to native (Altium, Fusion and KiCad 10 all have assembly variants), so the standard is 239 verbs; coverage reads Fusion 360 bridge 1.13.22 (variants and silkscreen_prep, partial). Version 0.23.5: coverage reads Fusion 360 bridge 1.13.21 (213 of 238: replicate_layout, symbol_prims, set_visibility, and partial place_on_pcb, place_on_sch, pcb_report). Version 0.23.4: the reference is Altium bridge 0.2.83 (engine 0.20.0, turned bodies, simulate noise and monteCarlo, a 20x faster board model on large boards).
docs/coverage.md+9−9@@ -1,6 +1,6 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.83 (the reference), KiCad bridge 1.0.87, Fusion 360 bridge 1.13.22. 56 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.83 (the reference), KiCad bridge 1.0.87, Fusion 360 bridge 1.13.23. 56 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*. `exact` is the same job under the same or an equivalent name; `partial` does part of it or does it differently (`verbs/coverage.json` names what in `note`); `unsupported` answers `not_supported` for the whole job and is not counted; blank is missing. Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand. @@ -9,9 +9,9 @@ Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand | **core** | 93 | 93 | 90 | 89 | | **native** | 47 | 47 | 43 | 40 | | **checks** | 37 | 37 | 35 | 37 |-| **app** | 62 | 62 | 44 | 49 |+| **app** | 62 | 62 | 44 | 53 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 239 | 239 | 212 | 215 |+| standard (all but platform) | 239 | 239 | 212 | 219 | ## core @@ -231,7 +231,7 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | `cross_probe` *proposed* | From a schematic part to the board part linked to it, and back, by designator, the schematic symbol's id or its sheet path; optionally select them in the tool. | `altium_cross_probe` | `kicad_cross_probe` | `fusion_cross_probe` | | `demo` | The tour. Default: one background beat per call with a screenshot. live:true = the narrated FOREGROUND show: ab caption + document + in-bridge camera... | `altium_demo` | `kicad_demo` | `fusion_demo` | | `describe` | This list - the bridge's verbs and schemas for ab's Verbs tab. | `altium_describe` | `kicad_describe` | `fusion_describe` |-| `diagnostics` | Bridge-side facts for a bug report: environment variables, every Altium install found, Altium's windows, the agent status block and the cache directory. | `altium_diagnostics` | `kicad_diagnostics` | |+| `diagnostics` | Bridge-side facts for a bug report: environment variables, every Altium install found, Altium's windows, the agent status block and the cache directory. | `altium_diagnostics` | `kicad_diagnostics` | `fusion_diagnostics` | | `dialog_log` | What the standing dialog reaper (and the bridge's own recoveries) pressed, newest last: nuisance boxes, script-error boxes, discarded save prompts, silent... | `altium_dialog_log` | `kicad_dialog_log` | `fusion_dialog_log` | | `dismiss_dialogs` | Press one named button (default OK) on the detected Altium dialogs through UIA - no cursor, no focus steal. titles narrows it to dialogs whose title... | `altium_dismiss_dialogs` | `kicad_dismiss_dialogs` | `fusion_dismiss_dialogs` | | `document_info` *proposed* | The active document: its name, what kind it is, whether it has unsaved changes, where it is saved and which version it is. Read only; opens nothing. | `altium_document_info` | `kicad_state` (partial) | `fusion_document_info` |@@ -239,11 +239,11 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | `eval` | Run a DelphiScript snippet inside Altium (optional Var block, then Begin ... End;) on the CURRENT document, or on filePath opened first. | `altium_eval` | `kicad_eval` | `fusion_run_modeling_script` (partial) | | `export_spice` *proposed* | Write the design's SPICE netlist with the tool's own exporter, and say what it holds. | `altium_export_spice` | `kicad_export_spice` | `fusion_export_spice` | | `extension_ping` | Does the AdomBridge .NET extension answer? Sends AdomBridge:Ping through the -R lane and waits up to 30 s for its result file. | `altium_extension_ping` | | `fusion_addin_status` (partial) |-| `foreground` | Bring Altium in front of the user - the sanctioned exception to the never-foreground rule. | `altium_foreground` | `kicad_foreground` | |+| `foreground` | Bring Altium in front of the user - the sanctioned exception to the never-foreground rule. | `altium_foreground` | `kicad_foreground` | `fusion_foreground` | | `install` | Install Altium Designer on this machine, STAGED, with the rules in the verb (from 0.2.29). stage: preflight / get_installer / launch / wait / license, or... | `altium_install` | `kicad_upgrade` (partial) | `fusion_install` | | `install_extension` | Install, update or remove the AdomBridge .NET extension (the PowerShell installer shipped beside the bridge). Altium must be CLOSED. | `altium_install_extension` | | unsupported | | `install_receipt` | The last bundle install's full receipt (proof frame included), for a client whose install call outlived ab's budget. | `altium_install_receipt` | | unsupported |-| `instances` | Every running Altium (Designer + Designer Develop can run together). | `altium_instances` | `kicad_state` (partial) | |+| `instances` | Every running Altium (Designer + Designer Develop can run together). | `altium_instances` | `kicad_state` (partial) | `fusion_instances` (partial) | | `launch` | Start Altium (the newest numbered install, or the one install names) and wait for its main window, then hand the user's own window back. Answers... | `altium_launch` | `kicad_launch` | `fusion_launch` | | `library_views` *proposed* | Pictures of library parts for review, each as an image file: the schematic symbol, the footprint (pads and layers), the 3D body seated on the footprint, and... | `altium_library_views` | `kicad_library_views` | `fusion_library_views` | | `license` | Drive the License Management page (UIA first - no cursor, no foreground). | `altium_license` | | `fusion_account` (partial) |@@ -251,15 +251,15 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | `list_commands` | Search Altium's process-launcher catalog (about 1,100 Server:Command entries parsed from the install's System/*.rcs files) by text and/or server. | `altium_list_commands` | `kicad_menu_items` (partial) | `fusion_list_commands` | | `open_document` | Open a document or project by path through the agent and show it without focusing it. An already-open document is activated, not reloaded. | `altium_open_document` | `kicad_open_board / kicad_open_schematic` (partial) | `fusion_open_document` | | `open_project` | Open a project (.PrjPcb / .PrjScr / .PrjMbd / .PrjHar / .LibPkg) by path. Same handler as altium_open_document. | `altium_open_project` | `kicad_open_board / kicad_open_schematic` (partial) | `fusion_open_cloud_file` (partial) |-| `panel` | Activate a docked panel TAB (SCH Library, PCB Library, Components, Projects, Properties) in the BACKGROUND - the 'ganged-up view' needs the right panels in... | `altium_panel` | | |-| `progress` | The bridge's timing book: phases in flight right now (percent/ETA blocks ab paints on the taskbar), measured phase history and per-verb run statistics. | `altium_progress` | `kicad_progress` | |+| `panel` | Activate a docked panel TAB (SCH Library, PCB Library, Components, Projects, Properties) in the BACKGROUND - the 'ganged-up view' needs the right panels in... | `altium_panel` | | unsupported |+| `progress` | The bridge's timing book: phases in flight right now (percent/ETA blocks ab paints on the taskbar), measured phase history and per-verb run statistics. | `altium_progress` | `kicad_progress` | `fusion_progress` | | `readiness` | The one-call gate: is Altium installed, running, licensed, and is the resident agent alive? Answers with Altium closed and never touches the script engine. | `altium_readiness` | `kicad_readiness` | `fusion_readiness` | | `run_command` | Run an Altium process (Server:Command) through the agent, on the CURRENT document or on filePath opened first. | `altium_run_command` | `kicad_send_key` (partial) | `fusion_run_command` | | `run_script` | One shot: run a procedure of YOUR OWN .PrjScr through Altium's -R command line. Only for when the agent is NOT resident. | `altium_run_script` | `kicad_run_script` | `fusion_run_script` | | `save` | Save the focused document, or the document at filePath (opened first if need be, saved by its path, never whatever happens to have focus). | `altium_save` | `kicad_save` (partial) | `fusion_save` | | `sch_zoom` | Find parts on a sheet: select them (everything else deselected), frame the view on them and return a proof frame. The schematic half of cross-probing (the... | `altium_sch_zoom` | | `fusion_sch_zoom` | | `select_net` | Select one net as a whole on the current board (tracks, arcs, vias, pads, pours) and nothing else, optionally framing it; no net clears the selection. | `altium_select_net` | `kicad_select_net` | `fusion_select_net` |-| `selection` | What the user has selected in the current board (components with position mm, rotation, side, footprint, size) or sheet (components with location mils and... | `altium_selection` | `kicad_selection` (partial) | |+| `selection` | What the user has selected in the current board (components with position mm, rotation, side, footprint, size) or sheet (components with location mils and... | `altium_selection` | `kicad_selection` (partial) | unsupported | | `selftest_script_error` | Regression test for the script-error safety net (from 0.2.23): makes the agent raise a REAL DelphiScript runtime error on purpose and checks that the bridge... | `altium_selftest_script_error` | | unsupported | | `set_layer_visibility` | Show or hide one layer of the current board (by layer id) and refresh the view and the layer tabs. | `altium_set_layer_visibility` | `kicad_set_layer_visibility` | `fusion_set_layer_visibility` | | `setup_trial` | Onboarding state machine: from nothing to a working trial. Each call reports the stage it found (install / launch / signin / done) and the ONE next action;... | `altium_setup_trial` | | `fusion_install_fusion` (partial) |
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "eda-bridge-standard",- "version": "0.23.6",+ "version": "0.23.7", "type": "skill", "title": "EDA Bridge Standard: one way for an AI to drive every PCB tool", "description": "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.",
verbs/coverage.json+32−8@@ -1,5 +1,5 @@ {- "standard": "0.23.6",+ "standard": "0.23.7", "reference": { "bridge": "altium", "version": "0.2.83"@@ -7,7 +7,7 @@ "proposed": 56, "compared": { "kicad": "1.0.87",- "fusion360": "1.13.22"+ "fusion360": "1.13.23" }, "tiers": { "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",@@ -3281,7 +3281,11 @@ "verb": "kicad_diagnostics", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_diagnostics",+ "match": "exact",+ "note": "Fusion's facts: launcher, processes, windows (sign-in, licensing), add-in answering, environment with credential values hidden"+ } }, { "name": "dialog_log",@@ -3412,7 +3416,11 @@ "verb": "kicad_foreground", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_foreground",+ "match": "exact",+ "note": "the user is notified why and given three seconds before Fusion comes forward"+ } }, { "name": "install",@@ -3475,7 +3483,11 @@ "match": "partial", "note": "KiCad runs one project manager; state lists every window it owns" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_instances",+ "match": "partial",+ "note": "Fusion runs one instance per user: its processes, not several editions side by side"+ } }, { "name": "launch",@@ -3606,7 +3618,11 @@ "match": "exact" }, "kicad": null,- "fusion360": null+ "fusion360": {+ "verb": "fusion_not_supported",+ "match": "unsupported",+ "note": "Altium's docked panel tabs; Fusion's editors show their own panels, and the bridge opens a surface (library, symbol, footprint, board, schematic, 3D) with fusion_show_* in the background"+ } }, { "name": "progress",@@ -3620,7 +3636,11 @@ "verb": "kicad_progress", "match": "exact" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_progress",+ "match": "exact",+ "note": "the long operation in flight, phase and verb timings, recent runs"+ } }, { "name": "readiness",@@ -3736,7 +3756,11 @@ "match": "partial", "note": "the PCB editor's selection only (kicad_get_selection); the Schematic Editor has no API for its selection" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_not_supported",+ "match": "unsupported",+ "note": "Fusion does not show the user's board selection to the bridge: a ULP's ingroup() reads no part even right after a GROUP (checked live on Fusion 2706, 2026-10-30). Name the parts instead; fusion_electron_select shows one to the user"+ } }, { "name": "selftest_script_error",
verbs/standard.json+2−2@@ -1,5 +1,5 @@ {- "standard": "0.23.6",+ "standard": "0.23.7", "reference": { "bridge": "altium", "version": "0.2.83"@@ -7,7 +7,7 @@ "proposed": 56, "compared": { "kicad": "1.0.87",- "fusion360": "1.13.22"+ "fusion360": "1.13.23" }, "tiers": { "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",