关于 speckit-implement
speckit-implement 是 Spec Kit 技能,依据功能计划和任务清单引导实施,并涵盖前置检查、验证与扩展钩子。
主要功能
- 01检查实施前后的扩展钩子
- 02读取前置条件、清单、计划和任务文件
- 03按阶段与依赖安排工作
- 04跟踪进度并标记已完成任务
- 05验证实现与测试
适用场景
- 01按 Spec Kit 任务计划实施功能
- 02在开发前检查项目忽略文件
- 03按任务跟踪计划工作的进展
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dceoy/ speckit-agent-skills --skill speckit-implement安装后在 Claude Code 中输入/speckit-implement确认已加载。
详细介绍
用户输入
$ARGUMENTS
继续之前,必须考虑用户输入(如果不为空)。
执行前检查
检查扩展钩子(实施前):
- 检查项目根目录中是否存在
.specify/extensions.yml。 - 如果存在,请读取该文件并查找
hooks.before_implement键下的条目。 - 如果无法解析 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不存在,则静默跳过。
大纲
-
在仓库根目录运行
.specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks,并解析 FEATURE_DIR 和 AVAILABLE_DOCS 列表。所有路径都必须是绝对路径。对于参数中的单引号(例如 "I'm Groot"),请使用转义语法,例如 'I'''m Groot'(也可以使用双引号:"I'm Groot")。 -
检查清单状态(如果存在 FEATURE_DIR/checklists/):
-
将清单标记视为只读门槛:扫描复选框状态、报告状态,并在需要时询问是否继续;不要修改清单文件或标记。
-
checklists/requirements.md是由/speckit-specify和/speckit-clarify维护的内置规范质量清单;/speckit-checklist生成的自定义清单是由评审人员维护的需求质量评审材料。 -
对于自定义清单,
[x]表示评审人员认定需求质量标准已满足;这并不表示实施工作已完成。 -
扫描 checklists/ 目录中的所有清单文件。
-
对于每份清单,统计:
- 总项数:所有匹配
- [ ]、- [X]或- [x]的行。 - 已勾选项数:匹配
- [X]或- [x]的行。 - 未勾选项数:匹配
- [ ]的行。
- 总项数:所有匹配
-
创建状态表:
| 清单 | 总数 | 已勾选 | 未勾选 | 状态 | |-----------|-------|---------|-----------|--------| | ux.md | 12 | 12 | 0 | ✓ PASS | | test.md | 8 | 5 | 3 | ✗ FAIL | | security.md | 6 | 6 | 0 | ✓ PASS | -
计算总体状态:
- PASS:所有清单的未勾选项均为 0。
- FAIL:一个或多个清单存在未勾选项。
-
如果有任何清单包含未勾选项:
- 显示包含未勾选项数量的表格
- 停止并询问:“有些清单包含未勾选项。仍要继续实施吗?(yes/no)”
- 等待用户回复后再继续
- 如果用户回答“no”“wait”或“stop”,则停止执行
- 如果用户回答“yes”“proceed”或“continue”,则继续执行步骤 3
-
如果所有清单都已勾选:
- 显示表格,表明所有清单均已通过
- 自动继续执行步骤 3
-
-
加载并分析实施上下文:
- 必需:阅读 tasks.md,了解完整任务列表和执行计划
- 必需:阅读 plan.md,了解技术栈、架构和文件结构
- 如存在:阅读 data-model.md,了解实体及其关系
- 如存在:阅读 contracts/,了解 API 规范和测试要求
- 如存在:阅读 research.md,了解技术决策和约束
- 如存在:阅读 .specify/memory/constitution.md,了解治理约束
- 如存在:阅读 quickstart.md,了解集成场景
-
项目设置验证:
- 必需:根据实际项目设置创建或验证忽略文件:
检测与创建逻辑:
-
检查以下命令是否成功,以确定仓库是否为 git 仓库(若是,则创建或验证 .gitignore):
git rev-parse --git-dir 2>/dev/null -
检查是否存在 Dockerfile* 或 plan.md 中是否提及 Docker → 创建或验证 .dockerignore
-
检查是否存在 .eslintrc* → 创建或验证 .eslintignore
-
检查是否存在 eslint.config.* → 确保配置中的
ignores条目涵盖必需的模式 -
检查是否存在 .prettierrc* → 创建或验证 .prettierignore
-
检查是否存在 .npmrc 或 package.json → 创建或验证 .npmignore(如果要发布)
-
检查是否存在 terraform 文件(*.tf)→ 创建或验证 .terraformignore
-
检查是否需要 .helmignore(存在 helm charts)→ 创建或验证 .helmignore
如果忽略文件已存在:验证其是否包含必要模式,仅追加缺失的关键模式 如果忽略文件不存在:根据检测到的技术创建包含完整模式集的文件
按技术分类的常见模式(来自 plan.md 中的技术栈):
- Node.js/JavaScript/TypeScript:
node_modules/、dist/、build/、*.log、.env* - Python:
__pycache__/、*.pyc、.venv/、venv/、dist/、*.egg-info/ - Java:
target/、*.class、*.jar、.gradle/、build/ - C#/.NET:
bin/、obj/、*.user、*.suo、packages/ - Go:
*.exe、*.test、vendor/、*.out - Ruby:
.bundle/、log/、tmp/、*.gem、vendor/bundle/ - PHP:
vendor/、*.log、*.cache、*.env - Rust:
target/、debug/、release/、*.rs.bk、*.rlib、*.prof*、.idea/、*.log、.env* - Kotlin:
build/、out/、.gradle/、.idea/、*.class、*.jar、*.iml、*.log、.env* - C++:
build/、bin/、obj/、out/、*.o、*.so、*.a、*.exe、*.dll、.idea/、*.log、.env* - C:
build/、bin/、obj/、out/、*.o、*.a、*.so、*.exe、*.dll、autom4te.cache/、config.status、config.log、.idea/、*.log、.env* - Swift:
.build/、DerivedData/、*.swiftpm/、Packages/ - R:
.Rproj.user/、.Rhistory、.RData、.Ruserdata、*.Rproj、packrat/、renv/ - 通用:
.DS_Store、Thumbs.db、*.tmp、*.swp、.vscode/、.idea/工具专属模式: - Docker:
node_modules/、.git/、Dockerfile*、.dockerignore、*.log*、.env*、coverage/ - ESLint:
node_modules/、dist/、build/、coverage/、*.min.js - Prettier:
node_modules/、dist/、build/、coverage/、package-lock.json、yarn.lock、pnpm-lock.yaml - Terraform:
.terraform/、*.tfstate*、*.tfvars、.terraform.lock.hcl - Kubernetes/k8s:
*.secret.yaml、secrets/、.kube/、kubeconfig*、*.key、*.crt
-
解析 tasks.md 结构并提取:
- 任务阶段:Setup、Tests、Core、Integration、Polish
- 任务依赖关系:顺序执行与并行执行规则
- 任务详情:ID、描述、文件路径、并行标记 [P]
- 执行流程:顺序和依赖要求
-
按照任务计划执行实现:
- 按阶段执行:完成当前阶段后再进入下一阶段
- 遵守依赖关系:按顺序执行顺序任务;并行任务 [P] 可以同时执行
- 遵循 TDD 方法:先执行测试任务,再执行对应的实现任务
- 基于文件协调:影响相同文件的任务必须按顺序执行
- 验证检查点:确认每个阶段已完成后再继续
-
实现执行规则:
- 先进行设置:初始化项目结构、依赖项和配置
- 先写测试,再写代码:如果需要为契约、实体和集成场景编写测试
- 核心开发:实现模型、服务、CLI 命令和端点
- 集成工作:数据库连接、中间件、日志记录和外部服务
- 收尾与验证:单元测试、性能优化和文档
-
进度跟踪与错误处理:
- 每完成一项任务后报告进度
- 如果任何非并行任务失败,则停止执行
- 对于并行任务 [P],继续执行成功的任务,并报告失败的任务
- 提供清晰且包含调试上下文的错误消息
- 如果无法继续实现,建议后续步骤
- IMPORTANT 对于已完成的任务,务必在 tasks 文件中将其标记为 [X]。
-
完成情况验证:
- 验证所有必需任务均已完成
- 检查已实现功能是否符合原始规范
- 验证测试是否通过且覆盖率是否达到要求
- 确认实现符合技术计划
注意:此命令假设 tasks.md 中包含完整的任务分解。如果任务不完整或缺失,建议先运行 /speckit-tasks 重新生成任务列表。
强制性执行后钩子
向用户报告完成情况之前,必须完成本节。
检查项目根目录中是否存在 .specify/extensions.yml。
- 如果该文件不存在,或
hooks.after_implement下未注册任何钩子,则跳到“完成报告”。 - 如果该文件存在,请读取它并查找
hooks.after_implement键下的条目。 - 如果无法解析 YAML 或 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}标识不同,例如,skills 模式的 Agent 会运行/skill:speckit-...或$speckit-...)。仅输出该区块并不会运行钩子。 -
可选钩子(
optional: true):## 扩展钩子 **可选钩子**:{extension} 命令:`/{command}` 描述:{description} 提示词:{prompt} 执行方式:`/{command}`
-
完成报告
汇报最终状态,并总结已完成的工作。
完成条件
- 已完成
tasks.md中的所有任务,并将其标记为[X] - 已根据规范、计划和测试覆盖情况验证实现
- 已按照上述“强制性执行后钩子”中的规则执行或跳过扩展钩子
- 已向用户报告完成情况并总结已完成的工作