skills/writing-plans/SKILL.md
将规格分解为零上下文可执行的详尽实现计划,定义每个任务需触摸的文件、代码、测试与预期行为。触发:brainstorming 产生 spec 之后、多步骤任务、动手写代码之前。不允许 TBD/TODO/placeholder 占位。输出到 docs/plans/active/。终态提供两种执行选项:Subagent-Driven(推荐)或 Inline Execution。
npx skillsauth add Chikage0o0/opencode writing-plansInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
编写全面的实施计划,假设工程师对我们的代码库完全不了解,且品味存疑。记录他们需要知道的一切:每个任务要修改哪些文件、代码、测试、需要查阅的文档、如何测试。将整个计划拆分为细粒度的任务。遵循 DRY、YAGNI、TDD 原则,频繁提交。
假设他们是一名熟练的开发者,但几乎不了解我们的工具链或问题域。假设他们对良好的测试设计不太熟悉。
开始时声明:"我正在使用 writing-plans 技能来创建实施计划。"
注意: 如果 brainstorming 阶段判断为小型任务(< 3 个文件),则跳过本技能,直接进入开发阶段。
**上下文:**本技能应在当前 git 分支上下文中运行。外部工具可能在执行前准备或切换分支,但本技能不得要求或创建单独的工作空间目录。
保存计划至:docs/plans/active/YYYY-MM-DD-<feature-name>.md
docs/plans/active/ 中,完成后移至 docs/plans/completed/。如果规格说明涵盖了多个独立的子系统,那么它应该在头脑风暴阶段就被拆分为子项目规格。如果没有,建议将其拆分为独立的计划——每个子系统一个计划。每个计划都应独立产出可运行、可测试的软件。
在定义任务之前,先梳理出将要创建或修改哪些文件,以及每个文件的职责。这是分解决策被锁定的地方。
该结构指导任务分解。每个任务都应产生自包含的、独立有意义的变更。
每个步骤是一个动作(2-5 分钟):
每个计划必须以以下头部开头:
# [功能名称] 实施计划
> **给代理执行者:** REQUIRED SUB-SKILL: 使用 `subagent-driven-development`(推荐)或 `executing-plans` 逐任务执行本计划。步骤使用复选框 `- [ ]` 语法追踪。
**目标:** [一句话说明这份计划要完成什么]
**架构:** [2-3 句话说明实现思路]
**技术栈:** [关键技术与库]
---
### 任务 N:[组件名称]
**文件:**
- 新增:`exact/path/to/file.py`
- 修改:`exact/path/to/existing.py:123-145`
- 测试:`tests/exact/path/to/test.py`
- [ ] **步骤 1:先写失败测试**
```python
def test_specific_behavior():
result = function(input)
assert result == expected
```
- [ ] **步骤 2:运行测试并确认失败**
运行:`pytest tests/path/test.py::test_name -v`
预期:FAIL,并看到 `function not defined`
- [ ] **步骤 3:编写最小实现**
```python
def function(input):
return expected
```
- [ ] **步骤 4:运行测试并确认通过**
运行:`pytest tests/path/test.py::test_name -v`
预期:PASS
- [ ] **步骤 5:提交**
```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: add specific feature"
```
每个步骤必须包含工程师所需的实际内容。以下是计划失败的范例——绝不要写:
编写完完整计划后,以全新的视角审视规格说明并对照检查。这是你自己运行的检查清单——不是子代理派遣。
1. 规格覆盖: 浏览规格中的每个章节/需求。你能指出实现它的任务吗?列出任何缺口。
2. 占位符扫描: 在计划中搜索危险信号——上面"禁止占位符"部分中的任何模式。修复它们。
3. 类型一致性: 你在后续任务中使用的类型、方法签名和属性名称是否与早期任务中定义的一致?任务 3 中名为 clearLayers() 的函数,在任务 7 中却叫 clearFullLayers(),这就是一个 bug。
如果发现问题,直接内联修复。无需重新审查——修复后继续。如果发现某个规格需求没有对应任务,请添加该任务。
保存计划后,在提供任何执行选项或开始实施之前,使用 OpenCode question 工具先询问:
"Plan 已保存到 docs/plans/active/<filename>.md。在开始实施前,你要我先提交当前的 plan/spec 文档吗?"
如果用户希望提交文档:
git-commit如果用户暂时不希望提交文档:
文档提交问题解决后,使用 OpenCode question 工具提供执行选项:
"有两种执行方式:
1. Subagent-Driven(推荐) - 我为每个任务派发一个新的 subagent,在任务之间做评审,迭代更快
2. Inline Execution - 在当前会话中使用 executing-plans 执行任务,按检查点分批推进
你希望采用哪一种?"
如果选择 Subagent-Driven:
subagent-driven-developmentimplementer、spec-reviewer 和 code-reviewer 子代理类型如果选择 Inline Execution:
executing-plansdata-ai
Sync delta specs from a change to main specs. Use when the user wants to update main specs with changes from a delta spec, without archiving the change.
development
Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, or build a new skill.
development
Test-driven development with red-green-refactor loop. Use when user wants to build features or fix bugs using TDD, mentions "red-green-refactor", wants integration tests, or asks for test-first development.
development
Simplifies code for clarity without changing behavior. Use for readability, maintainability, and complexity reduction after behavior is understood.