| name | task-driven-dev |
| description | 按 tasks.md 的任务清单逐步开发,支持增量式推进和灵活的编写模式。 当用户想按照 OpenSpec 变更中的 tasks.md 逐步实现功能时触发此 skill。 触发场景:用户说"按 task 来开发"、"开始实现"、"下一个任务"、"继续开发"、 "写任务 X"、"帮我完成任务 X",或使用 /opsx:apply 后想要更精细的控制。 也适用于用户有一个结构化的任务清单并想逐步执行的场景。
|
Task-Driven Development(任务驱动开发)
按 tasks.md 中的任务清单逐步推进实现,给用户最大的控制权。
核心理念
这个 skill 的关键在于用户掌控节奏。不要一次性写完所有代码,而是:
- 用户指定做哪个任务,就做哪个任务
- 用户选择编写模式(你写 vs 用户写)
- 每完成一个任务,等待用户决定下一步
启动流程
1. 定位 tasks.md
首先找到当前活跃的变更和 tasks.md:
openspec list --json
如果有多个活跃变更,询问用户要处理哪个。然后读取 tasks.md:
openspec/changes/<change-name>/tasks.md
2. 展示任务概览
读取 tasks.md 后,展示当前进度:
- 列出所有任务组(## 标题)
- 标记已完成(
[x])和待完成([ ])的任务
- 高亮下一个待完成的任务
示例输出:
当前变更:implement-fs-and-init-command
任务进度:12/28 已完成
## 1. 为 @marchen-spec/fs 包添加依赖 ✅
## 2. 实现 fs 包的核心文件操作 ✅
## 3. 实现 fs 包的 YAML 操作 ✅
## 4. 为 fs 包添加测试 ✅
## 5. 在 core 包中实现 init 用例 ← 进行中
## 6. 为 core 包的 init 用例添加测试
## 7. 在 CLI 中实现 init 命令
## 8. 为 CLI init 命令添加测试
## 9. 构建和验证
3. 询问编写模式
对于每个任务(或任务组),让用户选择:
模式 A:你来写(直接实现)
- 直接修改源代码文件
- 写完后运行测试验证
- 适合用户信任你或任务比较机械的情况
模式 B:生成参考代码到 tasks.md(用户手动写)
- 在 tasks.md 的对应任务下生成代码块
- 用户参考代码块自己粘贴/修改到源文件
- 写完后用户告诉你,你帮忙检查和跑测试
- 适合用户想学习或想自己把控细节的情况
不要每次都问——观察用户的偏好。如果用户说"你来写",后续任务默认模式 A 直到用户改变主意。如果用户说"写到 task 里",后续默认模式 B。
执行任务
模式 A:直接实现
- 读取任务描述和相关的 design.md、specs
- 读取要修改的目标文件
- 实现代码,添加注释
- 如果任务涉及测试,运行测试验证
- 将 tasks.md 中对应任务标记为
[x]
- 简要报告完成情况
- 提示下一个任务
模式 B:生成到 tasks.md
- 读取任务描述和相关的 design.md、specs
- 读取要修改的目标文件(了解现有代码上下文)
- 在 tasks.md 对应任务的 checkbox 下方生成代码块
- 代码块应包含:
- 完整的可粘贴代码
- 必要的 import 语句提示
- 需要修改的文件路径
- 等待用户告诉你写完了
- 读取用户写的代码,检查是否正确
- 帮忙跑测试
- 通过后标记任务为
[x]
代码生成原则
- 遵循项目的 CLAUDE.md 约定(ESM、.js 扩展名、注释规范等)
- 读取 design.md 了解技术决策
- 读取 specs 了解行为要求
- 添加 JSDoc 注释
- 中文注释(除非用户另有要求)
任务间的过渡
完成一个任务后:
- 简要总结刚完成的内容
- 展示下一个待完成任务的概要
- 等待用户指令("继续"、"下一个"、"跳到任务 7"、"今天先到这")
用户可以:
- 顺序推进:"继续"、"下一个"
- 跳跃:"先做任务 7"、"跳到测试"
- 暂停:"先到这"、"我晚点再继续"
- 切换模式:"这个你来写"、"这个我自己来"
验证和收尾
当所有任务完成后:
- 运行完整的构建和测试流程
pnpm build && pnpm test && pnpm typecheck
- 汇报最终结果
- 提示用户可以使用
/opsx:verify 验证实现与规范的一致性
注意事项
- 不要假设用户想一口气做完所有任务
- 每个任务完成后都要等待用户的下一步指令
- 如果用户修改了代码但没告诉你,读取文件确认最新状态
- 测试失败时不要自己默默修复,先告诉用户问题所在,让用户决定
- 保持 tasks.md 的 checkbox 状态与实际进度同步