如何将你的手动检查转化为技能,让 Claude 自行完成反馈闭环。
- 分类:Claude Code
- 产品:Claude Code
- 日期:2026 年 7 月 22 日
- 阅读时间:5 分钟
- 分享链接:https://claude.com/blog/building-verification-loops-in-claude-code-with-skills
大多数智能编码会话都遵循一个循环:你提出修改要求,Claude 收集上下文、采取行动、验证结果,并在必要时循环回去收集更多上下文。
验证是智能体在回复前检查自己工作成果的方式。Claude 已经通过观察代码库中的确定性信号(包括类型检查器、代码检查工具、测试和运行时错误)来完成部分验证工作。而 Claude 无法推断的部分,则变成了你手动检查某个功能所需的步骤。
不过,这些手动步骤可以转化为验证循环。在 Claude Code 中,验证循环是一个迭代过程,Claude 在此过程中检查并尝试修复工作成果。

在本文中,我们将介绍最常见的验证循环类型,并展示我们在 Anthropic 内部使用的做法。然后,我们将演示如何将你已经执行的手动检查编码为技能,这样 Claude 就能自行完成反馈闭环,而你可以在其迭代期间专注于其他工作。
内置验证循环
Built-in verification loops
在深入设计自定义验证循环之前,了解 Claude 对多种不同验证循环的内置支持会很有帮助。常见的功能和方法包括:
- /verify 技能:构建、运行并观察你应用程序中的变更。
- 工具链:Claude 旨在捕获并处理你提供的任何工具(如代码检查工具)返回的错误代码和警告。一个好的做法是将你确切的构建和测试命令列在 CLAUDE.md 中,这样 Claude 就不必去推断它们。
- 代码审查(研究预览版):一个托管的多智能体服务,在你启用的仓库中,对拉取请求(PR)自动执行审查。你可以手动修复发现的问题并推送,或者通过在被发现的问题上评论 @claude 来关闭循环(前提是你已经设置并配置好了 GitHub Actions,见下文)。
- GitHub Actions:定义一个工作流,调用带有验证技能的 Claude,这样你本地运行的相同检查会在每次推送或 PR 时自动触发。
- 规范验证:一种技能,用于根据仓库中的 Markdown 规范验证每次变更,并尝试修复违规项。
- Claude Managed Agents 中的评分标准(测试版):一个托管的智能体服务,允许你使用一个独立的评分智能体根据评分标准验证结果。失败的项会自动循环回去进行返工。
编写验证循环
Writing verification loops
当你有一个现有项目,并且发现自己每次在 Claude 为你实现新功能时都要做同样的小修正,那么是时候将这些步骤转化为你自己的自定义验证循环了。第一步是写下你每次都会做的所有事情。
同样,如果你正在启动一个新项目,并且需要弄清楚项目应该如何运作,也适用此方法。用简单的英文写下最佳实践版本,就像你在第一天交给新队友的那样。
如果你难以清晰地表达验证检查本身,可以先向 Claude 询问最佳实践,然后在此基础上进行编辑。你的版本可能在几个特定点上有所不同,而这些差异正是你想要捕捉的关键。
💡 专业提示:这里的检查不必是定性的。“拒绝任何没有回填步骤就删除列的迁移”是一个确定性的规则,通用的代码检查工具不会捕获它,但项目特定的检查工具可以。任何你不得不手动强制执行的事情,都符合作为循环来捕获的条件。
或者阅读文档:尝试 Claude Code | 开发者文档 | 电子书
将其制作成技能
Make it a skill
将重复性步骤编码到验证循环中最常见的方法是将其编写为技能,而创建技能最快的方法是安装技能创建器插件,让 Claude 对你进行访谈:
示例:
/skill-creator 创建一个用于端到端验证前端变更的技能。请就我的工作流程对我进行访谈。
你也可以通过在你的项目中的 .claude/skills/ 目录下放置一个 Markdown 文件来手动编写技能。最简单的验证技能只需几行前置元数据加上正文:
`# .claude/skills/verify-log-hygiene/SKILL.md
name: verify-log-hygiene description: 检查错误日志是否包含请求 ID,并且绝不包含请求体。当 diff 涉及错误处理或日志记录时使用。 allowed-tools: [Read, Edit, Grep]
读取当前 diff 中的错误处理路径。
对于错误路径上的每个日志调用,确认它包含了请求 ID, 并且没有传递请求体、请求头或任何用户提供的负载。
报告每个违规项及其文件:行号,然后修复它:在缺少请求 ID 的地方添加它, 并从日志调用中移除负载。`
完整的模式及其背后的理念,请参阅我们关于构建技能的完整指南。
将检查与运行环境匹配
Match the check to where it runs
接下来要确定的是验证循环如何启动:独立运行、嵌入运行、链式运行,还是与 PR 绑定。
独立运行
Standalone
你在产物生成后,有意识地调用它。独立技能适用于那些并非每次都需要执行的跨领域检查:预提交安全扫描、预 PR 可访问性审计、跨仓库的许可证头验证。任何你希望在许多工作流中可用,但又不希望每次代码变更都触发的事情。
其代价是每次调用仍然是你需要记住执行的一个步骤。当你发现每次变更后都要运行它时,就说明你已经超越了独立运行的阶段。此时,该流程已经赢得了永久地位:将其嵌入或链式运行。
嵌入运行
Embedded
作为生成技能的一部分自动触发。该检查属于一个特定的工作流,现在该工作流无需你要求就会自动运行它。
最简单的版本是在生成技能的正文末尾追加一行:
`# .claude/skills/scaffold-component/SKILL.md
name: scaffold-component description: 在 src/components/ 下搭建一个新的 React 组件,包括组件文件、其同目录下的测试文件以及一个 index 导出。当用户要求创建新组件时使用。 allowed-tools: [Read, Write, Edit, Bash, Glob]
搭建一个新的 React 组件
给定一个组件名称(PascalCase 格式),在 src/components/<Name>/ 下创建以下内容:
<Name>.tsx:一个带有类型化 props 接口和默认导出的函数组件。<Name>.test.tsx:一个 React Testing Library 测试,渲染该组件并断言其挂载时不抛出错误。index.ts:重新导出默认导出和任何命名导出。
遵循 src/components/Button/ 中的模式作为参考。匹配整个代码库中使用的导入别名风格(@/components/...)。
代码继续...
创建组件文件后,对其运行 eslint 并 在报告完成之前处理所有错误。`
通过在一个新任务上调用该技能并确认新步骤作为输出的一部分运行,来验证嵌入是否生效。如果没有生效,说明技能的描述或之前的指令没有将追加的检查纳入其中。
嵌入模式仅适用于你可以编辑的技能:你自己编写的技能,或者在项目级别安装且 SKILL.md 文件受你控制的技能。内置技能和由插件管理的技能(更新时会被覆盖的那种)不适用于此模式;对于这些情况,请改用链式运行。
对于跨工作流的检查,请跳过嵌入模式;这些检查需要独立运行,这样你可以从任何上下文中调用它们。
链式运行
Chained
一个技能在其末尾调用另一个技能,从而实现多个经过验证的交接端到端运行。
Anthropic Claude Code 团队的成员在日常工作中使用这种模式:/code-review 查找错误,/simplify 清理 diff,/verify 技能确认端到端行为,如果变更涉及 UI,则一个自定义的 /design 技能会根据 DESIGN.md 文件中的指南进行检查。
链式运行也是你为无法修改的技能添加验证的方式:构建一个自定义的包装技能,先调用原始技能,然后调用你的验证技能,如下所示:
# .claude/skills/safe-refactor/SKILL.md 首先对当前 diff 运行 /simplify。 当 /simplify 完成后,调用 /verify-no-public-api-changes。
最初的一个习惯(“我总是在 /simplify 之后运行 /verify”)变成了一种契约(“/simplify 完成后总是运行 /verify”)。这个链式流程自行运行整个开发周期。只有当某些问题升级到你这里时,你才需要介入。
当各个步骤足够独立,以至于你有时只想运行其中一个而不运行其他步骤时,可以跳过链式运行;链式运行是用灵活性换取自动化。链式验证循环可能会增加 token 消耗,因此在广泛部署之前最好先测试这些循环。
在每个 PR 上运行
On every PR
一旦链式流程对你自己的变更来说足够稳定,同样的流程就可以在每个 PR 上运行。队友的变更会通过与你相同的关卡,无论他们是否记得调用这个链式流程。其基础设施与你已编写的链式流程类似,只是更进一步:相同的技能、相同的评分标准、相同的标准,无需依赖作者的勤勉就能应用。
这时,验证就不再是个人基础设施,而变成了团队基础设施。你写下来为自己每周节省两分钟的检查,现在为每个人每周节省两分钟,应用于每一次变更。在链式流程仍在变动时,暂缓设置 PR 级别的关卡;每一次调整都会成为团队可见的事件。
一旦你掌握了流程,就可以准备扩展你的循环工程。无论你在自动化什么,也无论在什么环境中,验证循环的创建过程都是一致的:
- 挑选本周你最常做的手动跟进事项。
- 首先尝试内置的 /verify 技能,看看它是否有助于你的流程。
- 用简单的英文写下流程,就像你在第一天交给新队友的那样。
- 将其交给技能创建器,或者自己将 Markdown 文件放入
.claude/skills/目录。 - 在一个新任务上调用它,并确认检查作为输出的一部分运行,如有必要则进行迭代。
- 尝试技能链式运行,以创建端到端的验证流程。
你能够编码让 Claude 遵循的内容越多,Claude 的回复就越有可能在第一次尝试时就接近你想要的结果。那些你不再需要手动调整的修正,现在可以解放你的注意力,让你专注于那些任何技能都无法为你写下的、独特且专属的工作。
立即在 Claude Code 中开始使用验证循环。
本文由 Claude Code 团队成员 Delba de Oliviera 撰写。