跳到正文

我给Codex做了17个Skill,真正有用的是这条研发流水线

前两天,我连续分享了两个自己做的产品。产品文章展示的是最后能看见、能运行的结果,但我更想补上中间那段通常不会出现在截图里的过程:一个模糊想法怎样被拆成需求,页面、接口和 Agent 怎样对齐,代码写完后又凭什么敢发布。 接下来的四篇,我会把这套过程完整拆开。今天先从总览开始,讲清楚我为什么给 Codex 做了 17

刘浩南中文2026-07-18浏览次数0

内容摘要

前两天,我连续分享了两个自己做的产品。产品文章展示的是最后能看见、能运行的结果,但我更想补上中间那段通常不会出现在截图里的过程:一个模糊想法怎样被拆成需求,页面、接口和 Agent 怎样对齐,代码写完后又凭什么敢发布。

接下来的四篇,我会把这套过程完整拆开。今天先从总览开始,讲清楚我为什么给 Codex 做了 17 个 Skill,以及它们怎样组成一条可以裁剪、也可以验证的研发流水线。

很多人第一次用 Codex 做产品,都会经历一个很熟悉的循环:先让它写一个页面,再补接口;发现权限没有想清楚,再改数据库;功能终于跑起来,测试、部署和文档全留到“以后再说”。

阅读全文

⏱ 预计阅读:12 分钟

SDD 规范驱动开发与 17 个 Skill 总览

图注:从产品定义到发布交付,关键在于让每次交接可验证。

[!summary] 本文速览

SDD(Specification-Driven Development,规范驱动开发)要解决的,是让每一次决策都有可交接、可验证的下一步,而非把文档写得更厚。

17 个 Skill 把产品、设计、代码、测试和发布之间最容易丢失的契约接了起来。

对独立开发者来说,这条线必须能按风险裁剪、允许并行,也能把验证证据收回来。

前两天,我连续分享了两个自己做的产品。产品文章展示的是最后能看见、能运行的结果,但我更想补上中间那段通常不会出现在截图里的过程:一个模糊想法怎样被拆成需求,页面、接口和 Agent 怎样对齐,代码写完后又凭什么敢发布。

接下来的四篇,我会把这套过程完整拆开。今天先从总览开始,讲清楚我为什么给 Codex 做了 17 个 Skill,以及它们怎样组成一条可以裁剪、也可以验证的研发流水线。

很多人第一次用 Codex 做产品,都会经历一个很熟悉的循环:先让它写一个页面,再补接口;发现权限没有想清楚,再改数据库;功能终于跑起来,测试、部署和文档全留到“以后再说”。

模型写代码通常很快。真正麻烦的是,代码已经生成,权限、状态、接口和验收条件还散在几轮聊天里。下一次打开 Codex,它只能把这些空白重新猜一遍。

我把这套做法叫作 SDD。这里的规格是一份会跟着研发向前走的共享契约:现在依据什么判断,这一步交付什么,下一步拿什么验证。

这 17 个 Skill 就是沿着这份契约组织起来的一条研发线路,从想法一直走到可交付产品。

1、先把 SDD 说清楚:规格要能连续交接

SDD 最容易被误解成“需求文档驱动开发”。如果只有一份 PRD(产品需求文档),那仍然很容易失控:产品说的是用户目标,开发要的是接口和状态,测试要的是可观察行为,运维关心的是回滚和告警。

所以我更愿意把规格理解为一组连续的交接物:

阶段 需要回答的问题 交接物
产品定义 为谁解决什么问题,哪些不做? 目标、范围、验收标准
体验与架构 用户如何完成任务,系统如何承接? 原型、状态、边界、NFR(非功能需求)
详细设计 数据、接口、Agent、前端如何对齐? Schema、API、状态机、权限与错误契约
实施与验证 谁先做、怎么验证、失败如何回滚? 任务 DAG(有向无环依赖图)、测试证据、发布门禁

这套 Skill 里还有一个很重要的约束:每个关键事实都要区分 EXPLICIT、INFERRED 和 UNKNOWN。

  • EXPLICIT:用户、代码或文档已经明确给出。
  • INFERRED:根据已有证据推导出来,需要写明依据。
  • UNKNOWN:不知道,而且会影响后续选择。

这个区分很朴素,却能拦住 AI 最危险的一种行为:把猜测写成事实。

交付状态也需要更精确,至少区分 PLANNED、CREATED、OBSERVED、VERIFIED、BLOCKED。设计稿写出来只是 CREATED;真正跑过测试、看过日志,才有资格叫 VERIFIED。

2、17 个 Skill 到底怎么分工

下面这张表是整套流程的总览,用法就是缺什么补什么,并不要求每个项目都走完 17 步。

阶段 Skill 它解决什么问题 典型输出
入口 S000 项目编排 当前到底处于什么阶段?最短路径是什么? 路由、依赖、风险、下一步
开发前 S001 产品战略 这件事值得做吗?谁愿意为它付费? 目标用户、假设、实验、继续/调整建议
开发前 S002 PRD 需求怎样才算说清楚? FR(功能需求)、AC(验收标准)、状态、权限、范围
开发前 S003 原型 用户从哪里进入、如何完成、失败后怎么办? 页面地图、流程、状态、原型规格
开发前 S003-2 UI 视觉系统、页面状态和资产如何一致? 高保真 UI、Token、资产清单、审计
开发前 S004 HLD 系统边界、数据流和技术取舍是什么? HLD、ADR(架构决策记录)、NFR、风险
开发中 S005-1 数据 LLD 数据从哪来、怎么存、怎么追溯和删除? 数据模型、管道、检索/RAG 契约
开发中 S005-2 后端 LLD API、事务、异步任务和权限怎样定义? DTO、错误模型、幂等、接口契约
开发中 S005-3 Agent LLD Agent 能做什么、何时停止、谁来审批? 工具权限、预算、状态机、Evals
开发中 S005-4 前端 LLD 页面状态、路由、流式交互如何落地? 组件边界、状态、前端契约
评审 S006 技术评审 各层设计真的能接上吗? 冲突清单、P0/P1 风险、Go/No-Go
实施 S007 实施拆解 大需求如何拆成可独立交付的任务? 任务 DAG、DoD(完成定义)、回滚点
实施 S008 代码实现 如何在现有仓库做最小且可验证的改动? 代码、测试、真实验证证据
开发后 S009 测试与 Evals 功能、接口、AI 输出如何被重复验证? 测试矩阵、数据集、运行报告
开发后 S010 安全工程 威胁、权限、提示注入和数据边界怎么审? 威胁模型、安全发现、修复计划
开发后 S011 DevOps 怎么部署、监控、迁移和回滚? CI/CD、环境、Runbook、Smoke Test
开发后 S012 文档交付 代码、接口、运维和发布说明怎样不漂移? API 文档、运维手册、发布说明

这里有三个容易忽略的设计。

第一,S001、S003-2 不是必经关卡。已有成熟产品做一个小功能,不必重新做战略,也不一定需要高保真视觉重构。

第二,S005 的四个分支可以并行。并行前先确认字段、权限、错误和状态是否对齐。

第三,测试和安全要提前介入。S009 可以从 PRD 阶段开始设计测试资产,S010 可以从 HLD 阶段开始做威胁建模。

3、这条流水线怎样跑起来

整个生命周期可以简化成下面这条线:

S000 → [S001] → S002 → S003 → [S003-2] → S004
→ S005-1/2/3/4 → S006 设计评审 → S007 → S008
→ S009 + S010 → S006 发布门禁 → S011 → S012

方括号代表“按需使用”。整条线实际在回答几个很现实的问题:

  1. 需求变化时,影响哪些资产?
  2. 前端拿到的状态枚举,和后端实际返回的是不是同一套?
  3. Agent 调用工具时,权限、超时和成本上限有没有被系统约束?
  4. 发布前说“测试通过”,到底对应哪一批实际运行结果?

如果这些问题没有留下可追溯的答案,研发就会变成“每次都从聊天记录里找上下文”。

4、独立开发者不必拿走全部 17 个

一个人做产品,最怕把流程做成额外负担。所以我的建议很简单:按项目风险裁剪。

场景一:一个小功能或 Bug

从 S000 判断范围,直接进入 S007 拆任务和 S008 实现;涉及接口时补 S005-2,最后用 S009 做回归。修一个筛选条件,没有必要先写一整套“企业级架构”。

场景二:准备做一个新产品

至少把 S001、S002、S003、S004、S007、S008、S009 跑一遍。这样在写第一行代码前,就已经明确了用户、范围、关键流程、架构边界和验收标准。

场景三:有 AI Agent 或敏感数据

把 S005-3、S010 提前。Agent 要被拆成可调用工具、权限、预算、终止条件和人工审批规则,不能只留下一段 Prompt。涉及用户数据时,安全也要从数据流和信任边界开始设计,不能等发布前才扫一次漏洞。

场景四:准备对外发布或交付客户

最后一定不要跳过 S006、S011、S012。在自己电脑上跑通,只是发布的起点;用户能否稳定使用、出了问题能否定位和回滚,才是交付要回答的事。

5、我在 SDD 里最看重的十个经验

先说明案例边界:下面十个案例都是把常见研发冲突压缩后的示意场景,用来说明方法怎么落地,不对应某一个真实客户或已交付项目。

经验一:先写“不可猜”的部分

不要急着让 AI 生成页面。先把这些写下来:谁能做什么、做完后状态如何变化、错误怎么提示、数据是否能删除、什么情况下需要人工确认。这些内容一旦靠猜,返工会沿着接口、数据库、前端和测试同时扩散。

一个最容易踩坑的场景是“管理员可以删除文档”。后端可能把它理解为删除文件,检索层仍保留旧索引,前端则立即隐藏条目。先在 S002 写清“删除请求—处理中—删除生效—历史引用不可再访问”四个状态,S005-1、S005-2、S005-4 才能交付同一个行为。

经验二:把事实、推断和未知项拆开

S000 的 EXPLICIT、INFERRED、UNKNOWN 三分类看起来简单,却能阻止最常见的“规格漂移”。AI 很擅长把空白补得流畅;研发真正需要的是知道哪些结论有证据,哪些只是当前最合理的假设。

举个简化例子。用户只说“希望员工用公司的知识库提问”,并没有说明是否支持跨部门检索。把“需要租户隔离”直接写成既定需求,会增加不必要的复杂度。先标记为 UNKNOWN,再让 S001 设计访谈问题、S002 将权限范围列为未决项,团队可以继续推进原型,也不会把一条猜测固化为数据库结构。

经验三:先选最短路径,不要每次都跑完整流水线

SDD 从来不以文档数量论成败。S000 要为当前目标挑出最少且足够的 Skill:改一个明确的表单校验,可以从 S007/S008/S009 开始;做一个新产品方向,才需要 S001 到 S004。流程是否合理,要看风险有没有门禁,而不是编号有没有走全。

什么时候可以直接跳过前面的 Skill?比如某个已上线页面只需新增“撤销上传”按钮,而且删除 API、权限规则和测试夹具都已存在。这时让 S007 把需求拆成前端状态、接口调用和回归测试三项就够了;强行重写 S001 战略和整份 HLD,只会把一小时的改动拖成一次无价值的重设计。

经验四:验收标准要在实现前就能失败

S002 最重要的产物是 AC(验收标准)。如果无法写出“给定什么、发生什么、应该看到什么”,那就还没有定义好完成。把验收前置,才能让 S003 的页面状态、S005 的接口、S009 的测试都指向同一件事。

拿 PDF 上传来说,“支持导入 PDF”还无法验收。更可用的 AC 是:给定一个权限合法但内容为空的 PDF,当管理员上传后,系统显示“无法提取文本”,不创建可检索文档,并允许管理员下载错误详情。这样 S003 会画错误与恢复路径,S005-2 会定义错误码,S009 也有了一条稳定的回归用例。

经验五:并行前先冻结握手面

四个 S005 分支可以并行,但不能各写各的。并行前要把字段、状态、错误、权限、事件顺序和数据所有权写成握手清单;S006 再检查它们是否一致。并行能省等待时间,写契约的时间省不了。

真正麻烦的是这种情况:数据设计将文档片段标识命名为 chunk_id,Agent 工具 Schema 使用 passageId,前端引用组件期待 source_id。三端都能独立跑通,却无法稳定联调。若在 S005 开始前由 HLD 指定“引用对象 ID、版本、权限过滤字段与删除语义”,名称差异会在编码前暴露,也就不用上线后靠兼容层堆补丁。

经验六:原型要覆盖恢复路径,不只展示成功路径

S003 用最低成本暴露交互缺口。加载、空、错误、权限不足、离线、超时、取消、重复提交和危险操作确认,都属于产品行为,不能留成“以后由开发补一下”的边角料。

比如用户点击“生成答案”后网络中断。原型若没有交代已生成部分如何处理、能否重试、是否会重复扣费或重复调用,前端只能临时猜。把断线、取消和恢复写入原型后,S005-4 会定义事件续传和按钮状态,S005-3 会定义 Agent 取消边界,用户也不会面对一个无限转圈的输入框。

经验七:视觉系统也是端侧契约

S003-2 的价值不止于做出高保真稿。Token(设计变量)、组件状态、响应式规则和资产清单会成为 S005-4 实现与 S006 审核的共同事实。只交一张首页图,等于把所有边缘状态留给工程师临场发挥。

我会先检查一个细节:一个“需要管理员审批”的高风险操作,在视觉稿里是否仍是一枚普通按钮?如果是,前端很可能把它做成一次点击即执行。设计阶段明确警示层级、确认弹窗、禁用状态和审批中反馈后,前端实现才能保留产品意图,安全设计也能追溯到具体交互。

经验八:评审要放在代码之前,也要放在发布之前

S006 有两个不同角色:设计评审用来抓“各层规格看似都对、合起来对不上”的错位;发布门禁用来确认测试、安全、迁移和回滚证据是否真的存在。它关注的是资产之间能否正确交接,不负责检查代码风格。

这里看一个具体冲突。前端叫 job_id,后端返回 taskId 还只是轻微问题;更严重的是,后端将“删除任务已受理”当成功,前端却显示“资料已彻底删除”,检索索引此时仍在异步清理。设计评审可以要求补齐状态枚举、轮询或事件以及删除完成证据;发布门禁再确认相关回归测试和回滚方案是否真正执行过。

经验九:工单按可交付纵向切片拆,不按技术部门拆

S007 的任务单位应是可观察的用户价值、契约或风险。若只拆成“数据库任务”“后端任务”“前端任务”三张清单,它们很快就会彼此等待。每张工单还应带范围、依赖、禁止项、DoD(完成定义)、测试、安全、迁移和回滚。

把“完成知识问答模块”拆开看,可以先交付“用户只能检索自己有权访问的资料,并看到可点击引用”这一纵向切片。它会触及最小权限过滤、检索工具、答案引用、前端展示和一组回归测试,但可以独立验收、独立回滚,也能更早验证真正的产品风险。

经验十:让“未完成”也有准确表达

很多团队做了不少事,却把状态说得太满:计划被写成完成,设计被写成已验证,预计结果被写成实际指标。S008、S009、S010、S011、S012 都要求区分 PLANNED、CREATED、OBSERVED、VERIFIED、BLOCKED,并附上可追溯证据。

这一区分落到发布里很直观:CI 配置已经提交,只能说明部署链路被 CREATED;在 staging 环境跑过健康检查,才有 OBSERVED;真正触发一次小流量发布、监控到核心路径并验证回滚可用后,相关门禁才可写为 VERIFIED。这种表达不会拖慢项目,反而能让独立开发者准确知道下一步该补运行、补证据,还是补设计。

6、写在最后

这 17 个 Skill 最终只想解决一个问题:让 Codex 在更少猜测的情况下,持续交付可验证的产品增量。

我现在判断一份规格是否有用,只看一件事:下一阶段敢不敢拿它直接做判断。敢,就说明这里留下了足够的证据。

如果你正在独立开发一个产品,可以先问自己一个具体问题:下一次需求改动发生时,你能不能在 10 分钟内说清它会影响哪些需求、接口、状态、测试和发布步骤?

能说清,你已经在做 SDD;说不清,就从 S000 和 S002 开始补第一张地图。

明日预告|第 2 篇:开发前,怎样把想法变成可评审规格

17 个 Skill 的地图有了,下一步先不急着写代码。我会从“做一个团队资料问答工作台”这句模糊想法出发,具体拆解 S000 到 S004:如何判断值不值得做,怎样写出可验收的 PRD,原型为什么必须覆盖失败路径,以及 HLD 到底要把哪些系统边界钉住。

收录文件

1 份 · 16.9 KB

01-SDD规范驱动开发经验分享与17个Skill总览.md

完整作者原文

16.9 KB2026-07-18
下载文件
来源与使用说明

数据许可作者资料,仅供本地参考

资料用于个人参考,具体使用条件以提供方说明为准。商业使用、再分发及模型训练需要核对相应许可。

CONTACT HAONAN

联系haonan

医疗 AI · 产品与独立开发

刘浩南

关注医疗 AI 从 demo 到真实落地,聚焦产品化、商业化与院内工作流效率提升。

12年医疗产研经验,大湾区头部医疗AI公司前产品总监,独立开发者

医疗 AI 产品化医疗 AI 商业化院内工作流效率
刘浩南的微信联系二维码
微信扫一扫,联系 haonan