用途
openspec-continue-change 用于继续推进一个 OpenSpec 变更,方式是创建该变更的下一个工件(artifact)。当用户想要推进自己的变更、创建下一个工件或继续某项变更时,可使用此技能。
主要能力
- 列出可用变更:运行
openspec list --json获取按最近修改时间排序的变更列表。 - 让用户选择变更:使用 AskUserQuestion 工具让用户选择要处理的变更,展示最近修改的前 3-4 个变更作为选项,包含变更名称、schema(来自 schema 字段,若不存在则为 "spec-driven")、状态(如 "0/5 tasks"、"complete"、"no tasks")以及最近修改时间(来自 lastModified 字段),并将最近修改的变更标记为 "(Recommended)"。
- 检查当前状态:运行
openspec status --change "<name>" --json,解析 JSON 以了解当前状态,响应包含 schemaName(使用的工作流 schema,如 "spec-driven")、artifacts(工件数组及其状态 "done"、"ready"、"blocked")、isComplete(布尔值,表示所有工件是否完成)。 - 根据状态执行操作:
- 若所有工件已完成(isComplete: true):向用户表示祝贺,展示包含所用 schema 的最终状态,并建议 "All artifacts created! You can now implement this change or archive it.",然后停止。
- 若有工件处于 ready 状态:从状态输出中选取第一个状态为 "ready" 的工件,运行
openspec instructions <artifact-id> --change "<name>" --json获取其指令,解析 JSON 中的关键字段(context:项目背景,作为约束,不写入输出;rules:工件特定规则,作为约束,不写入输出;template:输出文件的结构;instruction:schema 特定指导;outputPath:工件写入位置;dependencies:用于上下文的已完成工件),然后创建工件文件:读取任何已完成的依赖文件作为上下文,使用 template 作为结构并填充其各节,将 context 和 rules 作为约束应用但不复制进文件,写入指令中指定的输出路径,展示创建了什么以及现在解锁了什么,创建完一个工件后停止。 - 若无工件处于 ready 状态(全部 blocked):这不应在有效 schema 下发生,展示状态并建议检查问题。
- 创建工件后展示进度:运行
openspec status --change "<name>"。
使用方式
输入:可选指定变更名称。若省略,检查是否可从对话上下文推断。若模糊或不明确,必须提示选择可用变更。
重要:不要猜测或自动选择变更,始终让用户选择。
每次调用后输出:创建了哪个工件、使用的 schema 工作流、当前进度(N/M 完成)、现在解锁了哪些工件,并提示:"Want to continue? Just ask me to continue or tell me what to do next."
工件创建指南
工件类型及其用途取决于 schema。使用 instructions 输出中的 instruction 字段来了解要创建什么。
常见工件模式(spec-driven schema:proposal → specs → design → tasks):
- proposal.md:若变更不清晰,询问用户。填写 Why、What Changes、Capabilities、Impact。Capabilities 部分至关重要——列出的每个能力都需要一个 spec 文件。
- specs//spec.md:为 proposal 的 Capabilities 部分列出的每个能力创建一个 spec(使用能力名称,而非变更名称)。
- design.md:记录技术决策、架构和实现方法。
- tasks.md:将实现拆分为带复选框的任务。
对于其他 schema,遵循 CLI 输出中的 instruction 字段。
限制与护栏
- 每次调用只创建一个工件。
- 创建新工件前始终读取依赖工件。
- 绝不跳过工件或乱序创建。
- 若上下文不清晰,创建前询问用户。
- 写入后、标记进度前验证工件文件存在。
- 使用 schema 的工件顺序,不要假设具体工件名称。
- 重要:context 和 rules 是对你的约束,不是文件内容。不要将 <context>、<rules>、<project_context> 块复制进工件。这些指导你写什么,但绝不应出现在输出中。