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
regenerate after altium-lane 2869f67 (reference/altium-0.2.78.json, insiders: export_ipc356, export_dxf, export_gencad, import_svg, edit_footprint, generate_body): Altium 232 of 236
4 files changed
+39−21
README.md+3−3@@ -57,12 +57,12 @@ verb by verb: [docs/coverage.md](docs/coverage.md). <!-- coverage:start (tools/generate.py writes this) --> | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 93 | 90 | 89 | 61 |-| **native** | 46 | 43 | 41 | 27 |+| **core** | 93 | 93 | 89 | 61 |+| **native** | 46 | 46 | 41 | 27 | | **checks** | 37 | 33 | 29 | 9 | | **app** | 60 | 60 | 25 | 37 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 236 | 226 | 184 | 134 |+| standard (all but platform) | 236 | 232 | 184 | 134 | <!-- coverage:end --> The **checks** tier is where the other bridges are furthest behind, and it is the cheapest to close: those verbs are
docs/coverage.md+10−10@@ -1,17 +1,17 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.77 (the reference), KiCad bridge 1.0.68, Fusion 360 bridge 1.12.8. 54 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.78 (the reference), KiCad bridge 1.0.68, Fusion 360 bridge 1.12.8. 54 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** | 93 | 90 | 89 | 61 |-| **native** | 46 | 43 | 41 | 27 |+| **core** | 93 | 93 | 89 | 61 |+| **native** | 46 | 46 | 41 | 27 | | **checks** | 37 | 33 | 29 | 9 | | **app** | 60 | 60 | 25 | 37 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 236 | 226 | 184 | 134 |+| standard (all but platform) | 236 | 232 | 184 | 134 | ## core @@ -37,12 +37,12 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `create_footprint` | Create one footprint from a pad list in a PcbLib (the library is created and saved if the path does not exist) and return a proof frame. | `altium_create_footprint` | `kicad_create_footprint` | | | `create_symbol` | Create one rectangular symbol from a pin list in a SchLib (the library is created and saved if the path does not exist) and return a proof frame. | `altium_create_symbol` | `kicad_create_symbol` | | | `doc_params` | Read or set a sheet's document parameters: the title block (Title, DocumentNumber, Revision, DrawnBy, Author, CompanyName, ...). | `altium_doc_params` | `kicad_doc_params` (partial) | |-| `edit_footprint` *proposed* | Edit a library footprint in place: change, delete, add or renumber pads; add, replace or delete graphics on a layer; set its description, tags and... | | `kicad_fp_edit` | `fusion_edit_footprint` (partial) |+| `edit_footprint` *proposed* | Edit a library footprint in place: change, delete, add or renumber pads; add, replace or delete graphics on a layer; set its description, tags and... | `altium_edit_footprint` | `kicad_fp_edit` | `fusion_edit_footprint` (partial) | | `edit_parts` *proposed* | Edit placed parts: value, designator, any field (add, change, remove), do-not-populate, exclusion from the BOM or position files, mounting type and the... | `altium_edit_parts` | `kicad_edit_parts` | `fusion_edit_parts` (partial) | | `find_symbol` | Find symbols (or footprints with kind:'footprint') by part of their name across libraries: the given ones, or every installed .SchLib/.PcbLib. | `altium_find_symbol` | `kicad_find_symbol` | | | `footprint_primitives` | Geometry dump of one PLACED component: its tracks, arcs, pads (with solder and paste mask expansion in um) and texts in mils with layer ids; other primitive... | `altium_footprint_primitives` | `kicad_footprint_graphics` (partial) | |-| `generate_body` *proposed* | Make a part's 3D body from its package family and its datasheet dimensions (chip, SOIC, QFN, QFP, BGA, SOT-23, DFN, MELF, electrolytic can, crystal, pin... | | | `fusion_generate_body` |-| `import_svg` *proposed* | Import SVG artwork (a logo, a label) as filled polygons on a silkscreen, copper, mask or user layer, at a position and size; curves flattened, holes kept.... | | `kicad_import_svg` | `fusion_import_svg` (partial) |+| `generate_body` *proposed* | Make a part's 3D body from its package family and its datasheet dimensions (chip, SOIC, QFN, QFP, BGA, SOT-23, DFN, MELF, electrolytic can, crystal, pin... | `altium_generate_body` | | `fusion_generate_body` |+| `import_svg` *proposed* | Import SVG artwork (a logo, a label) as filled polygons on a silkscreen, copper, mask or user layer, at a position and size; curves flattened, holes kept.... | `altium_import_svg` | `kicad_import_svg` | `fusion_import_svg` (partial) | | `layer_stack` | The CURRENT board's stack-up: copper layers in order with copper thickness and the dielectric under each (height, constant, material), and the total... | `altium_layer_stack` | `kicad_layer_stack` | `fusion_board_stackup` | | `layers` | The current board's layer set with ids, names, kind and whether each is displayed. | `altium_layers` | `kicad_layers` | `fusion_layers` | | `layers_in_use` | Which layers of the current board actually carry primitives: copper layers with copper (densest first) and every layer with anything on it. | `altium_layers_in_use` | `kicad_layers_in_use` | `fusion_layers_in_use` |@@ -130,11 +130,11 @@ 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_make_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) | | | `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_csv` (partial) | `fusion_export_bom / fusion_board_bom` |-| `export_dxf` *proposed* | Export chosen board layers to DXF, one file per layer (the outline, panel drawings, stencils, enclosure work). | | `kicad_export_dxf` | `fusion_export_dxf` |-| `export_gencad` *proposed* | Export the board as GenCAD 1.4, the input of test-fixture tools and some assembly houses' CAM. | | `kicad_export_gencad` | `fusion_export_gencad` |+| `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` |+| `export_gencad` *proposed* | Export the board as GenCAD 1.4, the input of test-fixture tools and some assembly houses' CAM. | `altium_export_gencad` | `kicad_export_gencad` | `fusion_export_gencad` | | `export_gerber` | Gerber/drill export: altium_run_outjob with the fabrication OutJob and the 'Folder Structure' medium as defaults. | `altium_export_gerber` | `kicad_export_gerber` | `fusion_export_gerbers` | | `export_ipc2581` *proposed* | Export the board as IPC-2581: one XML file with copper, drill, stack-up, netlist and BOM, through the tool's own exporter. | `altium_export_ipc2581` | `kicad_export_ipc2581` | `fusion_export_ipc2581` (partial) |-| `export_ipc356` *proposed* | Export the IPC-D-356 netlist of the board, for bare-board electrical test (flying probe or bed of nails). | | `kicad_export_ipc356` | `fusion_export_ipc356` |+| `export_ipc356` *proposed* | Export the IPC-D-356 netlist of the board, for bare-board electrical test (flying probe or bed of nails). | `altium_export_ipc356` | `kicad_export_ipc356` | `fusion_export_ipc356` | | `export_library_part` *proposed* | Export one library part into its own small library files: a symbol library with only its symbol, a footprint library with only its footprint, and its 3D... | `altium_export_library_part` | `kicad_export_part` (partial) | `fusion_export_library_part` (partial) | | `export_manufacturing` | A project's manufacturing set in one call: Gerbers, NC drill, pick and place (CSV, mm) and the BOM, from an OutJob the bridge writes beside the project... | `altium_export_manufacturing` | `kicad_export_gerber / kicad_export_pos` (partial) | `fusion_export_gerbers / fusion_export_cpl / fusion_export_bom` (partial) | | `export_odb` *proposed* | Export the board as ODB++ (copper, drill, stack-up, netlist and parts in one archive) through the tool's own exporter. | `altium_export_odb` | `kicad_export_odb` | `fusion_export_odb` |
verbs/coverage.json+25−7@@ -2,7 +2,7 @@ "standard": "0.4.5", "reference": { "bridge": "altium",- "version": "0.2.77"+ "version": "0.2.78" }, "proposed": 54, "compared": {@@ -305,7 +305,10 @@ "name": "edit_footprint", "tier": "core", "source": "proposed",- "altium": null,+ "altium": {+ "verb": "altium_edit_footprint",+ "match": "exact"+ }, "kicad": { "verb": "kicad_fp_edit", "match": "exact"@@ -366,7 +369,10 @@ "name": "generate_body", "tier": "core", "source": "proposed",- "altium": null,+ "altium": {+ "verb": "altium_generate_body",+ "match": "exact"+ }, "kicad": null, "fusion360": { "verb": "fusion_generate_body",@@ -377,7 +383,10 @@ "name": "import_svg", "tier": "core", "source": "proposed",- "altium": null,+ "altium": {+ "verb": "altium_import_svg",+ "match": "exact"+ }, "kicad": { "verb": "kicad_import_svg", "match": "exact"@@ -1657,7 +1666,10 @@ "name": "export_dxf", "tier": "native", "source": "proposed",- "altium": null,+ "altium": {+ "verb": "altium_export_dxf",+ "match": "exact"+ }, "kicad": { "verb": "kicad_export_dxf", "match": "exact"@@ -1671,7 +1683,10 @@ "name": "export_gencad", "tier": "native", "source": "proposed",- "altium": null,+ "altium": {+ "verb": "altium_export_gencad",+ "match": "exact"+ }, "kicad": { "verb": "kicad_export_gencad", "match": "exact"@@ -1720,7 +1735,10 @@ "name": "export_ipc356", "tier": "native", "source": "proposed",- "altium": null,+ "altium": {+ "verb": "altium_export_ipc356",+ "match": "exact"+ }, "kicad": { "verb": "kicad_export_ipc356", "match": "exact"
verbs/standard.json+1−1@@ -2,7 +2,7 @@ "standard": "0.4.5", "reference": { "bridge": "altium",- "version": "0.2.77"+ "version": "0.2.78" }, "proposed": 54, "compared": {