实现 OpenSpec 变更中的任务。
存储选择: 如果用户指定了某个存储(存储是此机器上注册的独立 OpenSpec 仓库),或者工作位于其中,请运行 openspec store list --json 来发现已注册的存储 ID,然后在读取或写入规范和变更的命令(new change、status、instructions、list、show、validate、archive、doctor、context)中传递 --store <id>。其他命令不接受该标志。命令输出的提示信息已携带该标志;请继续保留。如果没有存储,命令将在最近的本地 openspec/ 根目录下操作。
输入:可选地指定变更名称。如果省略,检查是否可从对话上下文中推断。如果模糊或存在歧义,您必须提示用户选择可用变更。
步骤
-
选择变更
如果提供了名称,则使用它。否则:
- 如果用户在对话中提到了某个变更,从上下文中推断
- 如果只有一个活跃变更,则自动选择
- 如果有歧义,运行
openspec list --json获取可用变更,并使用 AskUserQuestion 工具 让用户选择
始终声明:“使用变更: <名称>”以及如何覆盖(例如
/opsx:apply <其他>)。 -
检查状态以了解模式
openspec status --change "<名称>" --json解析 JSON 以了解:
schemaName:正在使用的工作流(例如 "spec-driven")planningHome、changeRoot和actionContext:规划范围和编辑约束- 哪个工件包含任务(对于 spec-driven 通常是 "tasks",其他请检查 status)
-
获取应用指令
openspec instructions apply --change "<名称>" --json返回的内容:
contextFiles:工件 ID -> 具体文件路径数组(因模式而异 - 可能是 proposal/specs/design/tasks 或 spec/tests/implementation/docs)- 进度(总计、已完成、剩余)
- 任务列表及其状态
- 基于当前状态的动态指令
处理状态:
- 如果
state: "blocked"(缺少工件):显示消息,建议使用 openspec-continue-change - 如果
state: "all_done":祝贺,建议归档 - 否则:继续实施
-
读取上下文文件
读取应用指令输出中
contextFiles下列出的每个文件路径。 文件取决于所使用的模式:- spec-driven:提案、规范、设计、任务
- 其他模式:遵循 CLI 输出的 contextFiles
-
显示当前进度
显示:
- 正在使用的模式
- 进度:“已完 N/M 个任务”
- 剩余任务概览
- CLI 中的动态指令
-
实施任务(循环直到完成或受阻)
对于每个待办任务:
- 显示正在处理哪个任务
- 进行所需的代码更改
- 保持更改最小且集中
- 在任务文件中将任务标记为完成:
- [ ]→- [x] - 继续下一个任务
在以下情况暂停:
- 任务不清晰 → 请求澄清
- 实施暴露了设计问题 → 建议更新工件
- 遇到错误或阻塞 → 报告并等待指导
- 用户中断
-
完成或暂停时,显示状态
显示:
- 本次会话已完成的任务
- 总体进度:“已完成 N/M 个任务”
- 如果全部完成:建议归档
- 如果暂停:解释原因并等待指导
实施过程中的输出
## 正在实施: <变更名称> (模式: <模式名称>)
正在处理任务 3/7: <任务描述>
[...实施进行中...]
✓ 任务完成
正在处理任务 4/7: <任务描述>
[...实施进行中...]
✓ 任务完成
完成时的输出
## 实施完成
**变更:** <变更名称>
**模式:** <模式名称>
**进度:** 7/7 个任务完成 ✓
### 本次会话完成
- [x] 任务 1
- [x] 任务 2
...
所有任务完成!可归档此变更。
暂停时的输出(遇到问题)
## 实施暂停
**变更:** <变更名称>
**模式:** <模式名称>
**进度:** 4/7 个任务完成
### 遇到的问题
<问题描述>
**可选方案:**
1. <方案 1>
2. <方案 2>
3. 其他方法
您希望怎么处理?
防护措施
- 持续处理任务直到完成或阻塞
- 在开始之前始终读取上下文文件(来自应用指令输出)
- 如果任务模糊,暂停并在实施前询问
- 如果实施暴露了问题,暂停并建议更新工件
- 保持代码更改最小且限定在任务范围内
- 完成后立即更新任务复选框
- 遇到错误、阻塞或需求不明确时暂停 - 不要猜测
- 使用 CLI 输出的 contextFiles,不要假定特定文件名
灵活工作流集成
本技能支持“对变更的操作”模型:
- 可随时调用:在所有工件完成之前(如果任务存在)、部分实施之后、与其他操作交替进行
- 允许工件更新:如果实施暴露了设计问题,建议更新工件 - 不锁定阶段,灵活工作