app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Drive your own KiCad from an AI, in the background: open every editor, read the whole board as data (the EDA Bridge Standard board model), stack-up, part heights, netlists, place, route, pour, DRC and exports.
← Commit history
Publish 1.0.142
3 files changed
+19−2
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "kicad-bridge",- "version": "1.0.141",+ "version": "1.0.142", "type": "app", "description": "Skills for your container so your AI knows how to drive the KiCad bridge. The bridge runtime itself is the release zip; Adom Bridge loads that.", "tags": [
page.json+1−1@@ -4,7 +4,7 @@ "slug": "kicad-bridge", "title": "KiCad - the KiCad Bridge", "brief": "Reference implementation of the KiCad bridge: multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.",- "version": "1.0.141",+ "version": "1.0.142", "tags": [ "kicad", "pcb",
skills/kicad-copper-pours/SKILL.md+17@@ -42,6 +42,23 @@ In this order, because the priorities below follow it: - **4-layer boards:** planes inside (ground, then the main supply), outer pours for current and heat and copper retention; the outer ground pour is stitched to the plane by every through pad and by stitching vias every few mm along the pour's edges; the rail and load pours use both outer layers with via stitching, and never the inner planes. - **More layers:** the same, with the second ground plane adjacent to the signal layers that need it; pours on the outer layers are for current, heat and retention, the planes are the references. +## The Kelvin pair, exactly++The shunt's two sense taps are the case every pour gets wrong. The recipe that survived the ESC round, and the shared eda-kelvin-current-sense skill on the eda-engineering page says the same from TI's article:++1. **Route the taps before anything else on their nets.** From each sense pad (IN+ and IN-, and the reference pin when it is the same net) one dedicated 0.25 mm trace to the shunt pad itself, ending in the pad, not on the pour. No plane stub on a sense pad, even when its net is called GND; on the ground side no via at all (a via ties the tap to the plane); on the other side a via is allowed. Treat the tap as foreign copper for the rest of its own net so the wide current path never merges with it.+2. **Rotate the amplifier so the taps do not cross.** Two taps that cross on one layer need a via, which the ground-side tap may not have. On the ESC the amplifier turned 180 degrees and both taps went straight.+3. **Keep the pours off the taps** with rule-area keepouts: `kicad_add_zone {"type":"keepout", "layers":["F.Cu","B.Cu"], "polygon": [...], "keepout": {"copperPour": true}}` along the whole trace on every outer layer, the trace's own width plus clearance plus a margin. Pour the current side of the shunt (the pad the load current enters) with a solid connection; the tap still lands in that pad, at the pickup point, not on the pour's edge.+4. **Check by reading, not by DRC.** DRC is silent when a same-net pour touches the tap; `kicad_zone_state` and the routing state show where the copper is. A tap that meets its net's copper anywhere but the shunt pad is a failed measurement path.++## Lessons the verb's preflight will teach you++- **starved_thermal.** KiCad refuses a thermal-relief pad that gets fewer than two spokes. The ESC's ground pour lost 16 pads that way at 0.5 mm gap and bridge; at 0.3 mm gap and 0.35 mm bridge one pad was left, and a 1.8 mm solid-connection patch zone at priority 1 over that pad (`--solid-at REF.PAD` in the demo's plan script) fixed it. Do not switch the whole pour to solid to make the error go away; solid on every 0402 is a tombstoning risk.+- **zones_intersect.** Two zones of one net with the same priority that touch are an error. Merge them into one polygon (an L-shape is fine) or give one a higher priority.+- **Teardrops.** KiCad may add small teardrop zones of its own at track-to-pad entries; `kicad_zone_state` lists them as type teardrop. They are not your pours; do not remove them.+- **The offline DRC does not refill.** The shared headless DRC keeps the fills a file already has, so a via added after a plane was filled looks like it collides with the plane. The live verb's preflight refills on a snapshot and is the authoritative gate for pours; the offline tool is for shape and track collisions.+- **Removing a pour.** `kicad_remove_zone {itemIds}` (1.0.7) takes zone ids from `kicad_add_zone` or `kicad_zone_state`; `kicad_remove_route` refuses zones.+ ## The loop, with the bridge 1. Route to 100 percent first (kicad-place-route-loop). Pours are not a way to connect things that the routing could not.