用途
writing-plans 用于在头脑风暴或设计确认之后,把一份已确认的设计或规格(spec)转化为一份全面、逐任务的实施计划。它适用于任务涉及 3 个以上文件或多个模块的场景。该技能源自 obra/superpowers 的 skills/writing-plans,并已移植到当前来源。
它的核心假设是:执行计划的工程师虽然技术熟练,但对当前代码库、工具链和问题领域几乎一无所知,并且不太擅长测试设计。因此计划必须记录执行者需要知道的一切:每个任务要触碰哪些文件、具体代码、测试、可能需要查阅的文档,以及如何测试。
主要能力
- 范围检查:如果规格覆盖多个相互独立的子系统,应先在头脑风暴阶段拆分为子项目规格;若未拆分,则建议拆成多个计划,每个子系统一份,每份计划都应能独立产出可运行、可测试的软件。
- UI/前端视觉检查点:如果计划涉及 UI 或前端工作(新视图、布局、组件、视觉重设计),在编写详细任务列表前先生成一个独立的 HTML 原型。该原型为单个 .html 文件,通过 CDN(esm.sh、unpkg、cdn.tailwindcss.com)加载 React 和 UI 库(shadcn/ui、Radix UI、daisyUI 或其他合适库),展示完整布局,包含:所有视图/屏幕以可导航标签或可滚动区块呈现;符合领域、非 lorem ipsum 的真实占位内容;与设计规格一致的颜色、字体和间距;至少一个移动端断点的响应式行为;可见的关键状态(空、已加载、错误、加载中);可交互的导航和状态切换(如用 React useState 切换标签、弹窗等)。该文件必须无需 npm install 即可直接在浏览器打开,保存在计划旁边:docs/plans/YYYY-MM-DD-<feature-name>-mockup.html。之后告知用户在浏览器中打开并请求批准,只有用户确认视觉方向后才编写详细实施计划。若任务仅涉及后端、仅 CLI,或用户明确表示不需要原型,则跳过此步骤。
- 文件结构规划:在定义任务前,先梳理将创建或修改哪些文件以及每个文件的职责,锁定分解决策。设计边界清晰、接口明确的单元,每个文件应有单一清晰职责。优先使用更小、更聚焦的文件。一起变更的文件应放在一起,按职责而非技术层拆分。在既有代码库中遵循已有模式;若正在修改的文件已变得臃肿,可在计划中包含拆分。
- 细粒度任务:每个步骤是一个动作(2-5 分钟),例如“编写失败测试”“运行确认失败”“实现最小代码使测试通过”“运行测试确认通过”“提交”。
- 计划文档头部:每份计划必须以指定头部开始,包含功能名、面向代理执行者的说明(使用子代理驱动执行,或 ai-tooling:executing-plans)、目标(一句话)、架构(2-3 句)、技术栈,以及用复选框语法跟踪步骤。
- 任务结构:每个任务包含 Files 列表(创建、修改、测试的精确路径)和带复选框的步骤,步骤中给出完整代码、精确命令与预期输出。
- 禁止占位符:每个步骤必须包含工程师需要的实际内容。禁止出现“TBD”“TODO”“稍后实现”“补充细节”“添加适当的错误处理”“添加验证”“处理边界情况”“为上述内容编写测试”(而无实际测试代码)、“与任务 N 类似”(需重复代码)等。
- 自检:写完计划后对照规格进行自检,包括规格覆盖(每个需求能否指向某个任务)、占位符扫描、类型一致性(后续任务中的类型、方法签名、属性名是否与前面定义一致)。发现问题就地修复。
- 执行交接:保存计划后提示“计划已完成并保存到 docs/plans/<filename>.md。准备执行吗?”若执行环境有子代理(如 Claude Code),优先采用子代理驱动执行:每个任务使用全新子代理,任务之间进行审查,不提供选择。若没有子代理,则在当前会话中使用 ai-tooling:executing-plans 逐任务执行,每步验证。
使用方式
开始时声明:“我正在使用 writing-plans 技能创建实施计划。”该技能应在专用 worktree 中运行;若在隔离 worktree 中工作,应在执行时通过 git-worktrees:wt 技能创建。计划保存到 docs/plans/YYYY-MM-DD-<feature-name>.md,用户对计划位置的偏好可覆盖此默认值。
适用场景
适用于已确认设计或规格之后、需要把工作拆解为可执行任务清单的场景,尤其是涉及 3 个以上文件或多个模块的任务。也适用于需要让缺乏代码库上下文的工程师或代理独立完成实施的场景。
限制
该技能假设执行者技术熟练但缺乏代码库和领域上下文。UI 原型步骤在仅后端、仅 CLI 或用户明确不需要原型时可跳过。计划中不得使用占位符,必须给出完整代码和精确命令。执行路径取决于执行环境是否具备子代理能力。关于收费、价格、平台支持等具体信息,资料中暂未提供。