
Claude Code 的 loop、Routines 和生产化 Agent:别把循环误会成自动驾驶
这两天很多人把 Claude Code 的 /loop、Routines、scheduled tasks 混在一起讲,像是 Claude Code 已经可以完全自己跑业务了。
我觉得要先降一点温:loop 是循环,不是自动驾驶;Routines 是托管运行,不是生产系统;真正能进生产的,是围绕 Agent 的 harness。
这三个概念不分清,最后很容易做出一个看起来会跑、但出错无法恢复的自动化脚本。
三种“循环”不是一回事
| 能力 | 运行位置 | 触发方式 | 适合场景 | 风险 |
|---|---|---|---|---|
/loop | 当前 CLI session | 重复执行同一 prompt | 快速 polling、等 CI、观察某个状态 | 没有生产级状态管理 |
| Desktop scheduled tasks | 本机 | 本地计划任务 | 需要访问本机文件和工具的重复任务 | 电脑关机或环境变化会影响 |
| Routines | Anthropic 托管云环境 | schedule、API、GitHub event | 夜间 PR review、告警 triage、docs drift、部署验证 | 无交互审批,权限要提前收紧 |
| Production harness | 自建系统 | 队列、事件、webhook、人类指令 | 多仓库、多角色、长期运行的工程流水线 | 需要真正的软件工程治理 |
官方文档对 /loop 的描述很克制:在 CLI session 里重复一个 prompt,适合 quick polling。它不是队列系统,也不是工作流引擎。
Routines 更进一步:把 prompt、repositories、connectors 和 triggers 存成配置,跑在 Anthropic-managed cloud infrastructure 上。它可以按时间跑,可以被 API 调起,也可以监听 GitHub 事件。但文档也说得很清楚:Routines 仍在 research preview,行为和 API surface 可能变化。
loop 的真实用法:把等待变成主动检查
/loop 最适合的不是“每小时帮我维护一个项目”,而是这种短周期场景:
- 等 CI 跑完,失败就总结日志;
- 等本地 dev server 启动,成功后跑冒烟检查;
- 观察某个文件或接口输出,直到状态稳定;
- 轮询部署结果,发现错误时停下来要求人确认;
- 重复执行一个检查清单,直到满足退出条件。
它的关键不是循环次数,而是退出条件。
| 好的 loop prompt | 坏的 loop prompt |
|---|---|
| 每 2 分钟检查 CI,最多 5 次;失败时只总结日志,不改代码 | 一直检查 CI,直到成功 |
| 如果接口连续 3 次返回 200,就停止并报告 | 帮我盯着服务 |
| 如果发现新错误,先停下来问我,不要自动部署 | 有问题就修 |
| 只读日志,不运行写入命令 | 看看线上怎么样 |
loop 没有明确边界,就会变成“一个不断放大错误的 while true”。
Routines 的价值:把重复工作变成云端 session
Routines 真正有意思的地方,是它把 Agent 从“我正在终端里盯着它”变成“我给它一个可重复配置,它按触发条件自己开 session”。
它适合那些“重复、结果清楚、风险可控”的工作:
| 场景 | Routine 可以做 | 人类仍要做 |
|---|---|---|
| 夜间 PR review | 按团队 checklist 留评论和总结 | 判断设计取舍 |
| 告警 triage | 读取 alert、关联 commit、开 draft PR | 决定是否合并 |
| 部署验证 | 跑 smoke check、查日志、发 go/no-go | 决定是否回滚 |
| 文档漂移 | 扫 merged PR,开 docs update PR | 审稿 |
| SDK port | 监听一个语言仓库变更,开另一个语言的同步 PR | 处理语义差异 |
它不适合“没有退出标准、没有权限边界、会直接影响客户”的事情。
Routines 最容易踩的坑
官方文档里有几句很关键:Routine 运行时没有 permission-mode picker,也没有 approval prompts;它能访问什么,取决于你选了哪些 repositories、环境网络、环境变量和 connectors。
这意味着配置阶段就是安全阶段。运行时你没法指望它每次都问你。
| 风险 | 具体表现 | 处理方式 |
|---|---|---|
| 权限过大 | 默认包含不需要的 connector | 创建 Routine 时移除无关连接 |
| 网络过宽 | 云环境能访问不该访问的服务 | 用 environment 控制网络白名单 |
| 写入不可控 | 能 push 到非 claude/ 前缀分支 | 默认只允许 Agent 自己的分支 |
| 成功假象 | run list 是绿色,但任务其实没做完 | 必须打开 transcript 看真实结果 |
| 事件风暴 | GitHub event 太多,重复开 session | 用 filter 限制 PR、label、branch |
我的建议是:Routine 的 prompt 里必须写“什么算成功、什么算阻塞、什么不能做”。如果你写不清楚,就不该让它自动跑。
Medium 上的生产化经验:Agent 需要 harness
Medium 最近有几篇 Claude Code 相关长文很值得看。最有启发的是一个 production agent harness 的案例:作者把 Claude Code 放进一个多 Agent 工程流水线里,核心不是“模型更强”,而是 runtime scaffold。
这个 harness 包括:
- 事件入口:Slack、MR、CI、告警;
- 调度层:把任务分给不同 agent;
- 状态层:记录任务、评论、失败、重试;
- 自愈循环:CI 失败后能回到任务上下文;
- 观测层:知道 Agent 做了什么;
- 控制面:人能暂停、接管、审查。
这和官方 Routines 是互补关系。Routines 给你托管 session 和触发器;harness 解决“长期运行的软件系统应该如何可靠地活着”。
Recoverable,比 autonomous 更重要
另一篇 Medium 文章讲得更直接:Agent 一定会失败。真正的问题不是怎么让它永远不失败,而是怎么让失败可恢复。
这点非常实际。一个 Agent 如果只是读文件、改代码、跑测试,失败还好;一旦它开始碰真实系统,就会有非确定性:
- 第三方 API 503;
- 支付成功但库存没锁;
- PR 已更新但本地还是旧分支;
- CI 失败原因来自 flaky test;
- 两个 Agent 改了同一处代码;
- 用户中途改变需求。
所以 loop / routine / harness 都需要这几样东西:
| 机制 | 为什么需要 |
|---|---|
| 幂等 key | 同一个动作重复执行不会产生两次副作用 |
| 补偿动作 | 外部系统成功一半时能回滚或修正 |
| 状态机 | 知道任务在哪一步失败 |
| 审计日志 | 事后能还原 Agent 做过什么 |
| 人类接管点 | 高风险或不确定时暂停 |
| 超时和预算 | 防止无限循环烧 token 和 API |
“能自己循环”只是第一步;“失败后不把系统弄坏”才是工程门槛。
多 Agent 协作:Git 可能是最低摩擦的消息总线
还有一篇 Medium 文章讨论 Claude Code 和 Codex 通过 Git 做实时对话。它用的是一个很有意思的思路:把 Agent 消息写成 append-only JSONL,放在 Git refs 里,通过 push/pull 传播。
这个方案不一定是最终形态,但它抓到了多 Agent 协作的一个关键点:Agent 之间的通信也要可审计、可合并、可复现。
| 通信方式 | 优点 | 缺点 |
|---|---|---|
| 直接聊天 | 简单 | 难审计,容易丢上下文 |
| Slack / IM | 人类可见 | 结构化弱,和代码状态脱节 |
| 数据库队列 | 工程化强 | 需要额外服务 |
| Git append-only log | 和代码同源、可版本化 | 实时性和协议能力有限 |
如果多个 Agent 都在一个仓库里工作,Git 作为通信底座并不荒唐。它至少能让每一次交接变成版本历史的一部分。
我会怎么落地
如果要在团队里用 Claude Code 做自动化,我会按四层推进:
- 先用
/loop做短周期、只读或低风险轮询。 - 再用 Routines 做重复、边界清楚的云端任务。
- 再把高价值流程接入队列、状态机和审计。
- 最后才谈多 Agent 协作和跨仓库调度。
| 阶段 | 可以自动化 | 不该自动化 |
|---|---|---|
| loop | 等 CI、查日志、跑只读检查 | 自动合并、自动部署 |
| Routine | 定时 review、docs drift、draft PR | 无审查地改生产配置 |
| Harness | 多仓库工程流水线、告警修复草案 | 没有状态机的真实副作用 |
| Multi-agent | 分工探索、互审、跨模型验证 | 多个 Agent 同时无锁写同一文件 |
我的判断
Claude Code 正在从“人盯着终端”走向“事件驱动的工程系统”。/loop 是最小循环,Routines 是托管循环,production harness 是能长期工作的系统。
不要把任何一个循环误会成自动驾驶。真正成熟的 Agent workflow,一定会长出队列、状态、幂等、补偿、审计和人类控制面。少了这些,自动化越强,事故半径越大。
来源
- Claude Code Docs:Overview
https://code.claude.com/docs/en/overview - Claude Code Docs:Automate work with routines
https://code.claude.com/docs/en/routines - Claude Code Docs:How Claude Code works
https://code.claude.com/docs/en/how-claude-code-works - Medium:Building a Production Agent Harness
https://medium.com/@licaomeng/building-a-production-agent-harness-turning-claude-code-into-a-multi-agent-engineering-pipeline-1db4e242d08a - Medium:Your AI Agent Will Fail. Here’s How to Make It Recoverable.
https://medium.com/gitconnected/your-ai-agent-will-fail-heres-how-to-make-it-recoverable-781e0db1b5b3 - Medium:Claude Code and Codex Can Have Real-Time Conversation via Git
https://medium.com/@Koukyosyumei/claude-code-and-codex-can-have-real-time-conversation-via-git-f95b696c1c05