Files
bot/docs/tools/loop-detection.md
zeekay 4bdc9ee3e4 chore: rebrand openclaw → hanzo-bot for bridge merge
Comprehensive rename of all openclaw references to hanzo-bot equivalents:
- Package: openclaw → @hanzo/bot
- Binary: openclaw → hanzo-bot
- Types: OpenClaw* → Bot*
- Env vars: OPENCLAW_* → BOT_*
- Android: ai.openclaw.android → ai.hanzo.bot.android
- iOS/macOS: ai.openclaw.* → ai.hanzo.*
- Swift modules: OpenClaw* → Bot*
- Plugins: openclaw.plugin.json → bot.plugin.json
- Paths: .openclaw/ → .hanzo/bot/
- URLs: github.com/openclaw → github.com/hanzoai
2026-02-26 22:36:01 -08:00

2.8 KiB

title, description, summary, read_when
title description summary read_when
Tool-loop detection Configure optional guardrails for preventing repetitive or stalled tool-call loops How to enable and tune guardrails that detect repetitive tool-call loops
A user reports agents getting stuck repeating tool calls
You need to tune repetitive-call protection
You are editing agent tool/runtime policies

Tool-loop detection

Bot can keep agents from getting stuck in repeated tool-call patterns. The guard is disabled by default.

Enable it only where needed, because it can block legitimate repeated calls with strict settings.

Why this exists

  • Detect repetitive sequences that do not make progress.
  • Detect high-frequency no-result loops (same tool, same inputs, repeated errors).
  • Detect specific repeated-call patterns for known polling tools.

Configuration block

Global defaults:

{
  tools: {
    loopDetection: {
      enabled: false,
      historySize: 20,
      detectorCooldownMs: 12000,
      repeatThreshold: 3,
      criticalThreshold: 6,
      detectors: {
        repeatedFailure: true,
        knownPollLoop: true,
        repeatingNoProgress: true,
      },
    },
  },
}

Per-agent override (optional):

{
  agents: {
    list: [
      {
        id: "safe-runner",
        tools: {
          loopDetection: {
            enabled: true,
            repeatThreshold: 2,
            criticalThreshold: 5,
          },
        },
      },
    ],
  },
}

Field behavior

  • enabled: Master switch. false means no loop detection is performed.
  • historySize: number of recent tool calls kept for analysis.
  • detectorCooldownMs: time window used by the no-progress detector.
  • repeatThreshold: minimum repeats before warning/blocking starts.
  • criticalThreshold: stronger threshold that can trigger stricter handling.
  • detectors.repeatedFailure: detects repeated failed attempts on the same call path.
  • detectors.knownPollLoop: detects known polling-like loops.
  • detectors.repeatingNoProgress: detects high-frequency repeated calls without state change.
  • Start with enabled: true, defaults unchanged.
  • If false positives occur:
    • raise repeatThreshold and/or criticalThreshold
    • disable only the detector causing issues
    • reduce historySize for less strict historical context

Logs and expected behavior

When a loop is detected, Bot reports a loop event and blocks or dampens the next tool-cycle depending on severity. This protects users from runaway token spend and lockups while preserving normal tool access.

  • Prefer warning and temporary suppression first.
  • Escalate only when repeated evidence accumulates.

Notes

  • tools.loopDetection is merged with agent-level overrides.
  • Per-agent config fully overrides or extends global values.
  • If no config exists, guardrails stay off.