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.30.1: coverage reads Fusion 1.13.37
5 files changed
+16−15
README.md+1@@ -158,6 +158,7 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue ## Status +Version 0.30.1: coverage reads Fusion 360 bridge 1.13.37 (engine 0.24.0: bom from the engine; render_board and render_board_layers exact). Version 0.30.0: engine 0.24.0 answers `bom` (grouped by part number, a variant applied, order checks, the JLCPCB, Mouser and DigiKey files as text; from the Altium bridge) and `cross_check` (the sheets' designators against the board's), so every bridge can answer them exactly from the parts it already reads. Version 0.29.6: the reference is Altium bridge 0.2.87 (engine 0.23.0, sends sheetDrawing). Version 0.29.5: coverage reads Fusion 360 bridge 1.13.34 (five partials now exact: board_summary, read_schematic, list_library, export_pos, window_info).
docs/coverage.md+4−4@@ -1,6 +1,6 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.87 (the reference), KiCad bridge 1.0.93, Fusion 360 bridge 1.13.34. 67 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.87 (the reference), KiCad bridge 1.0.93, Fusion 360 bridge 1.13.37. 67 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. @@ -157,9 +157,9 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | `pour_state` | Every polygon pour with the copper it actually poured: filled area per pour and per layer, and the pours that poured nothing. | `altium_pour_state` | `kicad_pour_state` | `fusion_pour_state` | | `project_snapshot` *proposed* | A dated copy of the project's documents into <project>/snapshots/<stamp>[-label]/, with PDFs of the schematic and the board made by the tool. | `altium_project_snapshot` | `kicad_project_snapshot` | `fusion_project_snapshot` (partial) | | `remove_pours` | Delete polygon pours by net (and layer), or all of them, and the pour keepouts (cutouts) apply_pours made. Tracks and vias are untouched. | `altium_remove_pours` | `kicad_remove_zone` | `fusion_remove_pours` |-| `render_board` *proposed* | A rendered 3D picture (PNG or JPG) of a board from one side, made by the tool's own renderer with no window: optionally framed on parts, turned for an... | `altium_render_board` | `kicad_render_board` | `fusion_render_board_3d` (partial) |+| `render_board` *proposed* | A rendered 3D picture (PNG or JPG) of a board from one side, made by the tool's own renderer with no window: optionally framed on parts, turned for an... | `altium_render_board` | `kicad_render_board` | `fusion_render_board_3d` | | `render_board_3d` *proposed* | Render a 3D picture of the board from one side to an image file, through the tool's own renderer, without opening a window. | `altium_render_board_3d` | `kicad_render_board_3d` | `fusion_render_board_3d` |-| `render_board_layers` *proposed* | Render chosen board layers to an image file without opening a window: a preset view (copper, silkscreen, solder mask, paste, outline, drill, assembly or... | `altium_render_board_layers` | `kicad_export_svg` (partial) | `fusion_export_board_image` (partial) |+| `render_board_layers` *proposed* | Render chosen board layers to an image file without opening a window: a preset view (copper, silkscreen, solder mask, paste, outline, drill, assembly or... | `altium_render_board_layers` | `kicad_export_svg` (partial) | `fusion_render_board_layers` | | `render_schematic` *proposed* | Render a sheet to an image without opening a window, through the tool's own plotter, and keep visual baselines: baseline set stores the image, baseline... | `altium_render_schematic` | `kicad_render_schematic` | `fusion_render_schematic` | | `replicate_layout` | Copy one channel's placement to matching channels: each target keeps its anchor part where it is and every other part takes the source's offset and rotation... | `altium_replicate_layout` | `kicad_replicate_layout` | `fusion_replicate_layout` | | `repour` | Repour every polygon on the board (Altium's Repour All) and answer the copper after. Runs outside the script engine so scoped rules apply. | `altium_repour` | `kicad_repour` | `fusion_repour` |@@ -185,7 +185,7 @@ Engineering computed from the board model, not by the tool: one shared engine, s | `auto_classes` | Net classes from the nets' own names: GND, Power (VCC, VDD, 3V3, VBAT...), Clock, HighSpeed (USB, Ethernet, HDMI, PCIe, DDR, MIPI, LVDS, SATA...) and the... | `altium_auto_classes` | `kicad_auto_classes` | `fusion_auto_classes` | | `board_features` | Add the furniture every real board needs in one undo step: mounting holes (at points or the four corners), fiducials, keepout areas, and a stitching-via... | `altium_board_features` | `kicad_add_mounting_hole` (partial) | `fusion_board_features` (partial) | | `board_report` | One shareable page per board: every check run against the live board and its project (Altium's DRC, JLCPCB fab limits and assembly tiers, the schematic... | `altium_board_report` | `kicad_board_report` | `fusion_board_report` |-| `bom` | The project's bill of materials read straight from Altium: every schematic sheet the .PrjPcb lists (placed parts and their parameters) merged with the board... | `altium_bom` | `kicad_bom` | `fusion_board_bom` (partial) |+| `bom` | The project's bill of materials read straight from Altium: every schematic sheet the .PrjPcb lists (placed parts and their parameters) merged with the board... | `altium_bom` | `kicad_bom` | `fusion_bom` | | `build_board` | Build a NEW board from a parts list and a netlist: outline (rounded corners allowed), every footprint from one PcbLib placed by its own origin, pad nets... | `altium_build_board` | `kicad_build_board` | `fusion_build_board` | | `build_footprint` | Build a complete footprint (pads, silkscreen, courtyard, arcs) in a PcbLib from a kicad2altium spec file on this machine, and return a proof frame. | `altium_build_footprint` | `kicad_fp_create` (partial) | `fusion_import_part` (partial) | | `build_schematic` | Draw a design's schematic from its netlist with the project library's symbols, inside a new project (.PrjPcb with the board and libraries), compile it, and... | `altium_build_schematic` | `kicad_build_schematic` | `fusion_schematic_plan / fusion_schematic_run` (partial) |
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "eda-bridge-standard",- "version": "0.30.0",+ "version": "0.30.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+8−8@@ -1,5 +1,5 @@ {- "standard": "0.30.0",+ "standard": "0.30.1", "reference": { "bridge": "altium", "version": "0.2.87"@@ -7,7 +7,7 @@ "proposed": 67, "compared": { "kicad": "1.0.93",- "fusion360": "1.13.34"+ "fusion360": "1.13.37" }, "tiers": { "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",@@ -2294,8 +2294,8 @@ }, "fusion360": { "verb": "fusion_render_board_3d",- "match": "partial",- "note": "Fusion's own view of the design's 3D PCB from one side (top, bottom, left, right, front, back, iso), png or jpg, transparent background, width, height, zoom, perspective. No refs framing, rotation only through side iso, and quality high (raytraced) is refused: Fusion's raytracer is the mechanical layer's render_image, for a 3D design"+ "match": "exact",+ "note": "Fusion's own view of the design's 3D PCB from one side, framed on refs (marginMm), turned by rotate, and quality high through Fusion's local ray-tracer" } }, {@@ -2328,8 +2328,8 @@ "match": "partial" }, "fusion360": {- "verb": "fusion_export_board_image",- "match": "partial"+ "verb": "fusion_render_board_layers",+ "match": "exact" } }, {@@ -2661,8 +2661,8 @@ "match": "exact" }, "fusion360": {- "verb": "fusion_board_bom",- "match": "partial"+ "verb": "fusion_bom",+ "match": "exact" } }, {
verbs/standard.json+2−2@@ -1,5 +1,5 @@ {- "standard": "0.30.0",+ "standard": "0.30.1", "reference": { "bridge": "altium", "version": "0.2.87"@@ -7,7 +7,7 @@ "proposed": 67, "compared": { "kicad": "1.0.93",- "fusion360": "1.13.34"+ "fusion360": "1.13.37" }, "tiers": { "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",