Altium - the Altium Bridge
Public Made by Adomby adom
Adom Bridge for Altium Designer: a resident DelphiScript agent gives the AI eval, the 1,100-command process launcher, all 8 EDA surfaces with screenshots, compile/ERC, DRC, OutJob outputs, native SchLib/PcbLib authoring with STEP 3D bodies, and dialog handling by PID.
Install?
Skills for your container so your AI knows how to drive the Altium Designer bridge (altium_* verbs). The bridge runtime itself is the release zip; Adom Bridge loads that.
adom-wiki pkg install adom/altium-bridge
Latest: v0.2.10, published
Dependencies 1 app
- app adom/adom-bridge ^2.0.3
Contents
- Two artifacts on this page — which one do you want?
- The window tour — one imported chip, every surface
- Symbol — altium_show_symbol (authored by altium_create_symbol)
- Footprint — altium_show_footprint (authored by altium_create_footprint)
- Library manager — altium_show_library / altium_list_library
- Schematic — altium_place_on_sch
- Symbol variants — altium_build_symbol_modes
- 2D board — altium_test_board / altium_swap_footprint
- 3D board — the STEP body on a real PCB
- How it fits together
- Verb reference
- The dock bar card
- Web control — "Add to Altium library" from a wiki page
- The skillpack — ten skills, propagated like KiCad's and Fusion's
- Parts carry all three vendors
- Zero dialogs, by construction
- Lineage
- Running / dependencies
README
markdownAdom Bridge — Altium Bridge
A reverse bridge that lets Adom Bridge (ab) — and the AI driving it — control the user's own
Altium Designer on Windows: open and drive every design surface, author native
.SchLib/.PcbLib libraries (symbols, footprints, STEP 3D bodies), place parts on schematics and
boards, run compile/ERC and DRC, run OutJobs (Gerber, ODB++, NC drill, BOM, pick-and-place), and
screenshot any window back to the AI.
Two artifacts on this page — which one do you want?
Release ZIP ( adom-bridge-altium-v*.zip)Package ( adom-wiki pkg install adom/altium-bridge)What it is The bridge runtime — the Python server + DelphiScript agent that drive Altium Skills + docs only, for a container/agent Who loads it Adom Bridge downloads it via adom-bridge-altium-manifest.jsonYou, into a container, to teach an agent the altium_*verbsContains server, handlers, agent template, process catalog parser SKILL.mdfiles (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.
Altium Designer is the user's host app. The bridge detects an existing install
(%ProgramFiles%\Altium\AD*\X2.EXE), launches it in the background, bootstraps a resident
DelphiScript agent inside it (the REPL lane), and hands the AI 60 altium_* verbs.
- Page / docs: https://wiki.adom.inc/adom/altium-bridge
- Bridge SDK: https://wiki.adom.inc/adom/adom-bridge-sdk
- Verb namespace:
altium_*· Status verb:altium_status· Health:GET /health - Plan of record (every measured engine fact): the
altium-bridge-planskill in the package.
Every screenshot below is a real capture of Altium Designer 26.9.1 driven end-to-end through the bridge. Two parts appear, both imported from their wiki component pages and authored into native libraries by the bridge itself: the WCH CH340G (USB-serial SOP-16) and the Microchip LAN7800 (USB 3.1 → gigabit Ethernet, QFN-48 + EP) — the latter as ONE component with ten symbol display modes and seven footprint variants, each footprint carrying its own 3D body.
The window tour — one imported chip, every surface
Symbol — altium_show_symbol (authored by altium_create_symbol)
All 16 named pins (GND/TXD/RXD/V3/UD+/UD-/XI/XO · VCC/R232/RTS#/DTR#/DCD#/RI#/DSR#/CTS#).

Footprint — altium_show_footprint (authored by altium_create_footprint)
16 SOIC pads parsed from the component page's pads.json (mm → mil).

Library manager — altium_show_library / altium_list_library

Schematic — altium_place_on_sch
The symbol placed as U1 on a fresh sheet (per-primitive copy — the engine's group
Replicate drops children; the bridge handles that for you).

Symbol variants — altium_build_symbol_modes
The LAN7800 as one component with ten display modes (Altium's alternate symbols): here the 4-side package look, geometry sized from the measured pin-name lengths so nothing collides.

2D board — altium_test_board / altium_swap_footprint
The LAN7800 -HV-SB-RR variant after two live footprint swaps on a wired 15×15 mm test board: rounded pads, sixteen through-hole heatsink vias in the EP (all designator 49 → the EP net), the silk pin-1 dot, and the PIN1 / GND_EP stub tracks that survived both swaps untouched.

3D board — the STEP body on a real PCB

And the underside — the sixteen drilled heatsink vias through the exposed pad. Real copper and drill objects, exactly what the drill file gets:

How it fits together
The bridge is a spawn.kind: python process Bridge launches on the user's machine
(entrypoint: server.py, port: 0). It speaks HTTP (POST /command, GET /health) and reaches
Altium through ranked control surfaces, lightest first:
| # | Surface | Used for |
|---|---|---|
| 1 | Resident DelphiScript agent (file-drop REPL inside Altium, bootstrapped via X2.EXE -R) |
eval, open/show, library authoring, placement, compile/DRC/OutJob readback |
| 2 | Process launcher (1,111 Server:Command processes parsed from Altium's own .rcs tables) |
zoom, view switches, document ops — altium_run_command / altium_list_commands |
| 3 | Win32 / UIA | window management, screenshots, dialog detection/dismissal by PID |
| 4 | WebView2 (CDP) | the sign-in / License Management pages — altium_license, altium_signin_status |
| 5 | Altium 365 GraphQL | workspace queries (altium_a365_*; needs a Pro/Enterprise token) |
Modal dialogs freeze the script engine, so every mutating verb scans for dialogs by PID and
returns them with body screenshots (Altium paints dialog text; it is not exposed as text).
A halted engine (DelphiScript runtime errors are modal) recovers with altium_agent_recover.
Verb reference
Board & schematic introspection (0.1.11): list_designators, component_data, component_pins, list_nets, net_connections, layers, copper_layers, read_rules, set_layer_visibility, footprint_primitives, schematic_data — read the live design as data (pads→nets, rules, layers, sheet components with pins), all in tens of milliseconds, no dialogs.
All 94 verbs (prefix altium_). Call altium_describe for the live catalog.
Readiness & lifecycle — readiness, status, launch, close, diagnostics, progress,
agent_start/_stop/_status/_recover, license, signin_status, connect_workspace, uninstall
Surfaces — show_project, show_schematic, show_2d_board, show_3d_board, show_library,
show_symbol, show_footprint, show_3d_chip, open_document, state, demo
Engine — eval, run_command, list_commands, run_script
Checks & outputs — compile (run_erc), run_drc, run_outjob, export_gerber, export_bom
Author libraries — create_symbol, create_footprint, add_body (STEP or extruded, persisted
and centred on the pads), set_params, build_footprint (a whole footprint from a
tools/kicad2altium.py spec: via pads by duplicate designator, rounded-rect pads, named mechanical
layers), build_symbol_modes (one symbol, N display modes) + symbol_mode (switch + frame),
add_models (N footprint variants on one part — the CHANGE PACKAGE equivalent),
install_library, compile_intlib, extract_intlib, list_library, save
Manipulate libraries — clone_symbol (all display modes carried), rename_symbol,
remove_symbol, read_symbol (pins/params/modes read-back), copy_footprint (pads + bodies +
drawing), rename_footprint, remove_footprint, xcopy_footprint (cross-library), cleanup_libs, set_visibility, normalize_bodies, and import_part — one call: footprint spec + STEP + symbol + vendor params (Mouser preferred, DigiKey, LCSC)
Boards & placement — place_on_sch, place_on_pcb, test_board (fresh PcbDoc, board shape
sized to the part, nets + stub tracks), board_shape, swap_footprint (change the package on a
placed part; wiring survives), pcb_report (ground truth: pads, bodies, nets, tracks with bboxes)
Dialogs & desktop — check_dialogs, dismiss_dialogs
The dock bar card
The bridge is a card in the Hydrogen dock bar — the launcher rail on the right edge of the
workspace — alongside KiCad and Fusion. It is in the curated fleet list
(hydrogen-bootstrap/dock/apps.json, order 35, featured), so every Adom user's rail picks it up
on the next poll, or instantly with Refresh list from wiki.

Clicking the card runs this repo's dockbar.json: an install-or-update step
(adom-wiki pkg update altium-bridge || pkg install adom/altium-bridge — this is how the
skillpack propagates to every container), then altium-dashboard serve --print-url, which
self-backgrounds and prints its URL; the dock opens it in a webview tab and starts a named AI
thread with the Altium prompt. The dashboard is the standard dock anatomy:
| Region | What it does here |
|---|---|
| Say it strip | six phrases you can send straight to a new AI thread — "show me my board in altium 3d", "add this wiki part to my altium library", "run drc on my altium board", … — plus the 2-minute demo player |
| Status LEDs | Relay · Box · Bridge · Altium (version) · Licence · Running · Agent (resident) · Updates — each with a hover hint, live over SSE from /api/status |
| Boxes & actions | the target machine, Setup / Launch Altium / Close Altium |
| Guided demo | the six-beat background tour of the examples that ship with Altium |
Progress for long verbs rides the Windows taskbar button (the app icon fills up), never a toast.
Web control — "Add to Altium library" from a wiki page
Component and molecule pages carry an EXPORTS TO: KiCad · Fusion · Altium row. The bridge's
half is altium_install_library_bundle, the exact peer of kicad_install_library_bundle:

AdomWebControl.run('altium_install_library_bundle', { zipPath, libraryName, capture: true })
// → { success, symbols, footprints, intlibs, installed:[{lib,ok}], altiumRunning, restartNeeded, thumbnailDataUrl? }
The page fetches the bundle (<Lib>.SchLib + <Lib>.PcbLib, or an .IntLib), stages it on the
box with write_file_chunk, and calls the verb; the user clicks Allow once on Adom Bridge's
consent prompt. The verb is zip-slip hardened (256 MB / 512 MB caps), registers the libraries in
Installed Libraries, never closes a running Altium (it reports restartNeeded), and returns a
proof frame — the library as Altium actually opened it:

docs/webcontrol-altium-test.html is the acceptance harness (it loads the wiki's live
webcontrol.js); docs/HANDOFF-COLBY.md is the contract for the page side.
The skillpack — ten skills, propagated like KiCad's and Fusion's
adom-wiki pkg install adom/altium-bridge delivers these into ~/.claude/skills/ on every
container, and the dock's install step keeps them current:
| Skill | For |
|---|---|
altium-bridge |
the user skill: every verb, what it returns, and when to reach for it |
altium-install |
installing Altium Designer + the trial sign-in, measured step by step |
altium-libraries |
display modes, footprint variants, STEP bodies, the tri-vendor rule, the pin-1 check |
altium-boards |
test boards, board shape, placement laws, footprint swaps with surviving nets, 3D camera facts |
altium-outputs |
compile/ERC, DRC, OutJob media (Gerber, ODB++, NC drill, BOM, pick-and-place) |
altium-part-import |
add any catalog part with Mouser (preferred) + DigiKey + LCSC part numbers — REUSE / CREATE / APPEND |
altium-kicad-import |
KiCad → Altium, incl. the KiCad-10 downgrade and the native no-importer lane |
altium-bridge-plan |
the plan of record: every automation surface Altium exposes, measured |
altium-bridge-dev |
developer-only: the agent architecture, the dialog doctrine, the engine-halting identifiers |
altium-bridge-publish |
developer-only: the release recipe (lockstep versions, asset upload, pkg staging) |
Parts carry all three vendors
Every component the bridge authors gets Mouser Part # (Adom's preferred vendor), DigiKey Part #,
and the exact LCSC Part # (so JLCPCB BOM/CPL round-trip), plus MPN / Manufacturer / Value /
Package — looked up with one adom-parts-search call. Parameters land hidden; altium_set_visibility
shows the one you want on the schematic.
Zero dialogs, by construction
Altium's scripting debugger breaks on any raised exception, so a raise is a modal. The bridge
designs the class out rather than dismissing it: file reads probe with FileOpen before loading,
every save is preceded by a transaction clear (a dangling PreProcess is what draws the
save-a-copy warning), engine-halting identifiers are catalogued in the dev skill, and every verb
that could draw one scans Altium's child windows afterwards and attaches a frame if it finds any.
A dialog the user sees is logged as a defect, not handled.
Lineage
The bridge consolidates Barrett Land's summer-2026 Altium work — adom-desktop-altium-bridge,
altium-part-importer, kicad10-to-altium — into one master repo: every verb ported onto the
resident agent (his bridge forwarded one X2.EXE command per call), his three-path part workflow
and KiCad-10 findings carried into the skillpack, his v10→v9 downgrader vendored under tools/.
His pages stay up with pointers here.
Running / dependencies
Bridge provisions everything; nothing to install by hand.
- Python ≥ 3.11 (Bridge provisions it) — stdlib only.
- Altium Designer (host app; the
altium-installskill drives a fresh install + trial sign-in). - OS: Windows.
The bridge binds 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 — altium-bridge-plan is the
plan of record with every measured engine fact (the DelphiScript traps, the canvas-persistence
rule for 3D bodies, the stale-agent reload bug, the UIPI lessons). Maintainers get them with the
normal pkg install.