Plan-Doc-Do-Follow 技能 是做什么的?
规划 → 文档 → 执行 → 跟踪
匹配意图 → 首条路由获胜 → 读取 routes/a-b.md(路由 a/b)→ 执行 → 应用全球不变量 + 状态模型。仅加载所需的路由、其模板及其子代理——绝不加载全部
路由
规划
| 意图 | 路由 | 参数 |
|---|---|---|
| 从产品愿景中提取史诗 | plan/proj | |
| 与干系人验证史诗 | plan/proj-review | |
| 创建史诗PRD和跟踪 | plan/epic | E{n} |
| 验证史诗规范或架构 | plan/epic-review | E{n} {prd|arch} |
| 设计史诗架构 | plan/epic-arch | E{n} |
| 创建功能PRD | plan/feat | E{n} F{n} |
| 验证功能规范或架构 | plan/feat-review | E{n} F{n} {prd|arch} |
| 功能架构(仅例外情况) | plan/feat-arch | E{n} F{n} |
| 将功能分解为任务 | plan/tasks | E{n} F{n} |
| 范围变更——添加/更新功能或史诗,即使已实现 | plan/change | description |
| 迁移v2项目文档到v3(一次性) | plan/migrate |
执行
| 意图 | 路由 | 参数 |
|---|---|---|
| 设置节省Token的工具(LSP、过滤器、经济、原生代理) | do/init | |
| 执行一个任务 | do/task | E{n} F{n} T{n} |
| 执行所有功能任务,内联验证 | do/all-tasks | E{n} F{n} |
| 验证完成的工作(逐任务路径) | do/verify | E{n} F{n} |
| 重新计算并修复所有状态 | do/sync-status | |
| 记忆良好实践 | do/memorize |
全球不变量(所有路由)
- 精神检查:与
docs/product.md保持一致;在每个规划路由和审阅者简报中逐字包含产品精神(docs/project-status.md顶部) - 用户意愿:
docs/decisions.md具有约束力;偏离 = 提出问题,绝不静默应用 - 业务优先:在进入下一阶段前进行规范审阅
- 架构检查:与
docs/global_architecture.md+docs/technical-stack.md保持一致 - 一个事实,一个文件:状态/事实拥有一个所属文件(状态模型);其他文件链接,绝不复制
- 受众语言:面向人类/业务 = 完整句子,无未解释的缩写;面向代理 = 文档风格(穴居人式简洁)
- 无空骨架:删除未使用的模板部分;绝不出现“N/A”或占位符
- 不猜测:阻塞性歧义 → 先提问;标记为阻塞/重要/次要
- 可追溯性:每个文档引用其父级;故事 ↔ 需求 ↔ 任务 ↔ 测试相互链接
- 活的全局文档:在影响它们的同一变更中更新
docs/data-model.md、docs/ui-map.md、docs/decisions.md—— 绝不“稍后” - 模型分层:
plan/*+ 审阅者 = 强模型;每个plan/tasks的任务可由较弱模型在不打开PRD的情况下执行 - 状态同步:每个改变状态的路由以状态同步程序结束
- 交接格式:简短摘要 · 当前进度 · 确切下一条命令 · 待定问题
- 限定了范围的子代理:仅输入其定义列表中的内容
- 每路由心态:采用路由的心态行
- 商讨保持内部:批评者之间的交流绝不进入文档/交接——人类看到最终结果 + 需要验证的内容
- 处处讲求经济:在每个路由和子代理上应用工作经济性
状态模型
⚪ TODO · 🟡 SPEC 已指定 · 🟣 PLAN 任务已生成 · 🔵 DEV 进行中 · 🟢 DONE 已完成并验证
所有权——单一事实来源
| 事实 | 所属文件(唯一书写位置) |
|---|---|
| 任务状态 | feat-tasks.md——任务汇总表 |
| 功能状态和进度 | epic-status.md——功能表 |
| 史诗状态和进度 | docs/project-status.md——史诗路线图表格 |
| 项目进度 | docs/project-status.md——进度部分 |
不存在 feat-status.md。每个任务部分:无状态行。Mermaid 图表 = 装饰性,从所属表重新生成,绝不是事实来源
推导规则
- 功能:无
feat-prd.md→ ⚪ · PRD 存在 → 🟡 ·feat-tasks.md存在,无任务超过 TODO → 🟣 · 任何任务 DEV/DONE → 🔵 · 🟢 仅通过验证门(do/verify或do/all-tasks的最终阶段)。向 🟢 功能添加任务 → 回退到 🔵 - 史诗:无
epic-prd.md→ ⚪ · PRD 存在 → 🟡 · 所有功能 ≥ 🟣 → 🟣 · 任何功能 🔵/🟢(并非全部 🟢)→ 🔵 · 全部 🟢 → 🟢 - 项目:对史诗进行相同聚合
- 进度:已完成任务数 / 总任务数(若无则为0),在史诗和项目层面汇总
状态同步程序
任何改变状态的路由结束(独立:do/sync-status,所有史诗):
- 读取受影响功能的“任务汇总”表
- 重新计算每个功能状态 + 进度;更新
epic-status.md中的行 - 重新计算每个受影响的史诗;更新其行、进度部分、
docs/project-status.md中的饼图。状态同步从不写入变更日志——仅由产生里程碑的路由写入由变更日志硬规则命名的日志事件(文档风格) - 在交接中报告差异(存储 ≠ 推导)
确定性和幂等性
子代理
定义在 subagents/ 中——每个代理一个文件(格式:subagents/README.md)。调用:读取文件 → 组装精确列出的输入(审阅者始终获取产品精神)→ 以文件体作为系统提示生成实例
经济模式
从仓库指令文件的工具部分(do/init 写入)读取“子代理经济:”。缺失 → balanced
| 模式 | 行为 |
|---|---|
strict | 内联优先严格执行 · scout 几乎总是内联 · 强制执行问题/工具/返回次数上限 · 批评者仍可生成 |
balanced | 按如下所述内联优先 · 执行上限 · 若 >5 个 scout 问题则软警告 |
quality | 成本门仅作为建议 · 上限仍适用于 scout 工具使用和返回大小 |
在任何生成之前(内联优先)
按顺序执行——首条匹配获胜 → 不生成:
- 事实已存在于主上下文 → 就地内联工作
- 可由主代理在 ≤5 次 Grep/Glob/Read(或 LSP)调用内回答 → 内联(使用
subagents/repo-scout.md中的 scout-lite 清单) - 简报的大小接近预期答案的大小 → 内联
- 发现可能为机械性清单检查,作用于小范围表面 → 内联(与当前的成本门相同)
- 否则生成
repo-scout 额外(在 strict / balanced 下):仅在 ≥3 个可证伪问题 且 搜索范围跨越 ≥2 个主代理尚未打开的区域,或 主上下文已臃肿且隔离明显更便宜时才生成。否则执行 scout-lite 内联
生成时:
- 工具注入:简报包含来自仓库指令文件的单行工具块(CLI 过滤器前缀、LSP 偏好、经济模式)——子代理必须遵守
- 精确简报:确切问题/检查 · 工作所基于的标准 · 范围外 · 对于 scout,在区域已知时的起始路径/通配符 · 每个 scout 波次 ≤5 个问题(
balanced/strict;其余拆分或内联) - 前置标准:在起草之前,阅读批评者的审阅问题;起草以在第一次尝试通过
- 返回负载上限:scout ≤15 行 · 批评者 ≤25 行 · 主代理仅保留所需事实——绝不将 scout 转储粘贴到文档中
批评者发现:应用那些改变行为、契约或人类决策的内容;静默丢弃无用/装饰性内容。被拒绝的判断性疑问 → 向人类提出的决策问题。收敛:每个文档运行一次;在实质性地重写阻塞性发现后最多重跑一次,范围限定于这些发现——重跑仅接受阻塞性问题;绝无第三次运行。绝不报告交流内容(不变量16)
| 子代理 | 类型 | 调用者 | 何时 |
|---|---|---|---|
repo-scout | 研究 | plan/epic-arch、plan/feat、plan/feat-arch、plan/change | 计划必须基于现有代码 |
prd-critic | 审阅者 | plan/epic、plan/feat | 始终 |
arch-critic | 审阅者 | plan/epic-arch、plan/feat-arch | 始终 |
perf-critic-backend / -frontend | 审阅者 | 架构路由、验证门 | 仅在其文件顶部的触发条件满足时 |
task-checker | 审阅者 | plan/tasks | 在自我审阅之后;最多运行两次 |
feature-coder | 执行者 | do/all-tasks | 每个波次中每个可并行任务一次 |
ui-consistency-reviewer | 审阅者 | 验证门 | UI 功能,非平凡表面 |
doc-coherence-reviewer | 审阅者 | 验证门 · plan/change · plan/migrate | 史诗完成 · 变更之后 · 迁移之后 |
验证门(+ 其子代理)在 do/verify 中运行,或作为 do/all-tasks 最终阶段内联运行
人类审阅用户体验
结论,而非过程。机械检查自动验证 → 一行摘要。“需要您验证的决策”:≤10 句平实陈述 + 标记为阻塞/重要/次要的待定问题。已验证的决策 → docs/decisions.md。干系人回答逐字——绝不转述,绝不重复提问(如有歧义,仅要求澄清)
工作经济性(不变量17)
输入经济性
- 优先使用 LSP/语义导航而非读取整个文件;限定行范围
- 优先使用 Grep/Glob/LSP 而非 Shell 进行代码搜索——仅当必要时使用 Shell
- 长 CLI 输出(测试、构建、Git、包管理器)通过仓库声明的过滤器(例如
rtk、snip)传递——do/init进行设置;如果使用了 Shell 但没有激活的钩子,则手动添加前缀 - 永不读取已存在于上下文中的内容;绝不“为了安全”而加载文档
- 遵守经济模式 + 内联优先于生成(子代理)
输出风格(主代理和子代理)
- 穴居人式简洁(与面向代理的文档相同的标准):无开场白、无重述请求、无结尾总结、无填充/含糊之词
- 代码、命令、路径、错误:字节精确——绝不转述
- 代码变更以差异或针对性编辑的形式呈现——除非有要求,绝不列出整个文件
- 研究答案 ≤10 行,除非需要更深层次内容;子代理返回遵守返回负载上限
- 交接(不变量13)= 仅作为结束块:≤5 行
最小化实现(do 路由和 feature-coder)
完全理解,停在第一个成立的台阶:
- 不需要存在 → 跳过(YAGNI)
- 已存在于代码库 → 复用
- 标准库能处理 → 使用它
- 原生平台功能 → 使用它
- 已安装的依赖 → 使用它
- 一行足够 → 一行
- 仅然后编写能工作的最少代码
绝不削减:信任边界验证、数据处理处理、安全性、可访问性
文档风格
两种受众——根据文件目的选择,而非路由情绪
面向人类/业务(完整散文)——PRD(epic-prd.md、feat-prd.md)、docs/product.md、产品精神、人类审阅正文(*-review.md 决策部分)、面向用户的文档(developer-setup、入门指南、人类 README)。完整句子。干系人可读。无未解释的缩写
面向代理(穴居人式简洁)——技能手册(SKILL.md、routes/、subagents/、模板注释)、feat-tasks.md、epic-arch.md / feat-arch.md、状态表/注释、活的技术文档(data-model.md、ui-map.md、decisions.md)、docs/patterns/*。受 caveman 启发全面:
- 仅事实和指令——当含义清晰时省略冠词/填充/含糊之词;片段也可以
- 短同义词;模式
[事物] [动作] [原因]·[下一步] - 不发明缩写(
cfg/impl/fn);广为人知的技术缩写可以(DB/API/HTTP) - 路径、符号、代码、命令、错误字符串:精确
- 绝不省略
not/never/no/only/except - 换行前无句号(多子句行内的句中句号保留)
- 仅决策和事实——绝无过程(“审阅者建议……”、“经过讨论……”)
- 仅当未来代理需要“为什么”时才提供理由(权衡、范围削减):≤2 短行
- 自动清晰:对于安全警告、不可逆步骤或风险导致顺序/否定误读的片段,使用更完整的散文——然后恢复简洁
变更日志硬规则:一行 {日期}: {事实},≤25 词。仅允许 —— 项目:史诗完成、重大范围变更、迁移;史诗:功能已验证 🟢、范围变更。其他所有内容(任务生成、PRD 起草/批准、波次、同步、差异修复)= 无条目。绝不:批评者交流(不变量16)、任务列表、门结果、进度数字、下一步: 命令。冗长的现有条目 = 遗留产物,绝不作为先例——仅编写允许的行,或什么都不写
文件组织
docs/
├── product.md (输入:产品愿景)
├── global_architecture.md (输入:架构概览)
├── technical-stack.md (输入:技术决策)
├── project-status.md (所属:产品精神、史诗状态、进度)
├── project-review.md
├── decisions.md (活的:有约束力的用户决策,每行一条)
├── data-model.md (活的:全局数据模式,如有)
├── ui-map.md (活的:全局导航地图,如有 UI)
├── design-guidelines.md (活的:UI 样式约定,如有 UI)
├── patterns/{pattern-name}.md (来自 do/memorize)
└── epics/e{n}-{epic-name}/ (代码片段,例如 e2-orm-discovery)
├── epic-brief.md (plan/proj)
├── epic-prd.md (plan/epic)
├── epic-status.md (所属:功能状态)
├── epic-arch.md (plan/epic-arch)
├── epic-review.md (plan/epic-review)
└── f{n}-{feat-name}/ (直接子级——无 features/ 层级)
├── feat-prd.md (plan/feat;包含入口点 + 架构增量)
├── feat-arch.md (plan/feat-arch——仅例外情况)
├── feat-tasks.md (所属:任务状态)
└── feat-review.md (plan/feat-review)
平台集成
仓库约定,优先级:CLAUDE.md · AGENTS.md · .github/copilot-instructions.md · .cursor/rules/ · .github/instructions/。do/memorize 写回到实际存在的文件中
模板
在 templates/ 中——名称镜像输出文件