惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
爱范儿
爱范儿
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 叶小钗
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - Franky
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
罗磊的独立博客
博客园 - 聂微东
T
Troy Hunt's Blog
美团技术团队
IT之家
IT之家
A
Arctic Wolf
腾讯CDC
雷峰网
雷峰网
SecWiki News
SecWiki News
博客园_首页
L
LINUX DO - 最新话题
Cloudbric
Cloudbric
量子位
N
News and Events Feed by Topic
小众软件
小众软件
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cyberwarzone
Cyberwarzone
J
Java Code Geeks
V
V2EX
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
Webroot Blog
Webroot Blog
F
Fortinet All Blogs
P
Privacy International News Feed
NISL@THU
NISL@THU
Google Online Security Blog
Google Online Security Blog
WordPress大学
WordPress大学
PCI Perspectives
PCI Perspectives
GbyAI
GbyAI
宝玉的分享
宝玉的分享
阮一峰的网络日志
阮一峰的网络日志
S
Secure Thoughts
Simon Willison's Weblog
Simon Willison's Weblog
P
Palo Alto Networks Blog
V
Visual Studio Blog

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
OpenSpec:让 AI 编程助手先对齐需求,再写代码
微信公众号 · 2026-05-19 · via 陈少文的网站

1. OpenSpec 是什么

OpenSpec 是一个开源的、轻量级 AI 辅助规格驱动开发框架。它用 Markdown 文件存规格与变更,用 Slash 命令(如 /opsx:propose/opsx:apply)驱动 AI 助手,用 CLI 管理状态、验证格式、归档变更。

简单说,它把「聊出来的需求」变成「可追踪、可迭代、可归档的契约」——写代码前先对齐,实现中随时修正,完成后把变更沉淀为系统行为的真相来源。

支持 Cursor、Claude Code、GitHub Copilot、Codex、Windsurf 等 25+ 种 AI 编程工具。

2. 为什么需要它

AI 编程助手已经很强,但常见体验是:

  • 对话里描述需求,AI 立刻写代码
  • 实现到一半发现理解偏差,不得不大改
  • 上下文被历史对话占满,关键约束被遗忘
  • 多个功能并行,需求散落在聊天记录里,无法 review

根本原因是:需求只存在于聊天历史,没有结构化的「规格层」。

OpenSpec 解决的就是这个问题——在写代码之前,人和 AI 先就「要做什么」达成一致;写代码之后,把变更归档,让规格持续更新。

3. 核心设计哲学

OpenSpec 的四个原则:

原则含义
fluid not rigid灵活而非僵化,没有阶段门禁
iterative not waterfall迭代而非瀑布,边做边学,随时修正
easy not complex简单而非复杂,秒级初始化,最小仪式
brownfield-first存量优先,为改造现有系统而生

传统规格系统锁死在「先规划、再实现、然后结束」的阶段里。OpenSpec 允许你在任何时刻创建、修改任意 Artifact,实现中发现设计有问题,直接改 design.md 然后继续 /opsx:apply

大多数软件工作不是从零搭建,而是修改现有系统。OpenSpec 的 Delta Spec(增量规格) 机制,让你只描述「变了什么」,而不是重写整份规格。

4. 目录结构

OpenSpec 在项目里创建 openspec/ 目录:

openspec/
├── specs/              # 真相来源——系统当前的行为规格
│   └── <domain>/
│       └── spec.md
├── changes/            # 进行中的变更——每个功能一个文件夹
│   └── <change-name>/
│       ├── proposal.md
│       ├── design.md
│       ├── tasks.md
│       └── specs/      # Delta 规格
│           └── <domain>/
│               └── spec.md
└── config.yaml         # 项目配置(可选)
  • Specs 描述系统当前如何工作
  • Changes 描述系统将要如何改变

这种分离带来三个好处:多个 Change 可并行开发;Review 时 proposal、design、delta specs 一目了然;归档后 Change 移入 changes/archive/,保留完整决策上下文。

5. OPSX 工作流

OpenSpec 的标准工作流叫 OPSX(OpenSpec eXtended workflow),替代了早期的 Legacy 工作流(/openspec:proposal 等)。

维度Legacy 工作流OPSX 工作流
结构一份大 Proposal 文档离散的 Artifacts + 依赖图
流程线性阶段:规划 → 实现 → 归档流体动作,随时可做任何事
迭代难以回退修改随时更新任意 Artifact
定制固定结构Schema 驱动,YAML 定义工作流

Artifact 依赖关系:

proposal(根节点)
    ├── specs(requires: proposal)
    └── design(requires: proposal)
            └── tasks(requires: specs, design)

specsdesign 可以并行创建;tasks 需要两者完成后才能创建——但不需要技术设计时可以跳过 design

5.1 两种使用模式

默认快捷路径(core profile):

/opsx:propose → /opsx:apply → /opsx:sync → /opsx:archive

一条命令创建所有规划 Artifacts,适合大多数场景。

扩展工作流:

1
2
openspec config profile   # 选择 expanded 工作流
openspec update             # 刷新 AI 指令
/opsx:new → /opsx:ff 或 /opsx:continue → /opsx:apply → /opsx:verify → /opsx:archive
  • /opsx:new — 只创建 Change 脚手架
  • /opsx:continue — 逐个创建 Artifact
  • /opsx:ff — 快进,一次性创建所有规划 Artifacts
  • /opsx:verify — 验证实现是否符合规格

6. 快速上手

6.1 环境要求

  • Node.js 20.19.0 或更高版本
  • 任意支持的 AI 编程工具(Cursor、Claude Code 等)

6.2 安装与初始化

1
2
3
4
5
6
7
npm install -g @fission-ai/openspec@latest

cd your-project
openspec init

# 只配置特定工具
openspec init --tools cursor,claude

初始化后会生成 openspec/ 目录,以及 AI 工具的 Skills 和 Commands 文件(如 .cursor/skills/.cursor/commands/)。

6.3 第一个 Change

在 AI 对话中:

/opsx:propose add-user-profile-page

AI 会创建 openspec/changes/add-user-profile-page/,生成 proposal、specs、design、tasks 四个 Artifact。

然后依次执行:

/opsx:apply      # 按 tasks.md 逐项实现
/opsx:archive    # Delta Specs 合并入主 Specs,Change 移入 archive

7. 实战示例:添加深色模式

7.1 提议变更

You: /opsx:propose add-dark-mode

AI:  Created openspec/changes/add-dark-mode/
     ✓ proposal.md — 为什么做、改什么
     ✓ specs/       — 需求与场景
     ✓ design.md    — 技术方案
     ✓ tasks.md     — 实现清单

proposal.md 回答意图、范围、方案:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Proposal: Add Dark Mode

## Intent
用户反馈需要深色模式,减少夜间使用的视觉疲劳。

## Scope
- 设置页添加主题切换
- 支持系统偏好检测
- 偏好持久化到 localStorage

Out of scope:
- 自定义配色主题(后续迭代)

## Approach
使用 CSS 自定义属性做主题,React Context 管理状态。

specs/ui/spec.md 是 Delta 规格:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
## ADDED Requirements

### Requirement: Theme Selection
The system SHALL allow users to choose between light and dark themes.

#### Scenario: Manual toggle
- GIVEN a user on any page
- WHEN the user clicks the theme toggle
- THEN the theme switches immediately
- AND the preference persists across sessions

tasks.md 是实现清单:

1
2
3
4
5
6
7
8
## 1. Theme Infrastructure
- [ ] 1.1 Create ThemeContext with light/dark state
- [ ] 1.2 Add CSS custom properties for colors
- [ ] 1.3 Implement localStorage persistence

## 2. UI Components
- [ ] 2.1 Create ThemeToggle component
- [ ] 2.2 Add toggle to settings page

7.2 实现与归档

You: /opsx:apply
AI:  Working through tasks... All tasks complete!

You: /opsx:archive
AI:  ✓ Merged specs into openspec/specs/ui/spec.md
     ✓ Moved to openspec/changes/archive/2025-01-24-add-dark-mode/

实现过程中如果发现设计需要调整——比如改用 Tailwind 的 dark: 前缀——直接编辑 design.md,然后继续 /opsx:apply。这就是 OPSX「流体动作」的核心价值。

8. Delta Spec

Delta Spec 是 OpenSpec 最关键的概念,也是「brownfield-first」哲学的技术体现。它用三个章节描述变更类型:

1
2
3
4
5
6
7
8
## ADDED Requirements
(新增的行为——归档时追加到主 Spec)

## MODIFIED Requirements
(修改的行为——归档时替换原有 Requirement)

## REMOVED Requirements
(废弃的行为——归档时从主 Spec 删除)
优势说明
清晰一眼看出改了什么
避免冲突两个 Change 可修改同一 Spec 的不同 Requirement
Review 高效Reviewer 只看变更部分
存量友好修改现有行为成为一等公民

归档时,Change 里的 Delta Spec 合并入主 Spec,完整 Change 上下文保留在 changes/archive/

9. Artifact 说明

每个 Change 包含四类 Artifact:

proposal → specs → design → tasks → implement
   │          │         │         │
  为什么      改什么     怎么做     具体步骤
 + 范围     (Delta)   (技术决策)  (Checkbox 清单)
 + 方案

9.1 Proposal — 意图与范围

回答:Intent(解决什么问题)、Scope(什么在范围内/外)、Approach(大致怎么解决)。

9.2 Specs — 行为契约

Spec 描述可观察的行为,不是实现细节。

应该写进 Spec 的:用户或下游系统依赖的可观察行为、输入输出错误条件、安全/隐私/可靠性约束、可测试的场景(Given/When/Then)。

不应该写进 Spec 的:内部类名/函数名、库或框架选型、逐步实现计划(这些属于 design.mdtasks.md)。

快速判断:实现方式变了但外部可见行为不变,就不属于 Spec。

9.3 Design — 技术方案

记录架构决策、数据流、文件变更计划,ADR 风格:

1
2
3
4
5
### Decision: Context over Redux
Using React Context for theme state because:
- Simple binary state (light/dark)
- No complex state transitions
- Avoids adding Redux dependency

9.4 Tasks — 实现清单

带 checkbox 的具体步骤,按层级编号(1.1、1.2、2.1…),每组任务控制在一次会话可完成的粒度。

10. Slash 命令速查

命令作用适用场景
/opsx:explore探索想法,调查问题,澄清需求需求不明确时
/opsx:propose创建 Change 并生成所有规划 Artifacts默认快捷路径
/opsx:new只创建 Change 脚手架扩展工作流
/opsx:continue创建下一个 Artifact逐步构建
/opsx:ff快进,一次性创建所有规划 Artifacts需求清晰时
/opsx:apply按 tasks.md 实现,勾选 checkbox开始写代码
/opsx:verify验证实现是否符合 Spec实现完成后
/opsx:sync同步 Delta Specs 到主 Specs可选步骤
/opsx:archive归档 Change,合并 Specs功能完成
/opsx:bulk-archive批量归档多个 Change扩展工作流
/opsx:onboard端到端 Change 的引导教程新手入门

何时更新现有 Change vs 创建新 Change

情况更新现有创建新 Change
同一意图,执行细节调整
范围缩小(MVP 先行)
实现中发现设计需微调
意图根本性改变
范围膨胀到几乎是不同工作
原 Change 可标记完成,新工作独立存在

原则:更新保留上下文,新建提供清晰度——同一功能持续 commit, genuinely 新功能开新分支。

11. CLI 常用命令

1
2
3
4
5
6
7
8
9
openspec list                              # 查看进行中的 Changes
openspec show add-dark-mode                # 查看 Change 详情
openspec validate add-dark-mode            # 验证 Spec 格式
openspec status --change add-dark-mode --json  # JSON 状态(供 AI 查询)
openspec view                              # 交互式 Dashboard
openspec schemas                           # 列出可用 Schema
openspec schema init my-workflow           # 创建自定义 Schema
openspec schema fork spec-driven my-workflow
openspec update                            # 升级后刷新 AI 指令

升级 OpenSpec:

1
2
npm install -g @fission-ai/openspec@latest
cd your-project && openspec update

12. 与同类方案对比

12.1 vs. GitHub Spec Kit

Spec Kit 功能全面但较重:严格阶段门禁、大量 Markdown 模板、需要 Python 环境。OpenSpec 更轻:秒级初始化,没有阶段锁定,随时迭代。

12.2 vs. AWS Kiro

Kiro 规格能力强大,但锁定在 Kiro IDE 内、主要支持 Claude 模型。OpenSpec 更开放:支持 25+ AI 工具,用你已有的工具链。

12.3 vs. 什么都不做

没有规格层的 AI 编程:模糊需求 → 不可预测结果;上下文污染 → 关键约束被遗忘;无法 Review → 变更散落在聊天历史。OpenSpec 在可预测性和轻量之间取得平衡。

13. 自定义工作流

13.1 项目配置(config.yaml)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# openspec/config.yaml
schema: spec-driven

context: |
  Tech stack: TypeScript, React, Node.js
  API conventions: RESTful, JSON responses
  Testing: Vitest for unit tests, Playwright for e2e  

rules:
  proposal:
    - Include rollback plan
  specs:
    - Use Given/When/Then format for scenarios
  design:
    - Include sequence diagrams for complex flows
  • context 注入到所有 Artifact 的 AI 指令中
  • rules 按 Artifact 类型注入额外规则
  • Schema 优先级:CLI flag > Change 元数据 > config.yaml > 默认

13.2 自定义 Schema

默认的 proposal → specs → design → tasks 不适合你的团队时,可以创建自定义 Schema:

1
2
openspec schema init research-first
openspec schema fork spec-driven research-first

示例「先调研再提案」工作流:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# openspec/schemas/research-first/schema.yaml
name: research-first
artifacts:
  - id: research
    generates: research.md
    requires: []
  - id: proposal
    generates: proposal.md
    requires: [research]
  - id: tasks
    generates: tasks.md
    requires: [proposal]

依赖图:research → proposal → tasks(跳过 specs 和 design)。

13.3 多仓库协作(Workspace Beta)

工作跨越多个 Repo 或 Monorepo 多个目录时,OpenSpec 提供 Workspace 能力:

1
2
3
4
5
6
openspec workspace setup
openspec workspace setup --no-interactive --name platform \
  --link /repos/api --link web=/repos/web
openspec workspace list
openspec workspace open platform --agent github-copilot
openspec workspace doctor

Workspace 是本地协调面,每个 Repo 的 openspec/ 仍是 Specs 和 Changes 的家。实现和归档仍在各自 Repo 中进行。

14. 使用建议

14.1 模型与上下文

OpenSpec 在高推理能力模型上效果最好(如 Codex 5.5、Opus 4.7 等)。开始实现前清空上下文窗口——Artifact 文件本身就是结构化上下文,不需要把全部聊天历史塞进窗口。

14.2 规格严格度

OpenSpec 反对过度文档化,根据风险选择深度:

Lite Spec(默认,大多数 Change): 简短的行为优先需求、清晰范围和非目标、几个验收检查。

Full Spec(高风险 Change): 跨团队/跨 Repo 变更、API/合约变更、迁移、安全/隐私相关、歧义可能导致昂贵返工的场景。

14.3 工作流选择

场景推荐工作流
需求清晰的小功能/opsx:propose/opsx:apply/opsx:archive
需求不明确/opsx:explore/opsx:propose → …
需要细粒度控制启用 expanded profile,用 /opsx:new + /opsx:continue
多个 Change 并行每个 Change 独立文件夹,用 openspec list 管理
团队定制流程创建自定义 Schema

15. 常见问题

Q: OpenSpec 会增加多少文档负担?

A: 目标是「最小必要规格」。大多数 Change 用 Lite Spec 即可——几个 Requirement + Scenario,加上 tasks 清单。AI 会帮你生成初稿,你只需要 review 和修正。

Q: 必须用 OpenSpec 才能用 AI 编程吗?

A: 不是。OpenSpec 是可选的结构化层。但如果你经历过「AI 理解偏差导致返工」的痛苦,这层结构的投资回报率很高。

Q: 现有项目怎么接入?

A: 直接在现有项目根目录运行 openspec init,不需要重构代码。先从下一个新功能开始用,逐步积累 Specs。

Q: Spec 和测试是什么关系?

A: Spec 中的 Scenario 应该是可测试的——你可以(也应该)为 Scenario 写自动化测试。Spec 是行为契约,测试是契约的验证。

Q: 支持哪些 AI 工具?

A: 25+ 工具,包括 Cursor、Claude Code、GitHub Copilot、Codex、Windsurf、Cline、Gemini CLI、Amazon Q 等。完整列表见 Supported Tools 文档

16. 小结

OpenSpec 的核心价值:在 AI 写代码之前先对齐,写代码之后把变更沉淀为系统规格。

完整工作循环:

1. Specs 描述当前行为
2. Changes 提议修改(Delta Specs)
3. /opsx:apply 实现变更
4. /opsx:archive 合并 Delta,更新 Specs
5. Specs 描述新行为
6. 下一个 Change 基于更新后的 Specs 继续

如果你正在用 AI 编程助手做严肃的项目开发,OpenSpec 值得一试。初始化只需几秒钟,第一个 Change 从 /opsx:propose 开始。