Skip to content
Back to skills

Schematic Design

ASecurity

Use when executing a schematic placement plan (plan mode) or modifying an existing schematic (modification mode).

  • 13 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 15, 2026
ai-agentsgobashrailsdebugging

Works with

  • cli
  • mcp

Security analysis

A100/100

Scanned October 15, 2026

npx -y skills add ProductOfAmerica/mcp-server-kicad --skill schematic-design --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Schematic Design?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Schematic Design
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/productofamerica-schematic-design/badge)](https://www.skillsdirectory.com/skills/productofamerica-schematic-design)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: schematic-design
description: >
  Use when executing a schematic placement plan (plan mode) or
  modifying an existing schematic (modification mode).
---

<CRITICAL-RULE>
NEVER use the Read, Write, or Edit tools on KiCad files (.kicad_sch,
.kicad_pcb, .kicad_sym, .kicad_mod, .kicad_pro, .kicad_prl). ALL
KiCad file manipulation MUST go through the kicad MCP tools. NEVER
run kicad-cli commands via Bash. If an MCP tool returns an error, try
different parameters — do NOT fall back to manual file editing.

EVERY KiCad operation has a corresponding MCP tool. Do NOT claim a
tool does not exist without first listing all available tools. Key
tools that MUST be used instead of file writes:
- `add_symbol` — create custom symbol definitions in .kicad_sym files
- `create_symbol_library` — create new .kicad_sym library files
- `create_schematic` — create new .kicad_sch files
- `create_project` — create new .kicad_pro project files
If you find yourself thinking "there's no MCP tool for this," you are
wrong. Check the tool list again.
</CRITICAL-RULE>

# KiCad Schematic Design — Plan Executor

This skill executes schematic plans mechanically. All intelligence
(component selection, coordinate calculation, wiring decisions)
happened in prior phases. This skill reads a plan and executes it.

## Response Format

When this skill activates, announce the mode:

- **Plan mode:** Print exactly: "Using schematic-design to execute
  the placement plan."
- **Modification mode:** Print exactly: "Using schematic-design to
  modify the existing schematic."

Then proceed directly to the pre-flight checks for the appropriate
mode. Do not ask the user what to do — the plan or user instructions
are the input. Report progress as each placement/wiring step
completes, but keep updates brief (one line per step).

## Two Modes

### Plan Mode (new designs)

Reads `specs/schematic-plan.md` and executes mechanically. The plan
file is the sole source of truth — ignore prior conversation context
about how the plan was created. Read the plan, execute the plan.

**Pre-flight checks:**
1. Verify `specs/schematic-plan.md` exists and its reviewer returned
   APPROVED
2. Read page size from plan, call `set_page_size` immediately if
   not A4
3. Verify project/schematic files exist (create if needed)
4. If plan references custom symbol library, verify it exists via
   `list_lib_symbols`

**Execution order:**
1. Project setup (`create_project`, `create_schematic`, etc.)
2. Set page size (if plan specifies non-A4)
3. Register symbol libraries (`create_sym_lib_table`)
4. Create custom symbols (`add_symbol`)
5. Place all components (`place_component` per coordinate table)
6. Wire all connections per wiring table — group all pins for the
   same net into a single `wire_pins_to_net` call
7. Add no-connect flags
8. Add power flags
9. Add hierarchical sheets (if applicable)
10. Annotate — run `annotate_schematic` to assign reference designators.
    For hierarchical designs, pass `project_path` to avoid cross-sheet
    ref conflicts.
11. Validate hierarchy — run `validate_hierarchy` from root to check
    for orphaned labels, direction mismatches, duplicate refs.
12. Run ERC

### Modification Mode (existing schematics)

No plan artifact required. User instructions serve as the plan.

**Pre-flight checks:**
1. Verify the schematic file exists
2. List current components via `list_schematic_components`
3. For each new component to be added, call `list_lib_symbols` to
   verify its lib_id exists before placement

Follow existing spacing/wiring/naming conventions in the schematic.

## Error Handling — Escalate, Don't Improvise

| Situation | Response |
|-----------|----------|
| Symbol not found | STOP. Do not fuzzy-match or substitute. Report the error. If a previously-verified symbol is missing, instruct the user to re-run from circuit-design to re-validate the BOM. |
| Position outside page bounds | STOP. Report error. The plan's page calculation should have prevented this. Instruct the user to re-run schematic-plan. |
| connect_pins fails | Try wire_pins_to_net for that connection. If that fails, report and continue with remaining wiring. |
| `wire_pins_to_net` refuses | Act on the bracketed code, per the table below. |
| ERC violations | Report violations. Invoke verification skill. |

### `wire_pins_to_net` refusals

A refused call writes nothing and lists every refused pin with a
bracketed code, the obstacle and a remedy. Fix the cause and call
again with the same pins. Never work around a refusal with `add_label`
or `add_wires`: they check none of this, so they can merge or split
nets silently.

| Code | Meaning | Do this |
|------|---------|---------|
| `validation` | An argument is malformed: an empty or padded name, a leading `/`, `${`, a KiCad auto-name such as `Net-(...)`, bus syntax, an unknown direction, a stub not a multiple of 1.27 mm or over 1000 mm | Fix the argument |
| `resolve` | The reference is not on this sheet, the pin does not exist, or a pin name matches pads at different points | Pass the pad numbers the message lists, or wire the pin on the sheet that holds its unit |
| `names` | The pin's net already carries another name | If that name is a `Net-(...)` label `connect_pins` wrote, remove it with `remove_label` as the message says, then call again. If the pin belongs on the net, call again with its name as the message shows it; otherwise stop and report |
| `touch` | Every stub and label position would touch something | Pass another `direction`, or move the part; otherwise stop and report |
| `netclass` | Wiring would move a net into another net class | Stop and report |
| `nc_type` | The pin is a no-connect type pin | Pick another pin |
| `nc_flag` | The pin has a no-connect flag | If it should be connected, `remove_no_connect`, then call again |
| `dup_ref` | Another part shares the reference somewhere in the hierarchy, or a sheet of the hierarchy cannot be read, so sharing cannot be ruled out | Give each part its own reference (`annotate_schematic` numbers `?` references), then call again. For an unreadable sheet, stop and report which one the message names |
| `bus`, `bus_entry`, `sheet_pin`, `text_var`, `jumper`, `unit0_unplaced`, `units_disagree` | The pin's net may reach something this tool cannot judge | Stop and report |
| `derived`, `unloadable` | A symbol on the sheet has pins KiCad's file does not define, or defines twice, or an angle KiCad cannot load | Stop and report |

When `auto_place_decoupling_cap` meets one of these after placing the
cap, its error says what it left on disk and the calls that remove it;
any library symbol it copied into the file stays, and no net depends on
it.

## Checklist (Plan Mode)

**IMPORTANT: Use TodoWrite to create todos for EACH checklist item below.**

- [ ] Verify `specs/schematic-plan.md` exists and is APPROVED
- [ ] Pre-flight: verify project/schematic files exist
- [ ] Set page size (if non-A4)
- [ ] Register symbol libraries
- [ ] Create custom symbols (if needed)
- [ ] Place all components per coordinate table
- [ ] Wire all connections per wiring table
- [ ] Add no-connect flags
- [ ] Add power flags and PWR_FLAG symbols
- [ ] Annotate schematic — no `?` refs remaining
- [ ] Validate hierarchy — no orphaned labels or duplicate refs
- [ ] Run ERC — must show zero violations

## Rationalization Prevention

| Thought | Reality |
|---------|---------|
| "This pin name is close enough" | Use the exact pin name from the plan. The plan was verified against `get_symbol_info`. |
| "I can adjust the coordinates slightly" | Use the exact coordinates from the plan. The plan was verified against page bounds. |
| "I'll add an extra component not in the plan" | Do not improvise. If the design needs changes, go back to schematic-plan. |
| "The plan is probably outdated, I'll adapt" | The plan is the source of truth. If it's wrong, re-plan. Don't patch on the fly. |

## Exit Gate

Run `run_erc`. Zero violations → proceed to pcb-layout.
Violations → invoke verification skill.

**Commit strategy:** Commit after schematic-design completes and
ERC passes (not after each chunk). If ERC fails, fix violations via
verification skill, then commit the clean state. Do not commit
intermediate broken states.

## Placement Spacing Reference

All coordinates are on the 1.27mm grid (auto-snapped by the tools).

Minimum spacing (for modification mode and plan verification):
- **Vertical between components**: 10.16mm (8 grid units)
- **Horizontal between passives in a row**: 12.7mm (10 grid units)
- **IC to its supporting passives**: 25.4mm (20 grid units) horizontal
- **Between functional stages**: 25.4–50.8mm gap

Title block clearance: ~108x32mm at bottom-right corner. On A4
landscape (297x210mm), keep components within X < 180mm and
Y < 175mm.

## Wiring Strategy Reference

**Use `connect_pins`** (direct Manhattan wire) when:
- Two pins are within ~25mm of each other
- The wire path is visually obvious (one L-shaped segment)

**Use `wire_pins_to_net`** (batch: multiple pins to one net label) when:
- A net connects 3 or more components that are not all adjacent
- The net spans across functional stages
- Power and ground rails — always use net labels, never daisy-chain

What `wire_pins_to_net` writes: a short stub away from each pin with
the label at its end, or the label on the pin end when the stub would
touch something. It never writes a junction, and a pin already on the
net is left alone. Read the result's notes: "new local net" means
nothing on this sheet carried that name, so a power symbol or global
label of that name elsewhere does not join it (use `add_power_symbol`
or `add_global_label` to reach those); on a sheet used more than once,
the wiring lands in every instance, and the note names each one.

## Power and Ground

- Use `add_power_symbol` for VCC, GND, and named power rails
- Use `wire_pins_to_net` for custom power nets (VIN_PROT, 5V_REL, etc.)
- Place decoupling capacitors visually adjacent to the IC they serve
- Add `PWR_FLAG` on every power net that would otherwise trigger
  "power pin not driven" ERC errors
- No tool places a PWR_FLAG for you, because only you know which nets have a
  source ERC cannot see. Place one with `add_power_symbol`
  (lib_id `power:PWR_FLAG`), once per net that needs it
- PWR_FLAG is only needed on nets with power_in pins and NO power_out/output pins.
  Do not add one to a net that already has a driver or a flag: ERC then reports
  two power outputs connected

## Naming

- Use **uppercase descriptive names** for nets: VIN_PROT, 5V_REL,
  SPI_MOSI
- Active-low signals: suffix with `_N` (e.g., RESET_N, CS_N)
- Do not use generic names like NET1 or WIRE3

## MCP Tools for This Skill

**Reading / inspection:**
- `get_schematic_summary` — get item counts for a sheet
- `list_schematic_components` — list symbols on a sheet
- `list_schematic_labels` — list net labels on a sheet
- `list_schematic_wires` — list wires on a sheet
- `list_schematic_global_labels` — list global labels on a sheet
- `list_schematic_hierarchical_labels` — list hierarchical labels on a sheet
- `list_schematic_sheets` — list hierarchical sheet blocks on a sheet
- `list_schematic_junctions` — list junctions on a sheet
- `list_schematic_no_connects` — list no-connect flags on a sheet
- `list_schematic_bus_entries` — list bus entries on a sheet
- `get_symbol_pins` — get pin names and types for a placed symbol
- `get_pin_positions` — get placed pin coordinates (for wiring)
- `get_net_connections` — trace a net to see what's connected
- `list_unconnected_pins` — find pins that need wiring or no-connect

**Placing components:**
- `place_component` — place a symbol instance on the schematic
- `move_component` — reposition a placed component
- `remove_component` — delete a placed component
- `set_component_property` — change reference, value, footprint, etc.
- `set_page_size` — resize the schematic sheet
- `add_lib_symbol` — load a symbol from a library into the schematic

**Wiring and connectivity:**
- `connect_pins` — direct Manhattan wire between two pins
- `wire_pins_to_net` — connect multiple pins to a named net label
- `add_wires` — add raw wire segments by coordinate
- `add_label` — place a net label
- `add_global_label` — place a global (cross-sheet) label
- `add_junctions` — add junction dots at wire intersections
- `no_connect_pin` — mark a pin as intentionally unconnected (idempotent)
- `remove_no_connect` — clear no-connect flag(s) from a pin
- `remove_label` / `remove_wire` / `remove_junction` — cleanup (labels and global labels)

**Power and decoupling:**
- `add_power_symbol` — place VCC, GND, +3V3, PWR_FLAG, etc.
- `auto_place_decoupling_cap` — auto-place a decoupling cap near an IC

**Annotations and hierarchy:**
- `add_text` — add text annotations to the sheet
- `add_hierarchical_label` — add a hierarchical label for sheet-to-sheet connections
- `remove_hierarchical_label` — remove a hierarchical label by name or UUID
- `modify_hierarchical_label` — modify text, shape, or position of a hierarchical label
- `annotate_schematic` — auto-assign reference designators (project server)
- `remove_text` — remove text annotations by position or content

**Hierarchy management (project server):**
- `add_hierarchical_sheet` / `remove_hierarchical_sheet` — create/remove sub-sheet blocks
- `modify_hierarchical_sheet` — change sheet name, file, dimensions
- `add_sheet_pin` / `remove_sheet_pin` — manage pins on sheet blocks
- `validate_hierarchy` — check for orphaned labels/pins, direction mismatches
- `list_hierarchy` / `get_sheet_info` — inspect hierarchy structure
- `is_root_schematic` — check if a schematic is root or sub-sheet
- `move_hierarchical_sheet` — reposition a sheet block on the canvas
- `reorder_sheet_pages` — change the page order of hierarchical sheets
- `duplicate_sheet` — create a copy of a sheet with new UUIDs
- `flatten_hierarchy` — merge all sub-sheets into a single flat schematic
- `trace_hierarchical_net` — trace a net across the hierarchy for debugging
- `export_hierarchical_netlist` — export netlist with hierarchy info
  (use instead of `export_netlist` for hierarchical designs)

## Hierarchy Workflow Sequences

### Sequence: Setting up a hierarchical design
1. `add_hierarchical_sheet` — create the sub-sheet block on the parent
2. `add_sheet_pin` — add pins to the sheet block for each signal crossing the boundary
3. In the child schematic: `add_hierarchical_label` for each pin
4. `validate_hierarchy` — verify pins match labels, no orphans

### Sequence: Duplicating a channel (e.g., 4 identical sensor channels)
1. Design the first channel as a sub-sheet
2. `duplicate_sheet` — creates a copy with new UUIDs and a new file
3. Repeat for each additional channel
4. `annotate_schematic` with `project_path` — assigns unique refs across all copies

### Sequence: Pre-ERC annotation and validation
1. `annotate_schematic` with `project_path` — assign refs to all `?` components
2. `validate_hierarchy` from root — check for duplicates, orphans, mismatches
3. If duplicates: `set_component_property` to reset to `X?`, then re-annotate
4. `run_erc` — only after validate_hierarchy is clean

### Sequence: Debugging cross-sheet connectivity
1. `trace_hierarchical_net` — follow the net across sheet boundaries
2. `get_net_connections` — check connections on each sheet
3. `list_cross_sheet_nets` — see all nets crossing boundaries
4. Fix with `add_sheet_pin`, `add_hierarchical_label`, or `connect_pins`

### Sequence: Restructuring hierarchy
1. `flatten_hierarchy` — merge all sheets into one (creates new file, non-destructive)
2. OR `move_hierarchical_sheet` — reposition sheet blocks on the parent
3. OR `reorder_sheet_pages` — change page numbering order
4. `validate_hierarchy` — verify structure is still valid

### Sequence: Cleaning up after modifications
1. `remove_text` — delete temporary text annotations
2. `validate_hierarchy` — check for new orphaned labels or direction mismatches
3. `annotate_schematic` — reassign any `?` refs introduced during modifications

**Verification and export:**
- `run_erc` — run electrical rules check
- `export_schematic` — export schematic as PDF/SVG
- `export_netlist` — generate a netlist file (PCB import itself is `update_pcb_from_schematic` on the PCB server)
- `export_bom` — export bill of materials

**Symbol authoring (when a part isn't in KiCad's libraries):**
- `create_symbol_library` — create a project-local .kicad_sym file
- `add_symbol` — define a custom symbol with pins, footprint, datasheet
- `list_lib_symbols` / `get_symbol_info` — browse available symbols

## Custom Symbols

When a part is not in KiCad's built-in libraries, create a custom
symbol using MCP tools — NEVER by writing .kicad_sym files directly:

1. `create_symbol_library` — create a project-local .kicad_sym file
   (if it doesn't exist yet)
2. `add_symbol` — define the symbol with pin names, pin types, pin
   numbers, footprint, and datasheet
3. `add_lib_symbol` — load the custom symbol into the schematic

## Verification

After completing placement and wiring:
1. Run `run_erc` to check for violations
2. Fix "power pin not driven" with PWR_FLAG symbols
3. Fix unconnected pins with `wire_pins_to_net` or `no_connect_pin`
3.5. If components have `?` references, run `annotate_schematic` with
     `project_path` before re-running ERC.
4. Re-run ERC until clean

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.