{"_id":"copperhead","_rev":"36-98b12c449093f17658ae080392b5afe4","name":"copperhead","dist-tags":{"latest":"0.11.0"},"versions":{"0.3.0":{"name":"copperhead","version":"0.3.0","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"license":"Apache-2.0","_id":"copperhead@0.3.0","maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"homepage":"https://copperhead.chouhan.ai","bugs":{"url":"https://github.com/chouhanindustries/copperhead/issues"},"bin":{"copperhead":"dist/cli.js"},"dist":{"shasum":"311f46295293f0d639af9baf5a46e0e28a4f4290","tarball":"https://registry.npmjs.org/copperhead/-/copperhead-0.3.0.tgz","fileCount":81,"integrity":"sha512-umUGtvGl+NdZaW5F7bF6+y4/ovSes+fU5j3rsItWwPVFf77aQK07uYDir9zQyWCXOQCTnyDF5c+GcW7E8U6dsA==","signatures":[{"sig":"MEQCIHUK6T1jNJF5AILV2+HD8PUDBwz334SoriczjUKKTlD5AiAd7i3CZE1v6PXzH8SQt1AN98PxlLkSxf6aIqzakEidkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":352747},"type":"module","engines":{"node":">=20"},"gitHead":"a6a24c2a4ad1dff72e8e2e9ea8b304372147622d","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","docs:dev":"vitepress dev docs","typecheck":"tsc -p tsconfig.json --noEmit","docs:build":"vitepress build docs","test:watch":"vitest","docs:preview":"vitepress preview docs","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"},"repository":{"url":"git+https://github.com/chouhanindustries/copperhead.git","type":"git"},"_npmVersion":"11.16.0","description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.28.1":true},"dependencies":{"execa":"^9.5.2","openai":"^4.87.3","commander":"^12.1.0","@anthropic-ai/sdk":"^0.39.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","vitepress":"^1.6.4","typescript":"^5.8.2","@types/node":"^22.13.10"},"_npmOperationalInternal":{"tmp":"tmp/copperhead_0.3.0_1784373509384_0.3286376095868071","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"copperhead","version":"0.4.0","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"license":"Apache-2.0","_id":"copperhead@0.4.0","maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"homepage":"https://copperhead.sh","bugs":{"url":"https://github.com/chouhanindustries/copperhead/issues"},"bin":{"copperhead":"dist/cli.js"},"dist":{"shasum":"7d1ae80a14a15b9e19248a6636ff712b9a9af9f5","tarball":"https://registry.npmjs.org/copperhead/-/copperhead-0.4.0.tgz","fileCount":94,"integrity":"sha512-fGnq5ypWvkzLyz8h/Y2GwZCphzh2+H7NmudNcSh9tiRJTaw7Mj8lZf+2tjpuONYD6wEXRpx1y2D+n+P2kR9jtA==","signatures":[{"sig":"MEQCIFlHnR8AHVnp3+G7ui5hdDtnc2YnYkE/+AB/wAFgV/+YAiAV+f4kwz7A1tPjQwPsjJ0JLkXF8HGcoa7qQzMETlOsWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/copperhead@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":518067},"type":"module","engines":{"node":">=20"},"gitHead":"2512c4930fa29a4c2ec8f758f6dd02add4064032","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","docs:dev":"npm --prefix docs run dev","typecheck":"tsc -p tsconfig.json --noEmit","docs:build":"npm --prefix docs run build","test:watch":"vitest","demo:simple":"bash scripts/demo-simple.sh","docs:preview":"npm --prefix docs run preview","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d33c8a9-8ca1-49b2-b6c0-81d6d17a5bfb"}},"repository":{"url":"git+https://github.com/chouhanindustries/copperhead.git","type":"git"},"_npmVersion":"12.0.1","description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.28.1":true},"dependencies":{"execa":"^9.5.2","openai":"^4.87.3","commander":"^12.1.0","@anthropic-ai/sdk":"^0.39.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10"},"optionalDependencies":{"@maximem/synap-js-sdk":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/copperhead_0.4.0_1784674828228_0.16713666013825224","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"copperhead","version":"0.5.0","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"license":"Apache-2.0","_id":"copperhead@0.5.0","maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"homepage":"https://copperhead.sh","bugs":{"url":"https://github.com/chouhanindustries/copperhead/issues"},"bin":{"copperhead":"dist/cli.js"},"dist":{"shasum":"f12a547d2cea3c797b65e4ee74df9332e9c9500c","tarball":"https://registry.npmjs.org/copperhead/-/copperhead-0.5.0.tgz","fileCount":97,"integrity":"sha512-J5l5TkdHVnuemtMDfk3XwPhDaz8FI4Z+aW+JYwhngkNx2Dot8Xt6N3APamhUXi/c1uUtj2Rzx8usijyrSOWeQA==","signatures":[{"sig":"MEUCIAa7TK+8E5uSWbIdRK3WdLMUSD9prVfvkZjhGTsLQNuRAiEAu8nmgED1jDImCQcod2bB7mKp4YwPLgWzgqtd4y17lNk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/copperhead@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":561622},"type":"module","engines":{"node":">=20"},"gitHead":"64b2e6a72668d50ae0659aca4925188356353286","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules/**\" \"#**/node_modules/**\" \"#dist/**\" \"#**/dist/**\" \"#docs/.astro/**\" \"#demo-runs/**\" \"#.copperhead/runs/**\" \"#_site/**\"","docs:dev":"npm --prefix docs run dev","typecheck":"tsc -p tsconfig.json --noEmit","docs:build":"npm --prefix docs run build","test:watch":"vitest","demo:simple":"bash scripts/demo-simple.sh","docs:preview":"npm --prefix docs run preview","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d33c8a9-8ca1-49b2-b6c0-81d6d17a5bfb"}},"repository":{"url":"git+https://github.com/chouhanindustries/copperhead.git","type":"git"},"_npmVersion":"12.0.1","description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.28.1":true},"dependencies":{"execa":"^9.5.2","openai":"^4.87.3","commander":"^12.1.0","@anthropic-ai/sdk":"^0.39.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@openai/codex-sdk":"^0.144.6","markdownlint-cli2":"0.22.0"},"peerDependencies":{"@openai/codex-sdk":"^0.144.6"},"optionalDependencies":{"@maximem/synap-js-sdk":"^0.3.0"},"peerDependenciesMeta":{"@openai/codex-sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/copperhead_0.5.0_1784705022601_0.0431492478932094","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"copperhead","version":"0.6.0","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"license":"Apache-2.0","_id":"copperhead@0.6.0","maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"homepage":"https://copperhead.sh","bugs":{"url":"https://github.com/chouhanindustries/copperhead/issues"},"bin":{"copperhead":"dist/cli.js"},"dist":{"shasum":"6c7c655da50c5d2a978e0c97da40de60594f9b02","tarball":"https://registry.npmjs.org/copperhead/-/copperhead-0.6.0.tgz","fileCount":112,"integrity":"sha512-/irK2pEAAo3yyQyH97QLCe+/v702a/PScDQv8XdnMYgFAWD5Q8vZ2Uu9wIMxIB/ghF+efgWdJ7Jc14pMCh88Ug==","signatures":[{"sig":"MEQCIFz+KERxkFCSBFbTqiBSHoymwF2HbaSrArDxx6tfyybzAiBF0HhC7hiQxSv/CvslXbcVQ1YCfSBeR8xn9NbVKPaBAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/copperhead@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":673829},"type":"module","engines":{"node":">=20"},"gitHead":"b9a7de71ac785b445cdbf6f43422d93f7a1e0172","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules/**\" \"#**/node_modules/**\" \"#dist/**\" \"#**/dist/**\" \"#docs/.astro/**\" \"#demo-runs/**\" \"#.copperhead/runs/**\" \"#_site/**\"","docs:dev":"npm --prefix docs run dev","typecheck":"tsc -p tsconfig.json --noEmit","docs:build":"npm --prefix docs run build","test:watch":"vitest","demo:simple":"bash scripts/demo-simple.sh","docs:preview":"npm --prefix docs run preview","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d33c8a9-8ca1-49b2-b6c0-81d6d17a5bfb"}},"overrides":{"zod":"^4.0.0"},"repository":{"url":"git+https://github.com/chouhanindustries/copperhead.git","type":"git"},"_npmVersion":"12.0.1","description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.28.1":true},"dependencies":{"execa":"^9.5.2","openai":"^4.87.3","commander":"^12.1.0","@anthropic-ai/sdk":"^0.113.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@openai/codex-sdk":"^0.144.6","markdownlint-cli2":"0.22.0"},"peerDependencies":{"@openai/codex-sdk":"^0.144.6"},"optionalDependencies":{"@maximem/synap-js-sdk":"^0.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.217"},"peerDependenciesMeta":{"@openai/codex-sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/copperhead_0.6.0_1784751446331_0.7573797130670901","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"copperhead","version":"0.7.0","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"license":"Apache-2.0","_id":"copperhead@0.7.0","maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"homepage":"https://copperhead.sh","bugs":{"url":"https://github.com/chouhanindustries/copperhead/issues"},"bin":{"copperhead":"dist/cli.js"},"dist":{"shasum":"a67f10a839693f08e7432bb6c038c6bcb30bb111","tarball":"https://registry.npmjs.org/copperhead/-/copperhead-0.7.0.tgz","fileCount":130,"integrity":"sha512-68+qWnm4t+ozBsH5fvFYMgoLAXXTmYhqjZaV8kGKbkZcDpFeLRyKuClKnAlFMN6xIvyHSUYCNEdYZINM2muWyA==","signatures":[{"sig":"MEYCIQDQ48w6inC+lnClSri8sKRkrDinmSReYR6bSDyToJ1dPgIhALPSx2hMhSreV44uLaiKCuG3ZNQnn7kmTbDFmMC7CFpn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/copperhead@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":952038},"type":"module","engines":{"node":">=20"},"gitHead":"a602f3ab4990034dd81ab8fc5906c1ccec5dc1ca","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules/**\" \"#**/node_modules/**\" \"#dist/**\" \"#**/dist/**\" \"#docs/.astro/**\" \"#demo-runs/**\" \"#.copperhead/runs/**\" \"#_site/**\"","docs:dev":"npm --prefix docs run dev","typecheck":"tsc -p tsconfig.json --noEmit","docs:build":"npm --prefix docs run build","test:watch":"vitest","demo:simple":"bash scripts/demo-simple.sh","docs:preview":"npm --prefix docs run preview","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d33c8a9-8ca1-49b2-b6c0-81d6d17a5bfb"}},"overrides":{"zod":"^4.0.0"},"repository":{"url":"git+https://github.com/chouhanindustries/copperhead.git","type":"git"},"_npmVersion":"12.0.1","description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.28.1":true},"dependencies":{"execa":"^9.5.2","openai":"^4.87.3","commander":"^12.1.0","@anthropic-ai/sdk":"^0.113.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@openai/codex-sdk":"^0.144.6","markdownlint-cli2":"0.22.0"},"peerDependencies":{"@openai/codex-sdk":"^0.144.6"},"optionalDependencies":{"@maximem/synap-js-sdk":"^0.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.217"},"peerDependenciesMeta":{"@openai/codex-sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/copperhead_0.7.0_1784840328451_0.1299822207923642","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"copperhead","version":"0.8.0","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"license":"Apache-2.0","_id":"copperhead@0.8.0","maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"homepage":"https://copperhead.sh","bugs":{"url":"https://github.com/chouhanindustries/copperhead/issues"},"bin":{"copperhead":"dist/cli.js"},"dist":{"shasum":"ff66630998fd2000600dc17d707bab43ef4c2ab1","tarball":"https://registry.npmjs.org/copperhead/-/copperhead-0.8.0.tgz","fileCount":177,"integrity":"sha512-miBTiJfHbxWqyzeqFq+J4/KMAU8suFGRcOQ++bzfPr1MZ+hoReSX+TEx0wwnV1alf6K3FWuQrVlYTFVdZiFUjA==","signatures":[{"sig":"MEQCIEPjg1F8XdwVGeeQ40b2CpxLGimC3axQcMfgZ9WqzM2qAiBp2oGFYw/d0rBmZ8XcLEDeJ2t2PLgmgCM0Ba4LNUIHsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/copperhead@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1363208},"type":"module","engines":{"node":">=20"},"gitHead":"ace6218e5b1dd7618ad926b88249d4d3091e0af4","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","demo:ui":"tsx scripts/ui-demo.ts","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules/**\" \"#**/node_modules/**\" \"#dist/**\" \"#**/dist/**\" \"#docs/.astro/**\" \"#demo-runs/**\" \"#.copperhead/runs/**\" \"#_site/**\"","docs:dev":"npm --prefix docs run dev","typecheck":"tsc -p tsconfig.json --noEmit","docs:build":"npm --prefix docs run build","test:watch":"vitest","demo:simple":"bash scripts/demo-simple.sh","docs:preview":"npm --prefix docs run preview","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d33c8a9-8ca1-49b2-b6c0-81d6d17a5bfb"}},"overrides":{"zod":"^4.0.0"},"repository":{"url":"git+https://github.com/chouhanindustries/copperhead.git","type":"git"},"_npmVersion":"12.0.1","description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.28.1":true},"dependencies":{"execa":"^9.5.2","openai":"^4.87.3","commander":"^12.1.0","@anthropic-ai/sdk":"^0.113.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@openai/codex-sdk":"^0.144.6","markdownlint-cli2":"0.23.2"},"peerDependencies":{"@openai/codex-sdk":"^0.144.6"},"optionalDependencies":{"@maximem/synap-js-sdk":"^0.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.217"},"peerDependenciesMeta":{"@openai/codex-sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/copperhead_0.8.0_1785174134904_0.3044675646702477","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"copperhead","version":"0.8.1","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"license":"Apache-2.0","_id":"copperhead@0.8.1","maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"homepage":"https://copperhead.sh","bugs":{"url":"https://github.com/chouhanindustries/copperhead/issues"},"bin":{"copperhead":"dist/cli.js"},"dist":{"shasum":"0969ded7fda3123968e22007c69744a629bbd293","tarball":"https://registry.npmjs.org/copperhead/-/copperhead-0.8.1.tgz","fileCount":177,"integrity":"sha512-aJF5nQxc0A/hgvn0A2PHoUpgvC0AwMKGLStw4TbGofHbVIeJlkLjCM1at4jPpUCd5rkI9aUabAY5sMgqVMVC4A==","signatures":[{"sig":"MEQCIAFPj+j0prPJtwyBV7Q9lmeY9dV8xNS0ZHN4V+L08jsoAiA3gHxSH3/0FXUUWYgjzt7v7ayQQRtWV1+5j8kt84RUnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/copperhead@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1363166},"type":"module","engines":{"node":">=20"},"gitHead":"e9780a5f30c2b5906ce5b66522ca80e0235c7de1","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","demo:ui":"tsx scripts/ui-demo.ts","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules/**\" \"#**/node_modules/**\" \"#dist/**\" \"#**/dist/**\" \"#docs/.astro/**\" \"#demo-runs/**\" \"#.copperhead/runs/**\" \"#_site/**\"","docs:dev":"npm --prefix docs run dev","typecheck":"tsc -p tsconfig.json --noEmit","docs:build":"npm --prefix docs run build","test:watch":"vitest","demo:simple":"bash scripts/demo-simple.sh","docs:preview":"npm --prefix docs run preview","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d33c8a9-8ca1-49b2-b6c0-81d6d17a5bfb"}},"repository":{"url":"git+https://github.com/chouhanindustries/copperhead.git","type":"git"},"_npmVersion":"12.0.1","description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.28.1":true},"dependencies":{"execa":"^9.5.2","openai":"^6.49.0","commander":"^12.1.0","@anthropic-ai/sdk":"^0.113.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@openai/codex-sdk":"^0.144.6","markdownlint-cli2":"0.23.2"},"peerDependencies":{"@openai/codex-sdk":"^0.144.6"},"optionalDependencies":{"@maximem/synap-js-sdk":"^0.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.217"},"peerDependenciesMeta":{"@openai/codex-sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/copperhead_0.8.1_1785177174377_0.46952813326626663","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"copperhead","version":"0.9.0","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"license":"Apache-2.0","_id":"copperhead@0.9.0","maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"homepage":"https://copperhead.sh","bugs":{"url":"https://github.com/chouhanindustries/copperhead/issues"},"bin":{"copperhead":"dist/cli.js"},"dist":{"shasum":"5fe864d08a02dc42de97b731fbff3fa40b2035fd","tarball":"https://registry.npmjs.org/copperhead/-/copperhead-0.9.0.tgz","fileCount":177,"integrity":"sha512-Nu1EKlY1QLCN2/UTBDzHphdf4V+Tk7Cfo5XfvzfJI92/O9fWgrY6PxGsCffqFBOSXy6fvKFZcqnn3UX+ahncNQ==","signatures":[{"sig":"MEYCIQCe29OlkKI2dytht3weyaHqUgRzkEkAeMKa4FJlCd1lKgIhAJtjf9qGQa1D0umIby7pdJ+7VEUFl04fMpVhrLF3GIfi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/copperhead@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1425547},"type":"module","engines":{"node":">=20"},"gitHead":"64b143463a4c4373c5c1e5e4a37ca85442ee4a36","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","demo:ui":"tsx scripts/ui-demo.ts","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules/**\" \"#**/node_modules/**\" \"#dist/**\" \"#**/dist/**\" \"#docs/.astro/**\" \"#demo-runs/**\" \"#.copperhead/runs/**\" \"#_site/**\"","docs:dev":"npm --prefix docs run dev","typecheck":"tsc -p tsconfig.json --noEmit","docs:build":"npm --prefix docs run build","test:watch":"vitest","demo:simple":"bash scripts/demo-simple.sh","docs:preview":"npm --prefix docs run preview","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3d33c8a9-8ca1-49b2-b6c0-81d6d17a5bfb"}},"repository":{"url":"git+https://github.com/chouhanindustries/copperhead.git","type":"git"},"_npmVersion":"12.0.1","description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","directories":{},"_nodeVersion":"24.18.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.28.1":true},"dependencies":{"execa":"^9.5.2","openai":"^6.49.0","commander":"^12.1.0","@anthropic-ai/sdk":"^0.113.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@openai/codex-sdk":"^0.144.6","markdownlint-cli2":"0.23.2"},"peerDependencies":{"@openai/codex-sdk":"^0.144.6"},"optionalDependencies":{"@maximem/synap-js-sdk":"^0.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.217"},"peerDependenciesMeta":{"@openai/codex-sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/copperhead_0.9.0_1785338440179_0.6630962901761719","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"copperhead","version":"0.10.0","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"license":"Apache-2.0","_id":"copperhead@0.10.0","maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"homepage":"https://copperhead.sh","bugs":{"url":"https://github.com/copperheadhq/copperhead/issues"},"bin":{"copperhead":"dist/cli.js"},"dist":{"shasum":"cf619744bb06df2a942ca36f69259a12ef8d93d1","tarball":"https://registry.npmjs.org/copperhead/-/copperhead-0.10.0.tgz","fileCount":198,"integrity":"sha512-MauYsIAana4FYf2L6DJNeG3uscAMSQesOnMSG4IZFvN86RSlANUMuLXe5fSFZJf0Rp83RIkVDcuw8HAS31ytlw==","signatures":[{"sig":"MEYCIQDfhJPpvszWOEIWOMOJcI4XsRkyCQw09U04PMVZertkuAIhAI2XGoHsmy9S8BlVEE8UIhiW7eX+ouiDiO7ATQi4KlDB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/copperhead@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2283150},"type":"module","engines":{"node":">=20"},"gitHead":"7e9b788be686866a6dc1863c8ac9dadb3e988a4f","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && npm run postbuild","demo:ui":"tsx scripts/ui-demo.ts","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules/**\" \"#**/node_modules/**\" \"#dist/**\" \"#**/dist/**\" \"#docs/.astro/**\" \"#demo-runs/**\" \"#.copperhead/runs/**\" \"#_site/**\"","docs:dev":"npm --prefix docs run dev","postbuild":"node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","refboards":"bash scripts/draft-reference-boards.sh","typecheck":"tsc -p tsconfig.json --noEmit","docs:build":"npm --prefix docs run build","test:watch":"vitest","demo:simple":"bash scripts/demo-simple.sh","realdesigns":"tsx scripts/draft-real-designs.ts","docs:preview":"npm --prefix docs run preview","prepublishOnly":"npm run typecheck && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9837de06-0bc4-4314-a3ed-303c379f7416"}},"repository":{"url":"git+https://github.com/copperheadhq/copperhead.git","type":"git"},"_npmVersion":"12.0.2","description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","directories":{},"_nodeVersion":"24.19.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.28.1":true},"dependencies":{"execa":"^9.5.2","openai":"^6.49.0","commander":"^12.1.0","@anthropic-ai/sdk":"^0.113.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@openai/codex-sdk":"^0.144.6","markdownlint-cli2":"0.23.2"},"peerDependencies":{"@openai/codex-sdk":"^0.144.6"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk":"^0.3.217"},"peerDependenciesMeta":{"@openai/codex-sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/copperhead_0.10.0_1787753015251_0.7538583911254524","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"_id":"copperhead@0.11.0","bin":{"copperhead":"dist/cli.js"},"bugs":{"url":"https://github.com/copperheadhq/copperhead/issues"},"dist":{"shasum":"398d95c002e0624aaab4d17cfb071016e442f30a","tarball":"https://registry.npmjs.org/copperhead/-/copperhead-0.11.0.tgz","fileCount":228,"integrity":"sha512-KLdGc/itiEas9nrlNaAMmMi2yqy+5522j+AJIV//b7VVU4Rc8UoT3MTP85qt2tLLIk48WaHfQMuiH14/INpwDw==","signatures":[{"sig":"MEYCIQCVAxChIfvtm/tpnH74E5cqDWTzPbRA5iM+DefGcaedtwIhALQmLc9NO5NI39bgKeqLKv2nrudAXMzRpDorvw1dJf8R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC/i+KCav00rgUaL3jx9v5nrLnbaIm9NLjcSxobiCBBeAiAZRaccecp4xFhzjBvzMIpVEmTBrrFrUwjcc8LfchF8Yg=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/copperhead@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3004058},"name":"copperhead","type":"module","author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"engines":{"node":">=20"},"gitHead":"b24de54045af4ab1bda727fb67b5df5268678ef1","license":"Apache-2.0","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json && npm run postbuild","demo:ui":"tsx scripts/ui-demo.ts","lint:md":"markdownlint-cli2 \"**/*.md\" \"#node_modules/**\" \"#**/node_modules/**\" \"#dist/**\" \"#**/dist/**\" \"#docs/.astro/**\" \"#demo-runs/**\" \"#.copperhead/runs/**\" \"#_site/**\"","docs:dev":"npm --prefix docs run dev","postbuild":"node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"","refboards":"bash scripts/draft-reference-boards.sh","typecheck":"tsc -p tsconfig.json --noEmit","docs:build":"npm --prefix docs run build","test:watch":"vitest","demo:simple":"bash scripts/demo-simple.sh","realdesigns":"tsx scripts/draft-real-designs.ts","scoresheets":"tsx scripts/score-sheets.ts","docs:preview":"npm --prefix docs run preview","prepublishOnly":"npm run typecheck && npm run build"},"version":"0.11.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9837de06-0bc4-4314-a3ed-303c379f7416"}},"homepage":"https://copperhead.sh","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"repository":{"url":"git+https://github.com/copperheadhq/copperhead.git","type":"git"},"_npmVersion":"12.0.2","description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","directories":{},"maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"_nodeVersion":"24.20.0","allowScripts":{"esbuild@0.21.5":true,"esbuild@0.28.1":true},"dependencies":{"zod":"^4.4.3","execa":"^9.5.2","openai":"^6.49.0","commander":"^12.1.0","@anthropic-ai/sdk":"^0.113.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@openai/codex-sdk":"^0.144.6","markdownlint-cli2":"0.23.2"},"peerDependencies":{"@openai/codex-sdk":"^0.144.6"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk":"^0.3.217"},"peerDependenciesMeta":{"@openai/codex-sdk":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/copperhead_0.11.0_1789415933810_0.6032112680744295"}}},"time":{"created":"2026-07-18T11:18:29.279Z","modified":"2026-09-14T19:58:54.219Z","0.1.0":"2012-04-08T18:03:31.481Z","0.1.1":"2012-04-08T19:47:21.695Z","0.1.2":"2012-04-09T09:33:46.198Z","0.1.2-2":"2012-04-28T11:31:46.126Z","0.1.3-1":"2012-08-17T19:15:56.609Z","0.2.0-1":"2012-08-17T19:16:35.206Z","0.2.0-2":"2012-08-17T19:22:36.559Z","0.2.0-3":"2012-08-17T19:25:38.352Z","0.2.0-4":"2012-08-17T19:27:44.116Z","0.2.1-1":"2012-08-18T07:11:08.982Z","0.3.0":"2026-07-18T11:18:29.598Z","0.4.0":"2026-07-21T23:00:28.483Z","0.5.0":"2026-07-22T07:23:42.828Z","0.6.0":"2026-07-22T20:17:26.519Z","0.7.0":"2026-07-23T20:58:48.665Z","0.8.0":"2026-07-27T17:42:15.036Z","0.8.1":"2026-07-27T18:32:54.573Z","0.9.0":"2026-07-29T15:20:40.393Z","0.10.0":"2026-08-26T14:03:35.430Z","0.11.0":"2026-09-14T19:58:53.926Z"},"bugs":{"url":"https://github.com/copperheadhq/copperhead/issues"},"author":{"name":"Animesh Chouhan","email":"animeshchouhan@outlook.com"},"license":"Apache-2.0","homepage":"https://copperhead.sh","keywords":["kicad","pcb","eda","hardware","electronics","schematic","erc","drc","ai-agent","llm","cli"],"repository":{"url":"git+https://github.com/copperheadhq/copperhead.git","type":"git"},"description":"Cursor for circuit boards: an AI agent that designs, documents, and validates real PCBs on KiCad repositories","maintainers":[{"name":"animeshchouhan","email":"chouhanindustries@outlook.com"}],"readme":"<p align=\"center\">\n  <a href=\"https://copperhead.sh\"><img src=\"https://raw.githubusercontent.com/copperheadhq/copperhead/main/docs/branding/lockup-transparent.png\" alt=\"copperhead\" width=\"440\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/copperhead\"><img src=\"https://img.shields.io/npm/v/copperhead?color=b87333\" alt=\"npm\"></a>\n  <a href=\"https://github.com/copperheadhq/copperhead/actions/workflows/ci.yml\"><img src=\"https://github.com/copperheadhq/copperhead/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/npm/l/copperhead?color=15181c\" alt=\"license\"></a>\n</p>\n\n**Cursor for circuit boards.** An AI agent that designs, documents, and validates real PCBs from a prompt, working directly on existing KiCad repositories.\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/copperheadhq/copperhead/main/assets/copperhead.gif\" alt=\"copperhead agent shell demo\" width=\"720\">\n</p>\n\n> **Status: early.** Phase 1 is implemented and the CLI runs. The [technical specification](openspec/specs/SPEC.md) is the source of truth; expect the surface to move before 1.0.\n\nFull documentation lives at [docs.copperhead.sh](https://docs.copperhead.sh).\n\n## What it is\n\nAn AI product-development agent for hardware: from a product brief to manufacturable files, firmware, and a build plan.\n\n- **`copperhead create`**: full pipeline from a natural-language brief: spec, architecture, part selection, schematic, first-draft layout, then gerbers, firmware scaffold, and dev plan.\n- **`copperhead do \"<change>\"`**: operates on an existing KiCad repo the way a coding agent operates on a codebase.\n\nIt reads and edits real `.kicad_sch` / `.kicad_pcb` files (s-expression text), maintains markdown design docs as memory, propagates every change across all artifacts that reference it, and verifies its own work by running `kicad-cli` ERC/DRC until the checks pass.\n\n## Install\n\n> [!TIP]\n> **Most users should not install copperhead by hand.** If you are working inside an AI coding assistant (like Claude Code, Cursor, or Codex), you can install and configure copperhead automatically for your repository by pasting this single line:\n> ```text\n> Install copperhead for this repo using https://raw.githubusercontent.com/copperheadhq/copperhead/main/agent-install-prompt.md\n> ```\n\nIf you prefer to install manually:\n\n```bash\nnpm install -g copperhead   # or: npx copperhead check\n```\n\n### Bootstrap script (macOS and Linux)\n\nPrefer a one-command setup? [`install.sh`](install.sh) checks the prerequisites below, installs copperhead (globally via npm, or built from source when run inside a checkout), and verifies the result with `copperhead doctor`:\n\n```bash\n./install.sh                # interactive: asks before installing anything\n./install.sh --yes          # assume yes to the install prompts\n./install.sh --check-only   # report what is missing, install nothing\n```\n\nThe script is conservative by design: it never runs `sudo` and never edits shell config; whenever it cannot act safely on its own it prints the exact command for you to run instead. Rerunning is safe: on a ready machine it installs nothing and exits 0.\n\n### Requirements\n\n- Node.js ≥ 20\n- [KiCad](https://www.kicad.org/) ≥ 8 with `kicad-cli` on PATH (on Windows and macOS, copperhead also searches standard installation directories automatically; override with `COPPERHEAD_KICAD_CLI`)\n- One model backend: a locally installed, ChatGPT-authenticated [Codex CLI](https://learn.chatgpt.com/docs/codex/cli), a logged-in [Cursor Agent CLI](#saved-login-cursor-agent) (`agent login`), logged-in Claude Code (see [Saved login](#saved-login-claude-code)), or `ANTHROPIC_API_KEY`/`OPENAI_API_KEY` in the environment. `check` never calls an LLM.\n\n## Quick start\n\nIn an existing KiCad repository:\n\n```bash\nexport ANTHROPIC_API_KEY=...   # or OPENAI_API_KEY; optional: with no key, `copperhead` offers a model picker\ncopperhead init                # scaffold docs/ from the schematic; idempotent\ncopperhead                     # interactive agent shell (Claude Code–style REPL)\ncopperhead demo --tour          # what the agent does (no LLM)\ncopperhead demo --model cursor # full USB-C breakout create pipeline\n# or one-shot:\ncopperhead do \"add reverse-polarity protection on VIN\"\ncopperhead check               # ERC + DRC + doc drift; no LLM, CI-safe\n```\n\nStarting from nothing instead? Write a product brief and run `copperhead create --brief brief.md`. The [examples/](examples/) directory has ready-made briefs sorted by difficulty, plus a note on which one is designed to fail.\n\n### Use your existing Codex login\n\nNo model API key is needed when Codex CLI is already authenticated:\n\n```bash\nnpm install -g @openai/codex-sdk   # optional adapter, loaded only for --model codex\ncodex login status\ncopperhead do \"rename net KEY_DAH to KEY_DASH\" --model codex\n```\n\nPlain `codex` follows your Codex model configuration. Use `codex:<model-id>` for an explicit model. If the executable is not on `PATH`, set `COPPERHEAD_CODEX_PATH=/absolute/path/to/codex`.\nThe optional SDK also installs a compatible launcher; for a global install, use\n`COPPERHEAD_CODEX_PATH=\"$(npm root -g)/@openai/codex/bin/codex.js\"` as a fallback.\n\nCodex's read-only sandbox prevents native writes but does not confine native reads. Copperhead instructs Codex not to use its own filesystem tools, but the CLI can technically read files such as `.env`. Codex also keeps session logs under `~/.codex/sessions/`; those files are outside Copperhead's transcript-redaction boundary and should be protected according to your local data-retention policy.\n\n## How it works\n\nIt's a loop, and it looks a lot like pair-programming, except the codebase is a circuit board.\n\n1. **Start from the docs.** Every decision lives in the design docs, so the agent reads those first and knows the whole design, not just the part in front of it.\n2. **Talk through the change.** Describe what you want (\"add an external key jack\", \"cut the sleep current\"). The agent proposes the parts and circuit; you push back until the reasoning holds up.\n3. **Edit the real files.** The agent writes changes straight into the KiCad schematic and the design docs, using the same part names and net names everywhere so nothing drifts.\n4. **Propagate.** Change one value, like a charge current or a pin, and it carries across every doc and schematic that references it. The boring, easy-to-get-wrong step is the one the agent is best at.\n5. **Check the work.** The agent runs ERC/DRC, reads the errors back, and fixes them. Nothing is \"done\" until the tools agree.\n6. **Write down why.** Every real decision gets a one-line reason next to it, so the next change doesn't quietly undo it.\n\nTwo invariants make this trustworthy:\n\n1. **Nothing starts without a spec.** The agent cannot touch a KiCad file until a validated change proposal exists; the edit tools are structurally unavailable until it does. Every edit is traceable to a documented intent.\n2. **Nothing is \"done\" until the tools agree.** Every file mutation is followed by an ERC/DRC run before the agent reports success.\n\nSpec-gated in, verification-gated out: the design can't drift from its requirements, because drift is a build failure.\n\n## CLI\n\n```text\ncopperhead init [--path hardware/]   # scaffold docs/ from an existing schematic; idempotent\ncopperhead do \"<change request>\"     # the core loop: propose, edit, verify, propagate, commit\ncopperhead skill list                # registered skills (no LLM)\ncopperhead skill run generate-report # read-only design report (needs a model)\ncopperhead check                     # ERC + DRC + doc-drift + spec validation; no LLM calls (alias: verify)\ncopperhead doctor                    # env preflight: node, kicad-cli, git, openspec, provider credential; no LLM/network\ncopperhead sync [--dry-run]          # verify the whole design state, resolve drift\ncopperhead create --brief brief.md   # brief → full output package\ncopperhead export bom --supplier jlcpcb   # supplier-ready ordering file from docs/BOM.md\ncopperhead mcp                       # EXPERIMENTAL: serve the gated pipeline to MCP hosts over stdio\n```\n\nGlobal flags: `--repo <path>` (default: cwd) and `--json` for machine-readable output. `--model` is available on `do`, `sync`, `create`, `skill run`, and `doctor`; `--interactive` only on `do` and `create`; `do` also takes `--dry-run`, `--max-turns`, and `--allow-dirty`.\n\n`copperhead create` still uses its own hardcoded stages; those are not yet skills.\n\n`--model` accepts `gpt-5` (OpenAI), `claude` / `claude-<id>` (Anthropic API), `claude-code` / `claude-code:<id>` (Claude Code, saved login), `cursor` / `cursor:<id>` (Cursor Agent CLI, saved login), and `codex` / `codex:<id>` (Codex CLI, saved login). Routing is by prefix; `claude-code` is matched before the `claude` prefix. `compat:<id>` targets any OpenAI-compatible endpoint (Groq, OpenRouter, Gemini, or a local Ollama) via `COPPERHEAD_BASE_URL` and `COPPERHEAD_API_KEY_ENV` - worked examples for each in [`.env.example`](.env.example) and the [configuration reference](https://docs.copperhead.sh/reference/configuration/#model-selection).\n\n### Saved login (Cursor Agent)\n\n`--model cursor` drives the Cursor Agent CLI with your saved login from `agent login`, so you can run copperhead with **no `OPENAI_API_KEY` or `ANTHROPIC_API_KEY`**. Cursor is used purely as a reasoning backend in plan mode: the agent loop, safety gates, and every file edit stay inside copperhead.\n\n```bash\nagent status\ncopperhead do \"add reverse-polarity protection on VIN\" --model cursor\n```\n\nIf `agent` is not on `PATH`, set `COPPERHEAD_CURSOR_PATH` to the CLI binary (also available as `cursor-agent` on some installs). Cursor's JSON schema does not report token usage, so run summaries show 0 tokens for `--model cursor`.\n\n### Saved login (Claude Code)\n\n`--model claude-code` drives Claude Code through the [Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk) and reuses your saved login (the `CLAUDE_CODE_OAUTH_TOKEN` from `claude setup-token`), so a Claude subscription runs copperhead with **no `ANTHROPIC_API_KEY`**. Claude Code is used purely as a reasoning backend: the agent loop, its safety gates, and every file edit stay inside copperhead, identical to the other providers.\n\n```bash\nclaude setup-token                          # while logged into Claude Code\nexport CLAUDE_CODE_OAUTH_TOKEN=...           # the token setup-token printed\ncopperhead do \"add reverse-polarity protection on VIN\" --model claude-code\n```\n\nThe Claude Agent SDK ships as an optional dependency, so a normal install pulls it in. copperhead loads it only when you select `claude-code`, and prints an actionable error if it is missing (for example after `npm install --omit=optional`), telling you to add it with `npm i @anthropic-ai/claude-agent-sdk`.\n\ncopperhead never reads, copies, or logs the credential; the CLI owns authentication. A missing dependency or an unauthenticated install fails with an actionable message and touches nothing.\n\n### Ordering (`export bom`)\n\n`copperhead export bom` turns the drift-checked `docs/BOM.md` into a file a supplier accepts without hand-editing. It is deterministic, LLM-free, and network-free, safe anywhere `check` is, and it reads `BOM.md` (never the schematic) so it inherits the drift guarantee; it refuses to export while `BOM.md` disagrees with the schematic.\n\n```bash\ncopperhead export bom --supplier jlcpcb                 # JLCPCB assembly CSV → outputs/jlcpcb-bom.csv\ncopperhead export bom --supplier digikey --boards 25    # DigiKey cart CSV, quantities for 25 boards\ncopperhead export bom --supplier mouser --spares 15     # Mouser cart CSV, 15% spare parts\n```\n\n- `--supplier <jlcpcb|digikey|mouser>` (required). JLCPCB gets the assembly-service format (Comment, Designator, Footprint, LCSC Part #, designators grouped per line); DigiKey and Mouser get cart-upload lists (MPN, manufacturer, quantity, customer reference).\n- `--boards <n>` (default 1) and `--spares <percent>` (default 10) set the order quantity: `ceil(perBoardCount × boards × (1 + spares/100))`, raised to `perBoardCount × boards + 2` for passive lines (footprints `R_`/`C_`/`L_`); losing a couple of 0402s to tweezers is the norm, and percentage-only spares under-order low-count passives.\n- Rows without an MPN, and rows still flagged `UNVERIFIED`, are excluded from the supplier file and named in a warnings footer on stderr. `--include-unverified` opts the flagged-but-MPN'd rows back in (it never includes MPN-less rows). `create` stage 6 also emits `outputs/jlcpcb-bom.csv` automatically.\n\n`docs/BOM.md` may carry optional `Manufacturer` and `LCSC` columns beyond the base `Refdes | Value | Footprint | MPN | Rationale`; the exporter matches columns by header, so add them when you want them populated in supplier files; `init` scaffolds the base columns only. Only *appending* columns is safe: keep `Refdes | Value | Footprint` first and in that order, because the drift check (`check`/`sync`, which the exporter gates on) reads those three by position, so reordering them makes it compare the wrong cells and refuse the export with a spurious drift message.\n\nNothing is a black box: decisions land in an append-only `docs/DECISIONS.md`, every run writes a human-readable summary next to its transcript, and a per-run `docs/CHANGELOG.md` narrates the design history.\n\n## MCP server (experimental)\n\nCoding agents are already pointed at KiCad repos through generic file tools, which\nmeans a host agent can rewrite a `.kicad_sch` with no spec gate, no verification,\nand no rollback. `copperhead mcp` closes that: it serves the gated pipeline to any\nMCP host as five opaque, outcome-level tools — `copperhead_check`, `copperhead_do`,\n`copperhead_sync`, `copperhead_init`, `copperhead_doctor` — and nothing finer. There is no file-edit\ntool, no raw KiCad tool, and no partial-loop tool to reach around, so a host agent\ncannot skip spec-gating or verification by any sequence of calls.\n\n```jsonc\n// .mcp.json\n{\n  \"mcpServers\": {\n    \"copperhead\": {\n      \"command\": \"copperhead\",\n      \"args\": [\"mcp\", \"--repo\", \"/absolute/path/to/your/kicad/project\"]\n    }\n  }\n}\n```\n\n> **The surface is experimental and unstable.** It declares a `0.` protocol major:\n> tool names, inputs, and result shapes may change in any release, and there is no\n> registry listing until the stabilization criteria are met. Host configuration for\n> Claude Code and generic stdio hosts, the companion skill, the Codex gap, and those\n> criteria are all in [`integrations/`](integrations/README.md).\n\n`copperhead_check`, `copperhead_init` and `copperhead_doctor` need no credential; `copperhead_do` and\n`copperhead_sync` with `resolve: true` refuse with a typed error naming the missing\nenvironment variable. The server opens no network transport of its own — stdio only,\nand LLM calls happen exactly where the CLI already makes them.\n\n## What it is not\n\n- **Not an autorouter.** Routing stays human or delegated; copperhead produces the DRC-clean draft that layout tools optimize from.\n- **Not a new editor.** No walled garden; your KiCad install remains the editor.\n- **Not the engineer of record.** A human signs off; the agent never claims a design is fab-ready beyond \"ERC/DRC clean\".\n\n## Simple demo\n\nFrom a checkout of this repo, run the smallest create-pipeline demo with the USB-C power breakout brief:\n\n```bash\nnpm run demo:simple\n```\n\nThe script creates or resumes a git repo at `demo-runs/usb-c-breakout/` and runs:\n\n```bash\ncopperhead create --brief examples/simple/usb-c-breakout.md\n```\n\nPass normal create flags after `--`, for example `npm run demo:simple -- --model claude`.\nIf a stage fails, rerun the same command; the demo repo keeps a baseline commit and ignores run transcripts so retries start from the last committed design state.\n\nMore briefs, including medium and hard tiers, live in [examples/](examples/).\n\n## Maturity\n\nHonest read of where the current release stands, so you can calibrate before pointing this at a board you care about:\n\n- **Solid.** `init` and `check`/`verify` are deterministic, LLM-free, and covered by the offline test suite against a real KiCad fixture: scaffolding, ERC/DRC, the s-expression reader, drift detection, and fab export all run green in CI.\n- **Implemented, not yet proven.** The agent loop (`do`, `sync --resolve`, `create`) is complete and structurally gated, but its acceptance tests need a live model and have not been observed passing end to end. Expect rough edges.\n- **Always.** Every mutation runs inside a git snapshot and rolls back if verification fails, so the worst case is a no-op commit, not a mangled schematic. Work on a branch anyway.\n\n## Open source\n\nThe entire tool (agent core, prompts, tools) is public under Apache-2.0, built on an open stack (KiCad, kicad-cli, [OpenSpec](https://github.com/Fission-AI/OpenSpec)). Everything it produces is plain markdown and JSON in your own repo: no proprietary formats, no lock-in. This is a Chouhan Industries project, and the same commitment that puts every hardware schematic in public applies to the tool that designs them.\n\n## Contributing\n\nContributions are welcome; see [CONTRIBUTING.md](CONTRIBUTING.md) for setup and workflow. Note that your first pull request requires signing the [Contributor License Agreement](.github/cla/CLA.md); a bot posts instructions on the PR and signing is a one-time comment.\n\n## Project layout\n\n- [`AGENTS.md`](AGENTS.md): repository instructions loaded automatically by Codex and compatible coding agents; [`CLAUDE.md`](CLAUDE.md) provides the corresponding Claude Code guidance\n- [`src/`](src/): CLI ([`cli.ts`](src/cli.ts), [`commands/`](src/commands/)), the provider-agnostic agent loop ([`agent/`](src/agent/)), the `kicad-cli` wrapper and s-expression reader ([`kicad/`](src/kicad/)), and doc/constraint memory ([`memory/`](src/memory/))\n- [`integrations/`](integrations/README.md): MCP host configuration and the companion Claude Code skill\n- [`test/`](test/): offline suite plus [`fixtures/`](test/fixtures/), a tiny known-good KiCad project\n- [`openspec/specs/SPEC.md`](openspec/specs/SPEC.md): the full technical specification, including binary acceptance criteria\n- [`openspec/changes/build-copperhead-phase-1/`](openspec/changes/build-copperhead-phase-1/): the implementation plan with proposal, design decisions, capability specs, and task checklist\n\n## License\n\n[Apache-2.0](LICENSE)\n","readmeFilename":"README.md"}