mcpField
S
speckit-implement

speckit-implement

github.com/dceoy开发1562.4k 次安装2 天前更新
代码仓库

关于 speckit-implement

speckit-implement 是 Spec Kit 技能,依据功能计划和任务清单引导实施,并涵盖前置检查、验证与扩展钩子。

主要功能

  1. 01检查实施前后的扩展钩子
  2. 02读取前置条件、清单、计划和任务文件
  3. 03按阶段与依赖安排工作
  4. 04跟踪进度并标记已完成任务
  5. 05验证实现与测试

适用场景

  1. 01按 Spec Kit 任务计划实施功能
  2. 02在开发前检查项目忽略文件
  3. 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 不存在,则静默跳过。

大纲

  1. 在仓库根目录运行 .specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks,并解析 FEATURE_DIR 和 AVAILABLE_DOCS 列表。所有路径都必须是绝对路径。对于参数中的单引号(例如 "I'm Groot"),请使用转义语法,例如 'I'''m Groot'(也可以使用双引号:"I'm Groot")。

  2. 检查清单状态(如果存在 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
  3. 加载并分析实施上下文:

    • 必需:阅读 tasks.md,了解完整任务列表和执行计划
    • 必需:阅读 plan.md,了解技术栈、架构和文件结构
    • 如存在:阅读 data-model.md,了解实体及其关系
    • 如存在:阅读 contracts/,了解 API 规范和测试要求
    • 如存在:阅读 research.md,了解技术决策和约束
    • 如存在:阅读 .specify/memory/constitution.md,了解治理约束
    • 如存在:阅读 quickstart.md,了解集成场景
  4. 项目设置验证:

    • 必需:根据实际项目设置创建或验证忽略文件:

    检测与创建逻辑:

    • 检查以下命令是否成功,以确定仓库是否为 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
  5. 解析 tasks.md 结构并提取:

    • 任务阶段:Setup、Tests、Core、Integration、Polish
    • 任务依赖关系:顺序执行与并行执行规则
    • 任务详情:ID、描述、文件路径、并行标记 [P]
    • 执行流程:顺序和依赖要求
  6. 按照任务计划执行实现:

    • 按阶段执行:完成当前阶段后再进入下一阶段
    • 遵守依赖关系:按顺序执行顺序任务;并行任务 [P] 可以同时执行
    • 遵循 TDD 方法:先执行测试任务,再执行对应的实现任务
    • 基于文件协调:影响相同文件的任务必须按顺序执行
    • 验证检查点:确认每个阶段已完成后再继续
  7. 实现执行规则:

    • 先进行设置:初始化项目结构、依赖项和配置
    • 先写测试,再写代码:如果需要为契约、实体和集成场景编写测试
    • 核心开发:实现模型、服务、CLI 命令和端点
    • 集成工作:数据库连接、中间件、日志记录和外部服务
    • 收尾与验证:单元测试、性能优化和文档
  8. 进度跟踪与错误处理:

    • 每完成一项任务后报告进度
    • 如果任何非并行任务失败,则停止执行
    • 对于并行任务 [P],继续执行成功的任务,并报告失败的任务
    • 提供清晰且包含调试上下文的错误消息
    • 如果无法继续实现,建议后续步骤
    • IMPORTANT 对于已完成的任务,务必在 tasks 文件中将其标记为 [X]。
  9. 完成情况验证:

    • 验证所有必需任务均已完成
    • 检查已实现功能是否符合原始规范
    • 验证测试是否通过且覆盖率是否达到要求
    • 确认实现符合技术计划

注意:此命令假设 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]
  • 已根据规范、计划和测试覆盖情况验证实现
  • 已按照上述“强制性执行后钩子”中的规则执行或跳过扩展钩子
  • 已向用户报告完成情况并总结已完成的工作

评论

支持 Markdown