Tools
Tool-Loop-Erkennung
OpenClaw verfügt über zwei zusammenarbeitende Schutzmechanismen für repetitive Tool-Aufrufmuster:
- Loop-Erkennung (
tools.loopDetection.enabled) — standardmäßig deaktiviert. Überwacht den rollierenden Tool-Aufrufverlauf auf wiederholte Muster und Wiederholungsversuche für unbekannte Tools. - Post-Compaction-Guard (
tools.loopDetection.postCompactionGuard) — standardmäßig aktiviert, außertools.loopDetection.enabledist ausdrücklichfalse. Wird nach jedem Compaction-Retry scharfgeschaltet und bricht den Lauf ab, wenn der Agent innerhalb des Fensters dasselbe(tool, args, result)-Tripel ausgibt.
Beide werden im selben tools.loopDetection-Block konfiguriert, aber der Post-Compaction-Guard läuft immer dann, wenn der Hauptschalter nicht ausdrücklich ausgeschaltet ist. Setzen Sie tools.loopDetection.enabled: false, um beide Bereiche stummzuschalten.
Warum es das gibt
- Repetitive Sequenzen erkennen, die keinen Fortschritt erzielen.
- Hochfrequente Schleifen ohne Ergebnis erkennen (gleiches Tool, gleiche Eingaben, wiederholte Fehler).
- Bestimmte Wiederholungsaufrufmuster für bekannte Polling-Tools erkennen.
- Verhindern, dass Kontextüberlauf, anschließende Compaction und dieselben Schleifenzyklen unbegrenzt weiterlaufen.
Konfigurationsblock
Globale Standardwerte, mit allen dokumentierten Feldern:
{
tools: {
loopDetection: {
enabled: false, // master switch for the rolling-history detectors
historySize: 30,
warningThreshold: 10,
criticalThreshold: 20,
unknownToolThreshold: 10,
globalCircuitBreakerThreshold: 30,
detectors: {
genericRepeat: true,
knownPollNoProgress: true,
pingPong: true,
},
postCompactionGuard: {
windowSize: 3, // armed after compaction-retry; runs unless enabled is explicitly false
},
},
},
}
Optionale Überschreibung pro Agent:
{
agents: {
list: [
{
id: "safe-runner",
tools: {
loopDetection: {
enabled: true,
warningThreshold: 8,
criticalThreshold: 16,
},
},
},
],
},
}
Feldverhalten
| Feld | Standard | Wirkung |
|---|---|---|
enabled |
false |
Hauptschalter für die Detektoren des rollierenden Verlaufs. Das Setzen auf false deaktiviert auch den Post-Compaction-Guard. |
historySize |
30 |
Anzahl der letzten Tool-Aufrufe, die für die Analyse aufbewahrt werden. |
warningThreshold |
10 |
Schwellenwert, ab dem ein Muster nur als Warnung eingestuft wird. |
criticalThreshold |
20 |
Schwellenwert zum Blockieren repetitiver Schleifenmuster. |
unknownToolThreshold |
10 |
Blockiert nach dieser Anzahl von Fehlschlägen wiederholte Aufrufe an dasselbe nicht verfügbare Tool. |
globalCircuitBreakerThreshold |
30 |
Globaler Unterbrecherschwellenwert für ausbleibenden Fortschritt über alle Detektoren hinweg. |
detectors.genericRepeat |
true |
Erkennt wiederholte Muster aus demselben Tool und denselben Parametern. |
detectors.knownPollNoProgress |
true |
Erkennt bekannte Polling-ähnliche Muster ohne Zustandsänderung. |
detectors.pingPong |
true |
Erkennt alternierende Ping-Pong-Muster. |
postCompactionGuard.windowSize |
3 |
Anzahl der Tool-Aufrufe nach Compaction, während der Guard scharf bleibt, sowie die Anzahl identischer Tripel, die den Lauf abbricht. |
Für exec vergleichen Prüfungen auf ausbleibenden Fortschritt stabile Befehlsergebnisse und ignorieren flüchtige Laufzeitmetadaten wie Dauer, PID, Sitzungs-ID und Arbeitsverzeichnis. Wenn eine Lauf-ID verfügbar ist, wird der aktuelle Tool-Aufrufverlauf nur innerhalb dieses Laufs ausgewertet, sodass geplante Heartbeat-Zyklen und neue Läufe keine veralteten Schleifenzähler aus früheren Läufen übernehmen.
Empfohlene Einrichtung
- Setzen Sie für kleinere Modelle
enabled: trueund belassen Sie die Schwellenwerte bei ihren Standardwerten. Flaggschiffmodelle benötigen die Erkennung über den rollierenden Verlauf nur selten und können den Hauptschalter auffalsebelassen, während sie dennoch vom Post-Compaction-Guard profitieren. - Halten Sie die Schwellenwerte in der Reihenfolge
warningThreshold < criticalThreshold < globalCircuitBreakerThreshold. - Wenn falsch positive Treffer auftreten:
- Erhöhen Sie
warningThresholdund/odercriticalThreshold. - Erhöhen Sie optional
globalCircuitBreakerThreshold. - Deaktivieren Sie nur den spezifischen Detektor, der Probleme verursacht (
detectors.<name>: false). - Reduzieren Sie
historySizefür einen weniger strikten historischen Kontext.
- Erhöhen Sie
- Um alles zu deaktivieren, einschließlich des Post-Compaction-Guards, setzen Sie
tools.loopDetection.enabled: falseausdrücklich.
Post-Compaction-Guard
Wenn der Runner nach einem Kontextüberlauf einen Compaction-Retry abschließt, schaltet er einen Guard mit kurzem Fenster scharf, der die nächsten wenigen Tool-Aufrufe überwacht. Wenn der Agent innerhalb des Fensters dasselbe (toolName, argsHash, resultHash)-Tripel mehrfach ausgibt, schließt der Guard daraus, dass die Compaction die Schleife nicht durchbrochen hat, und bricht den Lauf mit einem compaction_loop_persisted-Fehler ab.
Der Guard wird durch das Master-Flag tools.loopDetection.enabled gesteuert, mit einer Besonderheit: Er bleibt aktiviert, wenn das Flag nicht gesetzt oder true ist, und wird nur deaktiviert, wenn das Flag ausdrücklich false ist. Das ist beabsichtigt. Der Guard dient dazu, Compaction-Schleifen zu verlassen, die sonst unbegrenzt Tokens verbrauchen würden, sodass Nutzer ohne Konfiguration dennoch geschützt sind.
{
tools: {
loopDetection: {
// master switch; set false to disable the guard along with the rolling detectors
enabled: true,
postCompactionGuard: {
windowSize: 3, // default
},
},
},
}
- Ein niedrigerer
windowSizeist strenger (weniger Versuche vor dem Abbruch). - Ein höherer
windowSizegibt dem Agent mehr Wiederherstellungsversuche. - Der Guard bricht nie ab, wenn sich Ergebnisse ändern, sondern nur, wenn Ergebnisse über das Fenster hinweg byte-identisch sind.
- Er ist bewusst eng gefasst: Er löst nur unmittelbar nach einem Compaction-Retry aus.
Logs und erwartetes Verhalten
Wenn eine Schleife erkannt wird, meldet OpenClaw ein Schleifenereignis und dämpft oder blockiert je nach Schweregrad den nächsten Tool-Zyklus. Das schützt Nutzer vor ausufernden Token-Kosten und Blockaden, während der normale Tool-Zugriff erhalten bleibt.
- Warnungen kommen zuerst.
- Unterdrückung folgt, wenn Muster über den Warnschwellenwert hinaus bestehen bleiben.
- Kritische Schwellenwerte blockieren den nächsten Tool-Zyklus und zeigen im Laufdatensatz einen klaren Grund der Loop-Erkennung an.
- Der Post-Compaction-Guard gibt
compaction_loop_persisted-Fehler mit dem Namen des betroffenen Tools und der Anzahl identischer Aufrufe aus.
Verwandt
Zulassen-/Ablehnen-Richtlinie für Shell-Ausführung.
Reasoning-Effort-Stufen und Interaktion mit Provider-Richtlinien.
Starten isolierter Agents, um ausuferndes Verhalten einzugrenzen.
Vollständiges tools.loopDetection-Schema und Zusammenführungssemantik.