Download ZIP Propose a change
Name Last commit message Last updated
.github issue #10: rebase retired wiki-ufypy5dpx93o.adom.cloud -> wiki.adom.inc (CONTRIBUTING x2, CI workflow, page.json readme); resync page.json readme from the live README (was a 10KB snapshot from v0.8.2); drop the dead release-bridge.sh flow 20d ago
dev-skills Add dev-skills + publish-skills (SDK 3-skill set; source-only, not in the user pkg) 1mo ago
docs control-surfaces diagram: sweep last legacy naming (Adom Desktop -> Adom Bridge) 19h ago
handlers v0.9.75: naming sweep per adom/definitions — bare AD/HD abbreviations removed everywhere; say Bridge (ab) and Hydrogen (ah) 1d ago
parsers v0.9.0: fix /status health endpoint (bridgeRunning root cause) + capability/version-awareness report 1mo ago
plugin_payload v0.9.74: plugin 0.9.1 two-hop background load (filter -> settle 0.8s on worker thread -> activate; fixed DataViewEvent 3-arg ctor) + open_symbol_editor tries the plugin path first, PS nav as fallback 2d ago
publish-skills Add dev-skills + publish-skills (SDK 3-skill set; source-only, not in the user pkg) 1mo ago
screenshots Set hero asset 1d ago
skills hero skill: alignment doctrine 79/83/83 (title shares subtitle line; do not clone Pup's stagger) 1d ago
templates v0.9.8 place_footprint 1mo ago
tour v0.9.0: fix /status health endpoint (bridgeRunning root cause) + capability/version-awareness report 1mo ago
tour-pack v0.9.0: fix /status health endpoint (bridgeRunning root cause) + capability/version-awareness report 1mo ago
tour-pack-rp2040 v0.9.0: fix /status health endpoint (bridgeRunning root cause) + capability/version-awareness report 1mo ago
3d-viewer.png docs: window-tour screenshots captured on ADOMBASELINE (Mesa software-OpenGL fallback) 1mo ago
adom_library.py v0.9.70 (issue #15): rename cut-over — updateManifestUrl/docs/homepage/hero + mesa URL to the kicad-bridge slug; Adom Desktop -> Adom Bridge and HD -> Hydrogen across user-facing copy and KiCad-visible library descriptions 2d ago
adom-5parts-demo.mp4 Demo (for review): 5 NEW basic parts (47R, 10nF, green/yellow/blue LEDs) into KiCad on ConfRoomROG (RTX GPU) — symbols, footprints, schematic, 2D board, 3D board. 60s, adom-tts voiceover. Not final. 1mo ago
adom-bridge-kicad-manifest.json v0.9.75: naming sweep per adom/definitions — bare AD/HD abbreviations removed everywhere; say Bridge (ab) and Hydrogen (ah) 1d ago
adom-bridge-kicad-source.tar.gz Migrate asset from Helium wiki 2mo ago
adom-bridge-kicad-v0.9.61.zip v0.9.61: kicad_export_molecule — one-shot molecule export pack (STEP + silk renders + sch/pro discovery + container next-steps); capabilities note KiCad-11 schematic IPC 26d ago
adom-bridge-kicad-v0.9.62.zip v0.9.62: SLIM runtime zip — drop skills/, demo/, docs, hero fonts and all images from the AD-bundled bridge (488.9->335.7 KB, -31%). Runtime keeps only code + certs + ps1 + blank-board template + the runtime SKILL.md. 22d ago
adom-bridge-kicad-v0.9.63.zip v0.9.63: warm BOTH eeschema and pcbnew — Symbol Editor lives in eeschema, Footprint Editor in pcbnew 21d ago
adom-bridge-kicad-v0.9.64.zip v0.9.64: NEVER steal the user's screen. navigate_symbol.ps1 rewritten to UIA ValuePattern + PostMessage (was foregrounding, moving the mouse and SendKeys-typing over the user); send_key/click now post to the window by default; launch_editor.ps1 de-foregrounded. Focus paths are opt-in and must warn first. 21d ago
adom-bridge-kicad-v0.9.65.zip v0.9.65: align kicad_demo to the fusion_demo contract (stage/done/narrate/screenshots/steps), capture its own screenshots, never end on an error screen 21d ago
adom-bridge-kicad-v0.9.66.zip issue #9: watcher description no longer points at AD's removed Settings->KiCad panel 20d ago
adom-bridge-kicad-v0.9.67.zip issues #12/#13: capture + log the X-Adom-Caller-* identity per verb; caller_identity module with forward_headers()/ad_callback() that echoes caller + adds Delegate:kicad; best-effort window labeling when an hwnd is present 16d ago
adom-bridge-kicad-v0.9.68.zip v0.9.68: #12.3 window labeling finds the editor window by title (no hwnd threading) so it fires for every open verb 16d ago
adom-bridge-kicad-v0.9.69.zip v0.9.69: FIX caller identity read — AD delivers it in args.caller.aiThread (--ai-thread flag), not X-Adom-Caller-* headers. set_from_request() reads args first, headers as fallback. Found live on AdomLapper 1.9.183. 16d ago
adom-bridge-kicad-v0.9.70.zip v0.9.70 (issue #15): rename cut-over — updateManifestUrl/docs/homepage/hero + mesa URL to the kicad-bridge slug; Adom Desktop -> Adom Bridge and HD -> Hydrogen across user-facing copy and KiCad-visible library descriptions 2d ago
adom-bridge-kicad-v0.9.71.zip v0.9.71: live-verify fixes — demo/export_molecule join the dispatcher focus sets (windows were landing ON TOP of the user), _capture gets real kicad_info (screenshots were silently empty), symbol beat verifies the part actually LOADED (was narrating over a blank editor) 2d ago
adom-bridge-kicad-v0.9.72.zip v0.9.72: demo clears stale .lck files (force-killed KiCad left locks that popped File Open Warning and blocked every load) + idempotent warm-up (repeat calls spawned duplicate editor pairs) 2d ago
adom-bridge-kicad-v0.9.73.zip v0.9.73: plugin __version__ -> 0.9.0 (discovery reports the truth) 2d ago
adom-bridge-kicad-v0.9.74.zip v0.9.74: plugin 0.9.1 two-hop background load (filter -> settle 0.8s on worker thread -> activate; fixed DataViewEvent 3-arg ctor) + open_symbol_editor tries the plugin path first, PS nav as fallback 2d ago
adom-bridge-kicad-v0.9.75.zip v0.9.75: naming sweep per adom/definitions — bare AD/HD abbreviations removed everywhere; say Bridge (ab) and Hydrogen (ah) 1d ago
adom-bridge-kicad.bundle Migrate asset from Helium wiki 2mo ago
adom-desktop-kicad-bridge-hero-v4.png bigger name (+20%), smaller logo (-10%) 1mo ago
adom-kicad-bridge-hero-v3.png name-first hero 1mo ago
arch.png Upload 1 file(s) 1mo ago
BRIDGE_VERSION v0.9.75: naming sweep per adom/definitions — bare AD/HD abbreviations removed everywhere; say Bridge (ab) and Hydrogen (ah) 1d ago
bridge.json v0.9.75: naming sweep per adom/definitions — bare AD/HD abbreviations removed everywhere; say Bridge (ab) and Hydrogen (ah) 1d ago
bridges-hero.png Migrate asset from Helium wiki 2mo ago
caller_identity.py v0.9.75: naming sweep per adom/definitions — bare AD/HD abbreviations removed everywhere; say Bridge (ab) and Hydrogen (ah) 1d ago
capabilities.py v0.9.61: kicad_export_molecule — one-shot molecule export pack (STEP + silk renders + sch/pro discovery + container next-steps); capabilities note KiCad-11 schematic IPC 26d ago
CONTRIBUTING.md v0.9.70 (issue #15): rename cut-over — updateManifestUrl/docs/homepage/hero + mesa URL to the kicad-bridge slug; Adom Desktop -> Adom Bridge and HD -> Hydrogen across user-facing copy and KiCad-visible library descriptions 2d ago
control-surfaces.svg control-surfaces (served copy): sweep legacy naming to Adom Bridge 19h ago
dialog-firstrun-wizard.png docs: window-tour screenshots captured on ADOMBASELINE (Mesa software-OpenGL fallback) 1mo ago
footprint-editor.png docs: window-tour screenshots captured on ADOMBASELINE (Mesa software-OpenGL fallback) 1mo ago
hero-billboard-v2.png new billboard hero (single full-bleed app screenshot) 1mo ago
hero-billboard.png new billboard hero (single full-bleed app screenshot) 1mo ago
hero.png Wire RP2040 molecule hero (v4): full Adom-molecule tour collage 2mo ago
install.sh Publish 1.0.20 1d ago
kc-3d-board.png real-content hero + inline screenshots 1mo ago
kc-schematic.png real-content hero + inline screenshots 1mo ago
kc-symbol.png real-content hero + inline screenshots 1mo ago
kicad_detect.py v0.9.75: naming sweep per adom/definitions — bare AD/HD abbreviations removed everywhere; say Bridge (ab) and Hydrogen (ah) 1d ago
kicad-bridge-demo-poster.png docs: final demo cut — AndrewNeural voiceover via adom-tts (correct KiCad pronunciation), assembled + storyboard-reviewed via video-post, 1s keyframes for wiki scrubbing 1mo ago
kicad-bridge-demo.mp4 docs: final demo cut — AndrewNeural voiceover via adom-tts (correct KiCad pronunciation), assembled + storyboard-reviewed via video-post, 1s keyframes for wiki scrubbing 1mo ago
kicad-bridge-hero-v5.png hero v5: Hero Studio generated (Familjen Bold title, dark-mode 3D viewer vitrine, Pup-layout alignment) 1d ago
kicad-bridge-hero-v6.png hero v6: title/subtitle share one left line (79/83/83); regenerated through Hero Studio 1d ago
kicad-hero-new.png Migrate asset from Helium wiki 2mo ago
kicad-hero-v5.png hero v5: post-rename billboard in the pup/nb family style — lowercase 'kicad', background-driving value prop, real 3D Viewer window with the ANNOTATED pipeline board (no REF**) 2d ago
kicad-hero.png real-content hero + inline screenshots 1mo ago
KICAD-PLUGIN-PROMPT.md v0.9.0: fix /status health endpoint (bridgeRunning root cause) + capability/version-awareness report 1mo ago
kicad-staged.png Migrate asset from Helium wiki 2mo ago
launch_editor.ps1 v0.9.64: NEVER steal the user's screen. navigate_symbol.ps1 rewritten to UIA ValuePattern + PostMessage (was foregrounding, moving the mouse and SendKeys-typing over the user); send_key/click now post to the window by default; launch_editor.ps1 de-foregrounded. Focus paths are opt-in and must warn first. 21d ago
lib_table.py v0.9.0: fix /status health endpoint (bridgeRunning root cause) + capability/version-awareness report 1mo ago
LICENSE v0.9.0: fix /status health endpoint (bridgeRunning root cause) + capability/version-awareness report 1mo ago
navigate_symbol.ps1 v0.9.64: NEVER steal the user's screen. navigate_symbol.ps1 rewritten to UIA ValuePattern + PostMessage (was foregrounding, moving the mouse and SendKeys-typing over the user); send_key/click now post to the window by default; launch_editor.ps1 de-foregrounded. Focus paths are opt-in and must warn first. 21d ago
outcomes.png Upload 1 file(s) 1mo ago
package.json Publish 1.0.25 1d ago
page.json Publish 1.0.25 1d ago
pcb-editor-2d.png docs: window-tour screenshots captured on ADOMBASELINE (Mesa software-OpenGL fallback) 1mo ago
plugin_install.py v0.9.74: plugin 0.9.1 two-hop background load (filter -> settle 0.8s on worker thread -> activate; fixed DataViewEvent 3-arg ctor) + open_symbol_editor tries the plugin path first, PS nav as fallback 2d ago
proc.py v0.9.75: naming sweep per adom/definitions — bare AD/HD abbreviations removed everywhere; say Bridge (ab) and Hydrogen (ah) 1d ago
README.md README: verb reference 41->45 (add demo, diagnostics, export_molecule, status); footer points at the shipped dev skills instead of dead dev-skills/ convention 1d ago
schematic-editor.png docs: window-tour screenshots captured on ADOMBASELINE (Mesa software-OpenGL fallback) 1mo ago
server.py v0.9.75: naming sweep per adom/definitions — bare AD/HD abbreviations removed everywhere; say Bridge (ab) and Hydrogen (ah) 1d ago
SKILL.md v0.9.75: naming sweep per adom/definitions — bare AD/HD abbreviations removed everywhere; say Bridge (ab) and Hydrogen (ah) 1d ago
start.bat v0.9.0: fix /status health endpoint (bridgeRunning root cause) + capability/version-awareness report 1mo ago
start.sh v0.9.0: fix /status health endpoint (bridgeRunning root cause) + capability/version-awareness report 1mo ago
symbol-editor.png docs: window-tour screenshots captured on ADOMBASELINE (Mesa software-OpenGL fallback) 1mo ago
uninstall.sh Publish 1.0.20 1d ago
verbs.png Upload 1 file(s) 1mo ago

Adom Bridge — KiCad Bridge

A reverse bridge that lets Adom Bridge (ab) — and the AI driving it — control the user's own KiCad on Windows: open and drive every editor, install symbol/footprint libraries, place parts, run DRC/ERC, export manufacturing files, and screenshot any window back to the AI.

Two artifacts on this page — which one do you want?

Release ZIP (adom-bridge-kicad-v*.zip) Package (adom-wiki pkg install adom/kicad-bridge)
What it is The bridge runtime — the actual Python server that drives KiCad Skills + docs only, for a container/agent
Who loads it Adom Bridge downloads it automatically via adom-bridge-kicad-manifest.json You, into a container, to teach an agent the kicad_* verbs
Contains code, certs, UIA scripts, board template SKILL.md files (no binaries, no images)
You install it manually? No — Bridge handles it Yes

The package is not the bridge. Installing the package does not give you a working bridge; Adom Bridge loading the release zip does. Both are kept deliberately small — the zip is auto-bundled into Adom Bridge, so it ships only what the runtime needs.

KiCad is the user's host app. The bridge detects an existing KiCad and, if none is present, installs one for them — it never asks the user to download or click through anything by hand.

Every screenshot in this README was captured on ADOMBASELINE, a stock Hyper-V VM with no GPU, driven end-to-end through the bridge — install → libraries → editors → 2D → 3D. If it renders there, it renders on a real laptop.


Demo — narrated live editor tour (real screen recording)

KiCad bridge live demo

Watch the demo (48s, 🔊 narrated) — the bridge driving real KiCad on a Windows VM: select a footprint and zoom the copper in the PCB editor, rotate the assembled board in 3D, then tour the schematic, symbol, and footprint editors. Genuine screen recording of the live windows (zoom / select / 3D rotation), narrated section by section — not animated stills.


The demo verb — kicad_demo

One verb that shows the whole bridge off, built for the AI that demos Adom Bridge during Hydrogen's install. Six beats, in the order a hardware person thinks:

Beat Shows
1 the schematic symbol in the user's own Symbol Editor
2 the footprint for that same part
3 that part in 3D
4 a schematic using it (U1 + two 10k resistors)
5 the 2D board layout
6 the finished board in 3D
adom-bridge-cli kicad_demo '{}'                      # start: prepares, warms KiCad, opens beat 1
adom-bridge-cli kicad_demo '{"step":"footprint"}'    # ...then follow data.nextCall each time
adom-bridge-cli kicad_demo '{"all":true}'            # bulk (non-interactive; slower than one request budget)
adom-bridge-cli kicad_close '{"force":true}'         # tear down

It narrates itself. Every beat returns say (a line to speak), pointOut (what's actually on screen), window (match it in kicad_screenshot_all) and nextCall. One beat per call is the default precisely so the AI can talk, screenshot, then move on.

It ships nothing. The two demo parts, the schematic and the board are all generated in code, and the 3D bodies come from KiCad's own bundled 3dmodels/*.3dshapes — so the runtime zip stays small and the 3D views are real. Parts install into the user's real Adom library; the project lands in Documents/adom-kicad-demo.

No KiCad? It offers to install it. kicad_demo returns an offer instead of an error; kicad_demo '{"installKiCad": true}' silently installs the official build (per-user, no UAC) and then runs the tour. Watching the AI install your EDA tool is itself a good demo beat.

It never takes your screen. Every window opens in the background and all input is window-targeted (UIA / PostMessage), so you can keep working while it runs.


How it fits together

The bridge is a spawn.kind: python process Bridge launches on the user's machine (entrypoint: server.py, port: 0 — Bridge picks the port and passes ADOM_BIND_HOST). It speaks HTTP (POST /command, GET /status) and reaches KiCad through four control surfaces, picking the lightest one that can do the job.

Control surfaces

# Surface Used for Where
1 kicad-cli (subprocess) headless DRC/ERC, gerber/pdf/svg/step/bom export, format upgrade handlers/export.py, run_drc, run_erc, lint_*
2 KiCad IPC (kipy) board/schematic introspection, confirmed footprint placement (KiCad 9+) handlers/place_footprint.py
3 Embedded Python JSON-RPC inside each KiCad process, dispatched on its wx UI thread plugin_payload/adom_bridge.py, handlers/bridge_client.py
4 Win32 / UIA / SendKeys open editors, screenshots, clicks/keys, dialog handling, window management handlers/kicad_ui.py, handlers/close_windows.py

The window tour

Everything below was opened and captured on the GPU-less VM. Sample data is the RP2040 breakout generated by tour-pack-rp2040/ (an AdomRP2040 symbol + QFN-56_AdomRP2040 footprint + a board).

Schematic editor — kicad_open_schematic

The RP2040 breakout: the MCU (U1), USB-C, a 12 MHz crystal, decoupling, and mounting pins.

Schematic editor

Symbol editor — kicad_open_symbol_editor

Opens straight to a symbol (kicad_install_symbol puts it in a user library first).

Symbol editor

Footprint editor — kicad_open_footprint_editor

{"footprintName":"QFN-56_AdomRP2040","library":"AdomRP2040"} loads the part directly — 56 pins + thermal pad, 7×7 mm, 0.4 mm pitch, courtyard and silkscreen.

Footprint editor

PCB editor (2D) — kicad_open_board

The routed breakout — copper, silkscreen, the QFN-56 land pattern, mounting holes.

PCB editor 2D

3D viewer — kicad_open_3d_viewer {"editor":"pcb"}

The full board in 3D — board body, the USB-C connector's 3D model, the QFN chip body, SMD parts, plated through-holes. Rendered on the CPU via the software-OpenGL fallback (below); reload 1.7 s.

3D viewer


Install & upgrade — zero manual steps

The bridge never tells the user to go download KiCad. kicad_upgrade fetches the official installer and runs it silently, picking the scope automatically:

  • Elevated Bridge/allusers /S (system-wide, %ProgramFiles%\KiCad).
  • Non-elevated Bridge/currentuser /S (%LocalAppData%\Programs\KiCad, no UAC prompt).

kicad_readiness reports whether KiCad is installed and ready without side effects; the AI routes on it before offering to install. Hard-won install details (all handled for you):

  • KiCad 10's NsisMultiUser installer requires a scope flag — bare /S errors rc=666660.
  • Bridge's portable Python has no CA bundle; the bridge ships certs/cacert.pem and uses it for TLS.
  • Downloads are size-checked against Content-Length (a truncated installer otherwise fails at NSIS).
  • %APPDATA%/kicad/<ver>/ lib tables don't exist until first launch — the bridge bootstraps them so install_library/install_footprint work on a never-opened KiCad.
  • kicad_upgrade {"diagnoseOnly":true} reports token-elevation type + EnableLUA without installing.

Dialogs & error handling — the bridge clears the pointless ones

KiCad throws modal dialogs that stall automation. The bridge scans every window owned by a running KiCad process (by PID — reliable, unlike title matching), auto-expires the benign ones, screenshots what it dismissed, and returns a hint so the AI can decide what (if anything) to tell the user.

Auto-expired benign dialogs include:

  • "Could not use OpenGL / falling back to software rendering" (GPU-less hosts).
  • "Welcome to KiCad — starting for the first time" first-run wizard (dismissing accepts defaults).
  • "This file was created by an older version of KiCad" conversion notice.

First-run wizard, auto-dismissed

Verbs:

  • kicad_window_info — lists windows and self-heals (auto-expires benign dialogs) by default.
  • kicad_dismiss_dialogs {"all":true} — clear everything blocking; {"screenshot":true} returns images of each; {"forceSoftwareCanvas":true} persists Cairo canvas; {"debug":true} dumps the raw PID-based scan.
  • kicad_screenshot_all — one call returns every open KiCad window, so the AI can spot an error dialog it didn't expect and read the message.

Software-OpenGL fallback (last resort)

kicad_enable_software_opengl deploys Mesa's llvmpipe (a CPU OpenGL rasterizer) into KiCad's bin so a box with no usable GPU — Hyper-V, RDP, headless CI — can still render the editors and the 3D viewer. This is how every 3D shot above exists.

⚠️ It renders on the CPU and is slow. It is a worst-case fallback only — a real GPU (or GPU-P / DDA passthrough) is vastly better. The bridge keeps it so a GPU-less box isn't a dead end; it is never suggested proactively.


Verb reference

All 45 verbs (prefix kicad_). Call kicad_describe for the live catalog with per-verb hints, related verbs, and pitfalls.

Windows & UIopen_board, open_schematic, open_symbol_editor, open_footprint_editor, open_3d_viewer, open_editors, close_symbol_editor, close_footprint_editor, close_3d_viewer, close, window_info, dismiss_dialogs, screenshot_all, send_key, click, fix_keyboard, demo

Libraries & partsinstall_library, install_symbol, install_footprint, install_plugin, place_footprint, adom_library_status

Checks & exportrun_drc, run_erc, lint_board, lint_schematic, lint_library, format_upgrade, export_gerber, export_pdf, export_svg, export_step, export_bom_csv, export_molecule

Detect, install & metalist_versions, readiness, describe, diagnostics, status, enable_software_opengl, check_for_updates, upgrade, bridge_status, bridge_call


Running / dependencies

Bridge provisions everything; there is nothing to install by hand.

  • Python ≥ 3.11 (Bridge provisions it) — stdlib only, plus the bundled certs/cacert.pem.
  • KiCad ≥ 7.0 (host app; kicad_upgrade installs it if absent).
  • OS: Windows (macOS/Linux detection stubs exist; the GUI surfaces are Windows-first).

The bridge binds ADOM_BIND_HOST on a Bridge-assigned port — never 0.0.0.0. Auto-updates via updateManifestUrl in bridge.json.


Developer docs ship as user-invocable:false skills in the package itself — kicad-bridge-dev (architecture + hard-won findings), kicad-bridge-publish (release recipe), and kicad-bridge-hero (page hero recipe). Maintainers get them with the normal pkg install; everyday users are never offered them.