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.
Turns a finished board into the files a manufacturer accepts. Runs in the
container (see the eda-environment guide), offline.
./bin/eda.sh pcb fab hardware/ -o build/fab
Writes, and records in build/fab/manifest.json:
build/fab/
├── gerbers/ copper, mask, paste, silkscreen, Edge.Cuts (X2, 6 digits)
│ ├── *.gbr
│ ├── *.drl Excellon, mm, with a PDF map
│ └── drill-report.txt
├── <board>-pos.csv pick and place, mm, DNP excluded
├── <board>-bom.csv grouped by value + footprint, DNP excluded
├── <board>-fab.zip everything above, ready to upload
└── manifest.json what was written, and what failed
Options: --step (3D model for mechanical review), --ipc2581 (single-file
exchange format some fabs prefer), --fab-layers (also plot F.Fab/B.Fab for
the assembler), --include-dnp, --pos-format ascii|csv|gerber, --no-zip.
Each step is independent: if STEP export fails, the Gerbers are still written
and the failure is listed in manifest.json.errors. The command exits 2 when
anything failed.
Run the reviews first. A fab package built from a board with DRC errors is just a faster way to make scrap:
./bin/eda.sh pcb review hardware/ --text # must be error free
./bin/eda.sh sch review hardware/ --text
./bin/eda.sh pcb fab hardware/ -o build/fab
Then check the package itself:
manifest.json - board_size_mm, layer_count and the step list should
match what you ordered.drill-report.txt lists the hole count and sizes; compare against the fab’s
minimum drill.pcb render) and look at them - a missing layer in the
Gerber set is invisible in a file listing but obvious in a plot../bin/eda.sh sch bom hardware/ -o build/bom.csv
./bin/eda.sh sch bom hardware/ -o build/bom.csv --fields Reference,Value,Footprint,MPN,QUANTITY
Returns line_items and total_parts alongside the CSV, so a BOM that is
suddenly one part short is easy to spot between revisions. Grouping defaults to
Value,Footprint; DNP parts are excluded unless --include-dnp is given.
For ordering, the BOM needs manufacturer part numbers: add an MPN (or
Manufacturer_Part_Number) field to the symbols in the schematic and export it
with --fields. The toolkit does not invent part numbers.
pcb review --threshold ... uses your numbers,
it does not know your fab’s capability table.