自主循环技能
兼容性说明 (v1.8.0):
autonomous-loops保留一个发布周期。 规范的技能名称现在是continuous-agent-loop。新的循环指南应在此处编写,而此技能继续可用以避免破坏现有工作流。
在循环中自主运行 Claude Code 的模式、架构和参考实现。涵盖从简单的 claude -p 管道到完整的 RFC 驱动的多智能体 DAG 编排的一切。
何时使用
- 建立无需人工干预即可运行的自主开发工作流
- 为你的问题选择正确的循环架构(简单与复杂)
- 构建 CI/CD 风格的持续开发管道
- 运行具有合并协调的并行智能体
- 在循环迭代中实现上下文持久化
- 为自主工作流添加质量门和清理步骤
循环模式谱系
从最简单到最复杂:
1. 顺序管道 (claude -p)
最简单的循环。 将日常开发分解为一系列非交互式 claude -p 调用。每次调用都是一个具有清晰提示的专注步骤。
核心见解
如果你无法想出这样的循环,那意味着你甚至无法在交互模式下驱动 LLM 来修复你的代码。
claude -p 标志以非交互方式运行 Claude Code 并附带提示,完成后退出。链式调用来构建管道:
关键设计原则
- 每个步骤都是隔离的 — 每次
claude -p调用都是一个新的上下文窗口,意味着步骤之间没有上下文泄露。 - 顺序很重要 — 步骤按顺序执行。每个步骤都建立在前一个步骤留下的文件系统状态之上。
- 否定指令是危险的 — 不要说“不要测试类型系统。”相反,添加一个单独的清理步骤(参见去草率化模式)。
- 退出代码会传播 —
set -e在失败时停止管道。
变体
使用模型路由:
使用环境上下文:
使用 --allowedTools 限制:
2. NanoClaw REPL
ECC 内置的持久循环。 一个具有会话感知的 REPL,它使用完整的对话历史同步调用 claude -p。
工作原理
- 从
~/.claude/claw/{session}.md加载对话历史 - 每个用户消息都连同完整历史记录作为上下文发送给
claude -p - 响应被追加到会话文件中(Markdown 作为数据库)
- 会话在重启后持久存在
NanoClaw 与顺序管道的选择
有关完整详情,请参阅 /claw 命令文档。
3. 无限智能体循环
一个双提示系统,用于编排并行子智能体以进行规范驱动的生成。由 disler 开发(致谢:@disler)。
架构:双提示系统
模式
- 规范分析 — 编排器读取一个定义要生成内容的规范文件(Markdown)
- 目录侦察 — 扫描现有输出以找到最高的迭代编号
- 并行部署 — 启动 N 个子智能体,每个都有:
- 完整的规范
- 独特的创意方向
- 特定的迭代编号(无冲突)
- 现有迭代的快照(用于确保唯一性)
- 波次管理 — 对于无限模式,部署 3-5 个智能体的波次,直到上下文耗尽
通过 Claude Code 命令实现
创建 .claude/commands/infinite.md:
调用:
批处理策略
关键见解:通过分配实现唯一性
不要依赖智能体自我区分。编排器分配给每个智能体一个特定的创意方向和迭代编号。这可以防止并行智能体之间的概念重复。
4. 持续 Claude PR 循环
一个生产级的 shell 脚本,在持续循环中运行 Claude Code,创建 PR,等待 CI,并自动合并。由 AnandChowdhary 创建(致谢:@AnandChowdhary)。
核心循环
安装
警告: 请在审阅代码后,从 continuous-claude 的仓库安装。不要将外部脚本直接管道传入 bash。
用法
跨迭代上下文:SHARED_TASK_NOTES.md
关键创新:一个 SHARED_TASK_NOTES.md 文件在迭代间持久存在:
Claude 在迭代开始时读取此文件,并在迭代结束时更新它。这弥合了独立 claude -p 调用之间的上下文差距。
CI 失败恢复
当 PR 检查失败时,持续 Claude 会自动:
- 通过
gh run list获取失败的运行 ID - 生成一个新的带有 CI 修复上下文的
claude -p - Claude 通过
gh run view检查日志,修复代码,提交,推送 - 重新等待检查(最多
--ci-retry-max次尝试)
完成信号
Claude 可以通过输出一个魔法短语来发出“我完成了”的信号:
连续三次迭代发出完成信号会停止循环,防止在已完成的工作上浪费运行。
关键配置
5. 去草率化模式
任何循环的附加模式。 在每个实现者步骤之后添加一个专门的清理/重构步骤。
问题
当你要求 LLM 使用 TDD 实现时,它对“编写测试”的理解过于字面:
- 测试验证 TypeScript 的类型系统是否有效(测试
typeof x === 'string') - 对类型系统已经保证的东西进行过度防御的运行时检查
- 测试框架行为而非业务逻辑
- 过多的错误处理掩盖了实际代码
为什么不使用否定指令?
在实现者提示中添加“不要测试类型系统”或“不要添加不必要的检查”会产生下游影响:
- 模型对所有测试都变得犹豫不决
- 它会跳过合法的边缘情况测试
- 质量不可预测地下降
解决方案:单独的步骤
与其限制实现者,不如让它彻底。然后添加一个专注的清理智能体:
在循环上下文中
关键见解
与其添加具有下游质量影响的否定指令,不如添加一个单独的去草率化步骤。两个专注的智能体胜过一个有约束的智能体。
6. Ralphinho / RFC 驱动的 DAG 编排
最复杂的模式。 一个 RFC 驱动的多智能体管道,将规范分解为依赖关系 DAG,通过分层质量管道运行每个单元,并通过智能体驱动的合并队列落地。由 enitrat 创建(致谢:@enitrat)。
架构概述
RFC 分解
AI 读取 RFC 并生成工作单元:
分解规则:
- 倾向于更少、内聚的单元(最小化合并风险)
- 最小化跨单元文件重叠(避免冲突)
- 保持测试与实现在一起(永远不要分开“实现 X” + “测试 X”)
- 仅在实际存在代码依赖关系的地方设置依赖关系
依赖关系 DAG 决定了执行顺序:
复杂度层级
不同的层级获得不同深度的管道:
这可以防止对简单更改进行昂贵的操作,同时确保架构更改得到彻底审查。
独立的上下文窗口(消除作者偏见)
每个阶段在其自己的智能体进程中运行,拥有自己的上下文窗口:
关键设计: 审阅者从未编写过它要审阅的代码。这消除了作者偏见——这是自我审阅中遗漏问题的最常见原因。
具有驱逐功能的合并队列
质量管道完成后,单元进入合并队列:
文件重叠智能:
- 非重叠单元并行推测性地落地
- 重叠单元逐个落地,每次重新变基
驱逐恢复: 被驱逐时,会捕获完整上下文(冲突文件、差异、测试输出)并反馈给下一个 Ralph 轮次的实现者:
阶段间的数据流
工作树隔离
每个单元在隔离的工作树中运行(使用 jj/Jujutsu,而不是 git):
同一单元的管道阶段共享一个工作树,在 research → plan → implement → test → review 之间保留状态(上下文文件、计划文件、代码更改)。
关键设计原则
- 确定性执行 — 预先分解锁定并行性和顺序
- 在杠杆点进行人工审阅 — 工作计划是单一最高杠杆干预点
- 关注点分离 — 每个阶段在独立的上下文窗口中,由独立的智能体负责
- 带上下文的冲突恢复 — 完整的驱逐上下文支持智能重试,而非盲目重试
- 层级驱动的深度 — 琐碎更改跳过研究/审阅;大型更改获得最大审查
- 可恢复的工作流 — 完整状态持久化到 SQLite;可从任何点恢复
何时使用 Ralphinho 与更简单的模式
选择正确的模式
决策矩阵
模式组合
这些模式可以很好地组合:
-
顺序流水线 + 去草率化 — 最常见的组合。每个实现步骤都进行一次清理。
-
连续 Claude + 去草率化 — 为每次迭代添加带有去草率化指令的
--review-prompt。 -
任何循环 + 验证 — 在提交前,使用 ECC 的
/verify命令或verification-loop技能作为关卡。 -
Ralphinho 在简单循环中的分层方法 — 即使在顺序流水线中,你也可以将简单任务路由到 Haiku,复杂任务路由到 Opus:
反模式
常见错误
-
没有退出条件的无限循环 — 始终设置最大运行次数、最大成本、最大持续时间或完成信号。
-
迭代之间没有上下文桥接 — 每次
claude -p调用都从头开始。使用SHARED_TASK_NOTES.md或文件系统状态来桥接上下文。 -
重试相同的失败 — 如果一次迭代失败,不要只是重试。捕获错误上下文并将其提供给下一次尝试。
-
使用负面指令而非清理过程 — 不要说“不要做 X”。添加一个单独的步骤来移除 X。
-
所有智能体都在一个上下文窗口中 — 对于复杂的工作流,将关注点分离到不同的智能体进程中。审查者永远不应该是作者。
-
在并行工作中忽略文件重叠 — 如果两个并行智能体可能编辑同一个文件,你需要一个合并策略(顺序落地、变基或冲突解决)。


