---
read_when:
    - एक उपयोगकर्ता रिपोर्ट करता है कि एजेंट टूल कॉल दोहराते हुए अटक रहे हैं
    - आपको दोहराव वाली कॉल से सुरक्षा नियंत्रित करनी होगी
    - आप एजेंट टूल/रनटाइम नीतियों को संपादित कर रहे हैं
    - कॉन्टेक्स्ट-ओवरफ़्लो के बाद दोबारा प्रयास करने पर आपको `compaction_loop_persisted` अबॉर्ट मिलते हैं
summary: दोहराव वाले टूल-कॉल लूप का पता लगाने वाली सुरक्षा सीमाएँ कैसे सक्षम करें
title: टूल-लूप का पता लगाना
x-i18n:
    generated_at: "2026-07-27T20:38:43Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: 79b5aa1d85e02b8cf46a95b3bcebb255178b91456517cab804cce77b8f3b818e
    source_path: tools/loop-detection.md
    workflow: 16
---

OpenClaw में दो सहयोगी सुरक्षा-उपाय हैं, जो बार-बार दोहराए जाने वाले टूल-कॉल पैटर्न से बचाते हैं,
और दोनों को `tools.loopDetection` के अंतर्गत कॉन्फ़िगर किया जाता है:

1. **लूप पहचान** (`enabled`) - डिफ़ॉल्ट रूप से अक्षम। दोहराए गए पैटर्न और अज्ञात-टूल पुनः प्रयासों के लिए हालिया
   टूल-कॉल इतिहास पर नज़र रखती है।
2. **Compaction के बाद का सुरक्षा-उपाय** - जब भी
   `enabled` को स्पष्ट रूप से `false` नहीं किया गया हो, तब सक्षम रहता है। प्रत्येक Compaction-पुनः प्रयास के बाद सक्रिय होता है और
   यदि एजेंट समय-सीमा के भीतर उसी `(tool, args, result)` त्रिक को दोहराता है,
   तो रन को निरस्त कर देता है।

दोनों सुरक्षा-उपायों को निष्क्रिय करने के लिए `tools.loopDetection.enabled: false` सेट करें।

## यह क्यों मौजूद है

- ऐसे दोहराव वाले अनुक्रमों का पता लगाना, जिनसे कोई प्रगति नहीं होती।
- उच्च-आवृत्ति वाले परिणाम-विहीन लूप का पता लगाना (वही टूल, वही इनपुट, बार-बार होने वाली
  त्रुटियाँ)।
- ज्ञात पोलिंग टूल के लिए विशिष्ट दोहराए गए कॉल पैटर्न का पता लगाना।
- कॉन्टेक्स्ट ओवरफ़्लो -> Compaction -> वही लूप चक्रों को अनिश्चित काल तक
  चलने देने के बजाय तोड़ना।

## कॉन्फ़िगरेशन ब्लॉक

वैश्विक सेटिंग:

```json5
{
  tools: {
    loopDetection: {
      enabled: false, // हालिया-इतिहास डिटेक्टरों का मुख्य स्विच
    },
  },
}
```

प्रति-एजेंट ओवरराइड (वैकल्पिक, `agents.entries.*.tools.loopDetection` पर):

```json5
{
  agents: {
    list: [
      {
        id: "safe-runner",
        tools: {
          loopDetection: {
            enabled: true,
          },
        },
      },
    ],
  },
}
```

प्रति-एजेंट सेटिंग वैश्विक सेटिंग को ओवरराइड करती है।

### फ़ील्ड का व्यवहार

| फ़ील्ड     | डिफ़ॉल्ट | प्रभाव                                                                                            |
| --------- | ------- | ------------------------------------------------------------------------------------------------- |
| `enabled` | `false` | हालिया-इतिहास डिटेक्टरों का मुख्य स्विच। `false` Compaction के बाद के सुरक्षा-उपाय को भी अक्षम करता है। |

`exec` के लिए, प्रगति-रहित हैशिंग स्थिर कमांड परिणामों (स्थिति,
निकास कोड, समय-समाप्ति फ़्लैग, आउटपुट) की तुलना करती है और अवधि, PID, सत्र ID और कार्यशील निर्देशिका जैसे
परिवर्तनशील रनटाइम मेटाडेटा को अनदेखा करती है। आउटबाउंड संदेश-प्रेषण
परिणामों को प्रत्येक कॉल के परिवर्तनशील ID (संदेश ID, फ़ाइल ID, टाइमस्टैम्प)
हटाकर हैश किया जाता है, ताकि एक "भेजा गया" परिणाम किसी दूसरे "भेजा गया"
परिणाम के समान न दिखे। जब रन ID उपलब्ध हो, तो इतिहास का मूल्यांकन केवल उसी रन के भीतर किया जाता है,
ताकि निर्धारित Heartbeat चक्र और नए रन पहले के रन से पुराने लूप की संख्या
प्राप्त न करें।

## अनुशंसित सेटअप

- छोटे मॉडलों के लिए, `enabled: true` सेट करें। प्रमुख मॉडलों को हालिया-इतिहास पहचान की शायद ही कभी आवश्यकता होती है और वे
मुख्य स्विच को `false` पर छोड़कर भी
Compaction के बाद के सुरक्षा-उपाय का लाभ उठा सकते हैं।
- Compaction के बाद के सुरक्षा-उपाय सहित सब कुछ अक्षम करने के लिए,
  `tools.loopDetection.enabled: false` को स्पष्ट रूप से सेट करें।

## Compaction के बाद का सुरक्षा-उपाय

कॉन्टेक्स्ट ओवरफ़्लो के बाद Compaction-पुनः प्रयास होने पर, रनर अगले कुछ टूल कॉल के लिए
एक छोटी समय-सीमा वाला सुरक्षा-उपाय सक्रिय करता है। यदि एजेंट उस समय-सीमा के भीतर एक ही
`(toolName, argsHash, resultHash)` त्रिक को पर्याप्त बार उत्पन्न करता है, तो सुरक्षा-उपाय यह निष्कर्ष निकालता है कि Compaction ने
लूप को नहीं तोड़ा और `compaction_loop_persisted` त्रुटि के साथ रन को निरस्त कर देता है।

सुरक्षा-उपाय मुख्य `tools.loopDetection.enabled` फ़्लैग द्वारा नियंत्रित होता है, लेकिन इसमें एक
विशेषता है: फ़्लैग सेट न होने या `true` होने पर यह **सक्षम रहता है**, और केवल तब
बंद होता है, जब फ़्लैग को स्पष्ट रूप से `false` किया गया हो। यह जानबूझकर किया गया है - यह सुरक्षा-उपाय
उन Compaction लूप से बाहर निकलने के लिए मौजूद है, जो अन्यथा असीमित टोकन खर्च करते रहते,
इसलिए बिना कॉन्फ़िगरेशन वाले उपयोगकर्ता को भी सुरक्षा मिलती है।

```json5
{
  tools: {
    loopDetection: {
      // मुख्य स्विच; हालिया डिटेक्टरों के साथ सुरक्षा-उपाय को भी अक्षम करने के लिए false सेट करें
      enabled: true,
    },
  },
}
```

- परिणाम बदलते रहने पर सुरक्षा-उपाय कभी रन निरस्त नहीं करता; समय-सीमा में केवल बाइट-दर-बाइट समान
  परिणाम ही इसे ट्रिगर करते हैं।
- यह केवल Compaction-पुनः प्रयास के तुरंत बाद सक्रिय होता है, रन के अन्य
  बिंदुओं पर नहीं।

<Note>
  जब भी मुख्य फ़्लैग स्पष्ट रूप से `false` नहीं होता, तब Compaction के बाद का सुरक्षा-उपाय चलता है, भले ही आपने कभी `tools.loopDetection` ब्लॉक न लिखा हो। सत्यापित करने के लिए, Compaction घटना के तुरंत बाद Gateway लॉग में `post-compaction guard armed for N attempts` खोजें।
</Note>

## लॉग और अपेक्षित व्यवहार

जब किसी लूप का पता चलता है, तो OpenClaw एक लूप घटना लॉग करता है और गंभीरता के आधार पर
अगले टूल चक्र के लिए चेतावनी देता है या उसे अवरुद्ध करता है, जिससे सामान्य टूल पहुँच बनाए रखते हुए
टोकन के अनियंत्रित खर्च और अवरोधों से सुरक्षा मिलती है।

- चेतावनियाँ पहले आती हैं।
- जब कोई पैटर्न चेतावनी सीमा के बाद भी बना रहता है, तो अवरोधन होता है।
- गंभीर सीमाएँ अगले टूल चक्र को अवरुद्ध करती हैं और रन रिकॉर्ड में लूप पहचान का स्पष्ट
  कारण दिखाती हैं।
- Compaction के बाद का सुरक्षा-उपाय आपत्तिजनक टूल और समान कॉल की संख्या बताते हुए `compaction_loop_persisted`
  त्रुटियाँ उत्पन्न करता है।

## संबंधित

<CardGroup cols={2}>
  <Card title="निष्पादन स्वीकृतियाँ" href="/hi/tools/exec-approvals" icon="shield">
    शेल निष्पादन के लिए अनुमति/अस्वीकृति नीति।
  </Card>
  <Card title="चिंतन स्तर" href="/hi/tools/thinking" icon="brain">
    तर्क प्रयास के स्तर और प्रदाता-नीति की परस्पर क्रिया।
  </Card>
  <Card title="उप-एजेंट" href="/hi/tools/subagents" icon="users">
    अनियंत्रित व्यवहार को सीमित करने के लिए पृथक एजेंट उत्पन्न करना।
  </Card>
  <Card title="कॉन्फ़िगरेशन संदर्भ" href="/hi/gateway/config-tools#toolsloopdetection" icon="gear">
    संपूर्ण `tools.loopDetection` स्कीमा और विलय की अर्थवत्ता।
  </Card>
</CardGroup>
