kicad_skills

KiCad schematic review

One of the kicad_skills usage guides for the eda CLI — all six. Plain Markdown: read it directly, or hand it to whatever assistant you use.

Reads .kicad_sch files and reviews them. Runs in the container (see the eda-environment guide); pass paths relative to the repository root.

The commands

./bin/eda.sh sch info    hardware/               # structure: components, nets, hierarchy
./bin/eda.sh sch review  hardware/ --text        # ERC + design heuristics
./bin/eda.sh sch render  hardware/ -o /tmp/sch   # PDF + a PNG per sheet + contact sheet
./bin/eda.sh sch pdf     hardware/ -o /tmp/sch.pdf
./bin/eda.sh report      hardware/ -o /tmp/report  # review + images + BOM on one page
./bin/eda.sh diff        old/ hardware/ -o /tmp/diff  # what changed between revisions

The target may be a .kicad_sch, a .kicad_pro, or the project directory (the root sheet is found automatically, sub-sheets are followed).

eda diff compares connectivity by which pins each net joins, so a net that gained or lost a pin shows up and one that was only moved on the sheet does not. A net whose connections survived under a new name is reported as a rename rather than as one deletion and one addition. Components are compared by reference, with value, footprint, DNP and library changes named.

It also renders both revisions of every sheet and compares them: red is what the old revision had and the new one does not, green is the other way round. A symbol that moved is red where it was and green where it is now, over a faded copy of the sheet for context. Because a moved part is a speck on an A4 page, a zoomed crop of the changed region is written next to the full sheet - read that one first. --no-images skips the rendering when only the connectivity matters.

The drawing diff answers “what moved, what appeared, what went away”. It is not the channel for “what was re-labelled”. Suppressing anti-aliasing means ink that lands within a pixel of where ink already was is treated as the renderer wobbling rather than as a change — and text redrawn in place is largely that. Retagging a resistor 10k → 4k7 registers zero changed pixels at 100 dpi, 13 at 150 and 130 at

  1. Read the Components table for that: it compares the field rather than the picture of it, so it catches the change at any dpi.

How to actually review a schematic

  1. sch info — get the parts list, the net list and the sheet hierarchy. Note the supply rails, the ICs and anything unfamiliar.
  2. sch review --text — machine findings. Every error must be explained or fixed; every warning must be judged, not blindly reported.
  3. sch render + Read the PNG — the machine cannot see intent. On a multi-sheet schematic start with contact-sheet.png, then the individual sheets; schematic.pdf is the thing to hand to a human. Look at the drawing to check signal flow, that the topology is what the user described, and that nothing important is drawn but disconnected.
  4. Datasheets — for each IC, get its datasheet (the part number and the Datasheet field are in sch info) and use the datasheet-analysis guide to check the actual part against its ratings: supply range, input common-mode range, required external components, pins that must not float.
  5. Report findings grouped by severity, each with the reference designator or net name, why it matters, and the concrete fix.

What sch review checks

From KiCad’s own ERC (erc.* rules — authoritative): unconnected pins and wire endpoints, conflicting drivers, power pins not driven, duplicate references, library symbol mismatches, off-grid endpoints, bus errors.

Design heuristics on top of the netlist:

Rule Meaning
net.single_pin net reaches exactly one pin — usually a wiring mistake
net.no_driver a net with only input pins, nothing drives it
analog.missing_decoupling an IC supply net with no capacitor to ground
analog.i2c_pullup a net named SDA/SCL with no resistor on it
analog.led_no_series_resistor LED with no current limiting on either terminal
power.no_ground / power.no_supply / power.many_supplies rail sanity
schematic.duplicate_reference / schematic.unannotated annotation problems
schematic.missing_footprint / missing_value / missing_datasheet field completeness
schematic.dnp DNP parts, listed so they are not forgotten in a BOM

net.single_pin is graded: an auto-named net (unconnected-(U1-Pad3)) is a dangling wire and warns, a net the designer named is reported as info because it is usually a deliberate spare. A rule that fires more than six times is folded into one finding with the count and the first examples; --collapse N changes the limit, --collapse 0 prints every occurrence.

Exit code is 2 when there is at least one error, 0 otherwise — usable in CI.

Things the tool cannot check (do these by hand)

Notes