mcpField
L
loop-circuit-breaker

loop-circuit-breaker

github.com/archieindianAgent 工作流7348 次安装26 周前更新
代码仓库

关于 loop-circuit-breaker

面向 OpenClaw 的自动重试循环检测 Skill,监测每个会话中的工具调用失败。相同调用签名重复失败达到阈值时,它会停止重试、记录问题并提示用户选择后续处理方式。

主要功能

  1. 01按会话跟踪工具调用历史
  2. 02检测相同调用签名的重复失败
  3. 03区分暂时性与确定性错误
  4. 04触发后停止重试并记录状态
  5. 05提供调整失败阈值的命令

适用场景

  1. 01阻止因参数错误而重复调用工具
  2. 02限制超时或限流错误的重试次数
  3. 03在反复失败耗尽上下文前中止循环
  4. 04向用户说明错误并选择修复、跳过或终止

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/archieindian/openclaw-superpowers --skill loop-circuit-breaker

安装后在 Claude Code 中输入/loop-circuit-breaker确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

check.py
example-state.yaml
STATE_SCHEMA.yaml

详细介绍

loop-circuit-breaker

OpenClaw 对所有错误一视同仁地重试,无论错误是暂时性的(速率限制、超时)还是确定性的(缺少参数、类型错误、路径无效)。此技能会跟踪每个会话中的工具调用历史,识别重复出现的相同故障,并在上下文窗口和 API 预算耗尽前停止循环。

与 agent-self-recovery 的区别

agent-self-recovery 是一种手动、被动的恢复协议——用户或 Agent 在发现 Agent 陷入停滞后调用它。

loop-circuit-breaker 则是自动、主动的——它会在第 2 次出现相同故障时触发,甚至早于用户察觉。

检测算法

每次工具调用返回结果时,Agent 都应检查:

  1. 此次工具调用是否失败(错误、异常或结果为空)?
  2. 规范化调用签名:(tool_name, sorted_args_hash, error_type)
  3. 在状态中的会话调用历史里查找此签名
  4. 如果相同签名已失败 N 次(默认:2),则触发断路器

N=2 的理由: 对于暂时性错误,重试一次是合理的。相同参数下连续两次出现相同故障,强烈表明这是无法通过重试解决的确定性错误。

错误分类

错误类型分类最大重试次数
速率限制(429)暂时性3
超时 / 网络错误暂时性3
缺少必需参数确定性1
类型错误 / 验证错误确定性1
找不到文件确定性1
权限被拒绝确定性1
未知错误未知2

断路器触发时

  1. 立即停止重试——不要再次发出相同的调用
  2. 诊断根本原因——仔细阅读错误消息
  3. 将 LOOP_DETECTED 写入状态,包含:工具名称、参数、错误、失败次数、首次 / 最后时间戳
  4. 向用户说明:“我检测到 <tool>(<args>) 出现重试循环。错误为:<error>。我已停止重试。您希望我接下来怎么做?”
  5. 提供选项:修正参数、跳过此步骤或中止任务

会话范围

循环检测按会话进行。每个新会话开始时,状态都会重置。状态中超过 2 小时的调用历史会自动清除。

调整

如需调整确定性错误的重试阈值:

python3 check.py --set-threshold 3   # Allow 3 failures before tripping

评论

支持 Markdown