Communitygithub.com

Plan-Doc-Do-Follow 技能

一个用于AI代理的结构化工程工作流技能,通过四阶段流程(规划、文档、执行、跟踪)管理项目,并具有严格的状态模型和子代理协作。

Plan-Doc-Do-Follow 技能 是什么?

Plan-Doc-Do-Follow 是一个为 AI 代理(如 Claude Code、Cursor 等)设计的高级技能,它提供了一种严格的、基于路由的工程工作流管理方法。该技能通过“规划→文档→执行→跟踪”四个阶段组织项目,每个阶段对应一组预定义的路由,例如计划阶段的路由`plan/proj`用于从产品愿景中提取史诗。技能的核心是**全球不变量**(16条硬性规则)和**状态模型**,确保每个任务的进度(从⚪ TODO到🟢 DONE)有单一事实来源,并支持确定性、幂等性的同步。它通过`subagents/`定义多个专门子代理(如代码审查者、架构批评家),并遵循“内联优先”的调用策略以节省Token。该技能强调**工作经济性**,优先使用LSP和语义导航,输出采用面向代理的简洁风格。它支持多平台集成,可读取`CLAUDE.md`等仓库约定文件,是管理复杂、文档驱动型软件项目的强大工具。

兼容平台✓Claude Code~Codex CLI✓Cursor
npx skills add codeAvecCyril/ia-skill-plan-doc-do-follow

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Plan-Doc-Do-Follow 技能 是做什么的?

规划 → 文档 → 执行 → 跟踪

匹配意图 → 首条路由获胜 → 读取 routes/a-b.md(路由 a/b)→ 执行 → 应用全球不变量 + 状态模型。仅加载所需的路由、其模板及其子代理——绝不加载全部

路由

规划

意图路由参数
从产品愿景中提取史诗plan/proj
与干系人验证史诗plan/proj-review
创建史诗PRD和跟踪plan/epicE{n}
验证史诗规范或架构plan/epic-reviewE{n} {prd|arch}
设计史诗架构plan/epic-archE{n}
创建功能PRDplan/featE{n} F{n}
验证功能规范或架构plan/feat-reviewE{n} F{n} {prd|arch}
功能架构(仅例外情况)plan/feat-archE{n} F{n}
将功能分解为任务plan/tasksE{n} F{n}
范围变更——添加/更新功能或史诗,即使已实现plan/changedescription
迁移v2项目文档到v3(一次性)plan/migrate

执行

意图路由参数
设置节省Token的工具(LSP、过滤器、经济、原生代理)do/init
执行一个任务do/taskE{n} F{n} T{n}
执行所有功能任务,内联验证do/all-tasksE{n} F{n}
验证完成的工作(逐任务路径)do/verifyE{n} F{n}
重新计算并修复所有状态do/sync-status
记忆良好实践do/memorize

全球不变量(所有路由)

  1. 精神检查:与 docs/product.md 保持一致;在每个规划路由和审阅者简报中逐字包含产品精神(docs/project-status.md 顶部)
  2. 用户意愿:docs/decisions.md 具有约束力;偏离 = 提出问题,绝不静默应用
  3. 业务优先:在进入下一阶段前进行规范审阅
  4. 架构检查:与 docs/global_architecture.md + docs/technical-stack.md 保持一致
  5. 一个事实,一个文件:状态/事实拥有一个所属文件(状态模型);其他文件链接,绝不复制
  6. 受众语言:面向人类/业务 = 完整句子,无未解释的缩写;面向代理 = 文档风格(穴居人式简洁)
  7. 无空骨架:删除未使用的模板部分;绝不出现“N/A”或占位符
  8. 不猜测:阻塞性歧义 → 先提问;标记为阻塞/重要/次要
  9. 可追溯性:每个文档引用其父级;故事 ↔ 需求 ↔ 任务 ↔ 测试相互链接
  10. 活的全局文档:在影响它们的同一变更中更新 docs/data-model.md、docs/ui-map.md、docs/decisions.md —— 绝不“稍后”
  11. 模型分层:plan/* + 审阅者 = 强模型;每个 plan/tasks 的任务可由较弱模型在不打开PRD的情况下执行
  12. 状态同步:每个改变状态的路由以状态同步程序结束
  13. 交接格式:简短摘要 · 当前进度 · 确切下一条命令 · 待定问题
  14. 限定了范围的子代理:仅输入其定义列表中的内容
  15. 每路由心态:采用路由的心态行
  16. 商讨保持内部:批评者之间的交流绝不进入文档/交接——人类看到最终结果 + 需要验证的内容
  17. 处处讲求经济:在每个路由和子代理上应用工作经济性

状态模型

⚪ 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,所有史诗):

  1. 读取受影响功能的“任务汇总”表
  2. 重新计算每个功能状态 + 进度;更新 epic-status.md 中的行
  3. 重新计算每个受影响的史诗;更新其行、进度部分、docs/project-status.md 中的饼图。状态同步从不写入变更日志——仅由产生里程碑的路由写入由变更日志硬规则命名的日志事件(文档风格)
  4. 在交接中报告差异(存储 ≠ 推导)

确定性和幂等性

子代理

定义在 subagents/ 中——每个代理一个文件(格式:subagents/README.md)。调用:读取文件 → 组装精确列出的输入(审阅者始终获取产品精神)→ 以文件体作为系统提示生成实例

经济模式

从仓库指令文件的工具部分(do/init 写入)读取“子代理经济:”。缺失 → balanced

模式行为
strict内联优先严格执行 · scout 几乎总是内联 · 强制执行问题/工具/返回次数上限 · 批评者仍可生成
balanced按如下所述内联优先 · 执行上限 · 若 >5 个 scout 问题则软警告
quality成本门仅作为建议 · 上限仍适用于 scout 工具使用和返回大小

在任何生成之前(内联优先)

按顺序执行——首条匹配获胜 → 不生成:

  1. 事实已存在于主上下文 → 就地内联工作
  2. 可由主代理在 ≤5 次 Grep/Glob/Read(或 LSP)调用内回答 → 内联(使用 subagents/repo-scout.md 中的 scout-lite 清单)
  3. 简报的大小接近预期答案的大小 → 内联
  4. 发现可能为机械性清单检查,作用于小范围表面 → 内联(与当前的成本门相同)
  5. 否则生成

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)

完全理解,停在第一个成立的台阶:

  1. 不需要存在 → 跳过(YAGNI)
  2. 已存在于代码库 → 复用
  3. 标准库能处理 → 使用它
  4. 原生平台功能 → 使用它
  5. 已安装的依赖 → 使用它
  6. 一行足够 → 一行
  7. 仅然后编写能工作的最少代码

绝不削减:信任边界验证、数据处理处理、安全性、可访问性

文档风格

两种受众——根据文件目的选择,而非路由情绪

面向人类/业务(完整散文)——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/ 中——名称镜像输出文件

相关技能