关于 speckit-specify
speckit-specify 是 Spec Kit 技能,可将功能描述整理为规格文档、质量清单和功能目录,并支持配置执行前后的扩展钩子。
主要功能
- 01生成功能规格文档
- 02创建编号功能目录
- 03解析并复制当前规格模板
- 04使用质量清单进行验证
- 05运行已配置的扩展钩子
适用场景
- 01根据功能请求起草规格
- 02为后续命令准备功能目录
- 03在规划前检查规格完整性
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dceoy/ speckit-agent-skills --skill speckit-specify安装后在 Claude Code 中输入/speckit-specify确认已加载。
详细介绍
用户输入
$ARGUMENTS
继续之前,必须考虑用户输入(如果非空)。
执行前检查
检查扩展钩子(在规范编写之前):
- 检查项目根目录中是否存在
.specify/extensions.yml。 - 如果存在,请读取文件,并查找
hooks.before_specify键下的条目 - 如果无法解析 YAML 或 YAML 无效,请勿默默跳过:告知用户无法读取
.specify/extensions.yml(并附上解析器错误),且未检查任何钩子,包括其中注册的所有强制钩子(optional: false),然后正常继续 - 过滤掉
enabled明确设为false的钩子。未设置enabled字段的钩子默认视为启用。 - 对于其余钩子,不要尝试解释或评估钩子的
condition表达式:- 如果钩子没有
condition字段,或该字段为 null/空,则视为可执行 - 如果钩子定义了非空的
condition,则跳过该钩子,并将条件评估留给 HookExecutor 实现
- 如果钩子没有
- 根据钩子命令名称构建命令调用时,将点(
.)替换为连字符(-)。例如,speckit.git.commit→/speckit-git-commit。 - 对于每个可执行钩子,根据其
optional标志输出以下内容:-
可选钩子(
optional: true):## 扩展钩子 **可选前置钩子**:{extension} 命令:`/{command}` 描述:{description} 提示词:{prompt} 执行:`/{command}` -
强制钩子(
optional: false):## 扩展钩子 **自动前置钩子**:{extension} 正在执行:`/{command}` EXECUTE_COMMAND: {command} 等待钩子命令执行完毕后,再继续到大纲部分。输出上述内容块后,必须实际调用该钩子,并等待其完成后再继续。以与在此 Agent/会话中自行运行命令相同的方式运行它(调用方式可能不同于显示的
{command}ID,例如,技能模式的 Agent 会运行/skill:speckit-...或$speckit-...)。仅输出内容块并不代表已运行钩子。
-
- 如果未注册钩子,或
.specify/extensions.yml不存在,则静默跳过
大纲
触发消息中用户在 /speckit-specify 后输入的文本就是功能描述。即使 $ARGUMENTS 在下文中按字面出现,也应假设你在本次对话中始终可以获取该功能描述。除非用户提供的是空命令,否则不要要求用户重复输入。
根据该功能描述,执行以下操作:
-
生成简洁的短名称(2–4 个词),用于该功能:
- 分析功能描述,提取最有意义的关键词
- 创建一个能概括功能核心的 2–4 词短名称
- 尽可能采用“动作-名词”格式(例如,“add-user-auth”“fix-payment-bug”)
- 保留技术术语和首字母缩略词(OAuth2、API、JWT 等)
- 名称应简洁明了,并能让人一眼看懂
- 示例:
- “我想添加用户身份验证” → “user-auth”
- “为 API 实现 OAuth2 集成” → “oauth2-api-integration”
- “创建分析仪表板” → “analytics-dashboard”
- “修复支付处理超时错误” → “fix-payment-timeout”
-
创建分支(可选,通过钩子实现):
如果上文执行前检查中的
before_specify钩子已成功运行,它会创建/切换到一个 Git 分支,并输出包含BRANCH_NAME和FEATURE_NUM的 JSON。请记录这些值以供参考,但分支名称不决定规范目录名称。如果用户明确提供了
GIT_BRANCH_NAME,请将其传递给钩子,以便分支脚本使用该精确值作为分支名称(不生成任何前缀/后缀)。 -
创建功能规范目录: 除非用户明确提供
SPECIFY_FEATURE_DIRECTORY,否则规范文件位于默认的specs/目录下。SPECIFY_FEATURE_DIRECTORY的解析顺序:- 如果用户明确提供了
SPECIFY_FEATURE_DIRECTORY(例如通过环境变量、参数或配置),则按原样使用 - 否则,在
specs/下自动生成:- 检查
.specify/init-options.json中的feature_numbering(首选)或branch_numbering(已弃用,仅用于迁移——将在未来版本中移除) - 如果值为
"timestamp":前缀为YYYYMMDD-HHMMSS(当前时间戳) - 如果值为
"sequential"或未设置:前缀为NNN(扫描specs/中现有目录后,取下一个可用的 3 位数字) - 构造目录名称:
<prefix>-<short-name>(例如,003-user-auth或20260319-143022-user-auth) - 将
SPECIFY_FEATURE_DIRECTORY设置为specs/<directory-name> - 如果使用了
branch_numbering(且未设置feature_numbering),则输出一行警告:"⚠️branch_numberingin init-options.json is deprecated. Rename tofeature_numbering."
- 检查
创建目录和规范文件:
-
mkdir -p SPECIFY_FEATURE_DIRECTORY -
通过 Spec Kit 预设/模板解析堆栈解析当前启用的
spec-template(相当于specify preset resolve spec-template) -
将解析后的
spec-template文件复制到SPECIFY_FEATURE_DIRECTORY/spec.md,作为起始模板 -
将
SPEC_FILE设置为SPECIFY_FEATURE_DIRECTORY/spec.md -
将解析后的路径持久化到
.specify/feature.json:{ "feature_directory": "<resolved feature dir>" }写入实际解析后的目录路径值(例如,
specs/003-user-auth),不要写入字面字符串SPECIFY_FEATURE_DIRECTORY。 这样,下游命令(/speckit-plan、/speckit-tasks等)就能找到功能目录,而无需依赖 git 分支名称约定。
重要:
- 每次调用
/speckit-specify只能创建一个功能 - 规范目录名称和 git 分支名称彼此独立——两者可以相同,但由用户决定
- 规范目录和文件始终由此命令创建,而不是由钩子创建
- 如果用户明确提供了
-
加载解析后的当前启用的
spec-template文件,了解必需的章节。 -
如果存在:加载
.specify/memory/constitution.md,了解项目原则和治理约束。 -
遵循以下执行流程:
- 从参数中解析用户描述 如果为空:错误 "No feature description provided"
- 从描述中提取关键概念 识别:参与者、操作、数据、约束
- 对于不明确的方面:
- 根据上下文和行业标准做出合理推断
- 仅在以下情况下使用 [NEEDS CLARIFICATION: specific question] 标记:
- 该选择会显著影响功能范围或用户体验
- 存在多种合理解释,且影响各不相同
- 没有合理的默认选项
- 限制:总计最多 3 个 [NEEDS CLARIFICATION] 标记
- 按影响优先处理需要澄清的问题:范围 > 安全/隐私 > 用户体验 > 技术细节
- 填写用户场景与测试章节 如果无法确定清晰的用户流程:错误 "Cannot determine user scenarios"
- 生成功能需求 每项需求都必须可测试 对未指定的细节采用合理默认值(在假设章节中记录这些假设)
- 定义成功标准 创建可衡量且与技术无关的结果 包含定量指标(时间、性能、规模)和定性指标(用户满意度、任务完成情况) 每项标准都必须能在不涉及实现细节的情况下验证
- 识别关键实体(如果涉及数据)
- 返回:SUCCESS(规范已准备好进行规划)
-
使用模板结构将规格说明写入 SPEC_FILE,并将占位符替换为根据功能描述(参数)得出的具体内容,同时保留各节的顺序和标题。
-
规格说明质量验证:编写初版规格说明后,按照质量标准进行验证:
a. 创建规格说明质量检查清单:使用检查清单模板结构,在
SPECIFY_FEATURE_DIRECTORY/checklists/requirements.md创建检查清单文件,并包含以下验证项:# Specification Quality Checklist: [FEATURE NAME] **Purpose**: Validate specification completeness and quality before proceeding to planning **Created**: [DATE] **Feature**: [Link to spec.md] ## Content Quality - [ ] No implementation details (languages, frameworks, APIs) - [ ] Focused on user value and business needs - [ ] Written for non-technical stakeholders - [ ] All mandatory sections completed ## Requirement Completeness - [ ] No [NEEDS CLARIFICATION] markers remain - [ ] Requirements are testable and unambiguous - [ ] Success criteria are measurable - [ ] Success criteria are technology-agnostic (no implementation details) - [ ] All acceptance scenarios are defined - [ ] Edge cases are identified - [ ] Scope is clearly bounded - [ ] Dependencies and assumptions identified ## Feature Readiness - [ ] All functional requirements have clear acceptance criteria - [ ] User scenarios cover primary flows - [ ] Feature meets measurable outcomes defined in Success Criteria - [ ] No implementation details leak into specification ## Notes - Items marked incomplete require spec updates before `/speckit-clarify` or `/speckit-plan`b. 执行验证检查:逐项对照检查清单审查规格说明:
- 判断每一项通过还是未通过
- 记录发现的具体问题(引用相关规格说明章节)
c. 处理验证结果:
-
如果所有项目均通过:将检查清单标记为已完成,并继续执行「强制执行后钩子」部分
-
如果存在未通过项(不包括 [NEEDS CLARIFICATION]):
- 列出未通过项及具体问题
- 更新规格说明,解决每个问题
- 重新运行验证,直到所有项目均通过(最多迭代 3 次)
- 如果迭代 3 次后仍有未通过项,在检查清单备注中记录剩余问题并向用户发出警告
-
如果仍有 [NEEDS CLARIFICATION] 标记:
-
从规格说明中提取所有 [NEEDS CLARIFICATION: ...] 标记
-
数量限制:如果标记超过 3 个,只保留影响范围、安全性或用户体验最关键的 3 个,其余部分根据合理判断做出推测
-
对于每项待澄清内容(最多 3 项),按以下格式向用户提供选项:
## 问题 [N]:[主题] **背景**:[引用相关规格说明章节] **需要了解的内容**:[NEEDS CLARIFICATION 标记中的具体问题] **建议答案**: | 选项 | 答案 | 影响 | | ---- | ------------------------- | ------------------------------------- | | A | [第一个建议答案] | [这对该功能意味着什么] | | B | [第二个建议答案] | [这对该功能意味着什么] | | C | [第三个建议答案] | [这对该功能意味着什么] | | 自定义 | 提供你自己的答案 | [说明如何提供自定义输入] | **你的选择**:_[等待用户回复]_ -
重要——表格格式:确保 Markdown 表格格式正确:
- 使用一致的空格,并对齐竖线
- 每个单元格的内容两侧都应有空格:
| 内容 |,而不是|内容| - 表头分隔行至少包含 3 个短横线:
|--------| - 检查表格在 Markdown 预览中是否能正确显示
-
按顺序为问题编号(Q1、Q2、Q3,最多 3 个)
-
一次性提出所有问题,然后等待回复
-
等待用户回答所有问题(例如:“Q1: A, Q2: 自定义 - [详情], Q3: B”)
-
将每个 [NEEDS CLARIFICATION] 标记替换为用户选择或提供的答案,以此更新规格说明
-
所有待澄清内容解决后,重新运行验证
-
d. 更新检查清单:每轮验证后,根据当前的通过/未通过状态更新检查清单文件
必须执行的执行后钩子
在向用户报告完成之前,你必须完成本节。
检查项目根目录中是否存在 .specify/extensions.yml。
- 如果文件不存在,或
hooks.after_specify下未注册任何钩子,请跳到“完成报告”。 - 如果文件存在,请读取并查找
hooks.after_specify键下的条目。 - 如果 YAML 无法解析或无效,请勿静默跳过:告知用户无法读取
.specify/extensions.yml(包括解析器错误),并说明未检查任何钩子,其中也包括此处注册的任何必需钩子(optional: false),然后继续“完成报告”。 - 筛除
enabled明确设为false的钩子。未设置enabled字段的钩子默认视为已启用。 - 对其余每个钩子,不要尝试解释或求值钩子的
condition表达式:- 如果钩子没有
condition字段,或该字段为 null/空,则视为可执行 - 如果钩子定义了非空的
condition,则跳过该钩子,并将条件求值留给 HookExecutor 实现
- 如果钩子没有
- 根据钩子命令名称构造命令调用时,将点号(
.)替换为连字符(-)。例如,speckit.git.commit→/speckit-git-commit。 - 对每个可执行钩子,根据其
optional标志输出以下内容:-
必需钩子(
optional: false)——每个必需钩子都必须输出EXECUTE_COMMAND::## 扩展钩子 **自动钩子**:{extension} 正在执行:`/{command}` EXECUTE_COMMAND: {command}输出上述内容后,你必须实际调用该钩子,并等待其执行完毕后再继续。按照你在此 Agent/会话中亲自运行命令的方式运行它(实际调用方式可能与上面显示的字面
{command}ID 不同,例如,skills 模式的 Agent 可能会运行/skill:speckit-...或$speckit-...)。仅输出上述内容并不会运行钩子。 -
可选钩子(
optional: true):## 扩展钩子 **可选钩子**:{extension} 命令:`/{command}` 描述:{description} 提示:{prompt} 执行方式:`/{command}`
-
完成报告
通过以下内容向用户报告完成情况:
SPECIFY_FEATURE_DIRECTORY— 功能目录路径SPEC_FILE— 规范文件路径- 检查清单结果摘要
- 是否已准备好进入下一阶段(
/speckit-clarify或/speckit-plan)
注意: 分支创建由 before_specify 钩子(git 扩展)负责。规范目录和文件始终由此核心命令创建。
快速指南
- 聚焦用户需要什么以及为什么。
- 避免涉及如何实现(不涉及技术栈、API、代码结构)。
- 面向业务相关人员,而非开发者。
- 不要在规范中创建内嵌检查清单。检查清单将由单独的命令创建。
章节要求
- 必需章节:每个功能都必须填写
- 可选章节:仅在与功能相关时纳入
- 不适用的章节应彻底删除(不要保留为“ N/A”)
用于 AI 生成
根据用户提示创建此规范时:
- 做出有依据的猜测:利用上下文、行业标准和常见模式填补空白
- 记录假设:在“假设”部分记录合理的默认值
- 限制澄清项:最多使用 3 个 [NEEDS CLARIFICATION] 标记;仅用于以下关键决策:
- 对功能范围或用户体验有重大影响
- 存在多种合理解释,且各自影响不同
- 没有任何合理的默认值
- 确定澄清优先级:范围 > 安全/隐私 > 用户体验 > 技术细节
- 像测试人员一样思考:每项模糊需求都应无法通过“可测试且明确无歧义”检查项
- 通常需要澄清的领域(仅在没有合理默认值时):
- 功能范围和边界(是否纳入或排除特定用例)
- 用户类型和权限(存在多种相互冲突的合理解释时)
- 安全/合规要求(可能造成重大法律/财务影响时)
合理默认值示例(无需询问):
- 数据保留:采用该领域的行业标准做法
- 性能目标:未指定时,采用标准 Web/移动应用的预期
- 错误处理:提供对用户友好的消息和恰当的回退方案
- 身份验证方式:Web 应用采用标准的基于会话或 OAuth2 的方式
- 集成模式:采用适合项目的模式(Web 服务使用 REST/GraphQL,库使用函数调用,工具使用 CLI 参数等)
成功标准指南
成功标准必须:
- 可衡量:包含具体指标(时间、百分比、数量、比率)
- 与技术无关:不得提及框架、语言、数据库或工具
- 以用户为中心:描述用户/业务层面的结果,而非系统内部情况
- 可验证:无需了解实现细节即可测试/验证
良好示例:
- “用户可在 3 分钟内完成结账”
- “系统支持 10,000 名并发用户”
- “95% 的搜索能在 1 秒内返回结果”
- “任务完成率提升 40%”
不良示例(以实现为重点):
- “API 响应时间低于 200ms”(过于技术化,应改为“用户能立即看到结果”)
- “数据库可处理 1000 TPS”(实现细节,应改为面向用户的指标)
- “React 组件渲染效率高”(特定于框架)
- “Redis 缓存命中率高于 80%”(特定于技术)
完成条件
- 规范已写入
SPEC_FILE,并根据质量检查清单完成验证 - 已根据上述“强制执行后钩子”中的规则,触发或跳过扩展钩子
- 已向用户报告完成情况,包括功能目录、规范文件路径和检查清单结果