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-auth)。

    重要:在没有理解用户想要构建什么之前,不要继续。

  2. 创建变更目录

    openspec new change "<名称>"
    

    这会在openspec/changes/<名称>/处创建一个脚手架的变更。

  3. 获取工件的构建顺序

    openspec status --change "<名称>" --json
    

    解析JSON以获取:

    • applyRequires:实现前所需的工件ID数组(例如,["tasks"]
    • artifacts:所有工件的列表及其状态和依赖关系
  4. 按顺序创建工件,直到准备就绪

    使用TodoWrite工具来跟踪工件的进度。

    按依赖顺序循环处理工件(先处理没有待处理依赖关系的工件):

    a. 对于每个ready(依赖关系满足)的工件

    • 获取指令:
      openspec instructions <artifact-id> --change "<名称>" --json
      
    • 指令JSON包括:
      • context:项目背景(对你的约束 - 不要在输出中包含)
      • rules:工件特定规则(对你的约束 - 不要在输出中包含)
      • template:用于输出文件的结构
      • instruction:此类工件的模式特定指导
      • outputPath:写入工件的位置
      • dependencies:为上下文读取的已完成的工件
    • 读取任何已完成的依赖文件以获取上下文
    • 使用template作为结构创建工件文件
    • 应用contextrules作为约束 - 但不要将它们复制到文件中
    • 显示简要进度:“✓ 创建了 <artifact-id>”

    b. 继续直到所有applyRequires工件完成

    • 在创建每个工件后,重新运行openspec status --change "<名称>" --json
    • 检查applyRequires中的每个工件ID在artifacts数组中是否有status: "done"
    • 当所有applyRequires工件完成后停止

    c. 如果工件需要用户输入(上下文不清晰):

    • 使用AskUserQuestion工具来澄清
    • 然后继续创建
  5. 显示最终状态

    openspec status --change "<名称>"
    

输出

完成所有工件后,总结:

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

工件创建指南

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

防护措施

  • 创建所有实现所需的工件(根据模式的apply.requires定义)
  • 在创建新工件之前,总是阅读依赖工件
  • 如果上下文严重不清晰,询问用户 - 但偏好做出合理决策以保持动力
  • 如果已经存在具有该名称的变更,建议继续该变更
  • 在继续下一个之前,验证每个工件文件是否在写入后存在