Przejdź do treści
Biblioteka skilli
Zarządzanie i produkt · Pisanie

specify

/specify

Generuje specyfikację funkcji SDD z opisu: zbiera kontekst, analizuje wymagania i wyciąga scenariusze.

Repozytorium
co-omnispec ↗
Licencja
MIT
Ostatnia zmiana repozytorium
24.07.2026

Ocena i bezpieczeństwo

95/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść30 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
21
Skrypty
19
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 24.07.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co sprawdzić przed instalacją
  • 19 skryptów w paczce. Przejrzyj je przed instalacją, bo Claude może je uruchomić.

Skrypty: scripts/bash/specify-finalize.sh, scripts/bash/specify-gate.sh, scripts/bash/specify-harness-common.sh, scripts/bash/specify-init-harness.sh, scripts/bash/specify-render-checklist.sh, scripts/bash/specify-render-context.sh, scripts/bash/specify-render-spec.sh, scripts/bash/verify-specify-artifacts.sh, scripts/powershell/Specify-HarnessCommon.ps1, scripts/powershell/specify-finalize.ps1, scripts/po

Co robi i kiedy

Generuje specyfikację funkcji SDD z opisu: zbiera kontekst, analizuje wymagania i wyciąga scenariusze.

Argumenty

/specify [功能描述文本] [--feature-dir <dir>] [--branch-name <name>] [--e2e]
Oryginalny opis (EN)

从自然语言功能描述生成功能规范文档(SDD)。当用户输入 /specify 或提供功能需求描述时自动触发。执行上下文收集、需求分析、场景提取,生成规范文件。适用于需要从需求生成规范,建立功能说明等场景。触发关键词:/specify、规范生成、功能描述、spec.md、SDD。

Jak działa

  1. 行为准则
  2. 环境初始化
  3. 特性上下文用户指定
  4. Harness 执行契约(必守,不含 --e2e)
  5. 技能依赖
  6. 用户输入
  7. 概述
  8. 执行流程
  9. 错误处理
  10. 参考文档
Sekcje z nagłówków SKILL.md, w oryginale · 594 linii, 2 417 słów
Podgląd SKILL.md
---
name: specify
argument-hint: [功能描述文本] [--feature-dir <dir>] [--branch-name <name>] [--e2e]
description: 从自然语言功能描述生成功能规范文档(SDD)。当用户输入 /specify 或提供功能需求描述时自动触发。执行上下文收集、需求分析、场景提取,生成规范文件。适用于需要从需求生成规范,建立功能说明等场景。触发关键词:/specify、规范生成、功能描述、spec.md、SDD。
context: fork
agent: general-purpose
allowed-tools: Read, Write, Edit, Glob, Grep, Bash, TaskCreate, TaskList, TaskUpdate, TaskGet, TaskOutput, Skill, TodoWrite
when_to_use: 用户执行 /specify 或要求从需求生成 spec.md / SDD 功能规范时。
---
# specify

## 行为准则

以下规则在整个会话期间有效,不因对话长度而放松:

1. ❗ 每个步骤必须按顺序执行,不得跳过或截断执行
2. ❗ 步骤 1 预解析结果仅用于确定传入 `omni-dsdd:create-branch` 的参数;**后续步骤唯一基准**为 `omni-dsdd:create-branch` 返回的 `BRANCH_NAME`、`FEATURE_DIR`、`SPEC_FILE`;**不得跳过** `omni-dsdd:create-branch`
3. ❗ 每执行完一个步骤,必须立即将对应 Todo 项标记为已完成,不得在全部结束后一次性补勾选
4. ❗ **产物落盘优先于对话输出** — 子技能返回的结构化内容必须用 **Write/Edit** 写入约定路径;**禁止**仅在回复中展示内容却未落盘;**禁止**在产物文件缺失时将对应 Todo 标为已完成
5. ❗ **Harness 门禁优先于 Todo 勾选** — 每步须运行 `specify-gate` 且 `gate_exit=0` 后方可勾选 Todo;**禁止**未跑门禁即标完成

---

## 环境初始化

本技能**所有**路径拼接与脚本调用,均依赖以下两个变量。后续步骤不得绕过它们自行推断路径。

| 变量 | 含义 | 用途 |
|------|------|------|
| `CLAUDE_PLUGIN_ROOT` | Omni 插件安装根目录 | 定位本技能脚本、`check-prerequisites`、插件内模板契约 |
| `CLAUDE_WORKING_DIR` | 用户当前工作区目录(可为 Git 仓库子目录) | 定位 `changes/`、`.omni-infra/`、Harness 落盘 |

### 工作区路径约定(全文统一使用)

| 符号 | 展开路径 |
|------|----------|
| 特性目录 | `${FEATURE_DIR}`(来自 create-branch,应位于 `${CLAUDE_WORKING_DIR}/changes/...`) |
| 规范文件 | `${SPEC_FILE}` 或 `${FEATURE_DIR}/spec.md` |
| 上下文 | `${FEATURE_DIR}/context.md` |
| 项目模板 | `${CLAUDE_WORKING_DIR}/.omni-infra/templates/...` |
| 项目章程 | `${CLAUDE_WORKING_DIR}/.omni-infra/memory/constitution.md` |
| Harness 状态 | `${FEATURE_DIR}/.runs/...` |
| 插件脚本(Linux/bash) | `${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/bash/...` |
| 插件脚本(Windows/pwsh) | `${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/powershell/...` |
| Harness 核心(Python) | `${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/python/specify_harness.py` |
| 插件级前置检查 | `${CLAUDE_PLUGIN_ROOT}/scripts/bash/check-prerequisites.sh` |

### Step 0.1 检查变量是否已存在

```bash
test -n "${CLAUDE_PLUGIN_ROOT:-}" && test -d "${CLAUDE_PLUGIN_ROOT}"
test -n "${CLAUDE_WORKING_DIR:-}" && test -d "${CLAUDE_WORKING_DIR}"
```

两项均通过 → 进入「执行流程」步骤 0。  
任一项失败 → 执行 Step 0.2。

### Step 0.2 补全缺失变量(仅 Agent 层执行一次)

**`CLAUDE_PLUGIN_ROOT`**

1. 若 Claude Code 已注入且目录存在:沿用。
2. 若仍缺失,按顺序降级(须验证 `${路径}/skills/specify/SKILL.md` 存在):
   - Skill 加载上下文中的插件安装根;
   - 在 `${CLAUDE_WORKING_DIR}` 或其上级查找含 `.claude-plugin/plugin.json` 的目录;
3. `export CLAUDE_PLUGIN_ROOT="<绝对路径>"`
4. 失败 → 终止并提示配置插件。

**`CLAUDE_WORKING_DIR`**

1. 若已注入且目录存在:沿用。
2. 若缺失:`export CLAUDE_WORKING_DIR="$(pwd)"`(**不用** `git rev-parse --show-toplevel`,避免子目录工作区被抬到仓库根)
3. 失败 → 终止。

### Step 0.3 校验(必须通过)

```bash
test -f "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/python/specify_harness.py"
test -f "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/bash/specify-init-harness.sh"
test -f "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/powershell/specify-init-harness.ps1"
test -d "${CLAUDE_WORKING_DIR}"
mkdir -p "${CLAUDE_WORKING_DIR}/changes"
```

✅ Checkpoint: `CLAUDE_PLUGIN_ROOT=...`, `CLAUDE_WORKING_DIR=...`

### 路径拼接约定

- 插件内脚本(按类型分目录):
  - `scripts/bash/` — `specify-init-harness.sh`、`specify-gate.sh`、`specify-render-*.sh`、`specify-finalize.sh`、`verify-specify-artifacts.sh`、`specify-harness-common.sh`
  - `scripts/python/` — `specify_harness.py`、`specify_template_gate.py`
  - `scripts/powershell/` — 与 bash 同名的 `.ps1` 封装 + `Specify-HarnessCommon.ps1`
- 工作区数据:`${CLAUDE_WORKING_DIR}/changes/...`、`.omni-infra/...`
- 调用 init 封装时**必须**传入 `--plugin-root`、`--working-dir`、`--feature-dir`
- render/finalize 可从 `${FEATURE_DIR}/.runs/paths.json` 读取 `working_dir`/`plugin_root`;未 init 时须显式传参
- **禁止**在业务脚本内用 `pwd`、`git rev-parse`、`__file__.parents` 推断插件根或工作区根

### 平台脚本选择

| 平台 | 初始化 | 门禁 | 渲染 / 收尾 |
|------|--------|------|-------------|
| Linux / macOS / Git Bash | `scripts/bash/specify-init-harness.sh` | `scripts/bash/specify-gate.sh` | `scripts/bash/specify-render-*.sh`、`specify-finalize.sh` |
| Windows (pwsh) | `scripts/powershell/specify-init-harness.ps1` | `scripts/powershell/specify-gate.ps1` | `scripts/powershell/specify-render-*.ps1`、`specify-finalize.ps1` |

断点续跑、高级子命令可直接调用 `scripts/python/specify_harness.py`(参数与 bash 封装一致)。

---

## 特性上下文用户指定

合并规则与 **`sdd` 步骤 1.5** 一致(`有传参 → 传参 > 无传参 → export > 推导 > allocate`)。步骤 1 为 **直连 `/specify` 或 workflow 后的权威预解析入口**;**物理生效唯一入口**为步骤 2 `omni-dsdd:create-branch`,后续以 **`omni-dsdd:create-branch` 返回值** 为真值。

- **输入**:CLI `--feature-dir` / `--branch-name`,或 export `OMNISPEC_FEATURE_DIR`/`FEATURE_DIR`/`BRANCH_NAME`
- **预设**(`FEATURE_CONTEXT_PRESET=true`):步骤 2 显式传 create-branch,禁止 allocate;`FEATURE_DIR` 须在 `changes/` 下
- **自动**(`false`):步骤 2 走 allocate;步骤 3 起**只使用 create-branch 返回的路径**

示例见 `sdd` SKILL「`--feature-dir` / `--branch-name` 与 export 全局变量」一节。

---

## Harness 执行契约(必守,不含 --e2e)

**编排 / 落盘 / 校验分离**:LLM 产出 payload → **Write** 文件 → **脚本 gate** 判定 → 更新 `specify-run.json`。

### 机器可读状态

| 文件 | 用途 |
|------|------|
| `${FEATURE_DIR}/.runs/paths.json` | 唯一路径真值源(分支、目录、SPEC_FILE、DOC_DIR、DOC_SPECS_DIR 等、working_dir、plugin_root,均为绝对路径) |
| `${FEATURE_DIR}/.runs/env.sh` | `source` 后导出 `FEATURE_DIR`、`CLAUDE_WORKING_DIR`、`CLAUDE_PLUGIN_ROOT`、`DOC_DIR`、`KNOWLEDGE_DIR` 等 |
| `${FEATURE_DIR}/.runs/specify-run.json` | 分步门禁结果、断点续跑 |
| `${FEATURE_DIR}/.runs/.omnispec-state.json` | SDD 阶段状态(routing 读取 `completed_stages`) |
| `${FEATURE_DIR}/.runs/internal/context.payload.json` | spec-impact 结构化中间态(可选,推荐) |

### 硬性交付物与分步门禁

| SKILL 步骤 | 目标文件 | 落盘 + 门禁(`gate --step` 保持脚本既有编号) |
|------------|----------|-----------------------------------------------|
| 4 | `.runs/paths.json`、`.runs/env.sh` | `specify-init-harness.sh` → `gate --step 1 --record` |
| 6 | `context.md` | 先 Write `context.payload.json` → `specify-render-context.sh`(或按模板 Write md)→ `gate --step 3 --record`(**模板契约**:5 个 `##` 章节) |
| 7→9 | `spec.md` | **先** `specify-render-spec.sh --merge` 铺骨架 → 步骤 8 追加需求/场景 → Write/Edit → `gate --step 6 --record`(**模板契约**:章节 + REQ/SCN/EARS/GWT) |
| 11 | `checklists/requirements.md` | **先** `specify-render-checklist.sh` 从模板生成 → 填写勾选 → `gate --step 8 --record`(**模板契约**:3 个 `##` + ≥12 检查项) |
| 12 | `.runs/evaluations/eval-specify-report.yaml` | Write → `gate --step 9 --record` |
| 15 | `.runs/metrics/omni-metrics-log.json` | 追加 → `gate --step 11 --record` |
| 13 | 全部 | `verify-specify-artifacts.sh`(= `gate --step all`) |
| 16 | `.runs/.omnispec-state.json` | `specify-finalize.sh` → `gate --step 11.5 --record` |

### 统一门禁命令

**Linux / bash:**

```bash
# 初始化(步骤 4 通过后立即执行)
bash "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/bash/specify-init-harness.sh" \
  --plugin-root "${CLAUDE_PLUGIN_ROOT}" \
  --working-dir "${CLAUDE_WORKING_DIR}" \
  --feature-dir "$FEATURE_DIR" \
  --branch-name "$BRANCH_NAME" \
  --spec-file "$SPEC_FILE" \
  --doc-dir "$DOC_DIR" \
  --start-time "$start_time"

source "$FEATURE_DIR/.runs/env.sh"

bash "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/bash/specify-gate.sh" \
  --feature-dir "$FEATURE_DIR" --step STEP --record

bash "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/bash/verify-specify-artifacts.sh" \
  --feature-dir "$FEATURE_DIR"

bash "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/bash/specify-finalize.sh" \
  --feature-dir "$FEATURE_DIR" --flow-mode <flow_mode> --next-stage <next_stage>

python3 "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/python/specify_harness.py" resume \
  --feature-dir "$FEATURE_DIR"

bash "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/bash/specify-render-spec.sh" \
  --feature-dir "$FEATURE_DIR" --user-intent "<业务意图摘要>" --merge
bash "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/bash/specify-render-checklist.sh" \
  --feature-dir "$FEATURE_DIR" --feature-name "<功能名>"
```

**Windows / pwsh:** 将上述 `bash .../scripts/bash/*.sh` 换为 `pwsh .../scripts/powershell/*.ps1`(参数名相同)。

### 模板契约门禁(`template-contract.json`)

**契约文件**:`${CLAUDE_PLUGIN_ROOT}/skills/specify/references/template-contract.json`(由 `specify_template_gate.py` 在 `gate` 步骤 3/6/8/9 执行)。

| 产物 | 模板来源 | 门禁校验要点 |
|------|----------|----------------|
| `context.md` | `spec-impact-analyze/templates/context-template.md` | 5 个必需 `##` 章节;占位内容过多则失败 |
| `spec.md` | `${CLAUDE_WORKING_DIR}/.omni-infra/templates/spec-template.md` + 需求/场景子技能 | `## 成功标准`、`## 与既有架构对齐`、`## 需求`、`## 场景`;元数据行;`REQ-XXX`/`SCN-XXX`/`系统 shall`/GWT;需求与场景章节最小字数 |
| `checklists/requirements.md` | `${CLAUDE_WORKING_DIR}/.omni-infra/templates/requirements-template.md` | `## 内容质量`、`## 需求完整性`、`## 功能准备就绪`;≥12 条 `- [ ]` |
| `eval-specify-report.yaml` | `omni-dsdd:eval-specify` | `report_version`/`metadata`/`evaluations`/`stage`/`overall_score` |

- `gate_exit=0`:允许勾选该步 Todo并进入下一步
- `gate_exit=1`:**不得**勾选 Todo;阅读 JSON `errors` 按模板补齐后重跑 gate(每步最多 2 次);**禁止**在未通过 gate 时标 Todo 完成
- `gate_exit=1` 时推荐修复顺序:① `render-*` 脚本铺骨架 → ② 按 `errors` 与对应 SKILL 子技能补内容 → ③ 再 `gate --step N --record`
- 步骤 14 **完成报告**必须引用步骤 13 的 `gate_exit=0` 作为 `claim_type: structural` 的 evidence

### Checkpoint 格式(每步门禁通过后输出)

```text
✅ Checkpoint 步骤{N}: artifact={路径}, gate_exit=0, bytes={大小}, sections={M}/{M}(如适用)
```

### 子技能不写文件的契约

- `omni-dsdd:spec-impact-analyze`:返回结构 → specify 写入 `context.payload.json` 并渲染/写入 `context.md`
- `omni-dsdd:eval-specify`:只定义量规 → specify 步骤 9 必须 Write `eval-specify-report.yaml`

## 技能依赖

**调用方式**:使用 Skill 工具加载下列技能(如 `/omni-dsdd:create-branch`),须完整执行并等待返回后再继续下一步。

| 技能 | 步骤 | 必需/可选 |
|------|------|-----------|
| `omni-dsdd:create-branch` | 2 | 必需 |
| `omni-dsdd:spec-impact-analyze` | 6 | 必需 |
| `omni-dsdd:specify-requirement` | 8 | 必需 |
| `omni-dsdd:specify-scenario` | 8 | 必需 |
| `omni-dsdd:e2e-specify` | 10 | 可选(`ENABLE_E2E=true`) |
| `omni-dsdd:eval-specify` | 12 | 必需 |
| `omni-dsdd:runlog-record` | 15 | 必需 |

## 用户输入

> 下文步骤说明保留原 `/specify` 命令逻辑,不做额外拆分。

```text
$ARGUMENTS
```

在继续之前, 你**必须**考虑用户输入(如果不为空).

## 概述

用户在触发消息中 `/specify` 后输入的文本**就是** `业务意图`. 假设你始终可以在本次对话中访问它, 即使下面字面上显示 `$ARGUMENTS`. 除非用户提供了空命令, 否则不要要求用户重复.

**注意**: 此流程会自动执行上下文收集和规范生成:扫描反构文档、计算关联度、构建关联关系图、进行架构分析,生成 `context.md`,再基于上下文生成功能规范.

## 执行流程

0. 开始执行步骤之前,使用 TodoWrite 工具创建本次执行的 TodoList(用于过程可视化与完成确认):
   - [ ] 步骤 0:记录 `start_time`
   - [ ] 步骤 1:特性上下文合并解析(传参 + 全局变量)
   - [ ] 步骤 2:加载 skill `omni-dsdd:create-branch`
   - [ ] 步骤 3:路径校验
   - [ ] 步骤 4:初始化 Harness(paths/env/run)
   - [ ] 步骤 5:获取文档目录配置
   - [ ] 步骤 6:加载 skill `omni-dsdd:spec-impact-analyze` 并写入 `context.md`
   - [ ] 步骤 7:加载上下文
   - [ ] 步骤 8:按流程生成需求/场景等内容
   - [ ] 步骤 9:写入 `SPEC_FILE`
   - [ ] 步骤 10:执行(或跳过)E2E 测试分析与设计
   - [ ] 步骤 11:执行规范质量验证
   - [ ] 步骤 12:加载 skill `omni-dsdd:eval-specify`
   - [ ] 步骤 13:运行产物完整性校验脚本
   - [ ] 步骤 14:输出完成报告
   - [ ] 步骤 15:加载 skill `omni-dsdd:runlog-record`
   - [ ] 步骤 16:同步 `.omnispec-state.json`(completed_stages)
   - **强制要求**:每步须在 **`specify-gate` 通过(`gate_exit=0`)后** 才勾选对应 Todo,不得在全部结束后一次性补勾选。

   - 创建 Todo 后立即记录 `start_time`:
     - Windows: `Get-Date -Format "yyyy-MM-dd HH:mm:ss"`
     - Linux: `date +"%Y-%m-%d %H:%M:%S"`

1. **特性上下文合并解析(传参 + 全局变量)**:
   - **必须**先执行(与 `sdd` 步骤 1.5、`routing` 参数预处理同一规则):
     1. 从 `$ARGUMENTS` 提取 `--feature-dir` / `--branch-name`(支持 `--key=value`),记为 `$PRESET_FEATURE_DIR`、`$PRESET_BRANCH_NAME`;**未出现则保持为空,禁止填占位符或臆造值**
     2. 合并解析:**有传参以传参为准,无传参以 export 为准**;仅非空传参才追加 CLI 选项
     ```bash
     eval "$(bash "${CLAUDE_PLUGIN_ROOT}/scripts/bash/resolve-feature-context.sh" \
       --working-dir "${CLAUDE_WORKING_DIR}" \
       ${PRESET_FEATURE_DIR:+--feature-dir "$PRESET_FEATURE_DIR"} \
       ${PRESET_BRANCH_NAME:+--branch-name "$PRESET_BRANCH_NAME"} \
       --export)"
     ```
   - 从 `$ARGUMENTS` 剥离 `--feature-dir` / `--branch-name` 得 `$USER_INTENT`
   - 预解析**不创建目录**;`FEATURE_CONTEXT_PRESET=true` 时步骤 2 显式传 create-branch,禁止 allocate
   - 日志:`特性上下文预解析: FEATURE_DIR=${FEATURE_DIR:-}, BRANCH_NAME=${BRANCH_NAME:-}, FEATURE_CONTEXT_PRESET=${FEATURE_CONTEXT_PRESET:-}, PRESET_CLI=<dir:${PRESET_FEATURE_DIR:-NONE} branch:${PRESET_BRANCH_NAME:-NONE}>`

2. 加载 skill `omni-dsdd:create-branch`,为功能开发准备工作环境(**唯一物理生效点**):

   **若 `FEATURE_CONTEXT_PRESET=true`(步骤 1 已补全)**:
   - 调用 `omni-dsdd:create-branch` 时**显式透传** `--feature-dir "${FEATURE_DIR}"` 与 `--branch-name "${BRANCH_NAME}"`
   - **禁止** `allocate`;目录已存在 → `resolve` + `git checkout`;目录不存在 → `create-new-feature` 显式创建

   **若 `FEATURE_CONTEXT_PRESET=false`**:
   - **续跑 / 外层重试**:若目录已存在 `.runs/paths.json` 或 `spec.md` 或 `.runs/branch-naming.json`,则**不得** `allocate` 新建另一目录;应先 `resolve`
   - 否则走 **`allocate` + `create-new-feature`**

   **通用约束**:
   - **强制要求**:`omni-dsdd:create-branch` 必须被完整调用并等待返回;以返回的 `BRANCH_NAME`、`FEATURE_DIR`、`SPEC_FILE` 作为后续**唯一基准**
   - 返回后 `FEATURE_DIR` 须位于 **`${CLAUDE_WORKING_DIR}/changes/`** 下,否则重走 `omni-dsdd:create-branch`
   - **禁止**在同一次 specify 内连续两次完整执行 `omni-dsdd:create-branch`(除非第一次明确失败且未创建目录)

3. **路径校验(`omni-dsdd:create-branch` 返回后立即执行)**:
   - 以步骤 2 返回的 `BRANCH_NAME`、`FEATURE_DIR` 为准(**不再**使用步骤 1 预解析值)
   - **仅校验**:`FEATURE_DIR` 位于 `${CLAUDE_WORKING_DIR}/changes/` 下
   - **`FEATURE_CONTEXT_PRESET=true`**:跳过 `001-` 序号格式、Git 分支集合比对、受保护分支等 allocate 路径门禁
   - **`FEATURE_CONTEXT_PRESET=false`**:`omni-dsdd:create-branch` / allocate 已产出合规分支名;仍仅额外确认 `changes/` 路径
   - 若 `FEATURE_DIR` 不在 `changes/` 下:重走 `omni-dsdd:create-branch`;连续失败则终止并输出中文错误

4. **初始化 Harness(步骤 2/3 通过后立即执行)**:
   - 执行 `specify-init-harness.sh`(参数见「Harness 执行契约」,**必须**含 `--plugin-root`、`--working-dir`)
   - 执行 `specify-gate.sh --feature-dir "$FEATURE_DIR" --step 1 --record`
   - `gate_exit=1` 时重试 init 最多 2 次;仍失败则终止
   - 输出 Checkpoint:`步骤4: paths.json + env.sh, gate_exit=0`
   - 后续所有步骤开始前执行:`source "$FEATURE_DIR/.runs/env.sh"`

5. **获取文档目录配置**:
   - 判断当前操作系统(Windows 或 Linux)
   - 在 **`CLAUDE_WORKING_DIR`** 下运行插件前置检查脚本获取配置:
     - Windows: `bash "${CLAUDE_PLUGIN_ROOT}/scripts/powershell/check-prerequisites.ps1" --json --paths-only` → 失败时使用默认 DOC_DIR `omni-doc` 继续
     - Linux: `(cd "${CLAUDE_WORKING_DIR}" && bash "${CLAUDE_PLUGIN_ROOT}/scripts/bash/check-prerequisites.sh" --json --paths-only)` → 失败时使用默认 DOC_DIR `omni-doc` 继续
   - 解析 JSON 输出获取 **DOC_DIR** 变量(如果未设置则默认为 `omni-doc`);步骤 4 init 后须 `source env.sh`,此时 **DOC_DIR 为绝对路径**(`paths.json` 真值源)
   - **KNOWLEDGE_DIR**(私域知识库根目录,与 DOC_DIR 独立):步骤 4 init 从会话 env `KNOWLEDGE_DIR`(sdd Step1.5 export)回退读取并写入 env.sh/paths.json,**无需 CLI 透传**;未设置则默认 `omni-doc`。仿 `FLOW_MODE` 的 env 回退机制
   - **重要**: 步骤 4 之后读存量库用 `source` 后的 `DOC_DIR`;init 之前可用 check-prerequisites 返回的 **DOC_SPECS_DIR**(已为绝对路径)

6. **需求波及分析**:
   - 加载 skill `omni-dsdd:spec-impact-analyze`,分析 `${DOC_DIR}/specs` 中的已有规格文档以及代码内容,识别可复用的组件和需要变更的范围(**须在步骤 4 之后**,且已 `source env.sh`)
   - **推荐落盘顺序**(Harness):
     1. **Write** `FEATURE_DIR/.runs/internal/context.payload.json`(spec-impact 返回的结构化对象,含 `context_mode`、`sections` 或等价字段)
     2. 执行 `specify-render-context.sh --feature-dir "$FEATURE_DIR" --user-intent "<业务意图摘要>"`  
        或按 `spec-impact-analyze/templates/context-template.md` **Write** `context.md`
     3. 执行 `specify-gate.sh --feature-dir "$FEATURE_DIR" --step 3 --record`
   - **禁止**仅在对话中输出分析结果而不写文件
   - 若子技能执行失败:Write 降级 `context.payload.json`(`degraded: true`、`reason`)→ 仍执行 render → gate;**不得**跳过
   - **等式验收**:`context.md` 必需章节数 == 5(功能描述、相关反构文档、架构分析与设计参考、术语对齐、约束和假设)
   - `gate_exit=0` 后输出 Checkpoint 并勾选步骤 6 Todo

7. **加载上下文并初始化 spec 骨架**:
   - 读取 `${CLAUDE_WORKING_DIR}/.omni-infra/templates/spec-template.md` 和 `${CLAUDE_WORKING_DIR}/.omni-infra/memory/constitution.md`
   - 执行 `specify-render-spec.sh --feature-dir "$FEATURE_DIR" --user-intent "<业务意图>" --merge`,确保 `spec.md` 含模板必需章节后再进入步骤 8
   - **读取上下文文件**:
     - 读取步骤 6 生成的 `FEATURE_DIR/context.md` 作为上下文参考
     - 若 `context.md` 仍不存在:立即回退步骤 6 补写,**不得**在无 `context.md` 时将步骤 6 标为完成

8. 遵循此执行流程:
   1. 从输入解析 `业务意图`
      如果为空: 错误 "未提供业务意图"
   2. 参考上下文文件 (`FEATURE_DIR/context.md`) 中的架构分析、可复用模式、术语对齐等信息
   3. 从 `业务意图`和上下文中提取关键概念,识别: 参与者、操作、数据、约束
   4. 对于不明确的方面:
      - 基于上下文和行业标准做出有根据的猜测
      - 仅在以下情况下标记为 [NEEDS CLARIFICATION: 具体问题]:
        - 选择显著影响功能范围或用户体验
        - 存在多个合理的解释且有不同的含义
        - 没有合理的默认值
      - **限制: 最多 3 个 [NEEDS CLARIFICATION] 标记**
      - 按影响优先级排序: 范围 > 安全/隐私 > 用户体验 > 技术细节
      - 优先参考上下文文件中的约束和假设
   5. 加载 skill `omni-dsdd:specify-requirement`,从系统视角分析业务意图对既有需求的影响,并追加到 `FEATURE_DIR/spec.md` 末尾
   6. 加载 skill `omni-dsdd:specify-scenario`,分析业务意图对既有场景的影响,并追加到 `FEATURE_DIR/spec.md` 末尾
   7. 定义成功标准
      创建可衡量的、技术无关的结果
      包括定量指标(时间、性能、数量)和定性措施(用户满意度、任务完成)
      每个标准必须无需实现细节即可验证
   8. 识别关键实体(如果涉及数据)
      参考上下文文件中的逻辑实体文档
   9. 返回: 成功(规范准备好进行规划)

   **规范 schema 定义**: SPEC_FILE 输出须符合 `${CLAUDE_WORKING_DIR}/.omni-infra/templates/spec-template.md` 的章节结构,包括:
   - 功能名称、描述、类型
   - 参与者、操作、数据流、约束
   - 成功标准、关键实体、依赖关系
   - 风险与假设

9. 使用模板结构将规范写入 SPEC_FILE, 用 `业务意图`和上下文文件派生的具体细节替换占位符, 同时保持章节顺序和标题.
   - 写入后执行 `specify-gate.sh --feature-dir "$FEATURE_DIR" --step 6 --record`
   - `gate_exit=0` 后输出 Checkpoint(含 `spec.md` 字节数)并勾选步骤 9 Todo

10. 执行测试分析与设计(仅当 `$ENABLE_E2E=true` 时执行)
   - **参数来源**:通过 `--e2e` 标志传递(如 `/specify 功能描述 --e2e`)
   - **判断条件**:检查传入的 `$ENABLE_E2E` 参数
     - 若 `$ENABLE_E2E=true`:执行本步骤
     - 若 `$ENABLE_E2E=false` 或未设置:跳过本步骤,直接进入步骤 11
   - **强制要求**:当执行时,必须严格按照 `omni-dsdd:e2e-specify` 技能文件中定义的流程执行,不得跳过或修改任何步骤。
   - 加载 skill `omni-dsdd:e2e-specify`:传递规范文件与特性目录上下文,按该技能全文执行 MFQ&PPDCS 测试分析与 TCON 黑盒用例设计,并验证 `test-analysis.md`、`e2e-test.md`
   - 执行完本步骤后,将生成以下文档:
      - `test-analysis.md`:测试分析报告(包含 KYM、TCO、MFQ 建模、测试点清单、Issues)
      - `e2e-test.md`:黑盒测试用例文档(包含用例清单、用例详情、测试数据、追溯性矩阵)

   **注意**: 如果测试分析与设计验证失败且无法继续(如 agent 执行失败、文档未生成),应记录错误信息并继续执行步骤 11(不阻塞整体流程)。

11. **规范质量验证**: 编写初始规范后, 根据质量标准进行验证:

   a. **创建规范质量检查清单**: 先执行 `specify-render-checklist.sh --feature-dir "$FEATURE_DIR"` 从 `${CLAUDE_WORKING_DIR}/.omni-infra/templates/requirements-template.md` 落盘骨架,再据规范填写勾选状态(**禁止**手写与模板结构无关的检查清单)

   b. **运行验证检查**: 根据每个检查清单项目审查规范:

   - 对于每个项目, 确定是否通过或失败
   - 记录发现的具体问题(引用相关规范章节)

   c. **处理验证结果**:

   - **如果所有项目都通过**: 标记检查清单完成并继续步骤 12
   - **如果项目失败(不包括 [NEEDS CLARIFICATION])**:

     1. 列出失败的项目和具体问题
     2. 更新规范以解决每个问题
     3. 重新运行验证直到所有项目都通过(最多 3 次迭代)
     4. 如果 3 次迭代后仍然失败, 在检查清单备注中记录剩余问题并警告用户
   - **如果 [NEEDS CLARIFICATION] 标记仍然存在**:

     1. 从规范中提取所有 [NEEDS CLARIFICATION: ...] 标记
     2. **限制检查**: 如果存在超过 3 个标记, 仅保留 3 个最关键的(按范围/安全/用户体验影响)并为其余部分做出有根据的猜测
     3. 对于每个需要的澄清(最多 3 个), 以以下格式向用户呈现选项:

        ```markdown
        ## 问题 [N]: [主题]

        **上下文**: [引用相关规范章节]

        **我们需要了解**: [来自 NEEDS CLARIFICATION 标记的具体问题]

        **建议答案**:

        | 选项   | 答案             | 含义                     |
        | ------ | ---------------- | ------------------------ |
        | A      | [第一个建议答案] | [这对功能意味着什么]     |
        | B      | [第二个建议答案] | [这对功能意味着什么]     |
        | C      | [第三个建议答案] | [这对功能意味着什么]     |
        | 自定义 | 提供你自己的答案 | [解释如何提供自定义输入] |

        **你的选择**: _[等待用户响应]_
        ```
     4. **关键 - 表格格式**: 确保 markdown 表格格式正确:

        - 使用一致的间距, 管道符对齐
        - 每个单元格内容周围应有空格: `| 内容 |` 而不是 `|内容|`
        - 标题分隔符必须至少有 3 个破折号: `|--------|`
        - 测试表格在 markdown 预览中正确渲染
     5. 按顺序编号问题(Q1、Q2、Q3 - 最多 3 个)
     6. 在等待响应之前一起呈现所有问题
     7. 等待用户响应所有问题的选择(例如, "Q1: A, Q2: 自定义 - [详情], Q3: B")
     8. 通过用用户选择或提供的答案替换每个 [NEEDS CLARIFICATION] 标记来更新规范
     9. 在所有澄清解决后重新运行验证

   d. **更新检查清单**: 每次验证迭代后, 使用当前的通过/失败状态更新检查清单文件
   e. **强制落盘**:步骤 11 结束前必须用 Write 确保 `FEATURE_DIR/checklists/requirements.md` 存在
   f. **Harness 门禁**:`specify-gate.sh --step 8 --record`;**等式验收**:检查项行数(`- [ ]` / `- [x]`)≥ 3
   g. `gate_exit=0` 后勾选步骤 11 Todo

9. **AI 质量评测**: 加载 skill `omni-dsdd:eval-specify`,对 SPEC_FILE 进行四维量规评测
   - 通过标准: overall_score >= 95
   - 若不通过: 根据 `eval-specify-report.yaml`,修复对应维度问题后重新评测(最多 2 轮,复用步骤 11 的迭代逻辑)
   - **Harness 门禁**:`specify-gate.sh --step 9 --record`(yaml 须含 `stage:`、`overall_score`)
   - `gate_exit=0` 后勾选步骤 12 Todo(质量分 < 95 可 warning,但**文件必须存在**)

13. **产物完整性校验**(步骤 14 的前置门控):
   - 执行:`verify-specify-artifacts.sh --feature-dir "$FEATURE_DIR"`(`gate --step all`)
   - 可选:`python3 "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/python/specify_harness.py" resume --feature-dir "$FEATURE_DIR"` 列出 `pending_steps` 后逐项补跑
   - 校验通过(`gate_exit=0`)后方可进入步骤 14;失败则按 `errors` 回退重做(每类最多 2 次)

14. **报告完成情况**
    - **前置条件**:步骤 13 `gate_exit=0`(须在报告中写明 `evidence: verify-specify-artifacts.sh exit 0`)
    - 报告分支名称、上下文文件路径、规范文件路径、检查清单结果、AI 评测结果(score/status)以及下一阶段(`/clarify` 或 `/design`)的准备就绪状态
    - 若步骤 10 已执行:报告 `test-analysis.md`、`e2e-test.md` 路径
    - 若步骤 10 已跳过(未启用 `--e2e`):
      - E2E 测试分析与设计已跳过(未启用 --e2e)
      - 后续在 `design` 阶段也会相应跳过 `e2e-design`(因为缺少 e2e-test.md 依赖)
      - 如需测试设计,可重新执行 `/specify --e2e` 或在执行 `design` 前单独加载 skill `omni-dsdd:e2e-specify`

15. **记录运行日志**:
    - 执行前:`source "$FEATURE_DIR/.runs/env.sh"`(已含 `FEATURE_DIR`)
    - 加载 skill `omni-dsdd:runlog-record`,将前面获取的 `start_time` 作为参数传入
    - **参数传递方式**:`/omni-dsdd:runlog-record [start_time]`(如 `/omni-dsdd:runlog-record "2026-05-15 10:30:00"`)
    - **强制落盘**:追加 `omni-metrics-log.json` 后执行 `specify-gate.sh --step 11 --record`
    - 若 `omni-dsdd:runlog-record` 失败:用 Write 直接向 JSON 追加条目 → 再跑 gate;`gate_exit=1` 不得勾选步骤 15

16. **同步 SDD 状态(routing 闭环,阻塞步骤)**:
    - 从上游 workflow 读取 `flow_mode`(express/standard/deep),**禁止**写死为 standard
    - express:`specify-finalize.sh --flow-mode express --next-stage design`
    - standard:`specify-finalize.sh --flow-mode standard --next-stage clarify`
    - deep:与 standard 相同或按 `workflows/deep.yaml` 约定
    - 执行 `specify-gate.sh --step 11.5 --record`;`gate_exit=1` 时**不得**标步骤 16 完成,**不得**输出 specify 完成报告
    - 输出 Checkpoint:`步骤16: omnispec-state updated, completed_stages includes specify`

**流程注意**:
- 上下文收集在规范生成之前执行,生成 `FEATURE_DIR/context.md`
- 规范生成参考上下文中的架构分析、可复用模式、术语对齐等信息

## 错误处理

### 常见错误

| 步骤 | 错误场景 | 处理方式 |
|------|----------|----------|
| 步骤1 | 特性上下文合并解析失败(如不在 changes/ 下) | 报错终止 |
| 步骤2 | `omni-dsdd:create-branch` 执行失败 | 重试或输出中文错误信息 |
| 步骤5 | 脚本执行失败/超时 | 使用默认 DOC_DIR (`omni-doc`) 继续 |
| 步骤5 | 脚本不存在 | 提示用户检查 `${CLAUDE_PLUGIN_ROOT}/scripts/` 目录配置 |
| 步骤6 | `omni-dsdd:spec-impact-analyze` 失败 | 写入降级版 `context.md`,不得跳过落盘 |
| 步骤10 | `omni-dsdd:e2e-specify` 失败 | 记录错误,继续步骤 11(不阻塞整体流程) |
| 步骤11 | 验证失败(3次迭代后) | 仍须写入 `checklists/requirements.md`;在清单备注中记录剩余问题并警告用户 |
| 步骤12 | AI评测不通过(2次迭代后) | 仍须写入 `eval-specify-report.yaml`;在报告中记录未达标状态 |
| 步骤4 | harness init 失败 | 重试 2 次后终止 |
| 步骤6/9/11/12/15 | 分步 gate 失败 | 按 `specify-run.json` 与 `resume` 输出回退该步,不得勾选 Todo |
| 步骤13 | 全量 gate 失败 | 回退重做缺失步骤(每类最多 2 次),不得输出完成报告 |
| 步骤15 | `omni-dsdd:runlog-record` 失败 | Write 追加日志 → 再跑 `gate --step 11` |
| 步骤16 | finalize 失败 | 重试;仍失败则警告并手动补写 `omnispec-state.json` |

## 参考文档

### OmniSpec 项目模板(工作区)
- 规范模板:`${CLAUDE_WORKING_DIR}/.omni-infra/templates/spec-template.md`
- 规范检查清单模板:`${CLAUDE_WORKING_DIR}/.omni-infra/templates/requirements-template.md`
- 项目章程:`${CLAUDE_WORKING_DIR}/.omni-infra/memory/constitution.md`

### 配置与 Harness 脚本
- Bash 前置检查:`${CLAUDE_PLUGIN_ROOT}/scripts/bash/check-prerequisites.sh`(须在 `CLAUDE_WORKING_DIR` 下执行)
- PowerShell 前置检查:`${CLAUDE_PLUGIN_ROOT}/scripts/powershell/check-prerequisites.ps1`
- **specify 专用 Harness**:
  - `scripts/python/specify_harness.py` — init / gate / record / render-* / finalize / resume
  - `scripts/python/specify_template_gate.py` — 模板契约校验
  - `scripts/bash/`、`scripts/powershell/` — 平台封装(与 create-branch 目录布局一致)
  - `references/template-contract.json` — 产物与模板的机器可读契约

## 写作指南

### 快速原则

- 专注于用户需要**什么**和**为什么**
- 避免如何实现(不涉及技术栈、API、代码结构)
- 为业务利益相关者编写,而不是为开发者
- 不要创建嵌入规范中的任何检查清单,那将是一个单独的命令

### 章节要求

- **必需章节**: 每个功能必须完成
- **可选章节**: 仅在与功能相关时包含
- 当章节不适用时, 完全删除它(不要保留为 "N/A")

### AI 生成

当从用户提示创建此规范时:

1. **做出有根据的猜测**: 使用上下文、行业标准和常见模式来填补空白
2. **记录假设**: 在假设章节中记录合理的默认值
3. **限制澄清**: 最多 3 个 [NEEDS CLARIFICATION] 标记 - 仅用于关键决策:
   - 显著影响功能范围或用户体验
   - 存在多个合理的解释且有不同的含义
   - 缺乏任何合理的默认值
4. **优先澄清**: 范围 > 安全/隐私 > 用户体验 > 技术细节
5. **像测试人员一样思考**: 每个模糊的需求都应该在"可测试且明确"的检查清单项目上失败
6. **NEEDS CLARIFICATION 的常见领域**(仅在没有合理默认值时):
   - 功能范围和边界(包含/排除特定用例)
   - 用户类型和权限(如果可能存在多个冲突的解释)
   - 安全/合规要求(当具有法律/财务重要性时)

**合理默认值的示例**(不要询问这些):

- 数据保留: 该行业的行业标准实践
- 性能目标: 标准 Web/移动应用期望, 除非另有说明
- 错误处理: 用户友好的消息和适当的回退
- 认证方法: Web 应用的标准基于会话或 OAuth2
- 集成模式: RESTful API, 除非另有说明

### 成功标准指南

成功标准必须是:

1. **可衡量的**: 包括具体指标(时间、百分比、计数、速率)
2. **技术无关的**: 不提及框架、语言、数据库或工具
3. **以用户为中心的**: 从用户/业务角度描述结果, 而不是系统内部
4. **可验证的**: 无需了解实现细节即可测试/验证

**好的示例**:

- "用户可以在 3 分钟内完成结账"
- "系统支持 10,000 个并发用户"
- "95% 的搜索在 1 秒内返回结果"
- "任务完成率提高 40%"

**坏的示例**(以实现为中心):

- "API 响应时间在 200ms 以下"(太技术化, 使用"用户立即看到结果")
- "数据库可以处理 1000 TPS"(实现细节, 使用面向用户的指标)
- "React 组件高效渲染"(框架特定)
- "Redis 缓存命中率超过 80%"(技术特定)

## 上下文管理

### Todo 集成
- 步骤 0 使用 TodoWrite 工具创建 TodoList,跟踪步骤 0 至 16 的执行进度
- 每个步骤完成后立即将对应 Todo 项标记为已完成
- 步骤间的中间结果通过 TodoList 的任务描述传递

### 阶段间数据传递(Harness:只传路径,不传全文)
- **步骤1 → 步骤2**:预解析得到的 `FEATURE_DIR` / `BRANCH_NAME` 传入 `omni-dsdd:create-branch`;步骤 3 起以 `omni-dsdd:create-branch` **返回值**为准
- **步骤2 → 步骤4**:`paths.json` + `env.sh` 为唯一真值源;禁止用对话记忆替代路径
- **步骤6 → 步骤7**:`context.md`(优先)或 `context.payload.json`
- **步骤8 → 步骤9**:`spec.md` 通过文件传递
- **步骤13 → 步骤14**:`verify-specify-artifacts.sh` 的 `gate_exit` 作为完成证据
- **步骤16 → routing**:`.omnispec-state.json` 的 `completed_stages`

### 错误恢复与断点续跑
- `python3 "${CLAUDE_PLUGIN_ROOT}/skills/specify/scripts/python/specify_harness.py" resume --feature-dir "$FEATURE_DIR"` 获取 `pending_steps`
- 仅重跑 `pending_steps` 对应步骤,已 `passed` 步骤**禁止**重复生成覆盖
- DOC_DIR 脚本失败仍可用默认 `omni-doc`(步骤 5 例外,不跳过落盘类步骤)
Pliki w paczce (21)
  • SKILL.md 36 KB
  • references/template-contract.json 4 KB
  • scripts/bash/specify-finalize.sh 1 KB
  • scripts/bash/specify-gate.sh 1 KB
  • scripts/bash/specify-harness-common.sh 1 KB
  • scripts/bash/specify-init-harness.sh 2 KB
  • scripts/bash/specify-render-checklist.sh 1 KB
  • scripts/bash/specify-render-context.sh 1 KB
  • scripts/bash/specify-render-spec.sh 1 KB
  • scripts/bash/verify-specify-artifacts.sh 1 KB
  • scripts/powershell/Specify-HarnessCommon.ps1 1 KB
  • scripts/powershell/specify-finalize.ps1 1 KB
  • scripts/powershell/specify-gate.ps1 1 KB
  • scripts/powershell/specify-init-harness.ps1 2 KB
  • scripts/powershell/specify-render-checklist.ps1 1 KB
  • scripts/powershell/specify-render-context.ps1 1 KB
  • scripts/powershell/specify-render-spec.ps1 1 KB
  • scripts/powershell/verify-specify-artifacts.ps1 1 KB
  • scripts/python/specify_harness.py 33 KB
  • scripts/python/specify_template_gate.py 7 KB
  • scripts/python/test_specify_template_gate.py 3 KB

Wersje

RepozytoriumWynikLicencja
Ta strona · zte-aicloud/co-omnispec95MIT
xoai/sage100MIT
ghaida/intent100CC0-1.0
rikdc/claude_code_template100MPL-2.0
genkovich/sdd90MIT
wanghaisheng/openaiworkhorse-design-team90MIT
handarbeit/fabrik84Apache-2.0

Migawka bazy z 28.10.2026 · wersja paczki 3679486cfcd7 (skrót SHA-256 całej paczki)

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100sdd-spec
    Tworzy PRD dla nowej funkcji lub zmiany w formie pliku .md, który zasila sdd-plan.
  • 100sdd
    Tworzy specyfikację, kryteria akceptacji lub graf zadań przed nietrywialną implementacją, w workflow /sdd.
  • 100specify-solution
    Tworzy i waliduje dokumenty projektu rozwiązania (SDD): architektura, interfejsy, decyzje techniczne, analiza komponentów i pliki solution.md w .start/specs/.
  • 100specify-requirement
    Analizuje wpływ zmiany biznesowej na istniejące wymagania i dopisuje do spec.md zmiany INSERT, MODIFY, DELETE lub REFER w składni EARS.
  • 100write-specs
    Tworzy lub doprecyzowuje specyfikację funkcji SPEC SDD przed rozpoczęciem implementacji.
  • 100e2e-specify
    Analizuje i projektuje testy metodyką MFQ i PPDCS: wyciąga punkty testowe z wymagań i projektuje czarnoskrzynkowe przypadki metodą TCON, tworząc test-analysis.md i e2e-test.md.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.