多Agent编排与闭环自愈:用Claude Code把重复流程全自动跑完
别急着开一个终端就敲claude 帮我写个脚本等它回答完再手动复制、粘贴、运行、报错、再让它改。这种单步聊天式的用法本质上只是把 Claude 当成了带记忆的搜索引擎根本没有发挥出 Claude Code 作为“agent”的真正价值。我最近把团队里几个重复度极高的流程彻底重写了一遍核心就三个词多 Agent 编排、闭环自愈、Routine 脚本化。这套组合拳打下来原来需要人盯着来回传话的活儿现在基本是全自动跑完。这篇文章我就从这三件事的底层逻辑讲起结合我实际的踩坑经历把整套架构怎么搭、为什么这么搭、遇到问题怎么排查一次说清楚。不管你是刚装好 Claude Code 想提升效率的新手还是已经在用但总觉得“差点意思”的老手这篇文章都能给你一些可以直接落地的思路。我会尽量少讲虚的多给能抄作业的配置和代码。1. 先把“单步聊天”的病根挖出来1.1 单步模式的三个隐藏成本你可能会说“我就让它写个函数单步聊怎么了”单步聊天本身没错但一旦任务复杂度上来它的三个成本会迅速吃掉你省下的时间。第一个是上下文断裂成本。每聊一轮Claude 都要重新理解你前面说过的话。你让它写了个模块 A又让它写模块 B它很可能忘了 A 里定义过什么接口结果 B 里重新造了一套。这就像让实习生干活你一次只说一步他永远看不到全局最后拼出来的东西全是缝缝补补。第二个是人工搬运成本。Agent 生成的代码、命令、修改建议都要你手动复制到终端、编辑器里执行验证。步骤越多搬运次数越多出错概率越大。我见过最离谱的一次同事手动复制一段 SQL 时漏了一行排查了整整一下午。第三个是反馈回路断裂。单步聊天里Claude 写完代码并不知道代码能不能跑。你得自己跑完把报错贴回去。这个来回一次快则几分钟慢则半小时。一旦任务有十几个步骤这个反馈回路就基本断了——你根本没有耐心一轮一轮喂下去。1.2 从“对话”到“流程”的思维切换要摆脱这种低效先得在脑子里完成一个转变不要把 Claude Code 当聊天框要把它当成一个能自己调用工具、自己执行命令、自己看结果、自己决定下一步的执行引擎。Claude Code 底层有完整的 agent 循环——模型生成意图工具执行动作观察结果再生成下一步意图。这个循环如果只被用来“生成文本然后粘给你”等于买了一台数控机床却只用来当镇纸。真正的用法是你定义目标、边界和验收标准然后让 Claude Code 自己循环起来。多 Agent 编排的意义就在这里——把一个复杂任务拆成多个角色各自跑各自的循环再通过任务委派和结果汇总串成一条流水线。这不只是“让 AI 多干活”而是重新设计了你和 AI 协作的方式。2. 多 Agent 编排把一个人拆成一个团队2.1 编排的本质是职责拆分多 Agent 编排听起来很高大上但本质上就是软件工程里最古老的原则单一职责。你让一个 Agent 既当架构师又当实现者又当测试员它的注意力会被稀释上下文窗口会被无关信息塞满最后产出质量一定拉胯。我做了一个最朴素的三 Agent 流水线效果立竿见影架构 Agent负责读需求、拆模块、定接口、写设计说明。实现 Agent拿着架构 Agent 的产出逐模块写代码。审查 Agent检查实现结果跑测试发现问题打回重做。这三个角色共享同一个工作目录但各自用独立的会话上下文。架构 Agent 只关心设计不会陷入某个函数的语法细节实现 Agent 只关心按接口落地不用反复纠结“整体架构行不行”审查 Agent 只关心验证不会被“我自己写的代码”带偏判断。2.2 Claude Code 里实现多 Agent 的四种姿势这里得先澄清一下Claude Code 本身不是只能跑一个 agent它有几种不同层次的“多 Agent”玩法从轻到重排列第一种手动串行委派。你在一个会话里让它先做设计再让它“根据上面的设计写代码”再让它“运行测试看看结果”。这仍然是单会话但通过会话内的任务切分实现了角色切换。优点是零配置缺点是上下文会在长任务中逐渐膨胀。第二种Claude Code 的 Task 工具。在较新版本里模型可以通过 Task 工具发起子任务相当于一个 agent 内部再派生出临时子 agent 去处理隔离的子问题。这适合“主 agent 统筹子 agent 干活”的场景。子任务的上下文相互隔离不会污染主会话但主任务能拿到子任务的结论。第三种多进程真编排。通过 CLI 直接调用多个独立的 Claude Code 进程进程之间通过文件系统或标准输入输出传递任务和结果。比如我在脚本里先跑一个claude -p 架构设计任务 --output-format json拿到设计结果后再把这个结果作为输入跑第二个进程去实现。我一般用这套来做复杂任务的硬隔离。第四种也是我目前最推荐的轻量方案Slash Command Subagent 定义。在项目里通过.claude/agents/目录定义自定义 subagent 角色再在 CLAUDE.md 里定义好协作流程让主 agent 在合适的节点自动委派给对应角色。这一套让我不用维护外部脚本又得到了角色隔离的好处。2.3 一个可直接抄的编排示例下面这个例子是我在实际项目里验证过的“架构→实现→审查”流水线。先用一个主 prompt 启动全程你是一个资深技术负责人。现在有一个任务实现一个 Python 模块读取 CSV 并输出按列聚合的统计结果。 流程如下 1. 先调用架构子agent产出模块接口设计。 2. 调用实现子agent按设计实现代码。 3. 调用审查子agent运行测试并给出结论。 每个子agent的产出都要写入 docs/ 目录备案。为了让 Claude 知道怎么“调用子agent”我会在.claude/agents/architect.md里定义架构角色--- name: architect description: 负责模块接口设计和拆分输出设计文档 tools: - Read - Write --- 你是一名系统架构师。收到需求后输出包含以下内容的设计文档 - 模块职责边界 - 对外接口签名 - 数据结构定义 - 测试策略 不要写具体实现代码。实现和审查角色同理。这时主 agent 会先委派 architect拿到设计文档后再委派 implementer最后交给 reviewer 验证。整个流程下来我的介入点只有最开始的任务描述和最后的结果确认。这里有一个关键细节子 agent 的产出必须落盘。让它们直接把设计文档、代码、测试报告写到项目目录里。每个子 agent 只从文件读取“上一棒”的产出这样既避免了上下文传递的损耗也让每一步可回溯。我踩过不落盘的坑——子 agent 返回的结果在父会话里只是一段文本一旦上下文被压缩设计细节就丢了再往后全是无效劳动。落盘之后即使会话中断也能从文件恢复。3. 闭环自愈让 Agent 学会自己“看结果、改错误”3.1 自愈不是加个重试而是建立验证回路多 Agent 编排解决的是“分工”闭环自愈解决的是“质量”。所谓闭环自愈核心就一句话Agent 必须能感知自己行动的后果并据此修正直到通过验收标准。很多人以为“自愈”就是让 AI 报错了重来一遍这太粗糙了。真正的自愈包含四个环节执行动作Agent 写代码、跑命令、改文件。观察结果Agent 读取命令退出码、运行日志、测试报告、文件内容。判断偏差Agent 把观察到的结果和验收标准比对找出差异。修正动作Agent 定位问题源调整代码或配置重新执行。这四步形成一个闭环循环直到验收标准满足或达到明确的上限条件。3.2 用命令和测试构建自愈闭环在 Claude Code 里构建自愈闭环最直接的方式就是把验证步骤写入任务流程并明确要求它“不通过就修修完再验直到通过”。举个例子。我让它写一个 Python 脚本处理数据会在 prompt 里明确写实现完成后必须执行以下验证步骤 1. 运行 python -m pytest tests/ -v确认全部用例通过。 2. 运行 python main.py --input sample.csv --output result.json确认退出码为 0。 3. 检查 result.json 中数据条数与 sample.csv 一致。 如果任何一步失败读取报错信息修复后重新验证最多重试 5 次。这里的关键是“最多重试 5 次”。如果不设上限Agent 可能陷入无限循环烧 token如果设得太低复杂问题又没机会自我修正。我实测下来普通代码任务 3~5 次足够超过这个次数说明任务定义或上下文有问题应该人工介入看看到底卡在哪。另一个我常用的手段是Hook。Claude Code 支持在工具调用前后触发外部脚本这可以用来自动化验证。比如我在PreToolUse阶段拦截危险的写操作在PostToolUse阶段自动跑针对性的校验脚本。这比让 Agent 自己“记得”跑验证要可靠得多——不依赖模型当时的判断而是机制上强制每次都验证。下面是我在项目里配置的一段简化版 Hook 逻辑放在.claude/settings.json里{ hooks: { PostToolUse: [ { matcher: Write|Edit, hooks: [ { type: command, command: python scripts/validate_syntax.py \$CLAUDE_FILE_PATHS_0\ } ] } ] } }意思是每次写完文件自动跑语法校验脚本脚本返回非 0 时 Claude Code 会收到失败信息并尝试修复。这套机制把“自愈”从模型自觉变成了流程强制。3.3 自愈循环里最容易翻车的三个点第一命令不幂等重复执行产生副作用。比如安装依赖的脚本本身会花很长时间每次自愈都重跑一次光等就等哭了。解决办法是把“安装依赖”和“验证功能”分离只在依赖文件变化时重装或者把耗时步骤的结果缓存成标记文件。第二验证命令太弱假阳性。比如你让它“确保进程在跑”它只会检查ps里有没有相关进程名但进程可能已经僵死。更强的验证是“调用健康检查接口确认返回 200”。验收标准一定要能客观判定不要依赖 Agent 的主观判断。第三错误信息被截断。Claude Code 在执行长命令时输出可能很长模型能看到的上下文有限。我遇到过报错信息在尾部但模型只看到了前半段正常日志误判为“已成功”的情况。解决办法是让验证脚本自己捕获错误摘要用21 | tail -50这类方式把关键信息浓缩后返回给模型。4. Routine 脚本化把“经验”变成“可复用流程”4.1 什么是 Routine为什么需要它多 Agent 编排和闭环自愈解决的是单次任务的执行质量。但实际工作中真正让你累的不是某一次复杂任务而是同一个任务每周都要做一遍发版检查、代码评审、数据清洗、报告生成……每次都重新跟 Claude 讲一遍需求它每次都要重新“领悟”一遍效率和一致性都堪忧。Routine 脚本化就是解决这个问题的。所谓 Routine是把一类高频任务的执行流程、角色分工、验收标准、注意事项沉淀成一个可复用的“剧本”。Claude Code 启动后只需要告诉它“执行某个 Routine”它就会照着剧本把整套流程跑完。这就像你去一家常去的饭店不用再跟厨师解释“少盐多辣不要香菜”直接说“老规矩”就行。Routine 就是你和 Agent 之间的“老规矩”。4.2 用 CLAUDE.md 与自定义命令固化 Routine我的 Routine 沉淀有两种载体。第一种是CLAUDE.md里的流程块。在项目根目录或~/.claude/CLAUDE.md里把某类任务的标准操作流程写清楚让 Agent 在接手该类任务时自动遵循。比如我写过一个“发版前检查清单 Routine”内容大致是## 发版前检查流程 执行任何发版前任务时必须按以下步骤进行 1. 确认当前分支与目标 tag 的 diff 列表。 2. 检查敏感信息搜索代码中是否包含密钥和内部地址。 3. 执行完整测试套件记录通过率。 4. 检查依赖漏洞运行依赖审查命令并记录结果。 5. 汇总以上结果到 RELEASE_CHECK.md并输出结论。写进 CLAUDE.md 之后我只要说“帮我做发版前检查”它就会自动按这个清单来。不用每次重新交代、重新定义验收标准。第二种是Slash Command。把一段完整 prompt 模板放进.claude/commands/目录通过/命令名直接触发。比如我写了一个/review命令内容是让 Agent 以审查者的身份对最近的改动做代码评审并输出特定格式的评审报告。这样团队成员都能用同一个入口产出的报告格式完全统一。4.3 Routine 的高级玩法外部脚本驱动如果 Routine 要跟定时任务、CI/CD 或外部调度器配合纯靠 CLAUDE.md 是不够的这时候我会用外部脚本驱动 Claude Code 跑 Routine。核心命令长这样claude -p 执行发版前检查 Routine按既定流程完成并输出报告 \ --allowedTools Bash, Read, Write \ --output-format json \ --max-turns 60把这个命令包进一个 shell 脚本就可以放进 crontab或者接到 CI 的某个 Stage 里。我甚至用这种方式做了一个“每日依赖健康巡检”每天早上自动跑一遍有问题直接往群里推报告。这部分的经验是脚本里要明确设置--max-turns和输出格式。没有 turn 上限一旦 Routine 卡在某个自愈循环里可能跑几十分钟烧掉一堆额度不设输出格式脚本解析结果很痛苦。JSON 输出是我最常用的结构化之后可以用 jq 直接提取关键结论。4.4 Routine 设计的三条心得第一Routine 要按“决策点”留白。Routine 不是把所有步骤写死而是把“目标”和“验收标准”写死把“具体实现方式”留给 Agent 判断。我见过有人把 Routine 写成了精确到每一行命令的脚本结果依赖稍微变一下就跑不通。好 Routine 应该像一份 checklist 验收标准而不是一份机械的指令列表。第二Routine 要持续演进。每次执行后如果发现某个步骤漏了或某个验证无效当次就把 CLAUDE.md 更新掉。这相当于给 Agent 做“经验积累”。我坚持做了一周之后发版检查的遗漏率肉眼可见地下降。很多人的 CLAUDE.md 是静态的写一次就不动了这是很大的浪费。第三Routine 要有“退出条件”。不管流程多完善总有意外情况。我每个 Routine 都会写明“如果出现以下情况立即停止并汇报人类”比如验证结果矛盾、需要额外权限、某个未知依赖缺失等。这避免了 Agent 在错误的方向上闷头狂奔。5. 环境配置与多模型接入从安装到实战一把梭5.1 安装与基础配置里的那些坑聊完架构我猜很多人已经想动手试了。先把安装和基础配置说清楚这里坑不少。Claude Code 目前有 CLI 版、VS Code 插件版和桌面版三种形态。CLI 版安装最简单在终端里执行安装命令装完在项目目录里跑claude就能进入交互模式。VS Code 插件版适合习惯在编辑器里干活的人装插件后在侧边栏打开 Claude Code 面板桌面版则适合完全不想碰命令行的场景但要注意它对系统版本有要求我见过 64 位 Windows 相关的兼容提示升级系统或装对应架构版本能解决大部分问题。在中国大陆环境里偶尔会遇到“可能在你所在地区不可用”之类的提示这属于账号订阅限制层面的问题解决思路通常是改用 API Key 模式或使用第三方兼容网关接入其他模型。等下我会细讲多模型接入。另一个高频问题是我在热词里看到的your organization has disabled claude subscription access for claude code。这通常意味着你的组织在控制台关了 Claude Code 的订阅访问开关或者你正在用企业托管的账号但没有获得授权。解决办法是找组织管理员在控制台开启 Claude Code 权限或者干脆用自己的账号 API Key 跑。还有一个非常基础但容易搞混的点注册账号与不注册账号的区别。不注册直接用你只能以无状态方式调用没有持久化对话历史和项目记忆跨会话的 CLAUDE.md 学习能力基本发挥不出来。注册账号后才能在项目里保存会话记录、使用 MCP 工具、启用组织级配置。如果你打算认真用多 Agent 和 Routine注册是必须的。5.2 不换客户端接入 DeepSeek、Qwen、GLM 与本地模型Claude Code 原生绑定 Anthropic 的接口但它的架构决定了只要接入一个兼容 Anthropic API 格式的端点就能换用其他模型。这一点我在实际项目里反复验证过以下是我常用的几种方式。方式一环境变量直连。Claude Code 支持通过ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN覆盖默认接口地址和鉴权信息。比如指向一个兼容端点export ANTHROPIC_BASE_URLhttps://你的端点地址/v1 export ANTHROPIC_AUTH_TOKEN你的密钥这样启动 Claude Code它就会把请求发到自定义端点。很多国内模型服务商都提供 Anthropic 兼容接口比如 DeepSeek、Qwen通义千问、GLM智谱都有对应的兼容模式。指过去之后模型能打通但不同模型的工具调用能力有差异结构化的工具调用格式不一致时多 Agent 流程会出现解析失败这是正常现象通常需要调整工具描述格式来适配。方式二接本地模型。如果你有 LM Studio 或 Ollama 这类本地推理引擎可以把本地模型暴露成 OpenAI 兼容服务再通过转换层把请求转成 Anthropic 格式。我实测过 LM Studio在它的 server 面板启动本地模型后搭配环境变量指向本地地址Claude Code 就可以走本地模型。这种方式虽然响应速度取决于你的显卡但胜在数据不出机器适合处理敏感代码而且完全不需要外部网络。不过说实话本地小模型的工具调用能力相比 Claude 这类前沿模型还是有差距的多 Agent 流程复杂度上来后容易失控。我的建议是本地模型适合单 Agent、简单 Routine复杂的多 Agent 编排还是用强模型稳妥。方式三cc-switch 切换多套配置。我自己同时接了 DeepSeek、Qwen、GLM 和官方 Claude 好几个通道手动改环境变量非常痛苦于是用cc-switch这个工具来一键切换。它的原理就是替你把不同服务的 Base URL、API Key、模型名等配置保存成多套 profile切换时自动重写环境变量。用法大致是cc-switch add --name deepseek --base-url ... --api-key ... cc-switch add --name qwen --base-url ... --api-key ... cc-switch use deepseek之后每次换模型一句话就切过去了。这个工具对于想横向对比多模型在 Agent 任务上表现的人是刚需级别的省心。5.3 VS Code 插件配置的一些解释VS Code 里接入 Claude Code 时很多人会困惑插件的“登录”“可执行文件路径”“默认工作区”这些选项分别干什么。我帮你拆一下可执行文件路径插件本质上调用的是 Claude Code CLI。如果你用 npm 装的插件一般能自动找到如果装的位置特殊就需要手动指定claude命令的绝对路径。登录插件有自己独立的登录态管理跟 CLI 共用同一套账号密钥不用重复注册但要在插件面板里完成授权绑定。工作区插件默认只操作你打开的文件夹这既是安全边界也是功能边界。多 Agent 流程如果涉及跨目录文件最好以项目根目录为工作区打开。插件的好处是能看到文件 diff、在编辑器里直接接受修改但它本质上没有改变底层 agent 循环。我建议脚本化和 Routine 相关的工作流优先用 CLI日常交互式修改用插件两个场景分开用。6. 常见问题与排查技巧实录6.1 我实际踩过的高频问题清单这边的坑我整理成一张表都是我自己或身边同事真实遇到过的。问题现象根本原因解决办法多 Agent 流程中子任务结果跟父任务预期对不上子 Agent 只看到父任务的最终输出没看到过程细节让子 Agent 在固定路径下读写中间产物父任务只消费落盘结果自愈循环反复做同一件事不收敛验证标准太弱Agent 误以为验证通过强化验收标准命令失败时返回足够清晰的错误摘要本地模型接入后常常不按工具调用格式走端点的 Anthropic 兼容层不稳定换用官方模型或选用对 Anthropic 格式兼容更完善的服务商--max-turns到了还没完成但结果其实可以再用任务步骤多turns 不够提高上限值同时把 Routine 拆成更小粒度的步骤长会话后 Agent 行为变得迟钝、遗忘早期指令上下文超过窗口后发生了压缩每轮任务尽量保持短会话需要长链路时拆分到多个进程并落盘传递结果命令执行结果太长Agent 误判成功工具输出被截断关键报错信息没进上下文验证脚本自己截取关键错误行用 tail、grep 把核心信息提炼后返回安装了最新版插件但某些配置项无效插件版本和 CLI 版本不一致检查claude --version与插件要求是否对齐必要时统一重装6.2 排查思路先分层再定位排查 Claude Code 相关问题时我一般按“配置层→权限层→上下文层→模型能力层”的顺序来能省很多时间。配置层先查环境变量、配置文件路径、版本号对不对。很多时候所谓“不生效”其实是环境变量没 export 到当前 shell。权限层要查它有没有权限操作某个文件、某个命令是否被allowedTools或权限策略拦住了。上下文层看是不是会话太长导致指令被冲淡。最后才考虑模型能力层——这个模型是不是工具调用能力太弱或者根本不支持某项工具。这个顺序能避免一个常见误区很多人一遇到问题就怀疑模型能力实际上大部分问题出在前面三层。我至少遇到过十次“Agent 不执行命令”最后查下来是权限策略没放行跟模型一点关系都没有。6.3 两个效率倍增的排查技巧技巧一给关键步骤加 echo 标记。我在 Routine 的验证脚本里每一步都输出带统一前缀的日志比如[STEP-1] start...、[STEP-2] done。这样当 Agent 卡住时我扫一眼日志就知道它卡在哪一步而不是面对一坨输出猜。技巧二保留每轮子 Agent 的原始输出文件。多 Agent 流水线里我在每个 Agent 结束时都要求它把 stdout、退出码、关键结论写到一个固定的 JSON 文件里文件名带时间戳。这不仅是审计审计的依据更是出问题时回溯的核心线索。没有这套记录排一次复杂流水线的问题能让人崩溃。7. 这套架构还能往哪走写到这里核心的东西基本都讲完了。但这套“多 Agent 编排 闭环自愈 Routine 脚本化”的组合并不只适用于 Claude Code 本身。我最近已经在尝试把这套思路迁移到更多场景里。一个方向是把 Routine 变成团队共享资产。我把写好的 Routine 和 Slash Command 提交到团队公共仓库任何人 clone 下来就能获得同等的 AI 协作体验。这意味着团队的“经验”第一次可以像代码一样版本化、审查、演进而不是散落在每个人的聊天记录里。另一个方向是让多 Agent 主动去调用外部系统。通过 MCP 把内部运维平台、监控系统、数据库查询接到 Claude Code 里Agent 就能在自愈闭环中直接查监控指标、改配置、发通知。这已经不只是“写代码”的范畴而是往“用 AI 驱动日常运维”的方向走。我个人最真实的感受是单步聊天只是 AI 编程的入门形态真正拉开效率差距的是你愿不愿意把流程设计、验证机制、角色分工这些“软件工程老手艺”跟 Agent 架构结合起来。这套东西学习成本不算低但一旦跑通你省下的不只是时间还有大量重复性劳动带来的心智消耗。先从一个小 Routine 开始把它打磨顺再慢慢扩展你会回来感谢自己的。