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.28.2: reference Altium 0.2.86 (all 247)
5 files changed
+23−16
README.md+4−3@@ -60,12 +60,12 @@ verb by verb: [docs/coverage.md](docs/coverage.md). <!-- coverage:start (tools/generate.py writes this) --> | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 95 | 94 | 95 | 93 |+| **core** | 95 | 95 | 95 | 93 | | **native** | 49 | 49 | 49 | 46 | | **checks** | 38 | 38 | 38 | 38 |-| **app** | 65 | 64 | 54 | 56 |+| **app** | 65 | 65 | 54 | 56 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 247 | 245 | 236 | 233 |+| standard (all but platform) | 247 | 247 | 236 | 233 | <!-- 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.28.2: the reference is Altium bridge 0.2.86, which answers all 247 standard verbs (sch_batch and log_tail added). Version 0.28.1: coverage reads Fusion 360 bridge 1.13.31 (engine 0.23.0, sends sheetDrawing). Version 0.28.0: engine 0.23.0: `schematic_review` reads a sheet's drawing (`sheetDrawing`, kicad-lane's shape, #29) for dangling wire ends, floating labels and overlapping symbols; `placement_check` counts a body-less SMD test point as flat under a raised module. Version 0.27.2: coverage reads KiCad bridge 1.0.92 (log_tail exact; sch_batch partial).
docs/coverage.md+6−6@@ -1,17 +1,17 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.85 (the reference), KiCad bridge 1.0.92, Fusion 360 bridge 1.13.31. 62 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.86 (the reference), KiCad bridge 1.0.92, Fusion 360 bridge 1.13.31. 62 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. | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 95 | 94 | 95 | 93 |+| **core** | 95 | 95 | 95 | 93 | | **native** | 49 | 49 | 49 | 46 | | **checks** | 38 | 38 | 38 | 38 |-| **app** | 65 | 64 | 54 | 56 |+| **app** | 65 | 65 | 54 | 56 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 247 | 245 | 236 | 233 |+| standard (all but platform) | 247 | 247 | 236 | 233 | ## core @@ -76,7 +76,7 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `route_net` | Route one net as tracks, segment by segment; a waypoint on another layer drops a via there. One undo step, read back. | `altium_route_net` | `kicad_route_net` | `fusion_route_net` | | `routing_state` | The WHOLE current board as data, in mm: tracks, arcs, vias, pads (with owner and net), components (ref, x, y, rotation, side), polygon pours, the outline,... | `altium_routing_state` | `kicad_routing_state` | `fusion_routing_state` | | `rules_by_kind` | The current board's ENABLED design rules grouped by rule kind (Clearance, Width, RoutingVias, ...), each group sorted by priority. Shaped from one... | `altium_rules_by_kind` | `kicad_board_rules` (partial) | `fusion_rules_by_kind` |-| `sch_batch` *proposed* | Apply a list of schematic edits to one sheet in one read and one write, all or nothing: each op is a standard schematic verb with its own arguments, seeing... | | `kicad_sch_batch` (partial) | `fusion_sch_batch` |+| `sch_batch` *proposed* | Apply a list of schematic edits to one sheet in one read and one write, all or nothing: each op is a standard schematic verb with its own arguments, seeing... | `altium_sch_batch` | `kicad_sch_batch` (partial) | `fusion_sch_batch` | | `sch_bus` *proposed* | Draw a bus as a polyline (one bus segment per pair of points), optionally with a bus label such as D[0..7] or a group {SDA SCL} at its first point. One undo... | `altium_sch_bus` | `kicad_sch_bus` | `fusion_sch_bus` | | `sch_bus_entry` *proposed* | Add 45-degree bus entries: the short diagonal that joins a member wire's end to a bus. One undo step. | `altium_sch_bus_entry` | `kicad_sch_bus_entry` | `fusion_sch_bus_entry` | | `sch_connect` | Connect pins of placed parts: a wire stub from each pin's outer end plus a net label (kind label), a power port (kind power: GND-like nets get a ground... | `altium_sch_connect` | `kicad_sch_connect_to_net / kicad_sch_no_connect / kicad_sch_wire / kicad_sch_label` | `fusion_sch_connect` (partial) |@@ -254,7 +254,7 @@ Driving the application itself (launch, licence, dialogs, windows, views). Each | `license` | Drive the License Management page (UIA first - no cursor, no foreground). | `altium_license` | unsupported | `fusion_account` (partial) | | `license_status` | Plain-language answer to 'what Altium licence am I on?': the state from the window title plus a capture of the License Management page. | `altium_license_status` | `kicad_license_status` | `fusion_license_status` | | `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` |-| `log_tail` *proposed* | What the tool said about itself since an offset: its own log lines and alerts (warnings and errors), so a verb that looks successful while the tool... | | `kicad_log_tail` | `fusion_log_tail` |+| `log_tail` *proposed* | What the tool said about itself since an offset: its own log lines and alerts (warnings and errors), so a verb that looks successful while the tool... | `altium_log_tail` | `kicad_log_tail` | `fusion_log_tail` | | `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` | `kicad_send_key` (partial) | unsupported |
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "eda-bridge-standard",- "version": "0.28.1",+ "version": "0.28.2", "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+10−4@@ -1,8 +1,8 @@ {- "standard": "0.28.1",+ "standard": "0.28.2", "reference": { "bridge": "altium",- "version": "0.2.85"+ "version": "0.2.86" }, "proposed": 62, "compared": {@@ -1010,7 +1010,10 @@ "name": "sch_batch", "tier": "core", "source": "proposed",- "altium": null,+ "altium": {+ "verb": "altium_sch_batch",+ "match": "exact"+ }, "kicad": { "verb": "kicad_sch_batch", "match": "partial",@@ -3764,7 +3767,10 @@ "name": "log_tail", "tier": "app", "source": "proposed",- "altium": null,+ "altium": {+ "verb": "altium_log_tail",+ "match": "exact"+ }, "kicad": { "verb": "kicad_log_tail", "match": "exact"
verbs/standard.json+2−2@@ -1,8 +1,8 @@ {- "standard": "0.28.1",+ "standard": "0.28.2", "reference": { "bridge": "altium",- "version": "0.2.85"+ "version": "0.2.86" }, "proposed": 62, "compared": {