app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Reference implementation of the KiCad bridge: multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.
← Commit history
Freerouting on demand: docs, runner coverage, verb budgets
4 files changed
+10−5
bridge.json+4−2@@ -101,7 +101,9 @@ "enable_software_opengl": 240, "format_upgrade": 180, "demo": 600,- "export_molecule": 420+ "export_molecule": 420,+ "freerouting": 900,+ "autoroute": 900 } }, "dependencies": {@@ -174,4 +176,4 @@ ], "releasedAt": "2026-06-26T16:00:00Z", "uninstall": "kicad_uninstall"-}+}
docs/comparison.md+3−3@@ -52,7 +52,7 @@ Also audited, not in the matrix because they are too small or too different: [ki | ERC and DRC with parsed results | Y | Y | Y | N | P | Y | Y | Y | N | Y | | Board read (pads, nets, tracks, routing state) | Y | Y | Y | Y | P | Y | Y | Y | Y | Y | | Board edit through KiCad's IPC API as native undo steps | Y | P | Y | N | N | N | P | Y | Y | N |-| Autorouting: Freerouting engine plus AI routing through the IPC verbs | Y (1) | Y | Y | N | N | N | Y | N | N | Y |+| Autorouting: AI routing through the IPC verbs, plus Freerouting installed on demand into the bridge cache and removable on its own | Y | Y | Y | N | N | N | Y | N | N | Y | | Gerber, drill, STEP, SVG, PDF export | Y | Y | Y | P | N | P | Y | P | P | Y | | 3D image of a board or chip | Y (live viewer capture and kicad-cli render) | P | N | N | Y | N | Y | Y | N | N | | 3D model diagnostics (missing, unresolved, wrong scale) | Y | N | N | N | N | N | N | N | N | N |@@ -80,7 +80,7 @@ Also audited, not in the matrix because they are too small or too different: [ki | Backed by a funded company rather than one maintainer | Y (NSF-funded) | N | N | N | N | Y (Seeed) | N | N | N | N | | Open source with staffed contribution management: community wiki issues answered by an always-on AI thread, PRs reviewed and merged by three developers on staff | Y | P (one maintainer) | P (one maintainer) | P | N (stale) | P | P (one maintainer) | P | P | P | -(1) Schematic edit in place ships in the native bridge 1.0.0 (six verbs, ERC-validated on every write, verified on KiCad 10.0.5); `kicad_autoroute` ships there too with the ai engine live and the Freerouting engine reserved for a later build. Neither is in the 0.9.x Python bridge.+(1) Schematic edit in place ships in the native bridge 1.0.0 (six verbs, ERC-validated on every write, verified on KiCad 10.0.5). Not in the 0.9.x Python bridge. ## Where we lead, with the evidence @@ -95,7 +95,7 @@ Also audited, not in the matrix because they are too small or too different: [ki ## Where others lead today, and what closes each gap - **Schematic editing.** Konnect, KiCAD-MCP-Server, kicad-mcp-pro and mcp-server-kicad rewrite `.kicad_sch` on disk to place symbols and wires, with the same caveat in every README (close and reopen the schematic editor to see the change) because KiCad 10 has no schematic API. We ship the same file-level verbs in phase 1 of the port plan, validated by kicad-cli ERC after every edit and reloaded in the editor by the bridge, and switch to the KiCad 11 schematic API the day it lands.-- **Autorouting.** Four tools wrap Freerouting. The port plan adds `kicad_autoroute` with Freerouting as one engine and the AI as the other, and the verb's hints tell the AI to ask the user which they want. Our recommendation is the AI: the routing verbs land each trace as a native undo step with a DRC check, and GPT-6 Astra in Codex has shown that a frontier model routes a board well this way, with Claude Fable 5.1 close behind and newer models arriving in the coming weeks. Freerouting stays for the user who wants a deterministic pass.+- **Autorouting.** Four tools wrap Freerouting. So does this bridge from 1.0.1, with a difference: `kicad_autoroute` offers two engines and its hints tell the AI to ask the user which they want. The AI engine is the recommendation: the routing verbs land each trace as a native undo step with a DRC check, and GPT-6 Astra in Codex has shown that a frontier model routes a real board this way, with Claude Fable 5.1 driving the same verbs and newer models arriving. Freerouting is installed only when the user says yes (88 MB, its own runtime, nothing installed on the PC), lands its copper as native undo steps too, and is removable on its own. - **Headless without KiCad.** kicad-happy runs anywhere with no KiCad and publishes corpus-scale validation (6,845 schematics parsed at 100 percent). We match this three ways, all available today: the shared `service-kicad` container runs DRC, ERC, exports and library lookups for any container with no local install; the `service-kicad` skill installs kicad-cli into your own container; and Adom Bridge lets the GUI live on a second laptop, a conference room box, or a Grok Computer session driven through the Grok bot, with the AI talking to it by name. - **Zero-install distribution.** kicad-mcp-pro runs from `uvx`; Konnect is one static binary with 7,648 downloads and PCM install. From 1.0.0 (insiders, 2026-09-12) this bridge is one 4 MB Windows executable with no runtime, installed and updated by Adom Bridge with a sha-verified zip. The ab requirement stays, and it is the price of everything in the ecosystem section below. - **Permission profiles inside the tool.** kicad-mcp-pro ships a read-only default profile and a human-gated release profile. Ours is enforced one layer down by Adom Bridge (risk classes, human-only grants, a reason on every gated call). It is stronger and it is not visible in this bridge's own README, which this page now fixes.
docs/rust-port-plan.md+1@@ -21,6 +21,7 @@ Written 2026-09-11 from a full audit of the 0.9.350 source, the Adom Bridge (ab) | 2026-09-11 | Phase 5 landed and ran on ConfRoomROG: the six-beat tour on the native bridge, twice, background job with the panel, captions and narration, every beat opened and five of six verified on the second run in 187 s. Three fixes came out of the first run: the ab client no longer skips stop and cleanup calls during its backoff and no longer starts a backoff on a timeout; the tour input tolerates a sub-second foreground flicker before refusing a gesture; a beat whose editor sits on an unpainted canvas gets a zoom-to-fit through the native View menu before it is judged (the footprint beat then painted and animated). The one unverified beat on run two was the board: a Chrome window from another session took the foreground during it and the tour, by rule, raises each beat exactly once. Recording: ab's native recorder drops any 4K take longer than about a minute (stop times out, 0-byte file), reproduced from the CLI with no bridge involved and filed as [adom/adom-bridge#189](https://wiki.adom.inc/adom/adom-bridge/issues/189); short takes finalise. 96 verbs, 199 tests. | | 2026-09-11 | 1.0.0 release candidate built from the exact zip the packager produces (96 verbs, 3.0 MB with the demo audio, no runtime) and gated on ConfRoomROG: 71 pass, 4 fail, 15 skip, `kicad_demo` passing for the first time. The four: three foreground notes whose "before" window was a Chrome window another session was opening and closing on the same box during the run (the two earlier gates today had one and zero such notes), and the runner's own cleanup step, which found two folders held open by KiCad windows still up; the same cleanup ran clean once KiCad was closed. Waiting on John for the insiders flip. | | 2026-09-12 | Shipped. Native 1.0.0 is the insiders tier (John: "flip it"). The release row and zip live on the kicad-bridge page, the insiders manifest names it with `runtime: native`, the skills package is 1.0.137 with the new verbs documented, and ConfRoomROG and arav-rog pulled it through ab's own installer (sha verified) and answer natively; the other insiders boxes follow on their poll. Public stays on Python 0.9.348 until a human promotes. Rollback is the insiders manifest back to 0.9.351. |+| 2026-09-12 | Freerouting, on the user's terms. `kicad_freerouting {status|install|uninstall}` and the `freerouting` engine of `kicad_autoroute` shipped in 1.0.1. The bridge writes the Specctra DSN itself, runs Freerouting's own self-contained bundle headless (its Java runtime lives inside that folder; nothing installed on the PC, no PATH, no UAC: the MSI is extracted with an administrative extract into a fresh subfolder of the bridge cache), reads the SES back and lands the copper as one native undo step per net through the IPC API, or into the file with a backup, then a DRC. Install runs as a background job (ab's request budget is shorter than an 88 MB download on a slow link) and status reports its progress. Verified on ConfRoomROG: install 6 s, six-net fixture routed in 2 passes and 3 s, file apply DRC clean, live apply six undo steps in 4.6 s at zero errors and zero unconnected, uninstall freed 147 MB. Two Windows facts learned the hard way: msiexec property values with spaces need the quotes inside the token or msiexec waits forever on its usage box, and the administrative image must go to an empty folder that does not hold the package or msiexec returns 1603. The `kicad-autorouting` skill carries the choice: the AI engine is the recommendation, Freerouting is offered every time and installed only when the user says yes. | ## The goal in one sentence
skills/kicad-bridge-test/run_verb_tests.py+2@@ -127,6 +127,8 @@ def matrix(w: dict) -> dict: "lint_board": dict(phase=2, args={"filePath": B}, timeout=200), "lint_schematic": dict(phase=2, args={"filePath": S}, timeout=200), # ---- phase 2b: native-build verbs (Rust port). All read-only or on the fixture copy.+ "freerouting": dict(phase=1, args={"action": "status"}, timeout=60,+ note="status only: install is on demand and asks the user first"), "model_check": dict(phase=2, args={"boardPath": B}, timeout=120, note="file diagnostics only; renderVerified is always false here"), "autoroute": dict(phase=2, args={"filePath": B, "engine": "ai", "dryRun": True}, timeout=120,