app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Drive your own KiCad from an AI, in the background: open every editor, read the whole board as data (the EDA Bridge Standard board model), stack-up, part heights, netlists, place, route, pour, DRC and exports.
← Commit history
1.0.95: 1.0.95: the standard's cross_check from its engine, eleven verbs that were partial under other names, now under their own, and KiCad found on any drive (engine 0.24.0, standard 0.30.0).
- **kicad_cross_check:** compares the schematic's designators with the board's, computed by the standard's engine.
- The reply gives matched, onSheetNotOnBoard and onBoardNotOnSheet.
- The sheets are read through KiCad's own netlist of the whole hierarchy. The board is read from the open PCB editor when it serves the board, otherwise from the file.
- sameProject (with a _warning) says when the sheet and the board sit in different folders.
- Checked: on a copy of the rp2040 project with C1 deleted from the board, cross_check names C1 as on the sheet but not the board, and the matched count drops by one.
- **kicad_list_library:** the symbols in a .kicad_sym or the footprints in a .pretty folder, the kind taken from the path (data.names, data.count).
- **kicad_open_document, kicad_open_project, kicad_activate_document:** open or bring up a board, schematic or project by path in the background. A board opened this way is the one the PCB editor's API serves.
- **kicad_render_board_layers:** board layers rendered to PNG or SVG through kicad-cli without a window.
- Fourteen presets (copper, silkscreen, mask and paste of either side, outline, drill at real size, assembly, fabrication), or a layer list.
- Bottom views are mirrored so they read from below, and dpi is honoured.
- **kicad_export_bom:** the project's BOM CSV from its root schematic, with files and outputDir.
- **Fixed: KiCad installed on a drive other than C: is found (wiki #137).** The bridge searches in this order:
1. KiCad's registry key;
2. KiCad's uninstall entries;
3. Program Files\KiCad, Program Files (x86)\KiCad and \KiCad on every fixed drive;
4. kicad-cli on PATH.
- bridge.json's detect globs include D: to G:, so Adom Bridge's host-app check sees such an install too.
- Library paths were already built from the detected root.
- The skill now says never to install KiCad in the Linux workspace: the bridge runs the user's own kicad-cli.
- **kicad_routing_drc:** KiCad's DRC on the board as the PCB editor holds it (unsaved edits included), with the project's rules and zones refilled. The reply is clean, errors, unconnected and violations[{rule, severity, description, at}].
- **kicad_set_track_width:** sets the width of the existing tracks and arcs on nets or a net class, optionally on one layer (top, bottom, mid N). An open board takes it as one Undo step through kicad_modify_track; a closed board is written with a backup. The reply gives byNet and drcAfter.
- **kicad_footprint_primitives:** one placed part's lines, arcs, pads (size, hole, net, solder and paste mask expansion in µm) and texts, in mils on the board, with other kinds counted.
- **kicad_rules_by_kind:** every rule the board answers to, grouped by kind and sorted by KiCad's precedence: custom .kicad_dru rules, then net classes, then Board Setup minimums.
- Engine adom-eda-checks 0.24.0 vendored unchanged (standard 0.30.0). kicad_bom stays KiCad's own: it was already exact.
1 file changed
+14−3
README.md+14−3@@ -257,7 +257,7 @@ viewer. This is how every 3D shot above exists. <!-- verbs:start (tools/readme_verbs.py writes this) --> -Every verb of this build (328, `kicad_describe` is the live catalog with inputs, hints and pitfalls). A name marked *standard* is the EDA Bridge Standard's name for the verb after the arrow.+Every verb of this build (339, `kicad_describe` is the live catalog with inputs, hints and pitfalls). A name marked *standard* is the EDA Bridge Standard's name for the verb after the arrow. **Board model and reads (EDA Bridge Standard)** (12) @@ -434,13 +434,14 @@ Every verb of this build (328, `kicad_describe` is the live catalog with inputs, | `kicad_set_design_rules` | Stage a fab's .kicad_dru next to a board and run DRC with it. | | `kicad_zone_state` | Read every zone on the live board with KiCad's filled copper area per layer and the coverage. | -**Checks, exports and manufacturing** (28)+**Checks, exports and manufacturing** (29) | Verb | What it does | |---|---| | `kicad_errors` | Every KiCad error/warning DIALOG on screen, with its exact text (read-only, background). | | `kicad_estimate_cost` | The board's numbers in the shape a quote tool needs (size, layers, thickness, min track/space/drill, holes, SMD/THT parts and joints, unique parts) plus a rough JLCPCB-style price table with every assumption stated. | | `kicad_export_3d` | Export the board's 3D model through kicad-cli in a format other than STEP: stl, glb, vrml, ply, brep, xao, u3d, stpz or 3dpdf (the standard's export_3d). obj, 3mf, iges and other formats KiCad cannot write are refused by name. |+| `kicad_export_bom` | Export the project's bill of materials as a CSV through kicad-cli from its root schematic (the standard's export_bom). | | `kicad_export_bom_csv` | Export a BOM CSV from a schematic via kicad-cli. | | `kicad_export_dxf` | Export board layers to DXF via kicad-cli, one .dxf per layer (mechanical outline, panel drawings, laser stencils). | | `kicad_export_fab_package` | One-call fab package: Gerbers and drill, a BOM grouped from the board (value + footprint + MPN), the CPL, a README listing every file, all zipped. fab:"jlcpcb" writes JLCPCB's BOM and CPL columns (LCSC part field included). |@@ -476,12 +477,13 @@ Every verb of this build (328, `kicad_describe` is the live catalog with inputs, | `kicad_project_rename` | Rename a project: the .kicad_pro, root .kicad_sch, .kicad_pcb, .kicad_prl (and .kicad_dru, backups folder), with the references inside updated (project file entries, every schematic's instance headers, the board's sheet references and title). Refused while KiCad has the project open. | | `kicad_project_snapshot` | Timestamped copy of the project's files into <project>/snapshots/<stamp>[-label]/, plus schematic and board PDFs made with kicad-cli. | -**Windows, editors, install and the bridge** (146)+**Windows, editors, install and the bridge** (156) | Verb | What it does | |---|---| | `kicad_3d_view` | Drive the 3D Viewer without the mouse: zoom, rotate, view orientation, flip, or a scripted tour; menu commands posted to the viewer in the background. | | `kicad_3d_viewer_settings` | Read or set the 3D viewer's model-visibility toggles (SMD, through-hole, virtual, not-in-POS, DNP) that can hide every chip body. |+| `kicad_activate_document` | Make a board or schematic the current one, in the background (the standard's activate_document): KiCad's verbs take the file's path, and a board opened here is the one the PCB editor's API serves. | | `kicad_add_body` | Put a 3D body (a STEP or VRML model) on a library footprint. It REPLACES the footprint's models unless keepExisting:true, so a re-import never stacks a second body. | | `kicad_add_symbol_art` | Draw artwork (polylines: a chip outline, a logo) inside a library symbol's body rectangle, scaled to fit with a margin and centred, keeping its aspect; the art comes as point lists or from another symbol's polylines (adom-symbol's baked chip outline). | | `kicad_agent_recover` | Recover a halted script agent (the standard's agent_recover). Not in KiCad: KiCad has no resident script agent to manage: the bridge reaches KiCad through kicad-cli, its built-in IPC API and KiCad's own Python per call, so there is nothing to start, stop, check or recover. |@@ -515,6 +517,7 @@ Every verb of this build (328, `kicad_describe` is the live catalog with inputs, | `kicad_copper_balance` | Copper per layer as a share of the board, poured copper included, and how evenly mirrored layers match (F.Cu against B.Cu, In1 against the last inner layer): a pair that differs by more than 20 points can bow or twist through reflow. | | `kicad_copy_footprint` | Duplicate a footprint inside a .pretty library under a new name (every pad, graphic, text and 3D model copied). | | `kicad_create_part_project` | *standard* → `kicad_make_part_project` |+| `kicad_cross_check` | Compare the schematic's designators with the board's (the standard's cross_check, computed by its engine): parts on the sheets but not on the board, and parts on the board but not on any sheet. | | `kicad_current_capacity` | Whether each named net's copper carries its current: per layer, the narrowest track against the width IPC-2221 needs for the temperature rise, and how many vias a layer change needs. | | `kicad_demo` | Six-beat KiCad showcase tour: staged, or a background job with structured progress (percent/ETA), an ab demo-panel remote, captions, narration, per-beat verification and a kicad_state final payload. | | `kicad_describe` | List every verb with input, example, hint, related verbs and pitfalls. |@@ -533,6 +536,7 @@ Every verb of this build (328, `kicad_describe` is the live catalog with inputs, | `kicad_find_space` | Free spots on the board for a part near another: clear of every other part's courtyard on that side, of that side's tracks and vias, and inside the outline, nearest first. check:true lists parts that already overlap or leave the outline. | | `kicad_fix_keyboard` | Reset stuck modifier keys on a KiCad window. | | `kicad_footprint_from_land_pattern` | Build a complete footprint from the land pattern a datasheet prints: pads numbered the standard way (chip, dual SOIC/TSSOP/DFN, SOT, quad QFP/QFN, BGA), an exposed pad, the courtyard, silkscreen kept clear of the copper with a pin-1 dot, a fab outline with a pin-1 chamfer, and a 3D body box when the height is given. |+| `kicad_footprint_primitives` | Geometry of one PLACED part on the board (the standard's footprint_primitives): its graphic lines and arcs, pads (shape, size, hole, net, solder and paste mask expansion in um) and texts, in mils in KiCad's board frame with each item's layer; other kinds are counted. | | `kicad_foreground` | Bring a KiCad window in front of the user: the one sanctioned exception to the never-foreground rule. A reason written for the person is required; the bridge captions it first. | | `kicad_generate_body` | Make a part's 3D body from its package family and datasheet dimensions (chip, SOIC, QFN, QFP, BGA, SOT-23, DFN, MELF, electrolytic can, crystal, pin header and others), to IPC-7351 proportions, optionally with a marking on its top; written as a STEP file and, given a footprint, attached to it. | | `kicad_get_settings` | Read the bridge's user-visible settings (overlay badges, ...). |@@ -549,6 +553,7 @@ Every verb of this build (328, `kicad_describe` is the live catalog with inputs, | `kicad_license` | Drive the tool's licence page (the standard's license). Not in KiCad: KiCad is GPL-3.0-or-later and has no licence page to drive. | | `kicad_license_status` | What licence KiCad is on, in plain words: KiCad is free, open-source software (GPL-3.0-or-later), so there is no seat, sign-in or trial; with the installed version. | | `kicad_list_installed_libraries` | Every symbol and footprint library KiCad loads: the global tables and, with projectPath, the project's own, with nickname, path and whether the path exists. |+| `kicad_list_library` | Names of every symbol in a .kicad_sym or every footprint in a .pretty folder, the kind taken from the path (the standard's list_library). | | `kicad_list_versions` | Every KiCad install found (registry and standard folders) with bin dir, kicad-cli path and version. | | `kicad_log_tail` | New KiCad log output since a byte offset: what KiCad said about ITSELF (read-only). | | `kicad_menu_items` | List a KiCad window's menu bar items (path, id, accelerator), optionally filtered by a substring: what kicad_send_key {menu} and kicad_3d_view can fire. |@@ -556,8 +561,10 @@ Every verb of this build (328, `kicad_describe` is the live catalog with inputs, | `kicad_normalize_bodies` | Move each 3D model of a footprint library (or one footprint) onto its pad cluster when its body sits more than minShiftMm from the pads' centre, by its offset; models already on their pads are left alone. | | `kicad_open_3d_viewer` | Open the 3D board viewer for a .kicad_pcb. | | `kicad_open_board` | Open a .kicad_pcb in the PCB editor (pcbnew). |+| `kicad_open_document` | Open a board, schematic or project by path in KiCad without taking the foreground (the standard's open_document): .kicad_pcb in the PCB editor, .kicad_sch in the Schematic Editor, .kicad_pro in the project manager. | | `kicad_open_editors` | List currently open KiCad editor windows. | | `kicad_open_footprint_editor` | Open the Footprint Editor (optionally at a footprint). |+| `kicad_open_project` | Open a KiCad project (.kicad_pro) in the project manager without taking the foreground (the standard's open_project). | | `kicad_open_schematic` | Open a .kicad_sch in the schematic editor (eeschema). | | `kicad_open_symbol_editor` | Open the Symbol Editor (optionally at a symbol). | | `kicad_panelize` | Step a rectangular board into a manufacturing panel: rows x cols copies, each copy's nets renamed B<n>-<net>, rails, three tooling holes and three fiducials; separated by V-score (copies abutting, V-cut lines on Cmts.User) or mouse-bite tabs (copies a gap apart, the rout path on Edge.Cuts broken at the tabs, five 0.6 mm holes a tab), with JLCPCB's panel rules checked; written as a new board and checked with KiCad's DRC. |@@ -581,10 +588,13 @@ Every verb of this build (328, `kicad_describe` is the live catalog with inputs, | `kicad_rename_footprint` | Rename a footprint in a .pretty library: the file and the name inside it. | | `kicad_rename_symbol` | Rename a symbol in a .kicad_sym (its units too); symbols that extend it follow the new name. | | `kicad_render_board_3d` | *standard* → `kicad_render_board` |+| `kicad_render_board_layers` | Render chosen board layers to a PNG or SVG through kicad-cli without opening a window (the standard's render_board_layers): a preset view (copper, silkscreen, solder mask, paste, outline, drill, assembly, fabrication, either side) or a list of layers. | | `kicad_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 from the anchor (turned by the anchors' rotation difference). One Undo step, with kicad_move_footprint's checks. | | `kicad_return_path` | Signal tracks that run over a gap in the reference copper (pours and planes) on their neighbouring layers, with how far and where the gap starts, and a ready kicad_apply_zone_plan call that pours the reference net under each gap. | | `kicad_review_board` | Design review of the whole board in one read (with the schematic's parts from KiCad's netlist when the project has one): duplicate designators, parts off the board or near its edge, placeholder values on the board and the sheets, one-pin nets, parts without a footprint, missing vendor part numbers and datasheets, and disabled or missing design rules, each finding with its severity. | | `kicad_ripup_nets` | Delete every unlocked track, arc and via of the named nets live, as one Undo step (pads, pours and locked copper stay). |+| `kicad_routing_drc` | KiCad's DRC on the board as the PCB editor holds it (unsaved edits included; the file when no editor serves it), with the project's rules and zones refilled: one clean or not-clean answer with every violation's place (the standard's routing_drc). |+| `kicad_rules_by_kind` | Every design rule the board answers to, grouped by kind (Clearance, Width, RoutingVias, HoleSize, ...) and sorted by priority (1 wins), from the project's custom rules (.kicad_dru), net classes and Board Setup minimums (the standard's rules_by_kind). | | `kicad_schematic_review` | Review the schematic before updating the board: every pin (with its electrical type) against KiCad's own netlist of the design. Errors: power pins on no net, outputs driving each other. Warnings: pins on no net, one-pin nets, inputs nothing drives, IC supplies with no decoupling capacitor to ground. | | `kicad_screenshot_all` | Screenshot every open KiCad window. | | `kicad_selftest_script_error` | Self-test the script-error safety net (the standard's selftest_script_error). Not in KiCad: KiCad runs no resident script engine to test: a failing kicad_eval snippet already comes back as eval_failed with its traceback. |@@ -592,6 +602,7 @@ Every verb of this build (328, `kicad_describe` is the live catalog with inputs, | `kicad_set_layer_visibility` | Show or hide one layer in the open PCB editor (KiCad's own layer visibility, through its API), read back. | | `kicad_set_params` | Set parameters on a library symbol (fields; a missing one is added hidden), optionally its value (the standard's comment) and its footprint link. | | `kicad_set_settings` | Change bridge settings; applies immediately (e.g. overlay badges stamped/cleared on live windows). |+| `kicad_set_track_width` | Set the width of the EXISTING tracks and arcs on nets or a net class, optionally on one layer (the standard's set_track_width): widen power nets after routing, or thin a net that fails clearance. Net-class rules only steer new routing. | | `kicad_set_visibility` | Show or hide one field of a library symbol. | | `kicad_sheet_params` | Write parameters onto PLACED parts on the schematic sheets (the BOM write-back: MPN, Manufacturer, Mouser/DigiKey/LCSC numbers, anything): every unit of each designator, on whichever sheet of the project holds it. A missing parameter is added hidden. | | `kicad_show_2d_board` | Show the 2D board layout in the PCB Editor. |