内容
# 光标用于PCB
**一个AI原生的PCB设计工具。** 通过聊天方式获得一个真正的电路——用简单的语言描述一个电路板,获得一个**原理图**,一个**PCB布局**,一个KiCad**网络列表**,ERC/DRC判决结果,以及**Gerber**制造文件。整个引擎也作为一个**MCP服务器**公开,因此[Claude Code](https://claude.com/claude-code)(或任何MCP客户端)可以驱动板设计的全过程。
> 类似*Cursor*,但画布是一个印刷电路板。

## 为什么是开源核心
EDA的硬核部分是文件格式、零件库和设计规则检查。cursor-for-pcb不重复造轮子,而是基于**[KiCad](https://www.kicad.org/)**——行业标准的开源EDA套件——以及两个纯Python库:
| 层 | 工具 | 角色 |
|------|------|------|
| 电路捕获 | **[SKiDL](https://github.com/devbisme/skidl)** | 用Python描述电路 → 真实的KiCad **网络列表** + **ERC** |
| 板件编辑 | **[kiutils](https://github.com/mvnmgrx/kiutils)** | 直接读写 `.kicad_pcb` / `.kicad_sch`(无需GUI) |
| 自动布线 | **内置** | 2层Lee/maze布线器发出真正的铜轨 + 过孔 |
| 渲染/验证/制造 | **`kicad-cli`** | PCB→SVG,**DRC**,**Gerber** + 钻孔导出 |

*一个自动布线的2层板——红色 = 顶层铜,蓝色 = 底层铜,过孔处有轨迹改变。由聊天生成,DRC清洁(无短路/间隙)。*
因为所有内容都是基于KiCad库的纯文本,因此LLM可以像处理**结构化数据和代码**一样操纵设计——这是LLM最擅长的格式——并且每个工件都可以干净地在KiCad中打开,供人类完成。
## 架构
```
┌─────────────┐ 聊天/工具 ┌──────────────────────────────────────┐
│ Web UI │ ───────────────► │ pcbforge引擎 │
│ (聊天+选项卡)│ │ │
└─────────────┘ │ 设计(零件 + 网络) │
┌─────────────┐ MCP(stdio) │ │ │
│ Claude Code │ ───────────────► │ ├─ SKiDL → 网络列表(.net)+ ERC │
└─────────────┘ │ ├─ kiutils → 板件(.kicad_pcb) │
│ ├─ SVG渲染器 → 原理图.svg │
│ └─ kicad-cli → pcb.svg, DRC, gbr │
└──────────────────────────────────────┘
```
- **`engine/`** — `pcbforge`,核心Python包。一个高级别的`Design`(组件 + 网络)编译为所有KiCad工件。
- **`mcp-server/`** — `pcbforge-mcp`,一个MCP服务器,通过12个工具公开引擎,使AI代理可以设计板件。
- **`web/`** — 一个类似Flux的双窗格Web应用程序(聊天 + 原理图/PCB选项卡)。
## 快速开始
需要安装 **KiCad 8/9/10** (用于库 + `kicad-cli`)和Python ≥ 3.10。
```bash
python3.12 -m venv .venv
.venv/bin/python -m pip install -e ./engine -e ./mcp-server "mcp[cli]" uvicorn cairosvg
# 从CLI构建一个示例板件(自动布线 + DRC清洁)
.venv/bin/pcbforge list
.venv/bin/pcbforge build power_led_board -o out/power_led_board
# -> out/power_led_board/{*.net, *.kicad_pcb, schematic.svg, pcb.svg, gerbers/}
```
### Web UI
```bash
.venv/bin/python web/serve.py # http://127.0.0.1:8765
```
输入 `load usb` 然后 `build`,或者逐步进行:
`new myboard` → `add resistor 330` → `add led` → `connect vcc r1.1` → `build`.
**真实AI聊天:** 导出API密钥,Claude通过工具使用驱动引擎——用纯英文描述电路板,它添加零件,连接网络,并构建:
```bash
ANTHROPIC_API_KEY=sk-ant-... .venv/bin/python web/serve.py
# 可选模型覆盖(默认为claude-opus-4-8):
PCBFORGE_LLM_MODEL=claude-haiku-4-5 ANTHROPIC_API_KEY=sk-ant-... .venv/bin/python web/serve.py
```
### MCP服务器(从Claude Code驱动)
```bash
claude mcp add pcbforge --scope user \
--env PCBFORGE_WORKSPACE=$HOME/.pcbforge/workspace \
-- $PWD/.venv/bin/pcbforge-mcp
```
然后直接问Claude Code: *"设计一个USB-C供电的3.3V电源轨,带有一个电源LED,并构建它。"* 它将调用 `add_part` / `connect` / `build` 并读取原理图、PCB和DRC结果。
**工具:** `list_part_types`, `list_examples`, `new_design`, `load_example`, `add_part`, `remove_part`, `connect`, `get_design`, `build`, `get_schematic_svg`, `get_pcb_svg`, `export_gerbers`.
## 示例:USB-C → 3.3V稳压器
```python
from pcbforge import Design, build_all
d = Design(name="usb_c_3v3")
d.add_component("usb_c", "J1")
d.add_component("regulator_3v3", "U1", "AMS1117-3.3")
d.add_component("capacitor_polarized", "C1", "10uF")
d.add_component("led", "D1", "GRN")
d.add_component("resistor", "R1", "1k")
d.connect("VBUS", "J1.vbus", "U1.vin", "C1.+")
d.connect("GND", "J1.gnd", "U1.gnd", "C1.-", "D1.k")
d.connect("3V3", "U1.vout", "R1.1")
d.connect("LED_A", "R1.2", "D1.a")
res = build_all(d, "out/usb_c_3v3", gerbers=True)
print(res.ok, res.erc_errors, res.drc_violations)
```
## 零件目录(v0.1)
电阻 · 电容器(陶瓷和极性)· LED · 二极管 · 按键 · 2/4针头 · **AMS1117-3.3 LDO** · **USB-C插座**。每个映射到一个库存KiCad符号 + 封装,并带有友好的引脚名称(`U1.vin`, `D1.a`, `C1.+`)。添加零件是`engine/pcbforge/library.py`中的一行。
## 高级设计审查——输出门控
一个可以**构建**的板件不一定是高级工程师会发布的板件。引擎包括一个**设计审查通道** (`pcbforge.review`),它根据经验丰富的工程师在制造前运行的检查来评估设计:
- 每个IC/稳压器/MCU电源引脚都有**本地100 nF去耦**到GND,
- 每个电源轨都有一个**大电容**,
- 每个**LED都有一个串联电阻**,
- **USB-C CC1/CC2**有5.1 kΩ **下拉电阻**,
- **MCU的复位/使能 + 启动**引脚被拉取,而不是浮空,
- 没有未连接的东西,存在一个接地网络,
- 加上ERC = 0,没有未连接的ratsnest,铜DRC,接地浇注。
它返回一个字母成绩和一个发现列表。Web UI实时显示成绩;MCP服务器将其公开为`review_design`;CLI在构建后打印它。
`bom.csv`在每次构建板件时生成。
**实时结果:** 被问到 *"设计一个由USB-C供电的ESP32开发板,带有状态LED和复位按钮"*,Claude(通过工具使用驱动引擎)生成了一个设计,获得了 **A级 — 零电气审查错误**:USB-C带有CC下拉电阻,AMS1117-3.3带有输入/输出大电容 + 高频去耦,ESP32带有正确的去耦,EN复位RC,IO0启动引导和限流LED。
## 状态和路线图
**当前可用:**
- 聊天/MCP驱动的捕获;**LLM在环中的Web聊天** — 设置 `ANTHROPIC_API_KEY`,Claude通过工具使用驱动引擎(否则为离线解析器)
- **高级设计审查引擎** + **BOM**导出
- 真实的KiCad网络列表 + ERC;**2层自动布线**(A\*迷宫,铜 + 过孔)
- **GND铜浇注**(填充接地平面通过KiCad的`pcbnew`),当它路由更干净时自动应用;`build_all`尝试多种放置/浇注策略,并通过DRC保留最干净的
- **连接感知 + 庭院感知放置**;多焊盘电源引脚
- **28个零件目录**(无源器件,晶体管,MOSFET,二极管,晶体,ESP32,555,运放,稳压器,USB-C/micro,头,螺丝端子...)
- 5个示例电路,包括一个完整的 **ESP32开发板**;Web UI;12个测试
**什么是真正的高级:** 电气设计。审查强制执行去耦,大电容,拉带,保护和限流,AI可靠地产生 **A级,零错误** 设计,具有干净的ERC和BOM。
**什么是v0.1:** 自动布线器。它完全连接每个板件(0个未连接),并且在标准间距板件上是 **铜DRC清洁**,但固定网格在密集/细间距布局上留下一些间隙警告(ESP32 castellations,USB-C 0.5 mm)——这些是高级工程师会手动完成或交给商业路由器处理的部分。原理图视图是一个可读的网络图,而不是一个放置符号的原理图。
**下一步:** 更换更强大的路由器(例如FreeRouting)用于密集板件 · 真实的放置符号原理图导出 · 细间距逃脱孔扇出 · 来自提示的约束(板件大小,层数)。
## 测试
```bash
(cd engine && ../.venv/bin/python -m pytest -q)
```
## 许可证
MIT — 见 [LICENSE](LICENSE)。KiCad库在其自己的许可证下。