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.
Suggested: a kicad_state verb that returns KiCad's full window state as a base64 screenshot array
From John (2026-08-14), added to the Bridge SDK as a SUGGESTED pattern for every bridge that drives a windowed app.
The problem. A caller that wants to see KiCad today screenshots the first window whose title matches, and gets ONE window — but KiCad has at least two windows (the project manager plus the Symbol/PCB/Schematic editor). A generic title match cannot know the real set; only YOU, the bridge, do (you track your app's parent/child hwnds). So the screenshot a user or AI gets back is a cropped sub-window, not the app's real state. We hit this live in the web-control demo: the KiCad 'proof' screenshot was a single skinny panel instead of the whole app.
The suggestion: expose kicad_state (read-only, non-gated, cheap to poll) that returns KiCad's STATE OF THE UNION:
- A screenshot ARRAY of EVERY window KiCad owns right now (all the parent + child/related windows), each captured by its real hwnd, returned as base64:
{ shots: [{ title, hwnd, image, width, height }] }. Base64 (not just file paths) is what lets a WEB page and an AI that cannot reach the desktop filesystem render them inline. File paths are fine to include too. - Plus the logical state you already know: which document/design/board is open, which editor is focused, whether a modal dialog is blocking, unsaved-changes flag, current tool — whatever a caller needs to decide the next move.
Why it matters. It turns 'drive blind and hope' into 'look, then act': an AI calls kicad_state before and after an action to confirm it landed, and a human demo shows KiCad's true state instead of one window. ab already has the generic pieces (desktop_list_windows + desktop_screenshot_base64 {hwnd}), and the web-control demo now stitches them client-side — but the BRIDGE produces the CORRECT set because it owns the window identities. That is exactly the ab-renders / bridge-knows-its-app boundary.
No rush and not a contract change — a suggestion. If you add it, name it kicad_state for consistency across bridges. Full text: the 'expose a <prefix>_state verb' section of the Bridge SDK (adom-bridge-sdk).