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.65: 1.0.65: any library footprint can now be added to a board open in KiCad, plus four of the EDA Bridge Standard's native verbs.
**Live adds without a copy on the board.** add_footprint and add_mounting_hole build the part from its library text as KiCad's protobuf items (commit:"create-items", one Undo step): pads, graphics, texts, fields and 3D models.
- When the same library footprint is already on that side of the board, KiCad's own encoding of it is still copied.
- Checked on KiCad 10.0.7: stock parts with through-hole and SMD pads, at 0, 45, 90 and 270 degrees and on the back, came out the same as the closed-file add. DRC reports no library mismatch for them.
- A footprint with custom-shape pads, mask or paste margins, or zones inside still refuses with live_create_unsupported and says why.
**New standard verbs:**
- **compile:** ERC and the netlist, with messages counted by class;
- **list_installed_libraries:** every symbol and footprint library KiCad loads, with missing ones flagged;
- **replicate_layout:** one channel's placement onto matching channels through move_footprint, one Undo step;
- **diff_pairs:** the pairs KiCad's router recognises by name, and the net class that sets their width and gap.
1 file changed
+6−2
README.md+6−2@@ -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 (252, `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 (256, `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) @@ -466,7 +466,7 @@ Every verb of this build (252, `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** (80)+**Windows, editors, install and the bridge** (84) | Verb | What it does | |---|---|@@ -484,11 +484,13 @@ Every verb of this build (252, `kicad_describe` is the live catalog with inputs, | `kicad_close_3d_viewer` | Close the 3D viewer window. | | `kicad_close_footprint_editor` | Close the Footprint Editor window. | | `kicad_close_symbol_editor` | Close the Symbol Editor window. |+| `kicad_compile` | Check a project's schematic the way a compile does: KiCad's ERC on the root sheet (hierarchy followed) and the netlist, with the messages counted by class and the net and part counts. | | `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_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. | | `kicad_diagnostics` | Environment the bridge runs in: user, paths, env vars that matter, KiCad config dir. |+| `kicad_diff_pairs` | Differential pairs on the board: list the pairs KiCad's router recognises from net names (+/-, P/N, _P/_N), with the net class that sets their width and gap; define one (a net class holding both nets, with diffPairWidth and diffPairGap) or remove that class. | | `kicad_dismiss_dialogs` | Programmatically expire KiCad dialogs (auto-clears the benign OpenGL/software-render notice; {all:true} clears every dialog). | | `kicad_doc_params` | Read or set a sheet's document parameters: KiCad's title block (Title, Revision, Date, Company, Comment1 to Comment9). | | `kicad_edit_parts` | *standard* → `kicad_edit_footprint` |@@ -500,6 +502,7 @@ Every verb of this build (252, `kicad_describe` is the live catalog with inputs, | `kicad_ipc_api` | Read or flip KiCad's IPC API server switch (Preferences > Plugins) that live routing needs. | | `kicad_launch` | Cold-start KiCad (project manager) when nothing is running. | | `kicad_layers` | The board's whole layer set: KiCad's id, name, kind (signal, power, mixed, user) and the user's name for each, and whether the open PCB editor shows it. |+| `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_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. |@@ -524,6 +527,7 @@ Every verb of this build (252, `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_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_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_screenshot_all` | Screenshot every open KiCad window. | | `kicad_send_key` | Send a key to KiCad, or fire a menu item by label; chords and menu labels resolve to menu commands (background) |