
Claude Code 这类工具在 2025 年已经不算新鲜词了但很多团队的用法还停留在让 AI 写一段代码然后人肉去跑测试的阶段。真正的问题不是 AI 写得不够多而是写得越多验证成本越高。AI 生成代码的速度是人类的几十倍但如果没有一套自动化的验收机制这些代码只会变成更大的技术债。Claude Code 团队负责人 Boris 在公开分享中反复强调一个概念自我验收闭环。简单说就是让 AI 不只是写完代码就交差而是让它自己运行、自己验证、自己发现问题、自己修完再交差。这个理念正在把 AI 编程从生成器推向自主交付也是今年开发工具链里最值得关注的变化。这篇文章不打算做领导语录赏析而是把这套理念拆成可以落地的 5 个底层习惯。你会看到为什么自我验收闭环是 AI 编程工程化的核心怎样在 Claude Code 里通过 CLAUDE.md、Skills、脚本钩子把闭环搭起来以及安装、配置、接入第三方模型时常见的坑。读完你至少能跑通一个AI 自己写、自己验、自己修的完整示例并且能把这套方法搬回自己的项目里。1. 先搞懂为什么要聊自我验收闭环很多开发者对 AI 编程助手的认知还停留在补全代码问答式生成代码。这类工具的使用路径通常是我提一个需求AI 生成一段代码我复制到项目里然后人工编译、跑测试、看报错。如果报错再把报错信息贴回去让 AI 重新生成。这个循环的瓶颈非常明显人类成了唯一的验证者。Claude Code 这类 agentic coding 工具真正的变化是把生成和验证绑定到了一起。它不再是被动回答问题而是像一名初级工程师那样接任务然后自己去执行命令、读输出、判断结果。如果工具的自我验证能力足够强那人类就可以从逐行检查代码退到审核任务拆解和验收标准。自我验收闭环的价值可以从三个层面看效率层面AI 自己跑测试、自己看报错、自己修复省去大量复制报错信息再提问的往返开销。质量层面把验收标准前置到任务定义阶段AI 的产出不再依赖灵感而是对照清晰的完成定义。协作层面当 AI 能提供我做了什么、我怎么验证的、结果是什么的完整记录人的评审成本会大幅下降。所以Boris 团队强调自我验收闭环本质上是把软件工程里最经典的定义完成、验证完成方法论移植到了 AI 编程的工作流里。这也是为什么这个话题值得每个正在用或准备用 AI 编程工具的开发者认真看。2. 自我验收闭环的核心定义与常见误区2.1 什么是自我验收闭环通俗解释过去你让 AI 写代码它给你一份代码草稿现在你让 AI 完成一个任务它要像工程师一样走完拆解任务 - 写代码 - 跑验证 - 看失败原因 - 修改 - 再验证 - 交付的完整循环。技术定义自我验收闭环是 Agent 在受限执行环境中通过可执行的验证动作测试用例、静态检查、构建脚本、类型检查来判断自身产出是否符合预期并基于失败信息自主迭代直到满足验收标准或明确上报阻塞的过程。这个闭环至少包含四个环节验收标准任务开始前就定义什么算完成。执行验证真正去运行测试或检查命令而不是靠看代码觉得没问题。失败处理从报错和日志中提取原因修改实现后重新验证。收敛出口全部通过后输出交付说明或者在一轮轮失败后主动上报。2.2 常见误区误区一把让 AI 多跑几轮当成闭环。如果每一轮都是人把报错贴回去那只是人机之间的串行循环不是 Agent 的自我闭环。误区二以为闭环 写测试用例。测试只是验证手段闭环的关键是让 Agent 有权限、有路径去执行验证并读取结果。光有测试但 Agent 不跑、不看等于没有闭环。误区三盲目让 AI 在没有任何限制的环境里自由执行。自我验收不等于无监督放权。沙箱、权限边界、可回滚的验证脚本才是闭环能安全运转的前提。小结论自我验收闭环不是某个具体功能而是一种工作流设计。它的核心判断标准是Agent 是否能独立回答我怎么知道我做对了。3. 团队 5 个底层习惯的正确打开方式Claude Code 团队负责人 Boris 公开分享的工程理念中最值得开发者复制的是下面这 5 个底层习惯。这些习惯不是挂在墙上的口号而是可以直接映射到提示词、配置文件和脚本里的具体做法。3.1 习惯一先定义完成再写第一行代码很多 AI 编程任务失败不是因为模型能力不够而是任务描述里根本没有验收标准。比如优化这个接口性能模型只能猜。但如果改成优化 /api/user/list 接口要求 1000 条数据下 P95 响应时间低于 300ms并附上压测结果任务边界一下子就清晰了。在 Claude Code 里这个习惯的落地方式是任务开始时先让 AI 输出验收清单Acceptance Criteria确认无误后再动工。你可以在 CLAUDE.md 里写死这个要求。# 文件路径CLAUDE.md项目根目录 ## 工作方式 在开始任何编码任务之前先输出一份验收清单包含 1. 功能行为输入什么输出什么边界条件是什么。 2. 验证方式用哪条命令、哪个测试文件、哪个脚本证明任务完成。 3. 失败标准什么情况算作不应该交付。 验收清单确认后再开始修改代码。这个习惯看似简单却是整个闭环的地基。没有明确完成定义后面所有验证都是无根之木。3.2 习惯二把可执行的验证动作写进任务流程光有验收标准还不够Agent 必须真的去执行验证。团队习惯里很关键的一点是让验证动作成为任务流程的固定环节而不是可选项。你在提示词里可以这样要求claude 修复订单模块的 NPE 问题完成后执行以下验证 1. mvn test -DtestOrderServiceTest 2. mvn checkstyle:check 3. 给出每个命令的通过/失败结果 只有全部通过才能交付。如果项目有统一的构建和测试体系可以把常用验证命令沉淀为脚本例如放在 scripts/verify.sh 里#!/usr/bin/env bash # 文件路径scripts/verify.sh # 统一验证入口运行测试、静态检查、打包 set -euo pipefail echo 运行单元测试 npm test echo 运行 lint npm run lint echo 类型检查 npm run typecheck echo 构建 npm run build有了这样的脚本Agent 只需要执行一次就能拿到完整的验证信号。团队里所有人包括 AI都用同一套验收标准这是工程化的重要一步。3.3 习惯三把报错和日志当作输入而不是终点初级工程师看到一个报错最常见的反应是报错了怎么办有经验的工程师会把报错当成下一步行动的输入。Claude Code 团队的工作方式里这个习惯被贯彻得很彻底Agent 执行命令失败后应该自己读错误栈、查相关代码、定位根因然后修复并重跑。你可以通过提示词规范这个行为任务修复测试失败。 要求 1. 运行 pytest如果失败阅读完整错误栈。 2. 根据错误信息定位到具体代码行不要猜测。 3. 修复后重新运行同一测试直到通过。 4. 如果连续 3 轮失败仍未解决停止并输出 - 已尝试的修复方案 - 当前卡住的点 - 需要人工确认的问题这里的关键是失败上限。无限循环重试只会消耗时间和 token设定一个上限让 AI 在无法收敛时主动上报才是工程上更稳妥的做法。3.4 习惯四沉淀可复用的验证资产形成回归基线单次闭环成功不算成功可复现的闭环才值钱。团队的第 4 个习惯是把验证逻辑沉淀成可复用资产比如测试用例、Skill、脚本、CI 配置。Claude Code 的 Skills 机制非常适合做这件事。你可以把如何验证这个项目的某个模块定义成一个 Skill之后每次对话都可以按需调用。# 文件路径.claude/skills/verify-order-module/SKILL.md --- name: verify-order-module description: 验证订单模块的完整流程包括单元测试、集成测试和冒烟脚本。 --- ## 使用场景 当任务涉及订单模块改动时必须调用本技能完成验证。 ## 验证步骤 1. 运行订单模块单测 mvn test -DtestOrder*Test 2. 运行订单相关集成测试 mvn verify -DskipITsfalse -Dit.testOrderIT 3. 执行冒烟脚本 bash scripts/smoke/order.sh 4. 汇总每步结果全部通过后输出验证报告。注意不同版本的 Claude Code 对 Skill 目录结构和文件格式可能有差异实际使用请以官方文档为准。这里演示的是把验证流程固化成可复用技能的思想。有了回归基线之后AI 每次修改代码都不是凭空判断而是对照一套稳定的验证体系。这也是从能用走向可靠的分水岭。3.5 习惯五每次会话结束留下可交接的记录最后一个习惯关乎团队协作AI 完成任务后应该留下人类能看懂、能复核、能继续工作的记录。这份交接记录至少包含本次改了哪些文件为什么改。使用了哪些验证命令结果如何。有没有已知的局限或未处理的问题。如果任务没有完成当前卡点是什么。在 Claude Code 中你可以在提示词里要求它输出规范化的交付总结。也可以把模板放进 CLAUDE.md让每次任务都自动遵守。## 交付总结模板 完成任务后按以下格式输出 ### 变更文件 - 文件路径改动说明 ### 验证结果 - 命令 1通过/失败 - 命令 2通过/失败 ### 遗留问题 - 无 / 问题描述 ### 回滚方式 - 说明如何撤销本次变更例如 git revert 的具体操作有了这个习惯AI 的执行过程就具备了可审计性。管理者可以在不重读全部代码的情况下通过验证结果和交接记录快速判断任务质量。4. 环境准备把 Claude Code 装好并用起来聊完方法论下面进入动手环节。很多读者搜索claude code 安装vscode 配置 claude codeclaude code desktop说明环境这块是大家最关心也最容易卡住的点。4.1 通过 npm 安装 CLIClaude Code 最常见的安装方式是通过 npm 全局安装npm install -g anthropic-ai/claude-code安装完成后在终端执行claude如果系统提示找不到命令通常是因为 npm 全局 bin 目录没有加入 PATH。排查方式npm bin -g把输出目录加入 PATH或者在 macOS/Linux 下通过 nvm 管理 Node 环境后重新登录终端。4.2 查看版本与更新claude --version需要更新时可以重新执行全局安装命令或使用工具自带的更新入口。不同版本功能差异较大建议在需要排查问题时先确认版本号。4.3 CLI、桌面版、VS Code 插件怎么选使用方式适合场景特点CLI终端日常任务、脚本化操作、Git 仓库内深度重构与终端工作流紧密结合便于查看命令输出桌面版Desktop App不想折腾终端的用户、可视化对话提供图形界面适合新手和轻量任务VS Code 插件编辑器内完成上下文理解、代码审查与编辑器融合度高适合写代码时即时调用如果你主要做 Java、Python 后端开发建议从 CLI 开始如果主要做前端并且在 VS Code 里工作可以试试插件版。实际使用时安装方式请以官方文档为准因为不同版本支持的功能差别较大。4.4 首次使用与模型配置首次启动 Claude Code 需要完成账号授权。具体流程以官方界面提示为准通常是登录账号并授权当前终端/应用使用。关于接入第三方模型社区里确实有不少开发者在使用兼容 API 的方式配置其他模型供应商例如通过环境变量或配置文件指定模型端点。需要提醒的是模型标识符必须填写供应商真实支持的名称。热搜词里xxx is not a model this version of claude code recognizes这类报错多半是把模型名称写错或版本不匹配导致的。第三方接入的稳定性、安全性和合规性需要自行评估建议优先阅读官方模型接入文档。5. 在 Claude Code 中搭建自我验收闭环环境就绪后我们来看怎样把第 3 章的 5 个习惯真正放进 Claude Code 的工作流。5.1 用 CLAUDE.md 固化项目级规范CLAUDE.md 是 Claude Code 读取项目上下文的重要文件。把验收规范和交付模板放进去等于给每次会话都设定了默认行为。# 文件路径CLAUDE.md ## 项目简介 这是一个演示自我验收闭环的最小 Node.js 项目。 ## 通用要求 1. 开始任务前先列出验收清单。 2. 每次代码改动后必须运行 npm test。 3. 测试未通过前不允许交付。 4. 任务结束输出交付总结包含变更文件、验证结果、遗留问题。5.2 定义可调用的验证 Skill上面已经演示过 SKILL.md 的写法。实际项目中你可以按模块维护不同的验证 Skill让 Agent 在涉及对应模块时自动套用。5.3 通过提示词开启闭环模式在日常任务中不需要每次都写一大段指令。可以在项目 README 或团队文档里定义一套闭环模式提示词模板使用时直接替换任务描述请完成以下任务{任务描述} 要求 1. 先输出验收清单等我确认后再开始。 2. 实现后运行 {验证命令}。 3. 如果失败阅读报错并修复重新运行直到通过或达到 3 轮上限。 4. 输出交付总结。这套模板把习惯一、二、三、五都串起来了。习惯四通过长期维护测试和 Skill 来沉淀。6. 完整示例让 Claude Code 完成一个带自我验证的小任务下面用一个最小示例走通整条链路。需求很简单写一个 JavaScript 函数统计数组中每个元素出现的次数。6.1 准备项目mkdir demo-verify cd demo-verify npm init -y在 package.json 中配置 test 脚本{ name: demo-verify, version: 1.0.0, scripts: { test: node --test } }6.2 启动 Claude Code 并下发任务在项目目录下启动claude然后输入请实现一个函数 countOccurrences(arr)统计数组中每个元素出现的次数返回一个对象。 验收清单 1. 空数组返回空对象。 2. [1, 2, 2, 3] 返回 { 1: 1, 2: 2, 3: 1 }。 3. 实现后运行 npm test测试必须全部通过。 4. 先输出测试文件再输出实现文件。 按项目规范输出交付总结。6.3 预期产出Claude Code 会生成实现文件和测试文件例如// 文件路径src/countOccurrences.js function countOccurrences(arr) { const result {}; for (const item of arr) { result[item] (result[item] || 0) 1; } return result; } module.exports { countOccurrences };// 文件路径test/countOccurrences.test.js const { test } require(node:test); const assert require(node:assert); const { countOccurrences } require(../src/countOccurrences); test(空数组返回空对象, () { assert.deepStrictEqual(countOccurrences([]), {}); }); test(统计元素出现次数, () { assert.deepStrictEqual(countOccurrences([1, 2, 2, 3]), { 1: 1, 2: 2, 3: 1 }); });6.4 如何判断闭环是否生效关键不是看代码对不对而是看 Claude Code 是否真的执行了验证它是否主动运行了npm test它是否报告了测试结果如果测试失败它是否读取报错并重新修改你可以故意在下发任务时把验收清单里加一条不可能满足的条件例如数组元素必须包含字符串观察 AI 是否会在测试失败后主动修改实现还是直接交付一个无法通过测试的版本。这个实验能快速判断你的工作流是否真的形成了闭环。7. 常见问题与排查思路在安装和使用 Claude Code 的过程中下面几个问题被提到最多问题现象可能原因排查方式解决方案终端找不到 claude 命令npm 全局 bin 目录不在 PATH执行npm bin -g查看全局路径将路径加入 PATH或使用 nvm 管理的 Node 环境启动时提示 could not locate the claude cli on path安装不完整、路径配置错误检查安装日志重新执行安装命令重新安装并确认 PATH 配置模型名称报错 xxx is not a model this version of claude code recognizes填写的模型标识符错误或客户端版本过旧核对供应商支持的模型标识符升级客户端修改配置中的模型名称或更新版本中文场景下回答英文未在提示词中声明语言偏好在 CLAUDE.md 中增加语言要求在项目规范中写明请用中文回复输出乱码终端编码与工具输出编码不一致检查终端字符编码设置调整终端编码为 UTF-8第三方模型接入后行为不稳定API 兼容性、上下文长度限制等差异查看请求日志和报错信息优先使用官方支持的模型端点降低任务复杂度这里需要特别提醒如果遇到模型接入问题不要盲目修改配置文件跳过校验。先确认模型标识符是否真实、版本是否匹配并按官方文档操作是最安全的路径。8. 最佳实践与工程建议最后把自我验收闭环真正落地到团队和项目里有几点经验值得参考。8.1 从最小项目开始先建验证基线不要一上来就让 AI 处理复杂重构。挑一个测试覆盖相对完整的小模块把定义验收清单 - 执行验证 - 修复 - 交付总结这套流程跑通再逐步扩大范围。8.2 把验证命令收敛到统一入口项目里最好只有一个验证入口脚本例如 scripts/verify.sh 或 npm run verify。这样 AI 不需要猜测用哪条命令团队评审时也只需要看一个命令的结果。8.3 明确 AI 的权限边界自我验收闭环需要 AI 能执行测试和构建命令但不需要它拥有生产环境权限。在本地或沙箱环境里允许执行项目内脚本在生产、预发环境保持严格访问控制这是 AI 编程安全的底线。8.4 设置失败上限和人工介入点就像前面提到的每次任务都应该有连续失败 N 轮后停止并上报的规则。AI 不是越修越好有时会原地打转。明确人工介入点可以避免时间和 token 的浪费。8.5 把交付总结当作评审依据要求 AI 每次任务都输出变更文件、验证结果、遗留问题和回滚方式。评审时可以快速确认验证结果是否真实遗留问题是否可接受。这套记录本身也是团队知识资产。9. 总结与后续实践方向从 Claude Code 团队公开的方法论中最值得学习的不只是工具能做什么而是怎样让 AI 对自己的产出负责。自我验收闭环的核心是让 AI 从生成代码进化到交付经过验证的代码。这背后的 5 个习惯——先定验收标准、把验证动作写进流程、报错作为输入、沉淀可复用验证资产、留下交接记录——每一项都可以直接落地到日常开发中。如果你现在正准备引入 Claude Code建议这样做先按第 4 节装好环境跑通最简单的对话。在项目里加上 CLAUDE.md写入验收规范和交付总结模板。找一个小任务用第 6 节的示例流程完整走一遍。逐步把验证脚本和 Skill 沉淀下来形成团队的回归基线。这篇文章的关键代码和配置建议收藏备用。等你真的跑通一个完整的自我验收闭环再回头看那句让 AI 自己验收自己感受会完全不同。