mcpField
L
loop-circuit-breaker

loop-circuit-breaker

github.com/archieindianエージェントワークフロー7348 回インストール26 週間前に更新
リポジトリ

loop-circuit-breaker について

OpenClaw向けに、セッション内のツール呼び出し失敗を監視する自動リトライループ検出スキルです。同一の呼び出し署名が繰り返し失敗すると再試行を止め、問題を記録して次の対応をユーザーに確認します。

主な機能

  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 は手動の事後対応型リカバリープロトコルです。エージェントが行き詰まったことにユーザーまたはエージェントが気づいた後に、呼び出します。

loop-circuit-breaker は自動の事前対応型です。ユーザーが気づく前に、2 回目の同一エラーで作動します。

検出アルゴリズム

ツール呼び出しの結果を受け取るたびに、エージェントは次の項目を確認します。

  1. このツール呼び出しは失敗しましたか(エラー、例外、または空の結果)?
  2. 呼び出しのシグネチャを正規化します:((tool_name, sorted_args_hash, error_type))
  3. このシグネチャを、状態に記録されたセッションの呼び出し履歴から検索します
  4. 同じシグネチャが N 回(デフォルト:2 回)失敗した場合、サーキットブレーカーを作動させます

N=2 の根拠: 一時的なエラーであれば、1 回の再試行は妥当です。同一の引数で同じ失敗が 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

コメント