ArticleSeptember 10, 2026

Copperhead designs boards in KiCad and commits by stages

The open agent breaks the development of the board into eight stages, each must leave the artifact on disk and go through the ERC/DRC of KiCad itself, otherwise there will be no commit. The gate scheme is transferred to any agent pipeline, where there is something to check the result.

At Show HN they showed copperhead - an open agent that designs printed circuit boards in KiCad. The slogan on the landing page is direct: “Cursor for circuit boards.” Installed as an npm package, requires Node 20 or later, KiCad installed with kicad-cli in PATH and your own key Claude or GPT-5. Software for Apache-2.0, hardware of the demo project - for CERN-OHL-S v2.0. The CLI is free and runs locally; the cloud costs $49 per user per month and is free for open hardware repositories; the team plan adds $199 per month for the platform; enterprise - annual contract with self-hosted and Altium support.

The pipeline is divided into eight stages: spec, subsystem architecture, selection of components and BOM, diagram (.kicad_sch), wiring (.kicad_pcb), output files (gerbera, drilling, STEP), firmware with pins.h, commissioning plan. Each stage is a separate run of the agent with its own gate and one commit. The gate is formulated as an artifact on the disk: the spec must have a completed budget section, the circuit must have arranged symbols, agreed documents and pure ERC, the wiring must have pure DRC, the output files must have gerbera, which actually lie on the disk. If the gate fails, the run stops there.

What's worth picking up here

The work of the agent is checked by KiCad itself: ERC and DRC are launched via kicad-cli, the verdict is made by an external deterministic tool, and not by the second model, which was asked to evaluate the first.

Next comes a set of failures, each of which is a ready-made rule. The agent does not run on a dirty git tree. Does not touch design files until there is a validated change proposal. Rejects an edit that breaks a recorded budget or constraint and quotes the line that it would break. He doesn’t invent a part number that he can’t justify with a datasheet. The edits are made pointwise, right in the s-expression of the KiCad source, so that untouched pieces of the file remain byte by byte and the diff remains readable - a tool that regenerates the entire file for the sake of one chain makes its work unverifiable.

The problem is named directly - drift. One solution is spread out over the schematic, specification, power budget and several documents, and the desynchronization between them does not break anything until the board is launched. The authors estimate the cost of a respin at 5–50 thousand dollars and six to eight weeks; This is a figure from their landing page, not an independent assessment.

Payment is a special case here. The pipeline form is transferred: the stage leaves the artifact on disk, the artifact undergoes external verification, and only after this is committed. It applies to any agent process where there is something to check the result - migrations with a run on copies of the database, generation of an API client against a schema, a report with verification of checksums.

The weak point is visible there. Gates check formal correctness: pure ERC means there are no dangling pins and power conflicts, but it does not mean that the circuit does what it is supposed to do. The engineer is not going anywhere, his job is changing - writing brief.md and reading diffs instead of arranging symbols.

If you make boards in KiCad, point the CLI to an existing repository via copperhead init and ask for one small change: the diff will show whether the landing page is lying or not. If you don’t make boards, write out the gates of your pipeline just as strictly, one sentence per stage: what should be on the disk for the stage to be considered completed.

  • KiCad
  • agents
  • iron
  • pipeline