OpenSpec是海外很火的一个规范化和自动化工作流程系统,会在先代码前,先跟用户明确需求,并且有较强的规范约束能力,让写出的代码更符合用户需求。目前支持大部分常用的 vibecoding 工具

使用说明

针对v1.x 版本的使用说明

使用各种 vibecoding 工具打开对应的工程后,再命令台中执行 openspec init 后,和 ai 对话接入下面的命令

安装

# 原版 @fission-ai/openspec 或汉化版 @studyzy/openspec-cn
npm install -g @fission-ai/openspec@latest

初始化

openspec init

初始化是指当前项目(新老项目)第一次进入时,执行会生成 openspec 对应的格式文件目录

如果没有生成对应的 openspec/project.md 文件则需手动创建(项目上下文(技术栈、规范、业务背景))

案例:

你是一个资深 Java 架构师,请帮我生成一个“企业级可落地”的 Spring Boot 单体 Web 项目初始化模板(具备未来演进为微服务的能力),要求结构清晰、规范统一、扩展性强、可直接用于公司项目脚手架。
​
---
​
# 一、基础技术栈(必须严格遵守)
​
* Spring Boot 3.x
​
* Spring Web MVC
​
* Spring AOP
​
* Spring Validation(Hibernate Validator)
​
* MyBatis-Plus(ORM)
​
* Redis(必须用于分布式能力)
​
* Lombok
​
* Hutool(工具类统一依赖)
​
* Jackson
​
* Logback
​
* springdoc-openapi(Swagger)
​
* JDK:17+
​
* 构建工具:Maven
​
---
​
# 二、架构设计(企业级要求)
​
采用“增强版分层架构 + 领域隔离设计”:
​
com.example.project(模块名称project)
├── infrastructure        # 基础设施层(Redis、DB、第三方)
├── domain                # 领域层(Entity / 领域服务)
├── application           # 应用层(Service 编排)
├── interfaces            # 接口层(Controller)
├── common
│   ├── response          # 统一响应
│   ├── exception         # 异常体系
│   ├── enums             # 枚举
│   ├── utils             # 工具类(基于 Hutool)
│   ├── constant          # 常量
│   ├── aspect            # AOP(防抖、日志、限流)
│   ├── config            # 全局配置
│   ├── annotation        # 自定义注解
│   └── trace             # traceId 追踪
└── Application.java
com.example.project.api(模块名称project-api)
​
要求:
​
* 明确职责边界
* 禁止 controller 直接操作 mapper
* 为未来微服务拆分预留空间
* project为对应的具体功能,project-api为对外提供的包;如本模块有些对外提供的接口的出入参对象可以定义在这个 project-api 中,其他服务调用这个服务的接口不用写重复代码,引入 project-api 包即可
​
---
​
# 三、核心功能(必须完整实现)
​
## 1. 统一响应结构 Result<T>
​
* 字段:code / message / data / traceId / timestamp
* 支持链式调用
* 提供 success / fail 方法
​
---
​
## 2. 全局异常处理器
​
* 使用 @RestControllerAdvice
* 必须处理:
​
  * BusinessException
  * 参数校验异常
  * 系统异常
* 返回统一结构
​
---
​
## 3. 异常体系
​
* BaseException
* BusinessException
* ErrorCode 枚举(code + message + httpStatus)
​
---
​
## 4. 参数校验体系
​
* 使用 @Validated
* DTO 必须使用:
​
  * @NotNull / @NotBlank / @Size / @Pattern
* 错误信息统一处理
​
---
​
## 5. 防重复提交
​
必须实现:
​
* 注解:@NoRepeatSubmit
* 基于 Redis 分布式锁(如 SETNX + 过期时间)
* 支持:
​
  * 自定义时间窗口(默认 3 秒)通过配置可以进行调整
  * key 支持(用户ID + URI + 参数hash)
​
---
​
## 6. 日志切面(企业级)
​
必须记录:
​
* 请求 URL
* 请求方法
* 入参(可开关,默认为关,防止数据量过大影响性能)
* 返回值(可开关,默认为关,防止数据量过大影响性能)
* 执行耗时,需要定义耗时级别并且跟随打印
* jvm 内存空间打印
​
---
​
## 7. TraceId 全链路追踪
​
实现:
​
* Filter 注入 traceId(使用 Hutool UUID)
* 放入 MDC
* 每行日志最前面插入【traceId】自动输出 traceId
* 返回给前端
​
---
​
## 8. 时间格式统一(必须精确到毫秒 ❗)
​
统一配置 Jackson:
​
格式:
yyyy-MM-dd HH:mm:ss.SSS
​
要求:
​
* 全局生效
* 时区统一(Asia/Shanghai 或 UTC+8)
​
---
​
## 9. MyBatis-Plus 配置
​
必须包含:
​
* 分页插件
* 自动填充
* SQL 性能日志(dev环境)
​
---
​
## 10. 通用字段自动填充(强制规范 ❗)
​
字段必须包含:
​
* id 主键
* isDelete 逻辑删除 
* createdDate 创建时间
* lastModifiedDate 最后更新时间
* createdBy 创建人 (用户名)
* lastModifiedBy 最后更新人 (用户名)
​
要求:
​
* 使用 MetaObjectHandler 实现
* 自动填充新增 / 更新
​
---
​
## 11. 工具类规范(强制 Hutool ❗)
​
要求:
​
* 优先使用 Hutool:
​
  * DateUtil
  * StrUtil
  * BeanUtil
  * JSONUtil
  * CollUtil
* ❗禁止重复造轮子
* 只有 Hutool 没有的功能才允许自定义工具类
* 初始化定义以上 util 空类继承对应的hutool 工具类
​
---
​
## 12. 枚举体系
​
* 所有枚举实现统一接口
* 支持返回:
​
  * value
  * label
​
---
​
## 13. 跨域配置(CORS)
​
---
​
## 14. Swagger 文档(springdoc)
​
---
​
## 15. 示例模块(必须完整 CRUD)
​
生成 User 示例:
​
* UserController
* UserService
* UserServiceImpl
* UserMapper
* UserMapper.xml
* UserPO 对应表的实体
* UserQuery 对应业务的查询 (入参)
* UserVO 对应业务的出参
* UserRequest 对应业务的请求(入参)
​
---
​
# 四、企业级增强能力(必须实现)
​
## 1. 接口统一前缀
​
/api/v1
如: /api/v1/user/save 标识 user 业务的新增
​
---
​
## 2. 全局限流
​
接入sentinel
​
---
​
## 3. 响应数据脱敏
​
* 使用 AOP + 注解 @Sensitive
​
---
​
## 4. 防SQL注入基础处理
​
---
​
## 5. 多环境配置
​
* application-dev.yml
* application-prod.yml
​
---
​
## 6. 统一常量管理
​
---
​
## 7. 统一返回错误码规范
​
---
​
## 8. 可扩展设计(重要)
​
必须预留:
​
* 多租户扩展点
* 数据权限扩展点
* 插件化扩展点
​
---
​
# 五、代码质量要求(非常严格)
​
* 每个类必须有完整注释
* 不允许伪代码
* 不允许省略 import
* 必须提供完整实现类
* 命名符合企业规范
* 代码可以直接运行
​
---
​
# 六、输出要求
​
按顺序输出:
​
1. 项目结构说明
2. 核心代码(按模块分类)
3. 配置文件(application.yml + 多环境)
4. 示例接口调用
5. 架构设计说明(重点解释设计原因)
​
---
​
# 七、架构风格(关键)
​
* 参考阿里巴巴开发规范
* 面向扩展设计(开闭原则)
* 避免过度设计
* 优先保证可读性和可维护性
* 将遵循 RESTful API 规范
​
---
​
# 八、最终目标(必须达成)
​
请生成的代码满足:
​
👉 可以作为公司“项目脚手架模板”直接使用
👉 可支持中大型系统扩展
👉 具备良好的工程规范和统一标准
👉 后续可以平滑升级为微服务架构

/opsx:propose : 创建题案

会生成你所说的功能执行步骤和详细的需求场景 specs/{xxx}/spec.md 中体现

  • proposal.md - 为什么做、做什么
  • specs/{xxx}/spec.md - 需求场景详情
  • design.md - 技术方案
  • tasks.md - 实现清单

/opsx:apply : 执行题案

会根据 tasks.md 中的内容进行一步一步执行,执行完的会将 md 中的 [ ] -> [x]

/opsx:verify : 执行完毕后进行核对

用于检查代码实现是否符合规范文档的要求。它确保你的代码与规范保持一致。

/opsx:archive : 功能完成并上线后进行归档

进行当前功能的完结操作,会对openspec的项目结构调整

将之前通过 /opsx:propose : 创建题案 产生的内容进行归档

对话命令详解表

以下命令是和ai对话中接入(而非命令行指令)

命令触发节点做什么产物使用频率
/opsx:explore想法模糊,需要讨论方案AI 分析代码库,给出建议仅对话⭐⭐⭐ 中等
/opsx:propose需求明确,准备开工一步到位:创建变更 + 生成所有规划文档proposal + specs + design + tasks⭐⭐⭐⭐⭐ 高频
/opsx:new想手动逐步创建只创建变更目录,不生成内容空变更目录⭐ 低频
/opsx:continue已有变更,想补全缺失文档逐个生成下一个缺失的 artifact当前缺失的文档⭐⭐ 偶尔
/opsx:ff已有变更目录,想批量生成一次性生成所有剩余文档补全所有缺失⭐⭐ 偶尔
/opsx:apply规划文档确认后按 tasks.md 逐项实施,写代码实际代码⭐⭐⭐⭐⭐ 高频
/opsx:verifyapply 完成后验证代码是否符合 spec验证报告⭐⭐⭐ 中等
/opsx:archive功能上线后将变更归档到 specs/规范更新⭐⭐⭐ 中等

终端命令

命令用途示例
openspec init初始化项目openspec init
openspec list查看活跃变更openspec list
openspec list --specs查看已归档规范openspec list --specs
openspec show <id>查看变更详情openspec show add-user
openspec validate <id>验证规范格式openspec validate add-user
openspec archive <id>归档变更openspec archive add-user
openspec update更新 AI 命令文件openspec update
openspec --version查看版本openspec --version
openspec view在终端中显示项目的规范和变更概览openspec view

openspec结构说明

your-project/
├── openspec/                          # OpenSpec 核心目录
│   ├── project.md                     # 项目上下文(技术栈、规范、业务背景)
│   ├── AGENTS.md                      # AI 工作流说明书
│   ├── config.yaml                    # OpenSpec 配置文件(可选)
│   ├── specs/                         # 已归档规范(真理之源)
│   │   ├── user/                      # 用户模块规范
│   │   │   └── spec.md                # 用户功能规范
│   │   ├── auth/                      # 认证模块规范
│   │   │   └── spec.md                # 认证功能规范
│   │   └── ...                        # 其他模块
│   └── changes/                       # 活跃的变更提案
│       ├── add-user-registration/     # 变更1:用户注册
│       │   ├── proposal.md            # 提案说明(为什么、做什么)
│       │   ├── design.md              # 技术设计方案
│       │   ├── tasks.md               # 实现任务清单
│       │   └── specs/                 # 增量规范
│       │       └── user/
│       │           └── spec.md        # 用户注册的规范增量
│       ├── add-jwt-auth/              # 变更2:JWT认证
│       │   ├── proposal.md
│       │   ├── design.md
│       │   ├── tasks.md
│       │   └── specs/
│       │       └── auth/
│       │           └── spec.md
│       └── archive/                   # 已归档的变更
│           ├── 2024-01-15-add-login/
│           └── 2024-01-20-add-profile/
│
└── .trae/                             # Trae IDE 配置目录
    └── skills/                        # AI 技能文件(OpenSpec 命令)
        ├── opsx-propose.md            # /opsx:propose 命令定义
        ├── opsx-apply.md              # /opsx:apply 命令定义
        ├── opsx-archive.md            # /opsx:archive 命令定义
        ├── opsx-verify.md             # /opsx:verify 命令定义
        ├── opsx-explore.md            # /opsx:explore 命令定义
        ├── opsx-new.md                # /opsx:new 命令定义
        ├── opsx-continue.md           # /opsx:continue 命令定义
        ├── opsx-ff.md                 # /opsx:ff 命令定义
        └── opsx-task.md               # /opsx:task 命令定义(可能)

openspec配置说明

# openspec/config.yaml
​
# 规范存储配置
specs:
  # 规范文件存储路径(相对于项目根目录)
  path: ./openspec/specs
  
  # 规范文件命名规则
  naming: "{module}.spec.md"
  
  # 是否强制使用特定的规范格式
  enforce_format: true
​
# 变更管理配置
changes:
  # 变更目录路径
  path: ./openspec/changes
  
  # 变更目录命名规则
  naming: "{date}-{name}"
  
  # 归档配置
  archive:
    # 归档路径
    path: ./openspec/changes/archive
    
    # 归档文件前缀(如:2024-)
    prefix: ""
    
    # 归档后是否删除原目录
    delete_after_archive: false
    
    # 归档后是否创建 Git tag
    create_git_tag: false
​
# 验证配置
validation:
  # 严格模式:强制要求所有字段完整
  strict: true
  
  # 是否要求 tasks.md 文件存在
  require_tasks: true
  
  # 是否要求 design.md 文件存在(复杂变更)
  require_design: false
  
  # 规范格式验证级别(error/warning/ignore)
  spec_format_level: error
  
  # 自定义验证规则
  custom_rules:
    - "所有 Requirement 必须包含至少一个 Scenario"
    - "每个 Scenario 必须包含 GIVEN/WHEN/THEN"
​
# 模板配置
templates:
  # 提案模板(可自定义)
  proposal: |
    # Proposal: {name}
    
    ## Why
    {why}
    
    ## What Changes
    {what}
    
    ## Impact
    {impact}
  
  # 设计模板
  design: |
    # Design: {name}
    
    ## Architecture
    {architecture}
    
    ## Database Changes
    {database}
    
    ## API Changes
    {api}
  
  # 任务模板
  tasks: |
    # Tasks: {name}
    
    ## Implementation
    - [ ] {task1}
    - [ ] {task2}
  
  # 规范模板
  spec: |
    # {module}
    
    ## Requirement: {name}
    {description}
    
    #### Scenario: {scenario}
    - GIVEN {given}
    - WHEN {when}
    - THEN {then}
​
# AI 集成配置
ai:
  # 使用的 AI 工具(auto/cursor/claude/copilot)
  tool: auto
  
  # 生成代码时使用的语言
  language: zh-CN
  
  # 自动读取上下文文件
  auto_context:
    - openspec/project.md
    - openspec/specs/**/*.md
​
# Git 集成配置
git:
  # 归档时自动提交
  auto_commit_on_archive: true
  
  # 提交信息模板
  commit_template: "docs: archive change {name}"
  
  # 是否在变更时创建分支
  auto_branch: false
​
# 日志配置
logging:
  # 日志级别(debug/info/warn/error)
  level: info
  
  # 日志输出文件
  file: ./openspec/logs/openspec.log

老项目接入openspec的痛点

1 主要痛点

痛点严重程度说明解决方案
缺少规范文档🔴 高现有代码没有规范记录渐进式补充规范
代码与规范不一致🔴 高重构时可能出现不一致先写规范再改代码
技术栈混乱🟡 中多种框架混用在 project.md 中明确标准
命名不统一🟡 中各种命名风格混用定义规范,逐步重构
历史债务🔴 高想改不敢改从新功能开始,逐步覆盖
团队习惯🔴 高开发人员不习惯写规范培训 + 工具强制
规范维护成本🟡 中已有代码需要补充规范按优先级,不要一次做完

2 老项目接入的真实困境

困境 1: 先有鸡还是先有蛋?
┌─────────────────────────────────────────┐
│ 规范派:先写规范再改代码                 │
│ 代码派:代码已经在那了,规范应该匹配代码 │
│ 结果:陷入"规范应该反映代码"的争论       │
└─────────────────────────────────────────┘
​
困境 2: 规范补充的工作量
┌─────────────────────────────────────────┐
│ 10 万行代码 + 50 个模块                 │
│ 补充所有规范 = 2-3 人月                 │
│ 团队:没时间!                          │
└─────────────────────────────────────────┘
​
困境 3: 规范与代码不一致
┌─────────────────────────────────────────┐
│ 规范说:密码用 BCrypt                    │
│ 代码实际:MD5                           │
│ 问:改规范还是改代码?                   │
│ 答:改代码需要重构,风险大               │
│     改规范失去规范意义                   │
└─────────────────────────────────────────┘

老项目接入的实用策略

1 核心原则:渐进式接入,不追求完美

策略对比:
❌ 错误策略:一次性补充所有规范
   → 工作量巨大,团队抵触,容易失败
​
✅ 正确策略:从当前开始,逐步覆盖
   → 新功能强制规范,旧功能逐步补充

2 分阶段接入计划

## Phase 1: 建立基础(1-2 天)
- [ ] openspec init
- [ ] 填写 project.md(技术栈、架构)
- [ ] 团队培训(1 小时)
- [ ] 配置 CI/CD 验证
​
## Phase 2: 新功能规范(持续)
- [ ] 所有新功能使用 OpenSpec
- [ ] 新代码 100% 符合规范
- [ ] 建立规范审阅流程
​
## Phase 3: 核心模块补充(2-4 周)
- [ ] 用户模块补充规范
- [ ] 订单模块补充规范
- [ ] 支付模块补充规范
- [ ] 每个规范补充后验证一致性
​
## Phase 4: 重构时补充(持续)
- [ ] 每次重构前先写规范
- [ ] 重构后验证规范
- [ ] 规范驱动重构
​
## Phase 5: 形成规范体系(3-6 个月)
- [ ] 规范覆盖率 > 70%
- [ ] 团队习惯形成
- [ ] 规范成为开发流程一部分

3 优先级策略

## P0 - 立即补充(核心业务)
- 用户认证模块(安全相关)
- 订单支付模块(资金相关)
- 核心 API(对外接口)
​
## P1 - 近期补充(高频变更)
- 促销活动模块
- 推荐算法模块
- 数据统计模块
​
## P2 - 有时间补充(稳定模块)
- 后台管理模块
- 日志监控模块
​
## P3 - 暂不补充(边缘功能)
- 工具类
- 配置类
- 已计划废弃的功能

4 处理代码与规范不一致的策略

## 策略 1:规范反映现状(推荐)
- 基于现有代码编写规范
- 规范 = 当前实现
- 目的:记录现状,便于后续重构
​
## 策略 2:规范定义目标(有风险)
- 定义理想的实现方式
- 代码需要重构
- 适用于:安全漏洞、架构问题
​
## 策略 3:混合策略(最实用)
- 核心安全功能:规范定义目标,推动重构
- 一般功能:规范反映现状
- 新功能:规范先行

老项目接入实战案例

案例:电商平台接入 OpenSpec

项目背景:

- 代码量:50 万行
- 服务数:12 个微服务
- 团队:15 人
- 历史:5 年
- 痛点:文档缺失,新人上手慢,技术债严重

接入过程:

# Week 1-2: 准备阶段
1. openspec init(每个服务单独初始化)
2. 填写各服务的 project.md
3. 团队培训(2 次,共 3 小时)
4. 确定优先级:用户服务 → 订单服务 → 支付服务
​
# Week 3-4: 用户服务规范补充
1. 分析现有用户服务代码
2. 编写用户模块规范(基于现状)
3. 发现安全漏洞(密码 MD5)
4. 创建提案:重构密码加密为 BCrypt
5. 实施重构,验证规范
​
# Week 5-6: 订单服务规范补充
1. 编写订单模块规范
2. 发现状态机混乱
3. 创建提案:规范化订单状态机
4. 逐步重构
​
# Week 7-8: 新功能规范
1. 添加优惠券功能(新功能)
2. 使用 OpenSpec 规范开发
3. 验证通过后归档
​
# 3 个月后:
- 核心模块规范覆盖率:60%
- 新功能 100% 使用 OpenSpec
- 团队习惯逐步形成
- Bug 率下降 30%