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.
Spawns/restarts lose KiCad window placement: multi-monitor users get windows back on the primary display; post-restart windows can end parked-minimized (breaks screenshots too)
Bridge spawns/restarts do not preserve KiCad window placement: multi-monitor users get windows back on the PRIMARY display (laptop panel), and post-restart windows can end parked-minimized
Two live observations, one mechanism.
Caleb's symptom (k-zephyrus, laptop + external monitor)
He drags KiCad to his external monitor; the bridge opens or restarts KiCad and it comes back on the laptop screen. Repeatedly: "it keeps moving and annoying." The frequency jumped today, which fits: 0.9.222's stale-cache remedy is a PROCESS restart, so the wiki Quick Actions flow now restarts KiCad far more often than before, and every fresh process places windows per Windows defaults, which is the primary display.
Measured on Colby-ROG2 (multi-monitor) right now
After today's auto-restart cycle, every KiCad window sits at the minimized park position:
hwnd 1379900 x:-32000 y:-32000 237x39 "adom-plugin-bootstrap - PCB Editor"
hwnd 3803400 x:-32000 y:-32000 237x39 "Adom:SOT-223-TEST47 - Footprint Editor"
hwnd 2165262 x:-32000 y:-32000 237x39 "KiCad 10.0"
So placement is not being restored across the restart on this box either; here it degraded to parked/minimized rather than wrong-monitor. Two notes on why that state is worse than cosmetic:
- The background contract itself says windows should be BEHIND the user, not minimized, and PrintWindow on a minimized window blanks, so a parked KiCad also breaks the evidence screenshot /
shotthumbnail pipeline on subsequent verbs until something restores the window. - If the restart KILLS the process rather than closing it gracefully, KiCad never writes its own saved geometry either, so even KiCad's native "reopen where I was" is defeated.
Asks
- Before any bridge-initiated restart (and before closing bridge-owned windows), capture per-window placement: monitor, rect, show state. After the fresh spawn, restore it with SetWindowPos + SWP_NOACTIVATE (placement restore is not focus steal, so it fits the background-first contract).
- Persist the last-known placement in bridge state keyed per window class, so even a COLD spawn (no prior capture this session) lands on the monitor the user last used instead of the primary.
- Prefer a graceful close over a kill in the restart path so KiCad also saves its own geometry as a fallback.
- Post-restart, windows should come up background-BEHIND (per the etiquette contract), never minimized-parked, so screenshots and shot capture keep working.
User-side mitigation until then, for anyone bitten: set the external monitor as the Windows primary display, since that is where default placement lands.
Repro surface: any stale-cache flow (install a part while KiCad runs, then show it) triggers the restart; compare window rects before and after. Happy to measure any build on Colby-ROG2 like the previous rounds.