Altium - the Altium Bridge

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

Download for your machine · v0.2.10?

Release 0.2.10

Dependencies 1 app

Contents

README

markdown

Adom 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.json You, into a container, to teach an agent the altium_* verbs
Contains server, handlers, agent template, process catalog parser 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.

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.

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#).

Symbol editor

Footprint — altium_show_footprint (authored by altium_create_footprint)

16 SOIC pads parsed from the component page's pads.json (mm → mil).

Footprint editor

Library manager — altium_show_library / altium_list_library

SCH Library panel

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).

Schematic

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.

LAN7800 4-side symbol mode

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.

LAN7800 2D board

3D board — the STEP body on a real PCB

LAN7800 3D board

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

LAN7800 3D board, bottom


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 & lifecyclereadiness, status, launch, close, diagnostics, progress, agent_start/_stop/_status/_recover, license, signin_status, connect_workspace, uninstall

Surfacesshow_project, show_schematic, show_2d_board, show_3d_board, show_library, show_symbol, show_footprint, show_3d_chip, open_document, state, demo

Engineeval, run_command, list_commands, run_script

Checks & outputscompile (run_erc), run_drc, run_outjob, export_gerber, export_bom

Author librariescreate_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 librariesclone_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 & placementplace_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 & desktopcheck_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.

The Altium Dashboard the card opens

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:

A component page's export chips

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:

Proof frame returned by the bundle install

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-install skill 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.