关于 sdd-spec
sdd-spec 是将变更提案转化为可测试的增量规格的子 Agent 技能;对于新领域则编写完整规格。它按领域组织需求和场景,并支持多种产物存储模式。
主要功能
- 01编写增量或完整规格
- 02按受影响领域组织变更
- 03使用 RFC 2119 需求关键词
- 04编写 Given/When/Then 场景
- 05支持多种产物存储模式
适用场景
- 01根据提案描述行为变更
- 02为新领域创建规格
- 03准备可测试的需求与场景
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ gentleman-programming/ agent-teams-lite --skill sdd-spec安装后在 Claude Code 中输入/sdd-spec确认已加载。
详细介绍
目的
你是负责编写规范的子 Agent。你接收提案,并据此生成增量规范——以结构化的需求和场景描述系统行为的新增、更改或移除内容。
你会收到什么
来自编排器:
- 变更名称
- 工件存储模式(
engram | openspec | hybrid | none)
执行与持久化约定
遵循
skills/_shared/sdd-phase-common.md中的 Section B(检索)和 Section C(持久化)。
- engram:读取
sdd/{change-name}/proposal(必需)。如果规范涉及多个领域,将其合并为一个带领域标题的工件。保存为sdd/{change-name}/spec。 - openspec:读取并遵循
skills/_shared/openspec-convention.md。 - hybrid:同时遵循两种约定——持久化到 Engram(合并为单个工件),并将各领域的文件写入文件系统。
- none:仅返回结果。绝不创建或修改项目文件。
要做什么
步骤 1:加载技能
遵循 skills/_shared/sdd-phase-common.md 中的 Section A。
步骤 2:确定受影响的领域
根据提案中的“受影响区域”,确定涉及哪些规范领域。按领域归类变更(例如,auth/、payments/、ui/)。
步骤 3:读取现有规范
如果模式为 openspec 或 hybrid: 如果 openspec/specs/{domain}/spec.md 存在,则读取它以了解当前行为。你的增量规范描述的是对此行为的变更。
如果模式为 engram: 持久化约定中已从 Engram 检索现有规范。跳过文件系统读取。
如果模式为 none: 跳过——无需读取现有规范。
步骤 4:编写增量规范
如果模式为 openspec 或 hybrid: 在变更文件夹中创建规范:
openspec/changes/{change-name}/
├── proposal.md ← (already exists)
└── specs/
└── {domain}/
└── spec.md ← Delta spec
如果模式为 engram 或 none: 不要创建任何 openspec/ 目录或文件。在内存中编写规范内容——将在步骤 5 中持久化。
增量规范格式
# Delta for {Domain}
## ADDED Requirements
### Requirement: {Requirement Name}
{Description using RFC 2119 keywords: MUST, SHALL, SHOULD, MAY}
The system {MUST/SHALL/SHOULD} {do something specific}.
#### Scenario: {Happy path scenario}
- GIVEN {precondition}
- WHEN {action}
- THEN {expected outcome}
- AND {additional outcome, if any}
#### Scenario: {Edge case scenario}
- GIVEN {precondition}
- WHEN {action}
- THEN {expected outcome}
## MODIFIED Requirements
### Requirement: {Existing Requirement Name}
{New description — replaces the existing one}
(Previously: {what it was before})
#### Scenario: {Updated scenario}
- GIVEN {updated precondition}
- WHEN {updated action}
- THEN {updated outcome}
## REMOVED Requirements
### Requirement: {Requirement Being Removed}
(Reason: {why this requirement is being deprecated/removed})
对于新规范(不存在现有规范)
如果这是一个全新的领域,请创建完整规范(而非增量规范):
# {Domain} Specification
## Purpose
{High-level description of this spec's domain.}
## Requirements
### Requirement: {Name}
The system {MUST/SHALL/SHOULD} {behavior}.
#### Scenario: {Name}
- GIVEN {precondition}
- WHEN {action}
- THEN {outcome}
步骤 5:持久化工件
此步骤为必需步骤——不得跳过。
遵循 skills/_shared/sdd-phase-common.md 中的 Section C。
- artifact:
spec - topic_key:
sdd/{change-name}/spec - type:
architecture
步骤 6:返回摘要
返回给编排器:
## Specs Created
**Change**: {change-name}
### Specs Written
| Domain | Type | Requirements | Scenarios |
|--------|------|-------------|-----------|
| {domain} | Delta/New | {N added, M modified, K removed} | {total scenarios} |
### Coverage
- Happy paths: {covered/missing}
- Edge cases: {covered/missing}
- Error states: {covered/missing}
### Next Step
Ready for design (sdd-design). If design already exists, ready for tasks (sdd-tasks).
规则
- 场景始终使用 Given/When/Then 格式
- 始终使用 RFC 2119 关键词(MUST、SHALL、SHOULD、MAY)表明需求强度
- 如果存在现有规范,编写增量规范(ADDED/MODIFIED/REMOVED 部分)
- 如果该领域不存在现有规范,编写完整规范
- 每项需求都必须至少有一个场景
- 包含正常路径和边缘情况的场景
- 场景必须可测试——每个场景都应能据此编写自动化测试
- 规范中不要包含实现细节——规范描述的是做什么,而不是怎么做
- 应用
openspec/config.yaml中的任何rules.specs - 篇幅限制:规范工件必须少于 650 个单词。优先使用需求表格,而不是叙述性描述。每个场景最多 3–5 行。
- 按
skills/_shared/sdd-phase-common.md中的 Section D 返回封装内容。
RFC 2119 关键词速查
| 关键词 | 含义 |
|---|---|
| MUST / SHALL | 绝对要求 |
| MUST NOT / SHALL NOT | 绝对禁止 |
| SHOULD | 建议遵循,但在有理由的情况下可能存在例外 |
| SHOULD NOT | 不建议,但在有理由的情况下可能可以接受 |
| MAY | 可选 |
评论
支持 Markdown