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
0.31.9: reads Fusion 1.13.64; edit_tracks exact
5 files changed
+12−11
README.md+1@@ -158,6 +158,7 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue ## Status +Version 0.31.9: reads Fusion 1.13.64; its edit_tracks is exact. Version 0.31.8: KiCad's cancel_run is exact (a real Freerouting stop proven on 1.0.100). Version 0.31.7: the board model names tracks[].id, the handle edit_tracks takes. Version 0.31.6: coverage reads KiCad bridge 1.0.100 (place_parts, edit_tracks, extensions, preferences, select_items, cancel_run; physical_properties refused with the reason).
docs/coverage.md+2−2@@ -1,6 +1,6 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.89 (the reference), KiCad bridge 1.0.100, Fusion 360 bridge 1.13.59. 100 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.89 (the reference), KiCad bridge 1.0.100, Fusion 360 bridge 1.13.64. 100 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. @@ -136,7 +136,7 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | `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) | | `diff_pairs` | Differential pairs on the current board: list them, define one from two nets (replacing a pair of that name), or remove one. Altium's differential-pair... | `altium_diff_pairs` | `kicad_diff_pairs` (partial) | `fusion_diff_pairs` (partial) | | `edit_pours` *proposed* | Change existing pours in place without redrawing them: clearance, minimum width, thermal relief (on/off, spoke width, gap), priority or rank, the net, and... | `altium_edit_pours` | `kicad_edit_pours` | `fusion_edit_pours` (partial) |-| `edit_tracks` *proposed* | Change given tracks by the handle routing_state returns: width, layer and ends. One undo step, read back. | | `kicad_edit_tracks` | `fusion_edit_tracks` (partial) |+| `edit_tracks` *proposed* | Change given tracks by the handle routing_state returns: width, layer and ends. One undo step, read back. | | `kicad_edit_tracks` | `fusion_edit_tracks` | | `export_3d` *proposed* | Export the board's 3D model in a mesh or CAD format other than STEP (export_step has STEP), through the tool's own exporter, with an optional web-optimized... | `altium_export_3d` | `kicad_export_3d` | `fusion_export_3d` | | `export_bom` | Bill of materials export: altium_run_outjob with the assembly OutJob and the 'Folder Structure' medium as defaults. | `altium_export_bom` | `kicad_export_bom` | `fusion_export_bom` | | `export_dxf` *proposed* | Export chosen board layers to DXF, one file per layer (the outline, panel drawings, stencils, enclosure work). | `altium_export_dxf` | `kicad_export_dxf` | `fusion_export_dxf` |
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "eda-bridge-standard",- "version": "0.31.8",+ "version": "0.31.9", "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−6@@ -1,5 +1,5 @@ {- "standard": "0.31.8",+ "standard": "0.31.9", "reference": { "bridge": "altium", "version": "0.2.89"@@ -7,7 +7,7 @@ "proposed": 100, "compared": { "kicad": "1.0.100",- "fusion360": "1.13.59"+ "fusion360": "1.13.64" }, "tiers": { "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",@@ -1776,7 +1776,7 @@ "fusion360": { "verb": "fusion_apply_pours", "match": "partial",- "note": "pours with their isolate, rank, thermals and orphans, and Fusion's own fill per pour; pour keepouts (cutouts) are not taken: draw them as restrict areas with fusion_board_features keepouts"+ "note": "pours on any copper layer with their isolate, rank, thermals and orphans, and Fusion's own fill per pour; cutouts are drawn on the top and bottom restrict layers and refused on an inner layer, as Fusion has no restrict layer there (shape that pour's outline instead); connect is direct or relief, as a Fusion pour always joins pads of its own net; relief spoke size is not settable" } }, {@@ -1921,7 +1921,7 @@ "fusion360": { "verb": "fusion_edit_pours", "match": "partial",- "note": "minimum width, clearance, thermals, rank and orphans, refilled and read back (net and layer name a pour when it is the only one there); a pour's net cannot be moved in place (a polygon belongs to its signal)"+ "note": "minimum width, clearance, thermals on or off, rank and orphans, refilled and read back (net and layer name a pour when it is the only one there); newNet moves a pour by drawing it again with the same outline and settings, as a polygon belongs to its signal; thermal spoke width and gap are not settable" } }, {@@ -1935,8 +1935,8 @@ }, "fusion360": { "verb": "fusion_edit_tracks",- "match": "partial",- "note": "width and layer; an end moves only along the track's own line, since Fusion's MOVE bends an angled move into two segments, which is undone and refused (end_move_bends); ids are the track's net, layer and ends, as Fusion stores none"+ "match": "exact",+ "note": "width, layer and ends; an end moved at an angle draws the track again and deletes the old one, as Fusion's MOVE would bend it into two segments; a layer and ends change in two calls; ids are the track's net, layer and ends, as Fusion stores none" } }, {
verbs/standard.json+2−2@@ -1,5 +1,5 @@ {- "standard": "0.31.8",+ "standard": "0.31.9", "reference": { "bridge": "altium", "version": "0.2.89"@@ -7,7 +7,7 @@ "proposed": 100, "compared": { "kicad": "1.0.100",- "fusion360": "1.13.59"+ "fusion360": "1.13.64" }, "tiers": { "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",