OpenSpec快速生成技能Skill openspec-ff-change

此技能用于在OpenSpec项目中快速生成所有实现所需的工件,使用户能自动化创建并快速启动实施过程。关键词:OpenSpec,工件生成,快速启动,自动化工具,DevOps。

DevOps 0 次安装 0 次浏览 更新于 3/11/2026

name: openspec-ff-change description: 快速生成OpenSpec工件。当用户想快速创建所有实现所需的工件,而不必逐个处理时使用。 license: MIT compatibility: 需要openspec CLI。 metadata: author: openspec version: “1.0” generatedBy: “1.0.0”

快速生成工件 - 一次性生成所有开始实施所需的内容。

输入: 用户请求应包括更改名称(kebab-case)或他们想要构建的描述。

步骤

  1. 如果未提供清晰输入,询问他们想要构建什么 使用AskUserQuestion工具(开放式,无预设选项)询问:

    “你想处理什么更改?描述你想要构建或修复什么。” 从他们的描述中,推导出kebab-case名称(例如,“add user authentication” → add-user-auth)。 重要: 在理解用户想要构建什么之前,不要继续。

  2. 创建更改目录

    openspec new change "<name>"
    

    这会在 openspec/changes/<name>/ 创建一个脚手架化的更改。

  3. 获取工件构建顺序

    openspec status --change "<name>" --json
    

    解析JSON以获取:

    • applyRequires: 实现前所需的工件ID数组(例如,["tasks"]
    • artifacts: 所有工件的列表及其状态和依赖项
  4. 按顺序创建工件直到就绪 使用TodoWrite工具来跟踪工件进度。 循环遍历依赖顺序中的工件(先处理没有待处理依赖项的工件): a. 对于每个ready(依赖项已满足)的工件

    • 获取指令:
      openspec instructions <artifact-id> --change "<name>" --json
      
    • 指令JSON包括:
      • context: 项目背景(对你的约束 - 不要包含在输出中)
      • rules: 工件特定规则(对你的约束 - 不要包含在输出中)
      • template: 用于输出文件的结构
      • instruction: 此工件类型的模式特定指导
      • outputPath: 写入工件的位置
      • dependencies: 读取已完成工件以获取上下文
    • 读取任何已完成的依赖文件以获取上下文
    • 使用template作为结构创建工件文件
    • 应用contextrules作为约束 - 但不要将它们复制到文件中
    • 显示简要进度:“✓ 创建了 <artifact-id>” b. 继续直到所有applyRequires工件完成
    • 创建每个工件后,重新运行 openspec status --change "<name>" --json
    • 检查artifacts数组中每个在applyRequires中的工件ID是否有 status: "done"
    • 当所有applyRequires工件完成时停止 c. 如果一个工件需要用户输入(上下文不清楚):
    • 使用AskUserQuestion工具来澄清
    • 然后继续创建
  5. 显示最终状态

    openspec status --change "<name>"
    

输出 完成所有工件后,总结:

  • 更改名称和位置
  • 创建的工件列表及简要描述
  • 准备就绪:“所有工件已创建!准备实施。”
  • 提示:“运行 /opsx:apply 或请我实施以开始处理任务。”

工件创建指南

  • 遵循 openspec instructions 中每个工件类型的 instruction 字段
  • 模式定义了每个工件应包含的内容 - 遵循它
  • 在创建新工件之前读取依赖工件以获取上下文
  • 使用 template 作为输出文件的结构 - 填充其部分
  • 重要: contextrules 是对你的约束,不是文件内容
    • 不要将 <context>, <rules>, <project_context> 块复制到工件中
    • 这些指导你写什么,但永远不应出现在输出中

护栏

  • 创建所有实施所需的工件(如模式 apply.requires 定义)
  • 始终在创建新工件之前读取依赖工件
  • 如果上下文严重不清楚,询问用户 - 但优先做出合理决定以保持势头
  • 如果该名称的更改已存在,建议继续该更改
  • 在继续下一个之前验证每个工件文件存在后