OpenSpec 技能完整介绍
OpenSpec 是一套结构化的软件开发工作流技能系统,帮助团队从想法到实现再到归档的全过程。
┌─────────────────────────────────────────────────────────────────────┐
│ OpenSpec 工作流全景图 │
└─────────────────────────────────────────────────────────────────────┘
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ EXPLORE │────▶│ PROPOSE │────▶│ APPLY │
│ 探索想法 │ │ 创建提案 │ │ 实现任务 │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
│ │ │
▼ ▼ ▼
思考、调研 proposal.md tasks.md
画图、分析 design.md 逐步实现
不写代码 tasks.md 标记完成
│
▼
┌──────────────┐
│ ARCHIVE │
│ 归档变更 │
└──────────────┘
四大核心技能
| 技能 | 命令 | 用途 |
|------|------|------|
| openspec-explore | /opsx:explore | 思考伙伴 - 探索想法、分析问题、画图可视化 |
| openspec-propose | /opsx:propose | 一键提案 - 创建 proposal + design + tasks |
| openspec-apply | /opsx:apply | 执行任务 - 按任务列表逐步实现代码 |
| openspec-archive | /opsx:archive | 归档变更 - 完成后打包存档 |
工作流详解
1️⃣ EXPLORE - 探索模式
/opsx:explore
角色: 思考伙伴,不写代码
做什么:
-
澄清需求、挑战假设
-
画架构图、数据流图
-
比较技术方案
-
发现风险和未知
输出: 思考结晶,不是代码
2️⃣ PROPOSE - 创建提案
/opsx:propose <change-name>
或
/opsx:propose "描述你想构建什么"
生成三个核心文件:
openspec/changes/<change-name>/
├── proposal.md # 做什么 & 为什么
├── design.md # 怎么做
└── tasks.md # 实现步骤清单
示例输出:
## proposal.md
### What
添加用户认证系统
### Why
当前系统无认证,任何人可访问所有API
---
## design.md
### Architecture
使用 JWT + Spring Security
### Components
- AuthController: /login, /register
- JwtService: 生成/验证 token
- SecurityFilter: 请求拦截
---
## tasks.md
- [ ] 添加 Spring Security 依赖
- [ ] 创建 User 实体和 Repository
- [ ] 实现 JwtService
- [ ] 创建 AuthController
- [ ] 配置 SecurityFilterChain
- [ ] 添加单元测试
3️⃣ APPLY - 执行实现
/opsx:apply
/opsx:apply <change-name>
流程:
┌─────────────────────────────────────────────────────────┐
│ APPLY 执行流程 │
└─────────────────────────────────────────────────────────┘
读取 tasks.md
│
▼
┌─────────────┐
│ 任务 1: [ ] │──────▶ 写代码 ──────▶ [x] 完成
└─────────────┘
│
▼
┌─────────────┐
│ 任务 2: [ ] │──────▶ 写代码 ──────▶ [x] 完成
└─────────────┘
│
▼
...
│
▼
全部完成 ──────▶ 建议归档
实时反馈:
## Implementing: add-user-auth
Working on task 3/6: 实现 JwtService
[...代码实现...]
✓ Task complete
Working on task 4/6: 创建 AuthController
[...代码实现...]
✓ Task complete
4️⃣ ARCHIVE - 归档
/opsx:archive
操作:
-
检查所有任务是否完成
-
可选: 同步 delta specs 到主 specs
-
移动到归档目录
结果:
openspec/changes/archive/
└── 2026-04-15-add-user-auth/
├── proposal.md
├── design.md
└── tasks.md # 全部 [x]
目录结构
openspec/
├── changes/ # 活跃变更
│ ├── add-user-auth/ # 变更目录
│ │ ├── proposal.md
│ │ ├── design.md
│ │ └── tasks.md
│ │
│ └── archive/ # 归档变更
│ └── 2026-04-15-add-user-auth/
│
└── specs/ # 能力规格 (可选)
└── authentication/
└── spec.md # 认证能力的规格说明
快速对比
| 场景 | 用什么 |
|------|--------|
| "我想添加 X 功能" | /opsx:propose add-x-feature |
| "帮我分析一下这个问题" | /opsx:explore |
| "开始实现吧" | /opsx:apply |
| "做完了" | /opsx:archive |
技能详细说明
openspec-explore
核心立场:
-
好奇而非教条 - 自然地提出问题
-
开放线程而非审问 - 展示多个有趣方向
-
可视化 - 自由使用 ASCII 图表
-
适应性强 - 跟随有趣线索,根据新信息调整方向
-
有耐心 - 不急于下结论
-
脚踏实地 - 相关时探索实际代码库
适用场景:
-
用户带来模糊的想法
-
用户遇到具体问题
-
实现过程中卡住了
-
用户想比较选项
守则:
-
不实现代码
-
不假装理解
-
不着急
-
不强制结构
-
不自动捕获
-
要可视化
-
要探索代码库
-
要质疑假设
openspec-propose
步骤:
-
如果没有明确输入,询问用户想构建什么
-
创建变更目录 (
openspec new change "<name>") -
获取工件构建顺序 (
openspec status --change "<name>" --json) -
按顺序创建工件直到可实施
-
显示最终状态
工件创建指南:
-
遵循每个工件类型的
instruction字段 -
在创建新工件之前读取依赖工件
-
使用
template作为输出文件结构 -
context和rules是对你的约束,不是文件内容
openspec-apply
步骤:
-
选择变更(提供名称或从上下文推断)
-
检查状态了解 schema
-
获取 apply 指令
-
读取上下文文件
-
显示当前进度
-
实现任务(循环直到完成或阻塞)
-
完成或暂停时显示状态
处理状态:
-
blocked(缺少工件): 显示消息,建议使用 openspec-continue-change -
all_done: 祝贺,建议归档 -
否则: 继续实现
openspec-archive
步骤:
-
如果没有提供变更名称,提示选择
-
检查工件完成状态
-
检查任务完成状态
-
评估 delta spec 同步状态
-
执行归档
-
显示摘要
归档结果:
-
变更目录移动到
openspec/changes/archive/YYYY-MM-DD-<name>/ -
可选同步 specs
-
保留所有工件
命令别名
OpenSpec 技能支持两种命令格式:
| 简短命令 | 完整命令 |
|---------|---------|
| /opsx:explore | /openspec-explore |
| /opsx:propose | /openspec-propose |
| /opsx:apply | /openspec-apply-change |
| /opsx:archive | /openspec-archive-change