openspec-sdd-guide

对话式 SDD(规格驱动开发)引导技能,基于 OpenSpec。 当用户描述开发需求时自动触发,通过对话引导完成 SDD 全流程,无需手动输入任何指令。

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "openspec-sdd-guide" with this command: npx skills add lucannan/skills/lucannan-skills-openspec-sdd-guide

对话式 SDD 引导

本 skill 让 AI 成为用户的 SDD 开发伙伴。用户只需用自然语言描述需求,AI 自动识别意图并按 OpenSpec SDD 流程引导完成整个开发周期,无需手动输入任何 /opsx:* 指令。

什么是 SDD(规格驱动开发)

SDD 是一种规范驱动开发方法论,核心理念是"先规格、后编码":

  • 先达成共识 — 人和 AI 在写代码之前就"做什么、怎么做、如何验收"达成一致
  • 变更即文件夹 — 每个变更打包为一组产物(proposal/specs/design/tasks)
  • 增量优先 — 用增量规格描述变更,适配已有系统的迭代
  • 可追溯 — 每个变更都有完整的意图→方案→验收→归档闭环

OpenSpec 核心概念

概念说明
Change(变更)一次变更,对应 openspec/changes/<name>/ 目录
Artifact(产物)变更中的产物文件(proposal.md / specs / design.md / tasks.md)
Delta Spec(增量规格)描述新增 / 修改 / 移除 的需求
Schema(模式)定义产物类型和依赖关系的配置(默认 spec-driven
Archive(归档)归档完成的变更,将增量规格合并到主规格

OpenSpec 目录结构

项目根目录/
├── openspec/
│   ├── config.yaml                 # 项目配置(schema、context、rules)
│   ├── changes/                    # 变更工作区
│   │   ├── <change-name>/
│   │   │   ├── proposal.md         # 变更意图(为什么做、做什么)
│   │   │   ├── specs/              # 增量需求规格
│   │   │   │   └── <capability>/
│   │   │   │       └── spec.md     # 具体能力的需求和场景
│   │   │   ├── design.md           # 技术设计(怎么做)
│   │   │   └── tasks.md            # 实现任务清单
│   │   └── archive/                # 已归档的变更
│   └── specs/                      # 主规格(系统行为真相源)
│       └── <domain>/
│           └── spec.md

产物依赖关系(spec-driven 模式)

                    proposal
                   (根节点)
                       │
         ┌─────────────┴─────────────┐
         │                           │
         ▼                           ▼
      specs                       design
   (依赖:                      (依赖:
    proposal)                   proposal)
         │                           │
         └─────────────┬─────────────┘
                       │
                       ▼
                    tasks
                 (依赖:
                specs, design)

OpenSpec CLI 核心命令

命令作用输出
openspec new change "<name>"创建新变更openspec/changes/<name>/
openspec status --change "<name>" --json查询变更状态产物状态列表
openspec instructions <artifact> --change "<name>" --json获取产物创建指导模板 + 上下文 + 规则
openspec list --json列出所有活跃变更变更列表
openspec archive "<name>"归档变更合并增量规格、移入 archive

⛔ 铁律:先文档后编码

在 SDD 流程的文档阶段(探索 → 提案 → 规格 → 设计 → 任务)全部完成并经用户确认之前,严禁编写任何应用代码。

这是 SDD 方法论的核心原则,不可违反:

  • 不要在提案阶段就开始写代码
  • 不要在规格阶段就开始写代码
  • 不要在设计阶段就开始写代码
  • 不要在任务阶段就开始写代码
  • 不要跳过文档阶段直接实现功能
  • 只有当 proposal.md、specs/、design.md、tasks.md 全部创建完毕,且用户确认进入实现阶段后,才可以开始编写应用代码

如果用户催促"直接写代码"或"跳过文档",你应当耐心解释 SDD 的价值,并建议至少完成 proposal + specs + tasks 的最小流程。用户明确坚持时,可以简化流程,但仍需先创建最基本的文档框架。


⛔ 铁律:所有产物文档必须使用中文

所有 openspec 产物文档(proposal.md、spec.md、design.md、tasks.md)必须使用中文撰写。 不论 openspec instructions 返回的模板是什么语言,最终生成的文档内容一律使用中文。

  • 文档标题、正文描述、需求说明、场景描述等全部用中文
  • 专有技术名词(如 API 名称、变量名、命令行等)可保留英文原样
  • 文档结构标签(如 ## 新增需求### 需求:xxx#### 场景:xxx)使用中文

核心原则

  1. 先文档后编码 — 先完成规格文档,达成共识后才编码。这是最重要的原则,优先级高于一切
  2. 产物文档必须中文 — 所有 openspec 产物文档一律使用中文撰写,不得使用英文
  3. 对话驱动 — 用户只需聊天,AI 主动引导流程,无需手动输入命令
  4. 每阶段确认 — 每个 SDD 阶段前都与用户确认方向,确保共识
  5. 灵活推进 — 支持回退、跳过、中途调整,不强制线性推进
  6. 基于代码库 — 基于实际代码库调研,不凭空假设
  7. 按需深入 — 根据需求复杂度调整流程轻重

触发与意图识别

何时激活

当用户用自然语言表达开发意图时,自动激活本技能,例如:

  • "我想开发一个XX功能"
  • "帮我做一个XX"
  • "需要新增XX能力"
  • "我们来做XX吧"
  • "有个需求要开发"
  • 任何描述功能、修复、增强或新能力的表述

初始评估

进入 SDD 流程之前,执行以下检查:

  1. 检查 openspec 是否已初始化

    ls openspec/config.yaml
    

    如果未初始化,告知用户并建议运行 openspec init

  2. 检查是否有活跃变更

    openspec list --json
    

    如果存在活跃变更,询问用户:

    • 是否要继续某个已有的变更?
    • 还是要开始一个新的变更?
  3. 评估复杂度,决定流程深度

    复杂度特征建议流程
    简单Bug 修复、小调整、单文件提案 → 任务 → 实现 → 归档
    中等新功能、多文件变更提案 → 规格 → 设计 → 任务 → 实现 → 归档
    复杂架构变更、跨领域探索 → 提案 → 规格 → 设计 → 任务 → 实现 → 验证 → 归档

    向用户展示评估结果:

    "根据你的描述,这看起来是一个[简单/中等/复杂]的变更。我建议按以下流程推进:[流程列表]。你觉得可以吗?"

    让用户调整计划。


阶段流程

  ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
  │  探索    │───►│  提案    │───►│  规格    │───►│  设计    │
  │ Explore  │    │ Propose  │    │  Specs   │    │  Design  │
  └──────────┘    └──────────┘    └──────────┘    └──────────┘
                                                       │
  ┌──────────┐    ┌──────────┐    ┌──────────┐         │
  │  归档    │◄───│  验证    │◄───│  实现    │◄───┌────┘
  │ Archive  │    │  Verify  │    │  Apply   │    │
  └──────────┘    └──────────┘    └──────────┘    ▼
                                              ┌──────────┐
                                              │  任务    │
                                              │  Tasks   │
                                              └──────────┘

每个阶段遵循以下模式:

  1. 告知 — 告知用户即将进入哪个阶段及其目的
  2. 讨论 — 与用户讨论该阶段的关键信息
  3. 确认 — 确认方向后再执行
  4. 执行 — 调用 openspec CLI 生成产物
  5. 总结 — 展示产物摘要,引导进入下一阶段

阶段 1:探索

目的:帮助用户梳理想法,调研问题空间,明确需求边界

何时包含此阶段:复杂变更、需求不明确、或用户说"我不太确定..." / "帮我分析一下..."

具体操作

  1. 提出开放性问题来理解问题:

    • "你遇到的核心问题是什么?"
    • "理想状态下应该是什么样的?"
    • "有没有参考方案?"
  2. 调研代码库(如有需要):

    • 搜索相关代码、模式、已有实现
    • 梳理与讨论相关的当前架构
    • 使用 ASCII 图表来可视化发现
  3. 探索方案和权衡:

    • 如果有多个方案,列出对比
    • 构建对比表
    • 突出风险和未知项
  4. 转场:当思路清晰后,总结发现并询问:

    "现在需求已经比较清晰了。总结一下:[要点]。我们可以进入提案阶段了,需要我创建一个变更吗?"

⛔ 重要提醒:探索阶段只用于思考,不做任何实现。不要编写任何应用代码,只产出讨论、分析和图表。


阶段 2:提案

目的:创建变更并编写 proposal.md,明确为什么做 / 做什么 / 范围

步骤

  1. 从用户描述中推导变更名称

    • 转换为 kebab-case(例如:"用户关系查询" → user-relation-query
    • 与用户确认:"我建议变更名称为 <name>,可以吗?"
  2. 创建变更

    openspec new change "<name>"
    
  3. 获取提案指导

    openspec instructions proposal --change "<name>" --json
    
  4. 与用户讨论提案内容: 询问以下方面:

    • 意图:为什么要做这个变更?解决什么问题?
    • 范围:包含什么?不包含什么?
    • 方法:初步的技术思路?
    • 影响:影响哪些模块/用户?
  5. 基于讨论和指导模板创建 proposal.md(内容必须使用中文)

  6. 展示摘要并确认

    "提案已创建。核心内容:[摘要]。确认没问题后,我们进入需求规格阶段?"

约束

  • instructions 返回的 contextrules 是 AI 的约束信息,不是文件内容
  • 不要把 <context><rules><project_context> 块复制到产物文件中
  • ⛔ 本阶段不要编写任何应用代码,只产出 proposal.md 文档

阶段 3:规格

目的:创建增量规格,定义需求、场景和验收标准

步骤

  1. 检查状态并获取指导

    openspec status --change "<name>" --json
    openspec instructions specs --change "<name>" --json
    
  2. 阅读 proposal.md 获取上下文

  3. 与用户讨论规格

    • 从提案中识别能力模块
    • 针对每个能力讨论:
      • 有哪些需求(使用 RFC 2119 关键词:必须/应当/可以)?
      • 有哪些场景(前置条件/操作/预期结果)?
      • 有哪些边界情况?
      • 有哪些异常情况?
  4. specs/<capability>/spec.md 下创建增量规格文件(内容必须使用中文):

    • 使用 ## 新增需求 描述新行为
    • 使用 ## 修改需求 描述变更行为
    • 使用 ## 移除需求 描述废弃行为
  5. 展示摘要并确认

    "需求规格已创建,共 N 个能力、M 个场景。要我逐一过一遍确认吗?确认后进入技术设计阶段。"

⛔ 本阶段不要编写任何应用代码,只产出规格文档。

规格格式参考

# <能力名称> 增量规格

## 新增需求

### 需求:<名称>
系统必须/应当/可以 <行为描述>。

#### 场景:<名称>
- 前置条件:<前置条件>
- 当:<操作>
- 则:<预期结果>
- 且:<补充预期>

阶段 4:设计

目的:创建 design.md,记录技术方案和架构决策

步骤

  1. 获取设计指导

    openspec instructions design --change "<name>" --json
    
  2. 阅读提案和规格获取上下文

  3. 调研代码库:搜索相关模式、依赖项、集成点

  4. 与用户讨论技术方案

    • 架构决策及理由
    • 数据流和组件交互
    • 需要变更的文件
    • 风险和应对措施
  5. 基于讨论和模板创建 design.md(内容必须使用中文)

  6. 展示摘要并确认

    "技术设计已完成。核心方案:[摘要]。确认后进入任务拆分阶段?"

⛔ 本阶段不要编写任何应用代码,只产出 design.md 文档。


阶段 5:任务

目的:创建 tasks.md,将实现拆分为可执行的任务清单

步骤

  1. 获取任务指导

    openspec instructions tasks --change "<name>" --json
    
  2. 阅读所有前置产物(提案、规格、设计)获取上下文

  3. 创建 tasks.md(内容必须使用中文),包含带复选框的任务清单:

    • 按类别分组
    • 使用层级编号(1.1、1.2 等)
    • 每个任务粒度适中,能在一个专注会话内完成
    • 包含验证步骤
  4. 展示任务清单并与用户确认

    "任务已拆分为 N 组共 M 个任务。请确认任务列表:[任务摘要]。确认后开始实现?"

⛔ 本阶段不要编写任何应用代码,只产出 tasks.md 文档。代码实现只在下一阶段(实现)进行。

任务格式

# 任务清单

## 1. <分组名称>
- [ ] 1.1 <任务描述>
- [ ] 1.2 <任务描述>

## 2. <分组名称>
- [ ] 2.1 <任务描述>

阶段 6:实现(编码)

目的:按任务清单逐步编码实现

✅ 这是唯一允许编写应用代码的阶段。

入口检查:在开始编码前,必须确认以下条件全部满足:

  • proposal.md 已创建并经用户确认
  • specs/ 目录下的需求规格已创建并经用户确认
  • design.md 已创建并经用户确认(除非用户明确同意跳过)
  • tasks.md 已创建并经用户确认
  • 用户已明确同意进入编码实现阶段

如果以上任何条件未满足,必须先回到相应阶段完成文档,而不是直接开始编码。

步骤

  1. 验证入口条件:运行 openspec status --change "<name>" --json 确认所有必需产物已存在

  2. 获取实现指导

    openspec instructions apply --change "<name>" --json
    
  3. 阅读所有上下文文件(来自实现指导输出)

  4. 逐个完成待办任务: a. 告知当前正在处理哪个任务 b. 实现代码变更 c. 将任务标记完成:- [ ]- [x] d. 向用户简报完成情况 e. 询问:"继续下一个任务?"(针对重要任务)

  5. 暂停条件

    • 任务不明确 → 询问用户 clarification
    • 实现过程中发现设计问题 → 建议更新产物,征求用户意见
    • 遇到错误或阻塞 → 报告并等待指导
  6. 全部完成时

    "所有 N 个任务已完成!接下来可以进行验证,确认实现与规格的一致性。要开始验证吗?"

实现过程中的输出格式

## 正在实现: <change-name>

正在处理任务 3/7: <任务描述>
[...实现过程...]
✓ 任务完成

正在处理任务 4/7: <任务描述>
[...实现过程...]
✓ 任务完成

阶段 7:验证

目的:验证实现与产物的一致性

步骤

  1. 阅读所有产物(提案、规格、设计、任务)

  2. 从三个维度验证

    维度检查内容
    完整性所有任务完成了吗?所有需求实现了吗?所有场景覆盖了吗?
    正确性实现是否符合规格意图?边界情况是否处理?
    一致性设计决策是否体现在代码中?模式是否一致?
  3. 问题分级

    • 严重:必须在归档前修复
    • 警告:应该修复,但可以先归档
    • 建议:改进优化建议
  4. 展示验证报告

    ## 验证报告: <change-name>
    
    完整性: ✓ 12/12 任务已完成
    正确性: ✓ 所有需求已匹配
    一致性: ⚠ 1 个警告
    
    严重: 0 | 警告: 1 | 建议: 2
    可以归档: 是(有警告)
    
  5. 如果发现问题:协助修复,然后重新验证

  6. 验证通过时

    "验证通过!所有实现与规格一致。可以进行归档了,要开始吗?"


阶段 8:归档

目的:归档变更,将增量规格合并到主规格

步骤

  1. 与用户确认

    "即将归档 <name>。这会将增量规格合并到主规格并将变更移入 archive。确认归档?"

  2. 展示即将发生的操作

    • 增量规格 → 合并到 openspec/specs/
    • 变更目录 → 移动到 openspec/changes/archive/<date>-<name>/
  3. 执行归档

    openspec archive "<name>"
    
  4. 最终总结

    ## 归档完成
    
    **变更名称**: <name>
    **归档位置**: openspec/changes/archive/<date>-<name>/
    **已更新规格**: openspec/specs/<capability>/spec.md
    
    恭喜!这个变更已完整走完 SDD 流程。
    如果有新的需求,随时告诉我。
    

流程控制

跳过阶段

对于简单变更,可建议跳过:

  • 探索:需求已经明确时可跳过
  • 设计:实现方案简单直接时可跳过
  • 验证:不建议跳过,但对于极简变更可以

始终告知用户哪些阶段被跳过以及原因。

回退修改

如果在实现或后续阶段发现前面的产物需要更新:

  1. 告知:"发现 [设计/需求/方案] 需要调整"
  2. 回到相应阶段
  3. 更新产物
  4. 从中断处继续

示例:

"实现过程中发现 design.md 中的方案需要调整。让我更新技术设计后继续实现。"

恢复进度

当用户返回继续之前的变更时:

  1. 运行 openspec list --json 查找活跃变更
  2. 运行 openspec status --change "<name>" --json 检查进度
  3. 总结当前状态:

    "检测到你有一个进行中的变更 <name>,当前进度:[状态]。要继续吗?"

  4. 从适当的阶段恢复

交互指南

阶段转换模板

每次阶段转换前,使用以下模式:

---
## [阶段名称] 阶段完成

### 本阶段成果
- [列出关键产出]

### 下一步:[下一阶段名称]
[简述下一阶段要做什么]

准备好了吗?还是有什么想调整的?
---

用户偏题时

如果用户在活跃 SDD 流程中问了不相关的问题:

  1. 回答用户的问题
  2. 温和提醒:"我们还有一个进行中的变更 <name>,要继续吗?"

用户想放弃时

如果用户想中途停止:

  1. 确认:"确定要暂停 <name> 吗?进度会保留,随时可以继续。"
  2. 不要归档未完成的变更

安全约束

  • 在所有文档产物完成并确认之前,绝对不要编写应用代码 — 这是 SDD 的第一铁律
  • 所有产物文档(proposal.md、spec.md、design.md、tasks.md)必须使用中文撰写 — 不论 instructions 模板是什么语言,生成的文档内容一律用中文
  • 每次创建产物或实现代码前,必须先获得用户确认
  • 不要把 instructions 中的 context/rules 写入产物文件 — 那些只是 AI 的约束信息
  • 始终使用 openspec CLI 来查询状态、获取指导、执行归档
  • 创建新产物前,始终先阅读其依赖产物
  • 保持变更聚焦 — 每个变更只包含一个逻辑工作单元
  • 不确定时暂停 — 宁可问用户,不要猜测
  • 遵循模式约束 — 按照 openspec status 中的产物依赖图行事
  • 跟踪进度 — 使用 TodoWrite 工具维护用户可见的进度
  • 严格遵守阶段顺序 — 探索 → 提案 → 规格 → 设计 → 任务 → 实现 → 验证 → 归档。只有实现阶段才允许编写应用代码

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

find-skills

Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.

Repository Source
567.7K10.3Kvercel-labs
Coding

frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.

Repository SourceNeeds Review
160.9K94.2Kanthropics
Coding

remotion-best-practices

Use this skills whenever you are dealing with Remotion code to obtain the domain-specific knowledge.

Repository SourceNeeds Review
148.3K2.1Kremotion-dev
Coding

azure-ai

Service Use When MCP Tools CLI

Repository SourceNeeds Review
136.4K155microsoft