name: openspec-ff-change description: 快速生成OpenSpec工件。当用户想快速创建所有实现所需的工件,而不必逐个处理时使用。 license: MIT compatibility: 需要openspec CLI。 metadata: author: openspec version: “1.0” generatedBy: “1.0.0”
快速生成工件 - 一次性生成所有开始实施所需的内容。
输入: 用户请求应包括更改名称(kebab-case)或他们想要构建的描述。
步骤
-
如果未提供清晰输入,询问他们想要构建什么 使用AskUserQuestion工具(开放式,无预设选项)询问:
“你想处理什么更改?描述你想要构建或修复什么。” 从他们的描述中,推导出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: 所有工件的列表及其状态和依赖项
-
按顺序创建工件直到就绪 使用TodoWrite工具来跟踪工件进度。 循环遍历依赖顺序中的工件(先处理没有待处理依赖项的工件): a. 对于每个
ready(依赖项已满足)的工件:- 获取指令:
openspec instructions <artifact-id> --change "<name>" --json - 指令JSON包括:
context: 项目背景(对你的约束 - 不要包含在输出中)rules: 工件特定规则(对你的约束 - 不要包含在输出中)template: 用于输出文件的结构instruction: 此工件类型的模式特定指导outputPath: 写入工件的位置dependencies: 读取已完成工件以获取上下文
- 读取任何已完成的依赖文件以获取上下文
- 使用
template作为结构创建工件文件 - 应用
context和rules作为约束 - 但不要将它们复制到文件中 - 显示简要进度:“✓ 创建了 <artifact-id>”
b. 继续直到所有
applyRequires工件完成 - 创建每个工件后,重新运行
openspec status --change "<name>" --json - 检查
artifacts数组中每个在applyRequires中的工件ID是否有status: "done" - 当所有
applyRequires工件完成时停止 c. 如果一个工件需要用户输入(上下文不清楚): - 使用AskUserQuestion工具来澄清
- 然后继续创建
- 获取指令:
-
显示最终状态
openspec status --change "<name>"
输出 完成所有工件后,总结:
- 更改名称和位置
- 创建的工件列表及简要描述
- 准备就绪:“所有工件已创建!准备实施。”
- 提示:“运行
/opsx:apply或请我实施以开始处理任务。”
工件创建指南
- 遵循
openspec instructions中每个工件类型的instruction字段 - 模式定义了每个工件应包含的内容 - 遵循它
- 在创建新工件之前读取依赖工件以获取上下文
- 使用
template作为输出文件的结构 - 填充其部分 - 重要:
context和rules是对你的约束,不是文件内容- 不要将
<context>,<rules>,<project_context>块复制到工件中 - 这些指导你写什么,但永远不应出现在输出中
- 不要将
护栏
- 创建所有实施所需的工件(如模式
apply.requires定义) - 始终在创建新工件之前读取依赖工件
- 如果上下文严重不清楚,询问用户 - 但优先做出合理决定以保持势头
- 如果该名称的更改已存在,建议继续该更改
- 在继续下一个之前验证每个工件文件存在后