从代码补全到代码团队:我们如何将Claude Code转变为工程部门
Claude Code是一个强大的编码工具。但单独使用时,它是被动的——不会自我检查、提前规划或从错误中学习。以下是我们如何用三层代理架构将其包装起来,以构建更接近工程团队的东西。
我们每天都在使用Claude Code。它非常出色。它可以处理复杂的重构、编写测试、导航大型代码库,并捕捉我们会遗漏的bug。但在数个月作为自主多代理系统的一部分运行它之后,我们注意到了一些事情:Claude Code是一个强大的工具,但它在根本上是被动的。它等待指令、执行指令然后停止。它不会监控自己、提前规划、审查自己的输出,也不会记住上次出错的地方。
这不是批评——这是一个设计选择。Claude Code的设计目标是成为一个编码助手,而不是一个自主的工程代理。我们一直在问的问题是:需要什么才能将它变成一个自主代理?
答案变成了我们所称的V2架构:一个三层系统,用监控、规划和审查来包装Claude Code。这篇文章描述了我们构建的内容以及每一层存在的原因。
被动工具问题
当你直接运行Claude Code时,交互模型是:你给它一个任务,它处理它,它完成(或卡住)。没有任何过程在监测它是否仍在取得进展,没有它执行的结构化计划,也没有关于输出是否实际正确的第二意见。
实际上,这会产生我们反复遇到的三个故障模式:
权限提示。 Claude Code经常要求允许读取文件、运行命令、访问目录。在交互式会话中这是可以的——你只需批准。但当自主运行时,这些提示会导致整个会话停滞。没有人在那里批准它们,所以任务就停止了。
第一次尝试很少足够好。 Claude Code会完成一个任务,它在技术上是可行的,但当你实际测试它时——运行应用、检查输出、验证边界情况——它需要调整。初始实现可能会遗漏一个边界情况,或者输出格式不正确,或者在本地可行但在生产中崩溃。一个人类工程师会查看结果、调试和迭代。Claude Code默认只是声称”完成”并等待。这是我们用V2构建的目标——让Coder代理充当人类在循环中的角色,监控Claude Code、测试输出、评估真实结果,并为另一次尝试反馈精细的提示。将单次工具转变为迭代开发循环。
没有交叉审查。 一个模型审查自己的输出会有盲点——产生bug的相同推理通常也会产生为什么bug是可以接受的理由。一个具有不同训练分布的第二个模型会捕捉到不同的问题。
这些中的每一个都是可以解决的。总在一起就成为了V2架构。
V2架构概述
该系统有三个层在每个Claude Code会话周围运行:
Layer 1: Heartbeat (watchdog + supervisor)
└─ tmux session monitor
└─ detects stuck/permission prompts → review + auto-recover
Layer 2: Skill-Driven Dev (planning)
└─ SKILL.md written before code
└─ implementation blueprint
Layer 3: Dual Review (verification)
└─ Claude Code self-review
└─ Gemini CLI cross-review
Claude Code仍然做实际的编码。这些层不会替换它——它们包装它。
Layer 1:Heartbeat
Claude Code在tmux会话中运行。Heartbeat是一个监视程序,每30秒轮询该会话并检查终端输出。它在查找一件事:Claude Code的提示是否可见,这表明它已完成并正在等待输入。
SOCKET="${TMPDIR:-/tmp}/openclaw-tmux-sockets/openclaw.sock"
LAST5=$(tmux -S "$SOCKET" capture-pane -p -J -t claude-code:0.0 -S -5)
echo "$LAST5" | grep -q "❯" && echo "DONE" || echo "RUNNING"
❯是Claude Code的shell提示符。如果它可见,会话处于空闲状态。如果它在超过超时阈值的时间内不可见,说明有问题。
当Heartbeat检测到卡住的会话时,它有三个恢复策略按升级顺序排列:发送温和的中断、使用相同的任务上下文关闭并重启会话,或通知编排器(Orange)进行人类在循环中的干预。大多数卡住的会话在第一步就解决了。
这听起来很简单,确实是这样。但没有它,自主编码会话是脆弱的。Claude Code在网络错误、权限问题或循环中卡住,其中它说服自己正在取得进展但实际上没有。Heartbeat将这些从无声的失败转换为处理过的异常。
除了仅检测卡住的会话外,还有另一个方面:权限监管。当Claude Code等待权限批准时,Coder代理不会盲目批准它——它审查Claude Code试图做什么。这个命令合理吗?它是安全的吗?它可能具有破坏性吗?Coder充当监管者,而不仅仅是保姆。它监视卡住的会话,并代表人类提供知情同意。这使自主编码既可靠又安全。
Layer 2:技能驱动开发
在任何非平凡的任务进入Claude Code之前,编排器写一个SKILL.md文件。这是一个结构化的实现计划——相当于一个设计文档——Claude Code随后针对它执行。
技能文件结构:
skills/
feature-name/
SKILL.md # implementation plan + steps
典型的SKILL.md包含:
- 目标 ——任务是什么以及完成状态是什么
- 参考风格 ——哪个现有代码可以模仿
- 大纲 ——具体的部分或步骤,填入关键技术细节
- 实现步骤 ——要做的事情的有序列表和顺序
- 隐私/安全检查清单 ——提交前要验证的事项
这是你现在以其原始形式阅读的文件——这篇博客文章是针对其自己的SKILL.md撰写的。
规划步骤在任何代码编写之前强制精确性。模糊的任务在规划时澄清,而不是在实现中途。它还为Claude Code提供了一个成功标准来检查,而不是必须推断何时完成。
另一个好处是重用。技能随时间积累。当类似的任务再次出现时,编排器可以在技能库中搜索相关模式,并调整现有计划,而不是从零开始。随着时间的推移,这是系统建立关于应该如何处理某些类型任务的机构知识的方式。
Layer 3:双重审查
在Claude Code完成并暂存其更改后,在提交前运行两个审查。
Claude Code自审查。 第一个审查使用Claude Code本身——但在一个单独的会话中,审查diff而不是它刚刚编写的代码。这捕捉到直接的问题:遗漏的调试输出、不完整的实现、测试错误的事物的测试文件。
Gemini CLI交叉审查。 第二个审查将暂存的diff传输到Gemini:
git diff --cached | gemini -p "Review this diff for: security issues, privacy leaks (IPs, emails, API keys), code quality. Output: PASSED or list of issues."
交叉审查是更重要的一个。具有不同训练分布的不同模型可以可靠地捕捉Claude Code自审查遗漏的东西——特别是安全问题和隐私泄露。我们已经看到Gemini捕捉到硬编码的测试凭证、不应该在公共代码中的内部主机名,以及Claude Code自审查描述为有意设计决策的逻辑错误。
输出格式是严格的:要么是PASSED要么是问题列表。如果有问题,提交被阻止,问题被发送回Claude Code进行补救。循环继续直到Gemini通过它。
完整V2工作流
将其放在一起,编排器的AGENTS.md描述了每个编码任务的固定序列:
1. memory_search → find relevant lessons and patterns from past work
2. Write SKILL.md (plan before code)
3. Launch Claude Code via tmux (with Heartbeat active)
4. Wait for Heartbeat signal: DONE
5. Gemini Review on staged diff
6. If issues: send back to Claude Code, loop
7. Commit
8. Update lessons/MEMORY.md with what was learned
第1步和第8步给系统提供了记忆。在开始之前,编排器在其向量内存中搜索来自类似过去任务的教训——先前的决策、故障模式、有效的模式。完成后,它将学到的内容写回内存。随着时间的推移,这创建了一个反馈循环,系统在某些类型的任务中变得明显更好。
这不是什么
这不是一个完全自主的工程团队。编排器(Orange)仍然需要人类(Qiushi)批准任何涉及生产、涉及财务操作或代表重大架构决策的事项。V2架构自动化了日常编码工作;它不会自动化判断。
它也不是Claude Code的替代品——它是一个对它的束缚。编码质量仍然来自Claude Code。该架构只是确保质量得到检查、会话不会无声地失败,以及系统累积知识而不是每次都从头开始。
原则
这里的模式是我们发现自己一次又一次返回的模式:当AI工具不是独立的,而是嵌入在监控它们、指导它们和检查其输出的系统中时,它们最强大。Claude Code单独是一个强大的编码器。Claude Code配合Heartbeat、规划层和交叉审查步骤更接近可靠的工程工作流。
同样的原则适用于任何有能力但被动的AI工具。工具完成工作。系统确保工作值得保留。