当前位置: 首页 > news >正文

OpenSpec详解

一、OpenSpec 目录结构概览

openspec init 命令会在项目根目录下创建以下标准化的目录结构

项目根目录/
├── openspec/
│   ├── specs/               # [核心] 项目的“宪法”,存放所有已实现功能的最终规范
│   ├── changes/             # [核心] 存放所有进行中的变更提案
│   │   └── archive/         # 已完成变更的“档案馆”
│   ├── config.yaml          # 项目级配置文件,定义全局规则和技术栈
│   └── schemas/             # (可选)自定义工作流模式,满足特定项目需求

二、核心目录详解:项目的“三部曲”

这套目录结构遵循“提案-实施-归档”的核心理念,通过物理路径的分离,实现了开发过程的清晰化。

  • openspec/specs/:项目的“宪法”与唯一真相

    • 内容:存放所有已部署、已实现功能的最终规范(spec.md 文件)。这是系统的“Source of Truth”,描述了代码应该表现出的最终行为。

    • 如何形成:它由已完成并通过审核的变更提案,在归档时“合并”而来。

    • 意义:它是项目行为的权威来源,是所有开发者(包括 AI)理解和构建系统的最高准则。这里只记录最终的结果,不记录实现过程。

  • openspec/changes/:进行中的“工作计划”

    • 内容:存放所有正在进行或待审核的变更提案。每一个功能开发或重大修改,都在这里有一个独立的子目录。

    • 意义:这是团队的“工作台”。它将“正在讨论的”和“已经确定的”内容物理隔离,避免了混乱。

  • openspec/changes/archive/:项目的“历史档案”

    • 内容:存放所有已归档的变更提案。

    • 意义:这是项目的完整演进历史。当你想回顾一个功能是如何一步步设计和实现出来的,可以来这里查阅。

  • openspec/config.yaml:项目的“统一上下文”

    • 内容:定义项目的全局配置,如默认工作流模式、技术栈(context)以及针对特定工件的规则(rules)。

    • 意义:它为 AI 提供了统一的项目背景知识,确保所有 AI 生成的工件都符合项目约定。这是实现“团队规范”的关键。

三、关键文件详解:一个变更的“生命线”

一个完整的变更,其核心文件都存放在 changes/<change-id>/ 目录下,它们共同构成了一条完整的“生命线”。

文件作用(回答什么问题?)使用时机
proposal.md “为什么做”:阐述变更的背景、动机、目标和影响范围。 提案阶段:在开始任何实质性工作前,必须先创建此文件以明确价值。
specs/<capability>/spec.md “做什么”:以 GIVEN/WHEN/THEN 的格式,定义具体的、可测试的功能需求。这是“增量规范”,只描述本次变更新增或修改的部分。 提案阶段:在提案获批后,将模糊的需求转化为精确的规范。
design.md “怎么做”:记录技术选型、架构决策和实现方案。 提案阶段(可选):仅当变更涉及复杂决策、跨模块协作或新架构引入时才需要创建。
tasks.md “分几步做”:一个包含复选框的实施清单,将开发工作拆解为可追踪的小任务- 提案阶段:在设计和规范明确后,将工作分解成具体的执行步骤。
.openspec.yaml 变更的“身份证”:记录变更的元数据,如其使用的工作流模式(schema)和创建时间戳。 初始化阶段:在运行 /opsx:new 创建变更目录时自动生成,无需手动编辑。

四、 文件的生命周期与工作流

这些文件并非一次性生成,而是在 OpenSpec 的三阶段工作流中动态演进的。

  1. 阶段一:创建变更提案 (Planning)

    • 用户动作:在 Claude Code 中运行 /opsx:propose <change-id>

    • AI 行为:AI 助手会根据你的需求,自动生成 proposal.mdtasks.md 以及 specs/ 目录下的增量规范文件design.md 仅在需要时由 AI 生成。

    • 此时的意义:这个目录是一个“设计草案”,是团队(你和 AI)进行评审和迭代的对象。所有决策和计划都在这里被文档化,作为后续实施的唯一依据。

  2. 阶段二:实施变更 (Implementation)

    • 用户动作:在提案审核通过后,运行 /opsx:apply(在未禁用的配置下)或交给 Superpowers 执行。

    • AI 行为:AI 会读取 tasks.md 中的任务清单,并按顺序逐一实现。每完成一个任务,AI 应自动将 tasks.md 中对应的复选框从 - [ ] 更新为 - [x]

    • 此时的意义tasks.md 变成了一个实时的进度看板,你可以随时查看开发进展。specs/ 下的增量规范则成为了 AI 的“验收标准”,其开发过程会持续对照规范以确保不偏离。

  3. 阶段三:归档变更 (Archiving)

    • 用户动作:当所有任务完成且代码验证通过后,运行 /opsx:archive <change-id>

    • AI 行为:OpenSpec 会将 changes/<change-id>/specs/ 中的增量规范“合并” 到 specs/ 主目录中,更新项目的“宪法”。同时,整个 changes/<change-id>/ 目录会被移动到 changes/archive/ 下。

    • 此时的意义:此次变更的成果被正式纳入项目规范,成为了项目历史的一部分。这个闭环保证了 specs/ 始终与代码实现保持同步,实现了“代码即规范”的理想状态。

五、openspec常用命令使用详解

命令参数要求语法核心功能使用示例
/opsx:explore 可选 /opsx:explore [topic] 需求梳理:在创建正式变更前,用于头脑风暴、调研技术方案或澄清需求。这是一个低成本的探索阶段,不会生成任何文件。 /opsx:explore
/opsx:explore “如何设计用户认证的JWT刷新机制?”
/opsx:propose 可选 /opsx:propose [change-name-or-description] 生成提案:这是最核心的命令,它会一步到位地创建变更目录并生成所有必需的规划文件。 /opsx:propose
/opsx:propose add-user-auth
/opsx:propose “为用户模块增加JWT认证”
/opsx:verify 必须 /opsx:verify [change-id] 验证实现:在代码编写完成后,检查你的实现是否与 proposal.mdtasks.md 等规划文件的要求一致。 /opsx:verify add-user-auth
/opsx:archive 必须 /opsx:archive [change-id] 归档变更:当一个变更的开发、验证全部完成后,执行此命令将其标记为已完成。它会将增量规范合并到主规范库中,并将整个变更目录移入归档。 /opsx:archive add-user-auth

简单来说,这几个命令的差异在于:

    • /opsx:explore 和 /opsx:propose 属于规划阶段的命令,非常灵活,AI 会根据你的自然语言描述来工作,因此 change-id 不是必需的。

    • /opsx:verify 和 /opsx:archive 属于收尾阶段的命令,操作对象是已经存在的变更,因此必须通过 change-id 来精确指定要操作的目标。

 

http://www.jsqmd.com/news/688960/

相关文章:

  • AMD Ryzen处理器深度调试:SMUDebugTool专业使用实战指南
  • 四月二十三晚上
  • 避开这些坑!STM32 UDS Bootloader开发中关于诊断服务、安全访问和DID的5个实战经验
  • Jetson NX上实现5米高ArUco码动态定位
  • 别再只盯着Lloyd-Max了!聊聊数据压缩里,均匀量化器为何是熵编码的‘最佳拍档’
  • 苹果新CEO特努斯:乔布斯与库克的「混合体」,能否带领苹果在AI时代突围?
  • KAIST 提出 MTL:让编程智能体跨领域“搬运“记忆,而非困守单一任务孤岛
  • 2026蜘蛛吊机行业风向解析:中高端市场占有率TOP1厂家权威推荐 - 深度智识库
  • 别再死记硬背摇杆了!用游戏手柄思维理解FPV无人机六自由度操控(附Freerider练习地图)
  • Java程序报PKIX path building failed?保姆级JDK证书库更新指南(含Linux/Windows双平台)
  • 如何高效使用Kemono批量下载工具:WinUI3界面配置完整指南
  • 新手做AI封面设计必踩的2个陷阱!大多数人因此点击率暴跌
  • 线上Java应用出Bug了?试试阿里开源的JVM-Sandbox,不重启就能动态插桩排查
  • 告别拼音!手把手教你魔改Lua 5.4.3源码,让解释器彻底拥抱中文变量和函数名
  • 上海交通大学LaTeX论文模板:告别格式焦虑的学术写作终极指南
  • TMC5160堵转检测与节能实战:基于STM32的StallGuard2和CoolStep功能调试记录
  • 华为云IoT设备模拟与调试实战:不用真硬件,用MQTTx+虚拟设备玩转数据上下行
  • BetterNCM插件管理器终极指南:3分钟解锁网易云音乐隐藏功能
  • Rust的匹配中的模式覆盖检查与编译器警告在代码维护中的辅助作用
  • Arduino IDE完整教程:为什么这个免费开源平台是电子开发的终极选择
  • 2026年3月摩擦系数仪实力厂家推荐,检测仪/测量仪/摩擦系数仪/热封仪/扭矩仪/测试仪,摩擦系数仪制造企业口碑推荐 - 品牌推荐师
  • 从‘虚短虚断’到稳定输出:一个故事讲清运放负反馈的电压串联与电流并联怎么选
  • 终极指南:如何为SmokePing网络监控系统开发自定义插件
  • Cursor Pro试用限制的技术分析与基于机器标识重置的绕过方案
  • NS模拟器管理自动化革命:告别繁琐配置,拥抱智能运维
  • 实战分享:我把公司项目的测试数据库做成了Docker镜像,团队协作效率翻倍
  • LabVIEW串口通信保姆级教程:从虚拟串口配置到数据收发实战(附XCOM调试技巧)
  • Java内存入门讲解:从变量和对象开始
  • 字符串匹配的AC自动机,你知道有哪三种写法吗?
  • Open WebUI:让AI工具调用像对话一样自然的智能平台