轻量级 SDD 开发工具 OpenSpec 实用入门指南
- AI技术
- -468分钟前
- 8热度
- 0评论

一、OpenSpec 是什么?
一句话:OpenSpec 是一个轻量级的规格驱动开发(SDD)工具,帮助你在写代码前先明确"要做什么"和"怎么做",让 AI 编码助手更好地理解你的项目。
核心价值:
- 先写规格,后写代码,避免返工
- 规格、设计、任务联动,实现有据可依
- 支持 20+ AI 编码助手(Cursor、Claude Code、Windsurf 等)
- 完全开源,轻量级,无需 API 密钥
二、快速开始:5 分钟上手
2.1 安装 OpenSpec
npm install -g @fission-ai/openspec
验证安装:
openspec --version
# 输出:1.2.0 或更高版本
2.2 在项目中初始化
cd your-project
openspec init
初始化过程:
- 扫描现有工具:OpenSpec 会自动检测你项目中已安装的 AI 工具(如
.claude/、.cursor/) - 选择工具:确认或补充你要使用的工具
- 选择 Profile:选择安装哪些技能(后续详解)
- 生成配置:自动生成配置文件和技能文件
生成的文件结构:
your-project/
├── openspec/
│ ├── config.yaml # 项目配置
│ ├── schemas/ # 自定义工作流(可选)
│ ├── specs/ # 主规格文档
│ └── changes/ # 变更提案
│ ├── add-auth/ # 示例变更
│ └── archive/ # 已归档的变更
├── .claude/skills/ # Claude Code 技能
├── .cursor/commands/ # Cursor 命令
└── ...
三、核心概念:三个关键理解
3.1 什么是规格驱动开发(SDD)?
传统开发流程:
想法 → 直接写代码 → 发现问题 → 返工
规格驱动开发:
想法 → 写规格 → 明确设计 → 拆解任务 → 写代码
好处:
- 在写代码前发现问题,减少返工
- 规格、设计、任务有明确的文档记录
- AI 更好地理解你的意图,生成更准确的代码
3.2 什么是 Artifact(产物)?
Artifact 是 OpenSpec 工作流中生成的文档,常见的有:
| Artifact | 用途 | 示例内容 |
|---|---|---|
| proposal | 变更提案 | 为什么做、范围、方法 |
| specs | 规格文档 | 需求、场景、验收标准 |
| design | 技术设计 | 架构、数据模型、API 设计 |
| tasks | 任务清单 | 实现步骤、待办事项 |
3.3 什么是 Delta Specs?
Delta Specs 是增量规格,用语义标记描述变更,而不是重写整个文档。
格式示例:
# Delta for User Auth
## ADDED Requirements
### Requirement: Two-Factor Authentication
系统必须要求用户在登录时输入二次验证码。
## MODIFIED Requirements
### Requirement: Session Timeout
会话超时时间从 60 分钟缩短为 30 分钟。
## REMOVED Requirements
### Requirement: Remember Me
已弃用,不再支持"记住我"功能。
四、工作流:从提案到归档
OpenSpec 提供灵活的工作流,你可以根据自己的情况选择。

4.1 一键提案(推荐新手)
适合场景:思路清晰,想快速开始
/opsx:propose add-dark-mode
发生的事情:
1. AI 询问你要构建什么
2. 一次性生成所有规划文档:
- openspec/changes/add-dark-mode/proposal.md
- openspec/changes/add-dark-mode/specs/
- openspec/changes/add-dark-mode/design.md
- openspec/changes/add-dark-mode/tasks.md
4.2 逐步探索(推荐复杂需求)
适合场景:思路不清晰,需要逐步明确
# 第一步:启动变更
/opsx:new add-payment
# 第二步:创建提案
/opsx:continue
# 生成 proposal.md
# 第三步:创建规格
/opsx:continue
# 生成 specs/
# 第四步:创建设计
/opsx:continue
# 生成 design.md
# 第五步:创建任务
/opsx:continue
# 生成 tasks.md
4.3 快速前进
适合场景:已经想清楚了,想一步到位
/opsx:new add-payment
/opsx:ff add-payment
4.4 实现任务
生成完规划文档后,开始实现:
/opsx:apply
AI 会逐个完成 tasks.md 中的任务,并在完成时打勾:
## Tasks
- [x] 1.1 Create Payment entity
- [x] 1.2 Implement PaymentService
- [ ] 2.1 Implement POST /api/payments
关键特性:你可以在实现过程中随时编辑 design.md 或 tasks.md,AI 会感知到修改并调整策略。
4.5 验证实现
完成实现后,验证是否符合规格:
/opsx:verify
AI 会检查:
- 所有需求是否已实现
- 场景是否覆盖
- 边界条件是否处理
4.6 归档变更
完成后,归档变更:
/opsx:archive
发生的事情:
1. 将 Delta Specs 合并到主规格:openspec/specs/
2. 将变更移动到归档目录:openspec/changes/archive/YYYY-MM-DD-add-payment/
3. 清理临时文件
五、实用技巧:让 OpenSpec 更好用
5.1 配置项目上下文
编辑 openspec/config.yaml,让 AI 了解你的项目:
schema: spec-driven
# 项目背景:会注入到所有文档生成中
context: |
技术栈:TypeScript, React, Node.js
API 风格:RESTful, JSON 响应
测试:Vitest 单元测试,Playwright E2E
代码规范:ESLint + Prettier
# 每个文档的特定规则
rules:
proposal:
- 必须包含回滚计划
- 必须列出影响的团队
specs:
- 使用 Given-When-Then 格式描述场景
design:
- 复杂流程需包含时序图
效果:AI 生成的文档会自动遵循这些规范。
5.2 使用 Explore 模式思考
在不确定是否要开始时,先探索:
/opsx:explore
这是一个纯粹的"思考伙伴"模式,不会创建任何文件。你可以:
- 探索不同的方案
- 澄清需求
- 比较技术选项
思考清楚后,再运行 /opsx:new 开始正式工作流。
5.3 选择合适的 Profile
Profile 决定了安装哪些技能文件:
openspec config profile
Core Profile(推荐新手):
- 只安装 4 个核心技能:explore、new、apply、archive
- 轻量级,适合个人项目
All Profile(默认):
- 安装全部 10 个技能
- 适合需要完整工作流的团队
Custom Profile:
- 自定义选择需要的技能
- 灵活性最高
5.4 查看变更状态
随时查看当前变更的进度:
openspec status --change "add-payment"
输出示例:
{
"artifacts": [
{"id": "proposal", "status": "done"},
{"id": "specs", "status": "done"},
{"id": "design", "status": "done"},
{"id": "tasks", "status": "in-progress"}
],
"tasks": {
"total": 10,
"completed": 7,
"remaining": 3
}
}
5.5 批量归档
当你完成了多个变更,可以批量归档:
/opsx:bulk-archive
OpenSpec 会:
- 列出所有未归档的变更
- 检测规格冲突
- 提供合并确认
- 一次性归档多个变更
六、完整案例:为博客添加评论功能
让我们通过一个完整的例子来体验 OpenSpec 的工作流。
6.1 初始化(假设已完成)
cd my-blog
openspec init
# 选择使用的工具:Claude Code
# 选择 Profile:core
6.2 提案阶段
/opsx:propose add-comments
AI 询问:
你想构建什么功能?请描述你的需求。
你的回答:
我想为博客文章添加评论功能。用户可以在文章下方发表评论,支持 markdown 格式,需要简单的审核机制(垃圾词过滤)。管理员可以删除评论。
AI 生成的提案(openspec/changes/add-comments/proposal.md):
# Proposal: Add Comments Feature
## Intent
增加用户参与度,允许读者在文章下发表评论和讨论。
## Scope
**包含**:
- 评论发表(支持 Markdown)
- 评论展示(分页显示)
- 简单审核(垃圾词过滤)
- 管理员删除评论
**不包含**:
- 用户点赞评论
- 评论回复(嵌套评论)
- 评论通知
## Approach
1. 创建 Comment 实体和数据库模型
2. 实现评论 API(CRUD)
3. 前端添加评论表单和展示区域
4. 实现垃圾词过滤中间件
5. 管理后台添加评论管理页面
6.3 规格生成(自动)
OpenSpec 自动生成规格(openspec/changes/add-comments/specs/comment/spec.md):
# Delta for Comment
## ADDED Requirements
### Requirement: Comment Creation
系统必须允许认证用户在文章下发表评论。
#### Scenario: 发表成功
- **Given** 一个已登录用户
- **When** 在文章页提交评论内容
- **Then** 评论成功保存
- **And** 评论立即显示在文章下
#### Scenario: Markdown 支持
- **Given** 用户提交包含 Markdown 的评论
- **When** 评论被渲染
- **Then** Markdown 正确解析
- **And** 恶意脚本被过滤
#### Scenario: 垃圾词过滤
- **Given** 评论包含垃圾词(如"广告"、"中奖")
- **When** 用户提交评论
- **Then** 评论被拒绝
- **And** 显示友好提示
### Requirement: Comment Pagination
评论列表必须分页显示,每页 10 条。
#### Scenario: 分页浏览
- **Given** 文章有 25 条评论
- **When** 用户查看第 2 页
- **Then** 显示第 11-20 条评论
- **And** 提供翻页控件
6.4 设计生成(自动)
OpenSpec 自动生成设计(openspec/changes/add-comments/design.md):
# Design: Comments Feature
## Data Model
// ```typescript
interface Comment {
id: string
articleId: string
userId: string
content: string // Markdown 格式
renderedContent: string // HTML 格式
status: 'pending' | 'approved' | 'rejected'
createdAt: Date
updatedAt: Date
}
// ```
## API Endpoints
- `POST /api/articles/:articleId/comments` — 发表评论
- `GET /api/articles/:articleId/comments` — 获取评论列表
- `DELETE /api/comments/:id` — 删除评论(管理员)
## Spam Filter
// ```typescript
const spamKeywords = ['广告', '中奖', '免费', '兼职'];
function isSpam(content: string): boolean {
return spamKeywords.some(keyword => content.includes(keyword));
}
// ```
## Frontend Components
- `CommentForm` — 评论表单
- `CommentList` — 评论列表
- `CommentItem` — 单条评论
- `CommentAdmin` — 管理后台
6.5 任务生成(自动)
OpenSpec 自动生成任务(openspec/changes/add-comments/tasks.md):
# Tasks
## 1. 后端开发
- [ ] 1.1 创建 Comment 数据库模型和迁移
- [ ] 1.2 实现 Comment CRUD API
- [ ] 1.3 实现垃圾词过滤中间件
- [ ] 1.4 添加评论分页逻辑
- [ ] 1.5 编写单元测试
## 2. 前端开发
- [ ] 2.1 创建评论表单组件
- [ ] 2.2 创建评论列表组件
- [ ] 2.3 集成 Markdown 编辑器
- [ ] 2.4 实现评论加载和分页
- [ ] 2.5 添加错误提示
## 3. 管理功能
- [ ] 3.1 创建评论管理页面
- [ ] 3.2 实现删除评论功能
- [ ] 3.3 添加评论审核视图
## 4. 集成测试
- [ ] 4.1 E2E 测试:发表评论流程
- [ ] 4.2 E2E 测试:垃圾词过滤
- [ ] 4.3 E2E 测试:分页显示
6.6 实现阶段
/opsx:apply
AI 开始逐个完成任务:
✓ 1.1 创建 Comment 数据库模型和迁移
- 创建了 Comment 实体
- 生成了数据库迁移文件
✓ 1.2 实现 Comment CRUD API
- 实现了 POST /api/articles/:articleId/comments
- 实现了 GET /api/articles/:articleId/comments
- 实现了 DELETE /api/comments/:id
✓ 1.3 实现垃圾词过滤中间件
- 创建了 spamKeywords 列表
- 实现了 isSpam 函数
- 集成到评论创建流程
...
关键特性:在实现过程中,你发现 Markdown 渲染需要更严格的 XSS 过滤,你可以:
- 编辑
design.md,添加:## Security - 使用 DOMPurify 过滤 HTML - 禁用所有 script 标签 - 编辑
tasks.md,添加:- [ ] 1.6 添加 DOMPurify XSS 过滤 - 继续运行
/opsx:apply
AI 会感知到修改并调整实现策略。
6.7 验证阶段
/opsx:verify
AI 检查实现:
✓ Comment Creation — 已实现
✓ 发表成功 — 已实现
✓ Markdown 支持 — 已实现
✓ 垃圾词过滤 — 已实现
✓ Comment Pagination — 已实现
✓ 分页浏览 — 已实现
⚠ 发现问题:
- DOMPurify XSS 过滤未实现
- 建议:在 tasks.md 中添加对应任务
6.8 归档阶段
/opsx:archive
OpenSpec 执行归档:
✓ 合并 Delta Specs 到主规格
- openspec/specs/comment/spec.md 已更新
✓ 归档变更
- 移动到 openspec/changes/archive/2026-03-31-add-comments/
✓ 清理临时文件
- 删除 openspec/changes/add-comments/
七、自定义工作流:定义你的节奏
7.1 创建自定义 Schema
如果你的团队有特殊的工作流程,可以创建自定义 Schema:
# 基于默认 Schema 创建
openspec schema fork spec-driven my-workflow
编辑 openspec/schemas/my-workflow/schema.yaml:
name: my-workflow
artifacts:
- id: research
generates: research.md
requires: []
templates:
- templates/research.md
- id: proposal
generates: proposal.md
requires: [research] # 先做调研,再写提案
- id: tasks
generates: tasks.md
requires: [proposal] # 跳过详细设计和规格
新的依赖图:
research → proposal → tasks
7.2 使用自定义 Schema
在 openspec/config.yaml 中设置:
schema: my-workflow
或者在创建变更时指定:
/opsx:new my-feature --schema my-workflow
八、团队协作最佳实践
8.1 共享配置
将 openspec/config.yaml 和 openspec/schemas/ 提交到版本控制:
git add openspec/config.yaml openspec/schemas/
git commit -m "chore: add OpenSpec config"
8.2 PR 引用
在 PR 描述中引用对应的 OpenSpec 变更:
## Related OpenSpec Change
- Proposal: `openspec/changes/add-comments/proposal.md`
- Specs: `openspec/changes/add-comments/specs/`
- Design: `openspec/changes/add-comments/design.md`
评审时先看规格,再看代码。
8.3 定期同步
团队成员定期运行:
openspec update
确保配置和技能文件同步。
九、常见问题解答
Q1:我必须在开始前写完所有文档吗?
不是。OpenSpec 支持灵活的工作流:
- 思路清晰:用
/opsx:propose一次性生成 - 思路模糊:用
/opsx:new+/opsx:continue逐步创建 - 甚至可以在实现过程中随时修改
design.md和tasks.md
Q2:我可以在实现过程中修改规格吗?
可以。这是 OpenSpec 的核心优势之一:
- 编辑
specs/或design.md - 编辑
tasks.md,添加或修改任务 - 继续运行
/opsx:apply - AI 会感知到修改并调整策略
Q3:Delta Specs 是什么?我需要写吗?
Delta Specs 是 OpenSpec 自动生成的。
当你创建变更时,OpenSpec 会自动在 specs/ 中创建 Delta Specs 格式的文档。你只需要填写内容,归档时会自动合并到主规格。
为什么不用重写整个规格?
- 清晰追踪变更历史
- 减少多人协作时的冲突
- 便于回滚和审计
Q4:我的项目很小,需要用 OpenSpec 吗?
取决于你的需求:
- 小项目(个人、单作者):可以使用 Core Profile,只安装核心功能
- 中型项目(小团队):推荐使用完整工作流
- 大型项目(多团队):强烈推荐,规格文档是协作的基础
判断标准:
- 是否经常因为需求不明确返工?
- 是否需要多人协作?
- 是否需要 AI 更好地理解项目?
如果答案是肯定的,OpenSpec 会很有帮助。
Q5:OpenSpec 会锁定我吗?
不会。OpenSpec 是轻量级的:
- 完全开源,无依赖
- 不需要 API 密钥
- 生成的就是 Markdown 文件,随时可以脱离工具使用
- 不强制工作流,你可以随时调整
Q6:如何更新 OpenSpec?
npm install -g @fission-ai/openspec@latest
然后在项目中运行:
openspec update
这会:
- 更新配置文件
- 重新生成技能文件
- 清理过时的命令文件
十、进阶技巧
10.1 使用 Explore 模式深入思考
在不确定技术方案时,先探索:
/opsx:explore
你可以问 AI:
- "评论系统应该用实时推送还是轮询?"
- "垃圾词过滤用什么算法比较好?"
- "评论和文章的数据库关系怎么设计?"
探索清楚后,再运行 /opsx:new 开始正式工作流。
10.2 批量处理多个变更
如果你同时在做多个功能:
# 查看所有变更
openspec list
# 批量归档
/opsx:bulk-archive
10.3 查看详细文档
# 查看命令帮助
openspec --help
openspec <command> --help
# 查看配置
openspec config list
# 查看技能
openspec skills list
十一、总结:下一步行动
如果你完全没用过 OpenSpec
- 安装:
npm install -g @fission-ai/openspec - 初始化:在项目中运行
openspec init - 尝试:用
/opsx:propose创建第一个变更 - 体验:走完提案→实现→归档的完整流程
如果你已经在用 OpenSpec
- 更新:
npm install -g @fission-ai/openspec@latest - 配置:设置适合你的 Profile
- 尝试:体验新的
/opsx:propose工作流 - 优化:根据团队需求自定义 Schema
如果你想了解更多
- GitHub 仓库:https://github.com/Fission-AI/OpenSpec
- 官方文档:https://openspec.dev/
- 社区讨论:查看 GitHub Issues
记住:OpenSpec 不是束缚你工作流的枷锁,而是帮助你更好地思考和协作的工具。从简单开始,逐步探索,找到适合你的使用方式。
最重要的建议:
- 先小范围尝试,找到感觉
- 根据项目需求调整配置
- 定期回顾和优化工作流
- 与团队分享最佳实践