Skill v1.0.1
currentAutomated scan100/100+4 new
version: "1.0.1" name: wired-subcircuit-design description: Build a genuinely wired, showcase-grade KiCad schematic with KiCad MCP Pro — wired sub-circuit islands plus a tidy label bus — instead of the correct-but-plain by-name-label output of auto layout.
Wired Sub-circuit Design Skill
Use this skill when an agent must produce a schematic that looks like a person drew it — wired functional blocks, conventional power, a clean breakout bus — not just an electrically valid netlist. It is the deliberate, higher-effort path that sch_build_circuit(auto_layout=True, nets=...) cannot reach.
Specific to oaslananka/kicad-mcp-pro. Keep in sync with docs/tools-reference.generated.md. Worked reference: `examples/gallery/esp32-c3-wroom-02-breakout`.
Why auto layout is not enough
sch_build_circuit with nets uses a collision-safe terminal strategy: every pin endpoint gets a stub plus a same-named global label / power symbol, so nets connect by name and can never short by crossing geometry. That is correct and ERC-clean, but it reads as a machine netlist: every decoupling cap floats between its own +3V3 and GND labels instead of being wired. Showcase quality needs explicit placement and wires. The cosmetic score never measures this — judge the render, not the number.
The one rule that avoids a blank sheet
Build the whole sheet in a single `sch_build_circuit` pass with explicit symbols (with coordinates), wires, labels and power_symbols — and no nets, no auto_layout. Do not assemble a schematic from scratch with repeated sch_add_symbol calls: a freshly seeded sheet has no root UUID that the reader round-trips, so each incremental add stamps a different instance path and KiCad renders a blank sheet even though the file parses. One pass writes one consistent root UUID, so every symbol lands on the root sheet.
Compute exact pin coordinates up front with get_pin_positions(lib, sym, x, y, rot) (pure geometry — no placement needed), then wire pin-tip to pin-tip.
Design pattern
- Anchor the main part (MCU / module) in the center.
- Wire the sub-circuit islands. Decoupling, reset, boot-strap, status LED,
regulators — draw each as a real wired block ending in power symbols. This is what separates a showcase from auto output; do not let these become floating labelled pins.
- Label bus for the breakout. Route general IO to a header with matched local
labels. Generate the part-side and header-side labels from one source list so the two label sets are identical by construction — this eliminates the whole isolated_pin_label / label_dangling class, not just the ones you happen to see.
- Conventional power.
+3V3up,GNDdown; put exactly onePWR_FLAGon
each supply net so ERC sees the rails driven.
- Place each sub-circuit in its own x-column below the anchor, and keep
decoupling clear of the anchor's stub fan — most first-pass ERC errors (multiple_net_names) come from a power symbol landing on a neighbouring label.
- Fill the title block with
sch_set_title_block_info.
Attach labels correctly
A net label must sit on a wire endpoint. When tapping a sub-circuit node, add a short stub wire and place the label at the stub's free end — a label floating beside a wire raises label_dangling.
The loop
- Plan all coordinates from
get_pin_positions; assemble the four lists. - Build in one
sch_build_circuitpass. - Guard with ERC. Run
run_erc. Fix every violation before judging looks —
a blank/oddly-passing ERC means KiCad isn't reading your symbols (see the root UUID rule).
- See. Render with
sch_render_png(orkicad-cli sch export svg) and judge
against the rubric below. The render is ground truth.
- Refine placement for overlaps and composition; rebuild. Stop when ERC is
clean and nothing overlaps — do not chase the cosmetic score past that.
Rubric — what "wired showcase" looks like
- Functional blocks are wired, not floating labelled pins.
- Power symbols are conventional; one
PWR_FLAGper supply. - The breakout bus is tidy and every label is matched (no isolated labels).
- Orthogonal wiring, on-grid, no diagonal runs, no overlapping graphics.
- Complete title block; content composed rather than crammed in one corner.
Guardrails
- Wired ≠ correct-by-magic. Finish with
run_erc; a showcase must also be clean. - Prefer the label bus over routed
netswires (unsafe_routed_wires=Truecan
short by crossing geometry — avoid it).
- One curated example is worth more than a bulk auto-generated gallery; expect
per-example effort.