用途
openspec-propose 用于提出一个新的变更,并在一步中生成全部产物。当用户想要快速描述要构建的内容并获得一份完整提案时,适合使用该技能。
主要能力
该技能会创建一个变更,并生成以下产物:
- proposal.md(做什么与为什么)
- design.md(怎么做)
- tasks.md(实现步骤)
当准备实现时,运行 /opsx:apply。
使用方式
输入
用户的请求应包含一个变更名称(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>"
这会在由 CLI 通过 .openspec.yaml 解析出的规划主目录中创建一个脚手架变更。
- 获取产物构建顺序:
openspec status --change "<name>" --json
解析 JSON 以获取:
- applyRequires:实现前所需的产物 ID 数组(例如 ["tasks"])
- artifacts:所有产物及其状态和依赖的列表
- planningHome、changeRoot、artifactPaths 和 actionContext:路径与作用域上下文。使用这些而不是假设仓库本地路径。
- 按顺序创建产物,直到可应用(apply-ready):
使用 TodoWrite 工具跟踪产物进度。按依赖顺序遍历产物(先处理没有待处理依赖的产物):
a. 对于每个已就绪(依赖已满足)的产物:
获取指令:
openspec instructions <artifact-id> --change "<name>" --json
指令 JSON 包含:
- context:项目背景(对你的约束——不要包含在输出中)
- rules:产物特定规则(对你的约束——不要包含在输出中)
- template:用于输出文件的结构
- instruction:针对该产物类型的 schema 特定指导
- resolvedOutputPath:写入产物的解析路径或模式
- dependencies:用于读取上下文的已完成产物
读取任何已完成的依赖文件以获取上下文。使用 template 作为结构创建产物文件,并写入 resolvedOutputPath。将 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.”
Store 选择
如果用户指定了一个 store(store 是注册在本机上的独立 OpenSpec 仓库),或者工作位于某个 store 中,运行 openspec store list --json 以发现已注册的 store id,然后在读取或写入 specs 和 changes 的命令上传递 --store <id>(new change、status、instructions、list、show、validate、archive、doctor、context)。其他命令不接受该标志。命令打印的提示已经带有该标志;在后续操作中保留它。没有 store 时,命令作用于最近的本地 openspec/ 根目录。
产物创建指南
- 遵循 openspec instructions 中针对每种产物类型的 instruction 字段
- schema 定义了每个产物应包含的内容——遵循它
- 在创建新产物之前,读取依赖产物以获取上下文
- 使用 template 作为输出文件的结构——填写其各个部分
- 重要:context 和 rules 是对你的约束,不是文件内容
- 不要将 <context>、<rules>、<project_context> 块复制到产物中
- 这些指导你写什么,但绝不应出现在输出中
护栏
- 创建实现所需的所有产物(由 schema 的 apply.requires 定义)
- 在创建新产物之前,始终读取依赖产物
- 如果上下文严重不清晰,询问用户——但优先做出合理决策以保持推进
- 如果同名变更已存在,询问用户是想继续它还是创建新变更
- 在继续下一个之前,验证每个产物文件在写入后确实存在
适用场景
适用于需要快速将构建想法转化为结构化变更提案的场景,尤其是希望一次性生成提案、设计与任务清单,并随后进入实现流程的情况。
限制
关于收费、价格、平台支持范围等信息,资料中暂未提供。