用 Claude Code + Pencil MCP 做设计,设计稿第一次真正活在代码仓库里

"Pencil 是 Claude Code 的 Figma"——这是 Pencil 创始人自己给出的定位。他还有一句更具体的补充:"MCP 驱动的画布,设计文件直接活在你的代码仓库和 IDE 中"。

这句话乍一听像营销话术。

拆开看:.pen 文件本质是纯 JSON,通过 MCP 协议,Claude Code 可以直接读写设计稿,不用像以前那样在 Figma 和代码编辑器之间来回切换、手动量取间距和颜色值。设计文件进了代码仓库,就能被版本控制、被 diff、被 agent 直接操作。

我的判断是,这才是那句"活在代码仓库中"真正落地的部分,不是修辞。

核心工具集

Pencil MCP 暴露出来的工具大致分三类:读取状态(get_editor_stateget_guidelines)、批量编辑(batch_design 一次最多 25 个操作)、验证输出(get_screenshotsnapshot_layout 检测重叠裁切、export_nodes 导出)。中间还有一组专门管设计变量的(get_variables/set_variables),对应的就是颜色、字体、间距这些 Design Token。

.pen 文件是加密的,只能靠这套 MCP 工具读写,用 Read/Grep 直接访问没有意义。这点跟普通的 Markdown/代码文件不一样,第一次接触容易踩坑。

五阶段法

来源是 TobyScr 的一套设计系统 Skill,从 0 到 1 走完一个产品的设计系统:

  1. 需求梳理:对话确定问题域、目标用户、核心流程,产出 5-7 个关键页面清单。
  2. 风格探索get_style_guide_tags() 拿到所有可用风格标签,挑 5-10 个丢进 get_style_guide(),生成一份视觉方向指南。
  3. 品牌方向板:在 Pencil 里做 2-3 个方向(安全/大胆/实验性),每个方向包含色板、字体、组件样本,人工选一个。
  4. 组件库构建:先导入 Token,再用 batch_design() 逐个搭 Button/Input/Card/Nav 这类可复用组件,每搭一个用 get_screenshot() 看一眼。
  5. 关键页面原型:用第 4 步的组件拼装页面,snapshot_layout(problemsOnly=true) 专门筛布局问题,最后 export_nodes() 导出交付件。
我的 Pencil 工作流——五阶段 + 反馈闭环
迭代1. 需求梳理问题域/用户/核心流程 → 5-7 个关键页面清单2. 风格探索get_style_guide_tags() → get_style_guide()3. 品牌方向板2-3 个候选方向,人工选一个4. 组件库构建set_variables() → batch_design() → get_screenshot()5. 关键页面原型batch_design() → snapshot_layout() → export_nodes()竞品 Token 提取Dembrandt 提取 …设计 ↔ 代码 双向同步Token 和组件都留在仓库里,双向可改

我的判断是,这套流程本质上是把"设计系统先于页面"这个老生常谈的道理,用 MCP 工具链具体化了。组件库先搭好、Token 先定好,页面阶段才不会走回"每个页面单独调一遍间距"的老路。

竞品 Token 提取

这块用到的是 Dembrandt,一个开源 CLI,靠 Playwright 渲染真实网站后提取 W3C 标准格式(DTCG)的 Design Token,颜色体系、字体层级、间距、阴影、圆角都能拿到。完整流程是:提取竞品 Token → 截图关键页面 → Claude Code 对比分析(色板/字体层级/间距圆角三项分别对比)→ 输出差异报告 → 确认后写回 Pencil。

设计到代码的闭环

这是整套工作流里最值得记一笔的部分,来自 @tikeda 在 X 上的分享:用 Claude Code 读现有项目的 design-tokens.css/design-tokens.ts,在 Pencil 里重建出完整的 Token 和组件库,拿这些组件生成 UI,再转换回代码。设计和代码不再是"画完图交给前端"这种单向关系,而是能来回同步的闭环。

像素级还原那块,Saqoosha 在 Zenn 上分享的做法是开 4 个并行 Agent 同时实现同一个界面,再用 PIL 生成热力图对比截图差异,报出来的匹配度是 94.8%+。

这个数字本身不是重点。我更在意的是"截图对比是最终仲裁"这个原则——不靠主观判断"看起来差不多",靠图像差异量化到底差多少。

响应式这块给的规范比较朴素:Mobile Frame 390px(iPhone 14 标准宽度),Desktop Frame 1440px,Setup → Generation → Responsive 三阶段法,先定画布和 Token,再生成组件页面,最后双 Frame 适配。

我的判断

这套工作流最大的价值,不是"AI 能画图"这件事本身——市面上能画图的工具已经不少了。真正值得关注的是 .pen 文件进代码仓库这个动作:设计稿第一次跟代码处在同一个版本控制体系里,能被 diff、能被 agent 直接读写,不再是一份躺在 Figma 云端、跟代码库物理隔离的静态资产。

长期来看,"设计到代码"会从一次性的交付动作,变成一个可以反复迭代的闭环:改了代码里的 Token,能同步回设计稿;改了设计稿,也能生成新一版组件代码。工具链会越来越完整,但最后决定这套闭环靠不靠谱的,还是那句老话:以截图对比为准,不是主观判断。

GitHub
LinkedIn