SuperAPI AI 工具集

openspec-propose

编程与开发

查看项目

更新于 10-16 06:05

技能介绍

用途

openspec-propose 用于在 OpenSpec 工作流中发起一个新的变更提案,并在一步内生成该变更所需的全部规划产物。当用户希望快速描述想要构建的内容并获得完整提案时使用。

该工作流有明确的规划边界:它只创建规划产物。触发该工作流的用户请求仅授权规划,即使请求中要求构建或修复某些内容,也不得编辑项目代码。规划产物完成后即停止,不在同一响应中开始实现,需等待用户在产物呈现后发起新的请求,再启动 apply 工作流。

主要能力

  • 根据用户描述推导 kebab-case 变更名称(例如 "add user authentication" → add-user-auth)。
  • 创建变更目录,并生成 schema 定义的规划产物。默认 spec-driven schema 下包括:
    • proposal.md(做什么与为什么)
    • specs/<capability-path>/spec.md(系统必须做什么——是增量,不是主 spec)
    • design.md(怎么做)
    • tasks.md(实现步骤)
  • 其中 <capability-path> 是相对于 specs/ 的 spec 目录(例如 user-auth 或 identity/user-auth)。保留现有能力的完整路径,新能力则遵循项目既定的组织方式。
  • 支持 store 选择:store 是本机注册的独立 OpenSpec 仓库。若用户指定 store 或工作位于某个 store 中,可运行 openspec store list --json 发现已注册的 store id,并在读写 specs 与 changes 的命令上传递 --store <id>。选定后,--store <id> 在该工作流余下部分保持粘性。
  • 通过 openspec status、openspec instructions 等命令获取产物构建顺序、指令、模板与依赖上下文。

使用方式

输入:用户请求应包含变更名称(kebab-case)或对想要构建内容的描述。

步骤概要:

  1. 理解请求并澄清实质性歧义。若无明确输入,向用户提问:"What change do you want to work on? Describe what you want to build or fix." 若请求存在会实质性影响范围、外部可观察行为、兼容性或验收标准的歧义,在创建变更前询问用户;次要细节可做合理假设并记录在规划产物中。
  2. 确定工作流 schema。除非用户明确要求不同工作流,否则使用配置的默认 schema。仅在用户明确按名称请求特定 schema 时使用 --schema <schema-name>;若用户要求"show workflows"或询问存在哪些工作流,则先运行 openspec context --json 解析权威根,再运行 openspec schemas --json 让其选择。
  3. 创建变更目录:使用默认配置时运行 openspec new change "<name>";使用明确请求的 schema 时运行 openspec new change "<name>" --schema "<schema-name>"。
  4. 获取产物构建顺序:运行 openspec status --change "<name>" --json,解析 JSON 获取 applyRequires、artifacts(含状态与 requires 边)、planningHome、changeRoot、artifactPaths 和 actionContext。
  5. 按依赖顺序创建所需集合中的每个产物。对每个就绪产物,运行 openspec instructions <artifact-id> --change "<name>" --json 获取 context、rules、template、instruction、resolvedOutputPath、dependencies 等。读取已完成的依赖文件(始终从磁盘重新读取),按 template 结构写入 resolvedOutputPath。若 instruction 字段委托给特定技能或命令,则调用它生成产物,然后验证文件存在。
  6. 创建每个产物后重新运行 openspec status --change "<name>" --json。所需集合是 applyRequires 加上从这些产物沿 requires 边可达的所有产物(传递闭包)。status 仅检查文件是否存在,因此应使用每个产物的 requires 边而非其状态来构建所需集合。状态为 "skipped" 的产物视为已满足,不得尝试创建。
  7. 展示最终状态:运行 openspec status --change "<name>"。

输出:完成所有产物后,总结变更名称与位置、已创建产物列表及简要描述、跳过的条件性产物及原因,并提示:"All artifacts needed for implementation are ready." 以及 "The artifacts are ready for review. When you are ready, run $openspec-apply-change (Codex) or /openspec-apply-change (other agents) or ask me to apply this change."

适用场景

  • 用户希望快速描述想要构建或修复的内容,并获得完整的规划提案。
  • 需要在 OpenSpec 工作流中发起新变更,并生成符合项目 schema 的规划产物。
  • 工作位于已注册的 store 中,需要按 store 作用域读写 specs 与 changes。

限制

  • 该工作流仅授权规划,不实现变更、不启动 apply 工作流、不编辑项目代码。
  • 产物呈现后即停止,需等待新的用户请求才能启动 apply 工作流。
  • 必须创建 apply 阶段传递依赖的每个产物,而不仅是 apply.requires 中列出的 id。
  • 创建新产物前必须读取依赖产物,且从磁盘重新读取,而非依赖对话记忆。
  • 若同名变更已存在,需询问用户是继续该变更还是创建新变更。
  • 写入后需验证每个产物文件存在,再继续下一个。
  • 关于具体收费、价格、平台支持范围等信息,资料中暂未提供。