PRD 并行 Loop 脚手架
把一份 PRD 或里程碑文档拆成多个 openspec 变更, 一个变更配一个 git worktree 交给 codex 并行做, 最后给你一段粘贴就能开跑的启动语。
基础信息
- 名字/名称
- PRD 并行 Loop 脚手架
- 描述说明
- 在已有 openspec 惯例的项目里,把一份 PRD / 产品文档 / 里程碑文档搭成「多 git worktree + codex 并行执行 + 主 loop (Claude) 心跳调度」的完整脚手架。**一个 openspec change = 一个并行任务**,每个任务由主 loop 分三段驱动(实施 → 反思 → 归档)。产物包括:N 个 openspec/changes/<change-id>/、~/dev-loops/<project>/<slug>/ 运行时状态目录、以及一段用户复制到新对话就能触发 /loop 的启动语。 Trigger for: 用户说"把这个 PRD 做出来 / 把 docs/product/pages/xxx.md 落地 / 把这份产品文档实现了 / 把 docs/roadmap/milestone-N-xxx.md 跑起来 / 按这个里程碑并行做 / 从这份 PRD 起搞成并行 loop / 把这批 change 丢到 worktree loop 里跑 / 给这个里程碑做 loop",或者用户丢来一份 PRD / 里程碑文件路径 + 说"实现这个 / 做出来 / 落地 / 拆一下 / 跑起来"。任何"从产品文档或里程碑到并行 loop"意图的自然表达都应该触发。 Do NOT trigger when: 用户只想编写或评审 PRD / 里程碑文档(走 credibility-review 或 project-init-docs);项目无 openspec/ 目录且用户也没装 openspec-driven-development(应该提示先建 openspec 惯例);拆出来只有一个 change(那是单个变更,走 openspec-driven-development);runtime.json 已存在且 heartbeats.total > 0 表示 loop 已在跑(要求手动清理旧状态后重来,skill 不做 update);用户只想跑一个 codex 任务没有产品文档起点;用户要求把 PRD 直接编译成代码不经过 openspec change。
PRD 并行 Loop 脚手架
把一份产品文档拆成 N 个 openspec 变更, 每个变更独占一个 git worktree 与一个 codex 会话, 搭出一套心跳调度就能开跑的并行开发脚手架。
什么时候用它
里程碑并行开工:
我手上有一份 docs/roadmap/milestone-N-xxx.md, 里面变更清单、依赖、验收编号都写好了。我想让它直接照着落成一批 openspec 变更, 把并行运行时装起来, 别再拉着我重新讨论一遍拆分。
从 PRD 拆变更:
我只有一份 PRD, 还没想清楚该拆成几块。我想让它先把验收标准横着摊开、逐条问清楚"这条最后落在哪个字段、哪个模块", 再和我商量一版拆分方案, 我点头了才落盘。
只补运行时:
变更目录我自己写过了, 缺的只是并行跑起来的那套东西——状态文件、调度指令、启动语。已经写好的变更一个字都别动。
中途接手:
里程碑文档里有几项已经打了勾。我希望它认出这些是做完的, 排进状态但不再调度, 只并行推进剩下的。
不接:
变更文档本身怎么写 → 交给 project-init-docs 和 credibility-review; 仓库还没有 openspec/ 目录 → 先走 openspec-driven-development 建骨架; 最后只拆出一个变更 → 不值得起 loop, 也走 openspec-driven-development。
它会产出什么 / 你会看到什么
它只搭台子, 不写业务代码——真正的实现发生在之后你另开对话跑 /loop 的时候, 由各个 worktree 里的 codex 完成。
- 落变更骨架: 在
{项目仓库}/openspec/changes/<变更 id>/下, 从项目自带的_template/拷一份再填 proposal / design / tasks / spec-delta; 目录已存在的一个字不改 - 装通用工具: 往
~/dev-loops/bin/放三个调度用的.mjs脚本, 同名文件已存在就跳过, 绝不覆盖 - 落运行时状态:
~/dev-loops/<项目>/<批次>/下写runtime.json(依赖关系的唯一事实源)、调度指令和启动语; 从 PRD 协商来的还会多一份验收落点表 - 默认停一次: 从 PRD 起步时, 拆分方案会先摊给你确认, 你说"就这么拆"才落盘; 里程碑清单能直接解析时才自动跳过这一停
- 绝不会做: 改你的 PRD 或里程碑文档; 改已存在的变更目录; 动 git 历史或产品代码; 覆盖已经在跑的
runtime.json; 推送或合并到远端
前置条件 / 边界
前置:
项目根是 git 仓库且有 openspec/changes/_template/; 本机装了 codex 命令行; 装了 openspec-driven-development(worktree 里的 codex 直接引用它的步骤); ~/dev-loops/ 可写。
相邻 skill 分工:
| 动作 | 交给 |
|---|---|
冷启动搭 openspec/ 骨架 |
openspec-driven-development |
| 只有一个变更要做 | openspec-driven-development |
| 写或评审 PRD、里程碑文档 | project-init-docs / credibility-review |
不接的场景:
- 没有产品文档起点, 只想随手跑一个 codex 任务
- 要求把 PRD 直接编译成代码, 不经过 openspec 变更
- 给已经在跑的批次做增量更新——它只负责从零搭, 要重来得先手工清掉旧状态目录
微妙边界:
- 里程碑文档解析不出变更清单 → 不报错, 自动改走"当 PRD 用、全程协商"这条路, 并在开头说明
- 变更 id 与
openspec/changes/下已有目录重名 → 停下问你是沿用还是换名, 不擅自选 - 拆分讨论时你说"你决定" → 它把候选写成待确认清单存着, 停在原地, 不擅自落盘
- 验证命令探测不到 → 不阻塞, 留一条占位提示让你事后手工填
版本信息
本地 Skill catalog 公开快照,仅展示公开安全字段。
Skill 文件
(12)SKILL.md
SKILL.md · Markdown