用途
openspec-ff-change 用于“快进”OpenSpec 的工件创建过程:一次性生成开始实现所需的全部工件,而不必逐步走完每个环节。当用户想快速创建实现所需的全部工件时使用。
输入
用户的请求应包含一个变更名称(kebab-case),或对想要构建内容的描述。
主要步骤
-
若未提供明确输入,询问用户想构建什么。使用 AskUserQuestion 工具(开放式、无预设选项)提问:“What change do you want to work on? Describe what you want to build or fix.” 根据描述推导出 kebab-case 名称(例如 “add user authentication” → add-user-auth)。重要:在未理解用户想构建什么之前,不要继续。
-
创建变更目录:
openspec new change "<name>"
这会在 openspec/changes/<name>/ 下创建一个脚手架变更。
- 获取工件构建顺序:
openspec status --change "<name>" --json
解析 JSON 以获取:
- applyRequires:实现前所需的工件 ID 数组(例如 ["tasks"])
- artifacts:所有工件及其状态与依赖的列表
- 按顺序创建工件,直到 apply-ready。使用 TodoWrite 工具跟踪工件进度。按依赖顺序遍历工件(先处理没有待处理依赖的工件):
a. 对每个就绪(依赖已满足)的工件:
获取指令:
openspec instructions <artifact-id> --change "<name>" --json
指令 JSON 包含:
- context:项目背景(对你的约束——不要包含在输出中)
- rules:工件专属规则(对你的约束——不要包含在输出中)
- template:用于输出文件的结构
- instruction:针对该工件类型的 schema 专属指引
- outputPath:工件写入位置
- dependencies:用于读取上下文的已完成工件
读取任何已完成的依赖文件以获取上下文。使用 template 作为结构创建工件文件。将 context 和 rules 作为约束应用——但不要把它们复制进文件。显示简要进度:“✓ Created ”。
b. 继续直到所有 applyRequires 工件完成。每创建一个工件后,重新运行 openspec status --change "<name>" --json。检查 artifacts 数组中 applyRequires 里的每个工件 ID 是否状态为 "done"。当所有 applyRequires 工件完成时停止。
c. 若某工件需要用户输入(上下文不清晰):使用 AskUserQuestion 工具澄清,然后继续创建。
- 显示最终状态:
openspec status --change "<name>"
输出
完成所有工件后,汇总:
- 变更名称与位置
- 已创建工件列表及简要描述
- 就绪状态:“All artifacts created! Ready for implementation.”
- 提示:“Run /opsx:apply or ask me to implement to start working on the tasks.”
工件创建准则
- 对每种工件类型,遵循 openspec instructions 中的 instruction 字段
- schema 定义了每个工件应包含的内容——遵循它
- 创建新工件前先读取依赖工件以获取上下文
- 使用 template 作为输出文件的结构——填写其各节
- 重要:context 和 rules 是对你的约束,不是文件内容
- 不要将 <context>、<rules>、<project_context> 块复制进工件
- 这些指导你写什么,但绝不应出现在输出中
护栏
- 创建实现所需的全部工件(由 schema 的 apply.requires 定义)
- 创建新工件前始终读取依赖工件
- 若上下文严重不清晰,询问用户——但优先做出合理决策以保持推进
- 若同名变更已存在,建议继续该变更
- 写入后、进入下一个之前,验证每个工件文件存在
适用场景
适用于使用 OpenSpec 工作流、希望跳过逐步交互、快速生成实现前全部工件的开发场景。
限制
该技能依赖 OpenSpec 命令行工具(openspec new change、openspec status、openspec instructions)及 AskUserQuestion、TodoWrite 等工具。资料未提供具体安装方式、收费、价格、平台或效果信息。