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.26.4: coverage reads KiCad 1.0.91 (234)
5 files changed
+19−21
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** | 94 | 94 | 93 | 91 |-| **native** | 49 | 47 | 47 | 44 |+| **core** | 94 | 94 | 94 | 91 |+| **native** | 49 | 47 | 49 | 44 | | **checks** | 38 | 38 | 38 | 38 | | **app** | 64 | 62 | 53 | 55 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 245 | 241 | 231 | 228 |+| standard (all but platform) | 245 | 241 | 234 | 228 | <!-- 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.26.4: coverage reads KiCad bridge 1.0.91 (234 of 245: add_symbol_art, build_symbol_modes and cleanup_libs now real verbs). Version 0.26.3: coverage reads KiCad bridge 1.0.90, which answers every standard verb (swap_footprint, plate_vias, normalize_bodies, symbol_mode added; the Altium-only verbs refuse with a reason). Version 0.26.2: Fusion maps render_board and export_pos (partial), 228 of 245. Version 0.26.1: `align_footprints` and `edit_placed_footprint` withdrawn: they duplicated `align_parts` and `edit_parts` (#29). Four verbs from this round stay: `verb_times`, `prewarm`, `render_board`, `export_pos`.
docs/coverage.md+7−7@@ -1,17 +1,17 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.84 (the reference), KiCad bridge 1.0.90, Fusion 360 bridge 1.13.26. 60 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.84 (the reference), KiCad bridge 1.0.91, Fusion 360 bridge 1.13.26. 60 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** | 94 | 94 | 93 | 91 |-| **native** | 49 | 47 | 47 | 44 |+| **core** | 94 | 94 | 94 | 91 |+| **native** | 49 | 47 | 49 | 44 | | **checks** | 38 | 38 | 38 | 38 | | **app** | 64 | 62 | 53 | 55 | | **platform** | 18 | 18 | 0 | 1 |-| standard (all but platform) | 245 | 241 | 231 | 228 |+| standard (all but platform) | 245 | 241 | 234 | 228 | ## core @@ -21,7 +21,7 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a |---|---|---|---|---| | `add_body` | Put a 3D body on a footprint of a PcbLib: a STEP model, or an extruded box when no step is given. It REPLACES the footprint's existing 3D bodies (a... | `altium_add_body` | `kicad_add_body` (partial) | `fusion_attach_3d_package` (partial) | | `add_models` | Attach one or more PCBLIB footprint models, parameters, comment and description to a SchLib component (Altium's several-footprints-per-symbol mechanism). | `altium_add_models` | `kicad_footprint_models` (partial) | `fusion_add_models` |-| `add_symbol_art` | Draw the chip-outline artwork (the chip-thumbnailer polylines adom-symbol baked into the KiCad symbol) into a SchLib component, fitted to its body... | `altium_add_symbol_art` | unsupported | `fusion_add_symbol_art` |+| `add_symbol_art` | Draw the chip-outline artwork (the chip-thumbnailer polylines adom-symbol baked into the KiCad symbol) into a SchLib component, fitted to its body... | `altium_add_symbol_art` | `kicad_add_symbol_art` | `fusion_add_symbol_art` | | `align_parts` *proposed* | Line parts up on a common left, right, top, bottom or centre line, or space them evenly, by courtyard box or by anchor point. One undo step, with... | `altium_align_parts` | `kicad_align_parts` | `fusion_align_parts` | | `apply_silkscreen` | Land a silkscreen plan in one undo step: designators and comments moved, sized and turned (or hidden), free overlay texts and lines added (bottom texts... | `altium_apply_silkscreen` | `kicad_silk_fields_batch / kicad_silk_text_batch / kicad_silk_graphics_batch` | `fusion_apply_silkscreen` | | `board_outline` | Draw the board shape as tracks and arcs on a mechanical layer: the outline a fab house reads from the Gerbers. A board built by script has its shape but... | `altium_board_outline` | `kicad_board_outline` | `fusion_board_outline` |@@ -124,8 +124,8 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | `annotate` | Number every '?' designator (R?, C?, U?) across the project's sheets: the lowest free number per prefix, top-left first on each sheet. dryRun shows the plan. | `altium_annotate` | `kicad_annotate` | `fusion_annotate` | | `apply_pours` | Add solid polygon pours from outlines and pour them, each with its own connect style (solid joints or thermal spokes), plus pour keepouts (polygon cutouts);... | `altium_apply_pours` | `kicad_add_zone / kicad_apply_zone_plan` | `fusion_apply_pours` (partial) | | `autoroute` | Altium's own autorouter (Situs) on the current board: picks a strategy, keeps existing routing locked by default, routes, and answers the unconnected count... | `altium_autoroute` | `kicad_autoroute` | `fusion_autoroute` |-| `build_symbol_modes` | Build ONE SchLib component with N display modes (Normal + Alternate 1..N-1) from a symbol_modes spec file on this machine, and return a proof frame. | `altium_build_symbol_modes` | unsupported | `fusion_import_part` (partial) |-| `cleanup_libs` | Remove the factory-default stray every fresh library carries: Component_1 from the current SchLib and an empty (no pads) PCBComponent_1 from the current PcbLib. | `altium_cleanup_libs` | unsupported | unsupported |+| `build_symbol_modes` | Build ONE SchLib component with N display modes (Normal + Alternate 1..N-1) from a symbol_modes spec file on this machine, and return a proof frame. | `altium_build_symbol_modes` | `kicad_build_symbol_modes` | `fusion_import_part` (partial) |+| `cleanup_libs` | Remove the factory-default stray every fresh library carries: Component_1 from the current SchLib and an empty (no pads) PCBComponent_1 from the current PcbLib. | `altium_cleanup_libs` | `kicad_cleanup_libs` | unsupported | | `compile` | Compile a project and return Altium's Messages panel (ERC + connectivity) with counts by class. With no path it compiles Altium's bundled example project. | `altium_compile` | `kicad_compile` | `fusion_run_erc` (partial) | | `component_classes` | List, make or remove component classes on the board, each optionally with a room: a placement area that keeps its parts together (fitted around the parts or... | `altium_component_classes` | `kicad_component_classes` | unsupported | | `create_part_project` *proposed* | Generate a small real project (schematic and board) around one library part, so the part can be shown and tested in every view: schematic, 2D board and 3D... | `altium_create_part_project` | `kicad_create_part_project` (partial) | `fusion_make_test_project` (partial) |
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "eda-bridge-standard",- "version": "0.26.3",+ "version": "0.26.4", "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+5−8@@ -1,12 +1,12 @@ {- "standard": "0.26.3",+ "standard": "0.26.4", "reference": { "bridge": "altium", "version": "0.2.84" }, "proposed": 60, "compared": {- "kicad": "1.0.90",+ "kicad": "1.0.91", "fusion360": "1.13.26" }, "tiers": {@@ -63,8 +63,7 @@ }, "kicad": { "verb": "kicad_add_symbol_art",- "match": "unsupported",- "note": "the chip outline is baked into the KiCad symbol itself by adom-symbol: KiCad shows it with no second copy to draw (Altium needs this because its symbol is rebuilt from KiCad's)"+ "match": "exact" }, "fusion360": { "verb": "fusion_add_symbol_art",@@ -1731,8 +1730,7 @@ }, "kicad": { "verb": "kicad_build_symbol_modes",- "match": "unsupported",- "note": "KiCad symbols have two body styles (standard and De Morgan), not N display modes, and nothing reads Altium's symbol_modes spec; kicad_sym_create builds the standard body, kicad_symbol_mode shows either style"+ "match": "exact" }, "fusion360": { "verb": "fusion_import_part",@@ -1750,8 +1748,7 @@ }, "kicad": { "verb": "kicad_cleanup_libs",- "match": "unsupported",- "note": "a new KiCad library starts empty (kicad_sym_create, kicad_fp_create), so there is no factory-default stray to remove"+ "match": "exact" }, "fusion360": { "verb": "fusion_not_supported",
verbs/standard.json+2−2@@ -1,12 +1,12 @@ {- "standard": "0.26.3",+ "standard": "0.26.4", "reference": { "bridge": "altium", "version": "0.2.84" }, "proposed": 60, "compared": {- "kicad": "1.0.90",+ "kicad": "1.0.91", "fusion360": "1.13.26" }, "tiers": {