AI 编程最大的坑不是模型不够聪明,而是写出来的代码没人知道为什么这样写。邵猛在 X 上分享了一套 Spec 驱动开发(SDD) 打法,直接把规格文档、代码实现、一致性校验三件事拆成三个独立 Skill,安装即用,团队抄过来就能落地。这套方法不绑定任何 IDE 或编程框架,核心思路只有一句话:让 AI 写代码之前,必须先有经人工确认的规格。
为什么把规格拆成两层
SDD 听起来像老调重弹的"先写文档再写代码",但邵猛的拆法非常务实。他没有把所有规格塞进一个文件,而是按职责切成两层:PRODUCT.md 回答"用户需要什么",TECH.md 回答"代码打算怎么实现"。
PRODUCT.md 只管用户故事
这一层是产品的"合同书",不出现任何技术栈词汇。写什么功能、给谁用、什么场景下成立、什么场景下要拒绝——四条线全部锁死。邵猛把这类约束叫做"不变量",意思是无论底层怎么改,产品的行为契约不能变。比如一个导出按钮,规格里写明白"空数据时禁用且悬停提示无数据",实现时换成 Rust 还是换成 Electron,行为都不能漂移。这层文档的读者是产品经理、QA、甚至法务,工程师也读,但读的不是技术细节。
TECH.md 只管架构与策略
到了技术层,叙事主体换成架构决策。模块怎么切分、状态怎么流动、关键接口的契约是什么、为什么选 A 方案不选 B 方案——这些信息归 TECH.md 管。两份文档放在同一个 specs/<issue号>/ 目录里,随 PR 一起提交,评审的时候产品和工程各看各的那一份。邵猛特别强调目录命名要带 issue 编号,这样规格、代码、Issue 三者天然绑定,反查任何一次改动都能拉出完整的决策链。
三个 Skill 怎么闭环
Skill 是 SDD 落地的最小单元,邵猛没有写一套复杂平台,而是把流程切成三段,每段一个 Skill,各自独立安装、互相协作。整套闭环在 npx skills add warpdotdev/common-skills 一行命令之后就能跑起来。
/write-product-spec 起步
第一个 Skill 专门生成 PRODUCT.md。它会拉取 Issue 标题、需求描述、相关讨论,然后输出结构化的用户故事列表和明确的不变量。邵猛在演示里展示了一个关键设计:Skill 不会自动提交,而是把文档写到 specs/<issue>/PRODUCT.md 之后停下来,等人工确认。确认动作可以是 GitHub Review,也可以是本地 cat 一下文件——重要的是规格进入代码库之前必须有人类点头。
/write-tech-spec 接力
产品规格过审,第二个 Skill 接手。它读取已经确认的 PRODUCT.md,输出 TECH.md。邵猛给这个 Skill 设定了一个反直觉的约束:不许复读产品文档里的用户故事。技术规格只讲架构、讲取舍、讲模块边界。用户故事已经在 PRODUCT.md 里了,再写一遍就是浪费 Token、稀释注意力。Agent 拿到 TECH.md 之后才能进入实现阶段,跳过规格直接写代码的情况被流程天然屏蔽。
/validate-changes-match-specs 收口
第三个 Skill 是整套方法的安全网。Agent 写完代码,PR 提上来,这个 Skill 自动跑一遍一致性校验:TECH.md 里声明的接口、模块、不变量,是否在 diff 里都有对应实现。反过来,diff 里冒出来的新逻辑,也要在规格里能找到出处。校验不通过,PR 直接被打回。邵猛在视频里特别演示了一段 Rust 桌面应用代码,校验 Skill 准确抓出了一个异步处理函数没有声明副作用的遗漏,精准到行号。
第五步最反常识:让 AI 操作计算机验证
一致性校验只解决"代码和规格对不对得上",但规格本身可能写漏了用户场景。邵猛在五步流程的最后加了一步:让 Agent 启动一个浏览器或桌面客户端,模拟真实用户点一遍流程。这步听起来很 fancy,做法其实很朴素——复用现有的 computer use 能力,把 SPEC 里的用户故事作为操作脚本,让 AI 自己执行一遍。
从"读 SPEC"到"跑 SPEC"
多数团队的规格文档写完就躺在仓库里积灰。邵猛的做法相当于把规格变成可执行测试:用户故事里写"点击导出后 3 秒内出现下载文件",Agent 就真的去点导出按钮、盯着下载目录、确认文件落盘。这种验证方式对 UI 重构类工作尤其有效,单元测试覆盖不到的视觉与交互问题,computer use 能补上。
对 Rust 桌面团队是降维打击
传统桌面应用团队的 QA 流程严重依赖人工手测,CI 跑再多自动化也覆盖不了真实渲染管线。SDD 的第五步把 computer use 接到规格验证链上,AI 替人跑一遍冒烟,工程师专注看回归。邵猛演示的案例是一个 Tauri 项目,端到端验证跑下来十几秒,比拉一个 QA 工程师点鼠标快了几个数量级。
Skills 可移植才是真正的杠杆
邵猛这套打法的最后一个亮点,也是最容易被忽视的一个:三个 Skill 全部开源在 warpdotdev/common-skills,不绑定 Warp 终端。换句话说,换 VS Code、换 Cursor、换任何 Agent 运行环境,Skill 本身可以原样搬走。
Skill 不是插件,是流程资产
插件式 AI 工具最大的问题是锁定。团队花三个月沉淀的工作流,换个 IDE 就归零。邵猛把流程封装成 Skill,本质上是把团队的工程纪律写进可执行文件,谁来跑 Agent、跑在哪个终端,都得按这套剧本走。Warp 在这里更像第一个吃螃蟹的宿主,而不是围墙。
照搬之前先想清楚权限边界
Skill 可移植不意味着无脑照搬。/validate-changes-match-specs 跑在 CI 上还是本地 Agent 上,决定了它能访问多少仓库上下文;computer use 验证步骤需要图形环境,纯 Linux 服务器流水线接不进来。抄作业之前先盘点自己的运行环境,别把演示视频里的端到端验证硬塞进一台没有显示器的构建机。

