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.24.3: coverage reads KiCad 1.0.89 (214)
5 files changed
+16−12
README.md+3−2@@ -63,9 +63,9 @@ verb by verb: [docs/coverage.md](docs/coverage.md). | **core** | 93 | 93 | 89 | 90 | | **native** | 47 | 47 | 44 | 42 | | **checks** | 37 | 37 | 35 | 37 |-| **app** | 62 | 62 | 45 | 53 |+| **app** | 62 | 62 | 46 | 53 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 239 | 239 | 213 | 222 |+| standard (all but platform) | 239 | 239 | 214 | 222 | <!-- 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.24.3: coverage reads KiCad bridge 1.0.89 (214 of 239: animate_view). Version 0.24.2: engine 0.21.1: `duplicate_pad_number` counts touching or overlapping pads as one land (a split exposed pad is not a duplicate; KiCad #28). KiCad's `swap_footprint` is no longer counted as `update_footprints_from_library`, which does a different job (#27). Version 0.24.1: coverage reads Fusion 360 bridge 1.13.24 (222 of 239: add_symbol_art, list_installed_libraries and install_library partial; uninstall_library, normalize_bodies and sch_sheet_symbol unsupported). Version 0.24.0: engine 0.21.0 adds `lint_library` (#28): the shared library rules (pads, courtyard, origin, pins against pads, part numbers) with a fixed severity each, from the footprints and symbols a bridge already reads.
docs/coverage.md+4−4@@ -1,6 +1,6 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.83 (the reference), KiCad bridge 1.0.88, Fusion 360 bridge 1.13.24. 56 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.83 (the reference), KiCad bridge 1.0.89, Fusion 360 bridge 1.13.24. 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 | 89 | 90 | | **native** | 47 | 47 | 44 | 42 | | **checks** | 37 | 37 | 35 | 37 |-| **app** | 62 | 62 | 45 | 53 |+| **app** | 62 | 62 | 46 | 53 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 239 | 239 | 213 | 222 |+| standard (all but platform) | 239 | 239 | 214 | 222 | ## core @@ -222,7 +222,7 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | `agent_start` | Bootstrap the resident DelphiScript agent inside Altium (renders the script, runs it through the -R lane, waits for the heartbeat). Optional: every... | `altium_agent_start` | | unsupported | | `agent_status` | Is the agent loop alive and responsive, in which workspace, and is any loop resident anywhere? Read-only; never starts the agent. | `altium_agent_status` | | `fusion_addin_status` (partial) | | `agent_stop` | Stop the selected instance's resident agent loop (drops a stop file and waits up to 12 s for the heartbeat to go stale). | `altium_agent_stop` | | unsupported |-| `animate_view` | Camera/zoom choreography on the current document - native Altium camera commands, animated by Altium itself. | `altium_animate_view` | | `fusion_view` (partial) |+| `animate_view` | Camera/zoom choreography on the current document - native Altium camera commands, animated by Altium itself. | `altium_animate_view` | `kicad_animate_view` | `fusion_view` (partial) | | `check_dialogs` | List every Altium dialog currently open, classified, each with a screenshot (the only way to READ one: Altium paints its dialog text). | `altium_check_dialogs` | `kicad_state / kicad_dismiss_dialogs` (partial) | `fusion_check_dialogs` | | `close` | Polite close (releases the licence seat). Frees a script engine parked on a breakpoint first (Altium refuses to close over one). discardChanges:true answers... | `altium_close` | `kicad_close` | `fusion_stop` | | `close_all_documents` *proposed* | Close every open document without a save dialog. Unsaved work is never lost by default: a document with unsaved changes stays open and is listed, unless... | `altium_close_all_documents` | `kicad_close` (partial) | `fusion_close_all_documents` |
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "eda-bridge-standard",- "version": "0.24.2",+ "version": "0.24.3", "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+6−3@@ -1,12 +1,12 @@ {- "standard": "0.24.2",+ "standard": "0.24.3", "reference": { "bridge": "altium", "version": "0.2.83" }, "proposed": 56, "compared": {- "kicad": "1.0.88",+ "kicad": "1.0.89", "fusion360": "1.13.24" }, "tiers": {@@ -3149,7 +3149,10 @@ "verb": "altium_animate_view", "match": "exact" },- "kicad": null,+ "kicad": {+ "verb": "kicad_animate_view",+ "match": "exact"+ }, "fusion360": { "verb": "fusion_view", "match": "partial",
verbs/standard.json+2−2@@ -1,12 +1,12 @@ {- "standard": "0.24.2",+ "standard": "0.24.3", "reference": { "bridge": "altium", "version": "0.2.83" }, "proposed": 56, "compared": {- "kicad": "1.0.88",+ "kicad": "1.0.89", "fusion360": "1.13.24" }, "tiers": {