One of the kicad_skills usage guides for the
edaCLI — 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.
./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
sch info — get the parts list, the net list and the sheet hierarchy.
Note the supply rails, the ICs and anything unfamiliar.sch review --text — machine findings. Every error must be explained
or fixed; every warning must be judged, not blindly reported.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.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.sch review checksFrom 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.
spice-simulation guide.--no-cli the review runs without KiCad, using a pure-python
connectivity extractor (netlist_source: geometry-fallback). It agrees with
KiCad on ordinary sheets but resolves cross-sheet connections only through
power symbols and global labels, and it cannot run ERC. Prefer the container../bin/eda.sh sch netlist <target> --format kicadxml -o out.net exports the
netlist for other tools; --format json gives the normalised structure the
review uses../bin/eda.sh sch erc <target> returns KiCad’s raw ERC JSON when the details of
a violation are needed../bin/eda.sh sch bom <target> -o bom.csv exports a grouped bill of materials
(see the kicad-fabrication-output guide).