Adom Desktop
UnreviewedLaptop bridge: screenshots, file transfer, notifications, KiCad + Fusion 360 control, real-Chrome (pup) automation. One install gives Claude the main + pup + kicad + fusion skills.
name: adom-desktop-kicad
public: true
description: "Launch and drive KiCad on the user's laptop (KiCad 7/8/9/10 supported, multi-version side-by-side) from this container via the adom-desktop CLI. Open schematics/boards/symbols/footprints, run DRC, install sym-lib-table / fp-lib-table libraries, show the 3D viewer, capture KiCad window screenshots, send keyboard shortcuts and click coordinates. Trigger words: kicad, open schematic, open board, open pcb, open symbol, open footprint, KiCad symbol editor, KiCad footprint editor, KiCad 3D viewer, run DRC, install KiCad library, sym-lib-table, fp-lib-table, KiCad screenshot, kicad_send_key, kicad_click, kicad_window_info, kicad_screenshot_all, close KiCad, kicad versions, kicad_list_versions, KiCad bridge."
adom-desktop — KiCad bridge
All commands dispatch to the KiCad Python bridge running alongside the desktop app. Invoke from this container via Bash:
adom-desktop kicad_<action> '<json_args>'
The leading kicad_ routes the call to the KiCad plugin; the <action> names below are the plugin-side command names.
Multi-version (KiCad 9 + KiCad 10 side-by-side)
Users can have multiple KiCad versions installed at the same time. The bridge auto-discovers everything under C:/Program Files/KiCad/<version>/ and defaults to the newest installed version if you don't specify one.
# Discover what's installed (run this first if unsure)
adom-desktop kicad_list_versions '{}'
# → {"versions":[{"version":"10.0", "default":true, ...}, {"version":"9.0", ...}], "default":"10.0", "count":2}
Every kicad_open_* (and install_*, run_drc) command accepts an optional kicadVersion arg to pin a specific install:
# Open in KiCad 10 (newest — default if you omit kicadVersion)
adom-desktop kicad_open_board '{"filePath":"C:/designs/foo.kicad_pcb"}'
# Open in KiCad 9 explicitly (e.g. to check that an older project still works)
adom-desktop kicad_open_board '{"filePath":"C:/designs/foo.kicad_pcb","kicadVersion":"9.0"}'
If you pass a version that's not installed, the bridge returns a hint listing the installed versions. The success response includes kicadVersionUsed so you can confirm which install actually ran.
Note on libraries / config: each KiCad version has its own
sym-lib-tableandfp-lib-table(in%APPDATA%/kicad/<version>/).kicad_install_librarywrites to the table of whichever version was selected — so if the user installs a library and then asks "open it in KiCad 9", you may need to install it under both versions.
Commands
| CLI form | Action | Purpose | Key args |
|---|---|---|---|
kicad_list_versions |
list_versions |
Enumerate every installed KiCad version with paths and which one is the default | — |
kicad_open_schematic |
open_schematic |
Open a .kicad_sch in the Schematic Editor |
filePath, optional kicadVersion |
kicad_open_board |
open_board |
Open a .kicad_pcb in the PCB Editor |
filePath, optional kicadVersion |
kicad_open_symbol_editor |
open_symbol_editor |
Launch Symbol Editor (optional: open specific library/symbol) | libraryName, symbolName, optional kicadVersion |
kicad_open_footprint_editor |
open_footprint_editor |
Launch Footprint Editor | libraryName, footprintName, optional kicadVersion |
kicad_open_3d_viewer |
open_3d_viewer |
Show the board in 3D viewer | optional kicadVersion |
kicad_close_symbol_editor |
close_symbol_editor |
Close Symbol Editor | — |
kicad_close_footprint_editor |
close_footprint_editor |
Close Footprint Editor | — |
kicad_close_3d_viewer |
close_3d_viewer |
Close 3D viewer | — |
kicad_close |
close |
Close KiCad (all editors) | — |
kicad_window_info |
window_info |
Enumerate open KiCad windows (HWND, title, bounds, editor type) | — |
kicad_install_library |
install_library |
Register a .kicad_sym + .pretty/ pair in sym-lib-table + fp-lib-table |
libraryPath, libraryType, libraryName, optional kicadVersion |
kicad_install_symbol |
install_symbol |
Add a single symbol to an existing library | fileName, fileContent, optional kicadVersion |
kicad_install_footprint |
install_footprint |
Add a single footprint to an existing library | library, footprint_path, optional kicadVersion |
kicad_run_drc |
run_drc |
Run DRC on the current board, return violations | filePath, optional kicadVersion |
kicad_fix_keyboard |
fix_keyboard |
Workaround stuck-modifier bug after screen lock | — |
kicad_screenshot_all |
screenshot_all |
Capture every open KiCad window (lossless PNGs) | — |
kicad_send_key |
send_key |
Send a keyboard shortcut to a KiCad window | hwnd, key |
kicad_click |
click |
Send a click at (x, y) in a KiCad window | hwnd, x, y |
kicad_adom_library_status |
adom_library_status |
Report whether the Adom shared library is registered | — |
Quick examples
# Open a schematic
adom-desktop kicad_open_schematic '{"path":"C:/designs/foo.kicad_sch"}'
# List open KiCad windows
adom-desktop kicad_window_info '{}'
# Screenshot every KiCad window
adom-desktop kicad_screenshot_all '{}'
# Run DRC
adom-desktop kicad_run_drc '{"board_path":"C:/designs/foo.kicad_pcb"}'
# Install a library pair
adom-desktop kicad_install_library '{
"name":"my-lib",
"sym_path":"C:/libs/my-lib.kicad_sym",
"fp_path":"C:/libs/my-lib.pretty"
}'
Error shape
Every failing response includes a _hint field with a human-readable next step — surface it to the user verbatim when a KiCad command fails.
Bridge architecture (v1.8.31+) — you don't need to know any port
Earlier versions of the KiCad bridge listened on hardcoded port 8772. As of v1.8.31, bridges use OS-assigned ephemeral ports — every spawn gets a new free port. You never need to know it.
- The CLI (
adom-desktop kicad_*) automatically routes through adom-desktop's direct API (default port 47200 as of v1.8.33, with auto-fallback to 47201-47209 if 47200 is taken). adom-desktop then forwards to the bridge's actual runtime port. - The bridge port is internal plumbing and can change every spawn.
bridge_listreports it asspawn.runtimePortfor debugging only — do NOT hardcode that anywhere. - Why: this lets adom-desktop coexist with Hydrogen Desktop (which used to claim 8772 itself) and any other tool that grabs ports in the 8000 range. Side-by-side bridges from different apps no longer collide.
- The relay path (Docker → wss proxy → Windows GUI) is unchanged — same
adom-desktop kicad_*verbs, same JSON shape.
If you ever find yourself wanting to talk directly to the KiCad bridge process: don't. Go through the verb dispatch. If the verb you need doesn't exist, request a feature in adom-inc/adom-desktop.
Related
adom-desktop-discovery(gallia) — ensures the CLI + relay are installed.adom-desktop-fusion— sibling bridge for Fusion 360.adom-desktop-direct-api— the direct API contract (port 47200 + 47201-47209 fallback, discovery file at~/.adom/direct-api-port).- Repo:
adom-inc/adom-desktop/plugins/kicad/