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 fusion-lane ef03646 (filePath on render_board_layers and plan_route; render_board_layers = fusion_export_board_image, partial): Fusion 86 of 236
4 files changed
+11−6
README.md+2−2@@ -48,11 +48,11 @@ verb by verb: [docs/coverage.md](docs/coverage.md). | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---| | **core** | 93 | 64 | 72 | 29 |-| **native** | 46 | 35 | 35 | 17 |+| **native** | 46 | 35 | 35 | 18 | | **checks** | 37 | 32 | 11 | 4 | | **app** | 60 | 56 | 25 | 35 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 236 | 187 | 143 | 85 |+| standard (all but platform) | 236 | 187 | 143 | 86 | <!-- 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+3−3@@ -7,11 +7,11 @@ Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---| | **core** | 93 | 64 | 72 | 29 |-| **native** | 46 | 35 | 35 | 17 |+| **native** | 46 | 35 | 35 | 18 | | **checks** | 37 | 32 | 11 | 4 | | **app** | 60 | 56 | 25 | 35 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 236 | 187 | 143 | 85 |+| standard (all but platform) | 236 | 187 | 143 | 86 | ## core @@ -151,7 +151,7 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | `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. | | `kicad_project_snapshot` | | | `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_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. | | `kicad_render_board` | |-| `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... | | `kicad_export_svg` (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... | | `kicad_export_svg` (partial) | `fusion_export_board_image` (partial) | | `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_show_schematic` (partial) | `kicad_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` | | | | `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_refill_zones` | `fusion_repour` |
verbs/coverage.json+4−1@@ -1701,7 +1701,10 @@ "verb": "kicad_export_svg", "match": "partial" },- "fusion360": null+ "fusion360": {+ "verb": "fusion_export_board_image",+ "match": "partial"+ } }, { "name": "render_schematic",
verbs/standard.json+2@@ -4842,6 +4842,7 @@ "source": "proposed", "summary": "Render chosen board layers to an image file without opening a window: a preset view (copper, silkscreen, solder mask, paste, outline, drill, assembly or fabrication, of either side) or a list of layers, as png or svg.", "input": {+ "filePath": "path to the board (optional; default the open board)", "preset": "all | top_copper | bottom_copper | top_silkscreen | bottom_silkscreen | top_soldermask | bottom_soldermask | top_paste | bottom_paste | outline | drill | assembly_top | assembly_bottom | fabrication (default all)", "layers": "[layer]: copper by its standard name (F.Cu, In1.Cu, B.Cu) or any layer by the tool's own id; overrides preset", "format": "png | svg (default png)",@@ -6524,6 +6525,7 @@ "source": "proposed", "summary": "Plan a path for one net between two pads without changing the board: a grid search around the existing copper that keeps the clearance rules, on the allowed copper layers, with vias where they help. Answered as route_net's arguments.", "input": {+ "filePath": "path to the board (optional; default the open board)", "net": "string (required)", "from": "the start pad as Ref.Pad (required)", "to": "the end pad as Ref.Pad (required)",