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.25.1: regenerated on kicad-lane's #29 equivalents
5 files changed
+20−11
README.md+3−2@@ -63,9 +63,9 @@ verb by verb: [docs/coverage.md](docs/coverage.md). | **core** | 94 | 94 | 90 | 91 | | **native** | 47 | 47 | 44 | 42 | | **checks** | 38 | 38 | 38 | 38 |-| **app** | 62 | 62 | 49 | 53 |+| **app** | 62 | 62 | 51 | 53 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 241 | 241 | 221 | 224 |+| standard (all but platform) | 241 | 241 | 223 | 224 | <!-- 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.25.1: regenerated on kicad-lane's latest #29 equivalents (panel, activate_document). Version 0.25.0: the reference is Altium bridge 0.2.84, which brings two verbs into the standard: `update_footprints_from_library` (core, #27) and `lint_library` (checks, #28). The standard is 241 verbs. Version 0.24.4: coverage reads Fusion 360 bridge 1.13.26 and kicad-lane's first #29 equivalents (KiCad 219); tiers for `update_footprints_from_library` (core, #27) and `lint_library` (checks, #28), which enter the standard with Altium's 0.2.84 reference. Version 0.24.3: coverage reads KiCad bridge 1.0.89 (214 of 239: animate_view).
docs/coverage.md+4−4@@ -9,9 +9,9 @@ Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand | **core** | 94 | 94 | 90 | 91 | | **native** | 47 | 47 | 44 | 42 | | **checks** | 38 | 38 | 38 | 38 |-| **app** | 62 | 62 | 49 | 53 |+| **app** | 62 | 62 | 51 | 53 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 241 | 241 | 221 | 224 |+| standard (all but platform) | 241 | 241 | 223 | 224 | ## core @@ -219,7 +219,7 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | Verb | What it does | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| `activate_document` | Make a document current - the quiet lane (one in-process agent call, no cursor, no OS foreground). Board and schematic read verbs act on the CURRENT document. | `altium_activate_document` | | `fusion_activate_document` |+| `activate_document` | Make a document current - the quiet lane (one in-process agent call, no cursor, no OS foreground). Board and schematic read verbs act on the CURRENT document. | `altium_activate_document` | `kicad_open_board / kicad_open_schematic` (partial) | `fusion_activate_document` | | `agent_recover` | Un-halt the script engine: clear the PCB transaction, press OK on open Altium dialogs, send EditScript:Stop, reap the busy notice and delete stale request... | `altium_agent_recover` | | unsupported | | `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) |@@ -253,7 +253,7 @@ 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` | | unsupported |+| `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` | `kicad_send_key` (partial) | 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` |
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "eda-bridge-standard",- "version": "0.25.0",+ "version": "0.25.1", "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+11−3@@ -1,5 +1,5 @@ {- "standard": "0.25.0",+ "standard": "0.25.1", "reference": { "bridge": "altium", "version": "0.2.84"@@ -3119,7 +3119,11 @@ "verb": "altium_activate_document", "match": "exact" },- "kicad": null,+ "kicad": {+ "verb": "kicad_open_board / kicad_open_schematic",+ "match": "partial",+ "note": "KiCad's verbs take the file's path, so there is no current document to switch; kicad_open_board {foreground: false} makes a board the one the PCB editor's API serves, kicad_open_schematic opens a sheet"+ }, "fusion360": { "verb": "fusion_activate_document", "match": "exact"@@ -3692,7 +3696,11 @@ "verb": "altium_panel", "match": "exact" },- "kicad": null,+ "kicad": {+ "verb": "kicad_send_key",+ "match": "partial",+ "note": "kicad_send_key {menu: \"Properties\" | \"Appearance\" | \"Search\" | \"Net Inspector\" | \"Design Blocks\"} fires View > Panels in the background; it is a toggle, and neither the menu nor KiCad's API reports whether a panel is showing (kicad_screenshot_all shows it)"+ }, "fusion360": { "verb": "fusion_not_supported", "match": "unsupported",
verbs/standard.json+1−1@@ -1,5 +1,5 @@ {- "standard": "0.25.0",+ "standard": "0.25.1", "reference": { "bridge": "altium", "version": "0.2.84"