{
  "schema_version": 1,
  "type": "app",
  "slug": "adom-circuit",
  "title": "adom-circuit — AI-first EDA (aci)",
  "brief": "Build a PCB by prompting an AI, watch every step stream into a Hydrogen webview. Rust-native pipeline (parse, DRC, ERC, gerber, SVG, autorouter) + Babylon.js 8.x 3D scene. Mouser-first BOM. Shares one",
  "version": "0.0.1",
  "tags": [],
  "license": "MIT",
  "discovery_triggers": [
    "build a board",
    "build me a pcb",
    "design a pcb",
    "ai-first eda",
    "adom-circuit",
    "aci build",
    "aci dev",
    "aci doctor",
    "aci parity",
    "aci review",
    "make a circuit board",
    "dev board from prompt",
    "breakout board ai",
    "ice40 board",
    "pcb from scratch ai",
    "3d pcb preview with animations",
    "paste-jet simulation",
    "solder jet sim",
    "probing workcell simulation",
    "instapcb simulation",
    "native drc aci",
    "native erc aci",
    "autorouter aci",
    "tscircuit autorouter embedded",
    "stream board build",
    "watch board being built"
  ],
  "discovery_pitch": "AI-first EDA — build a PCB by prompting, watch it stream into a Hydrogen webview. Rust-native DRC/ERC/gerber/autorouter + Babylon 8.x 3D scene + Mouser-first BOM + solder-jet paste + probing-workcell sim. One GLB with real component names baked in.",
  "install": {
    "binary_name": "adom-circuit",
    "install_dir": "",
    "install_hint": "",
    "version_cmd": ""
  },
  "readme": "# adom-circuit (`aci`)\n\n**AI-first EDA.** KiCad-native. Babylon-rendered. Mouser-sourced. Renderer-owned.\n\nBuild a PCB by prompting an AI, watch every step stream into a Hydrogen webview — BOM resolution → library construction → schematic → 3D board → autoroute → DRC → final GLB. Rust owns parse + geometry + compute; Babylon 8.x owns the 3D scene; they talk scene-IR JSON over WebSocket. `GLTF2Export` produces the final file from the live scene — **what the user watches being built is what ships**.\n\n**Repo:** [adom-inc/adom-circuit](https://github.com/adom-inc/adom-circuit) (private)\n**Binary name:** `aci`\n\n## What the tool does\n\n- **`aci build <prompt>`** — kicks off a BOM → datasheet → Mouser → library → schematic → 3D board pipeline. Spawns parallel sub-agents (one per component); LibView populates live; autoroute streams into a `routing-preview` scene node at 30 fps.\n- **`aci dev`** — opens the Hydrogen webview with full chrome: Status Bar, Library Rail, Component HUD (refdes / footprint / nets / Mouser PN / price / stock), Timeline Strip, Global Footer with VS Code jump buttons.\n- **`aci parity`** — cross-checks aci-drc / aci-erc / aci-svg against the `kicad-cli` oracle (via service-kicad or local install). Baseline gate before a release.\n- **`aci doctor`** — health-checks every dep (service-kicad CLI → local kicad-cli → service-aci) before a build. Prints what's missing + what URL aci would hit.\n- **`aci review <pcb>`** — quick DRC + ERC fidelity report without spinning up the viewer.\n- **`aci test --visual --bless`** — pixel-diff visual regression harness with ralph-loop screenshots into the shotlog.\n- **`aci share`** / **`aci clone`** — publish a complete project bundle to the Adom Wiki / pull someone else's project and open it locally.\n\n## Native pipeline (no shell-outs in the hot path)\n\n| Stage | Crate | What |\n|---|---|---|\n| KiCad s-expr parse + emit | `aci-sexpr` | Byte-identical round-trip on 99.6% of the corpus (461/463 files) |\n| Typed schema + markdown bridge | `aci-kicad` | Shells to Noah's [kicad-to-markdown](https://wiki-ufypy5dpx93o.adom.cloud/skills/kicad-to-markdown) for LLM-facing view |\n| Scene IR compute (outline / copper / vias / pads / paste) | `aci-render` | Feeds the Babylon scene via WebSocket patches |\n| DRC | `aci-drc` | 8 rules r-tree-indexed; visualized as red overlays in the scene |\n| ERC | `aci-erc` | Sheet + unit-aware; duplicates + unconnected + conflicts |\n| Gerber emit | `aci-gerber` | RS-274X; parity-tested against kicad-cli on 20× draw-count |\n| SVG emit | `aci-svg` | Schematic SVG; PCB top-view is an orthographic projection of the 3D scene |\n| Autorouter | `aci-route` | A\\* grid, rayon-parallelized; routes the reference PCB in 22 s |\n| Supplier resolver | `aci-source` | Mouser → DigiKey → JLCPCB; datasheet-validated candidates only |\n| Datasheet parser wrapper | `aci-datasheet` | Parallel pup-window fan-out; visualizer on port 8851 |\n| Wiki publish | `aci-wiki` | `wiki.cache_hit` / `wiki.published` events on sym / fp / 3D deliver |\n\n## Ecosystem dependencies (what aci reaches out to)\n\n| Dependency | What | Install |\n|---|---|---|\n| [service-kicad](/apps/service-kicad) | kicad-cli operations + 4.7 GB of vetted KiCad library assets | Tier B auto-install on first trigger |\n| [adom-mouser](/apps/adom-mouser) / [adom-digikey](/apps/adom-digikey) / [adom-jlcpcb](/apps/adom-jlcpcb) / [adom-parts-search](/apps/adom-parts-search) | Supplier pricing + stock + PN resolution | Tier A via gallia/install.mjs |\n| adom-desktop (pup) | Multi-Chrome-session browser driving for ralph loops + the datasheet visualizer | Tier A |\n| gallia/viewer | Absorbed Babylon 8.52 scene builders — symbol / footprint / gerber viewers, solder-jet-sizer, LibView | Tier A |\n\n`aci doctor` surfaces any of these that aren't reachable from the current container, with a paste-into-Claude install prompt for each.\n\n## First-class scene features (what makes the GLB different)\n\n- **Named scene tree** — every node addressable by path: `board/components/U1/body`, `board/components/U1/pad/7`, `board/layers/F.Cu/trace[17]`, `board/paste/U1/pad_1/dot[3]`. Survives export as glTF `extras`.\n- **Solder-jet paste deposition** — 13,627 paste dots at 250 µm planned + animated in the `squirt` AnimationGroup. Baked into the GLB.\n- **Probing workcell simulation** — 100 mm GND-umbilical cover + greedy set-cover over test points. `probe.*` events stream during the simulation.\n- **InstaPCB 26-step manufacturing sim** — pre-clad FR4 → lasered vias → electroplating → trace ablation → mask press → silk etch → depanel. Transient meshes (plating bath, vacuum press, silk ribbon, depanel groove) stripped from `board.glb`, kept in `full-scene.glb`.\n- **Three export tiers** — `board.glb` (scene filtered to `exportClass=board`), `full-scene.glb` (everything including workcell + diagnostics + process), full project bundle (`scene-ir.json` + `build-log.ndjson` + source).\n\n## Install (Tier B)\n\nOn a fresh Adom container, say \"build me a board\" or \"run DRC via aci\" — Claude's wiki-discover skill will surface this page and offer to run the install_hint. Manual:\n\n```bash\ncurl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-circuit/aci -o /tmp/aci \\\n  && chmod +x /tmp/aci \\\n  && sudo install -m 0755 /tmp/aci /usr/local/bin/aci \\\n  && aci install \\\n  && aci doctor\n```\n\n`aci doctor` prints the current dep status — any missing service suggests its own install_hint.\n\n## Why Tier B (not Tier A)\n\nEvery external publisher to the Adom Wiki can only use Tier B — they can't edit `gallia/install.mjs`. If we publish our own flagship tool as Tier A, we never feel the friction external publishers are stuck with, and the Tier B path quietly rots. So we eat our own dog food. See [adom-app-model §7](https://github.com/adom-inc/gallia/blob/main/skills/adom-app-model/SKILL.md) for the full doctrine.\n\n## Current status\n\n- 97% of [PLAN.md](https://github.com/adom-inc/adom-circuit/blob/main/PLAN.md) shipped — every Part 27 Critical + High + Medium + Low resolved.\n- 147+ commits, 87/87 tests green, 16 Rust crates, 2 TS packages.\n- Phase 4 end-to-end proven (176 WebSocket events → Babylon scene → GLB round-trip).\n- Phase 15 worked-example (`scripts/phase-15-worked-example.sh`) green on a blank project.\n- Partial gates: Phase 8 SVG pixel-compare (structural tag parity done, resvg pixel-compare deferred), Phase 9 JLCPCB gerber submission (20× draw-count parity done, external fab submission is not automatable), Phase 10e WebGPU compute-shader autorouter (feature-gated scaffold).\n",
  "author": {
    "name": "Kyle Bergstedt",
    "email": "kyle@adom.inc"
  },
  "visibility": {
    "public": true
  },
  "hero": null,
  "sample_prompts": [],
  "metadata": {},
  "created_at": "2026-05-28T05:29:20.664Z",
  "updated_at": "2026-05-28T05:29:20.664Z",
  "skills": []
}