Skip to main content
Heartbeat बनाम cron? प्रत्येक का उपयोग कब करना है, इस पर मार्गदर्शन के लिए ऑटोमेशन देखें।
Heartbeat मुख्य सत्र में आवधिक एजेंट टर्न चलाता है, ताकि मॉडल आपका ध्यान आकर्षित करने वाली किसी भी चीज़ को अनावश्यक संदेश भेजे बिना सामने ला सके। Heartbeat एक शेड्यूल किया गया मुख्य-सत्र टर्न है—यह बैकग्राउंड टास्क रिकॉर्ड नहीं बनाता। टास्क रिकॉर्ड अलग से किए जाने वाले कार्यों (ACP रन, सबएजेंट, अलग-थलग cron जॉब) के लिए होते हैं। आंतरिक रूप से, Heartbeat की आवृत्ति cron शेड्यूलर के स्वामित्व में होती है: Gateway प्रत्येक Heartbeat-सक्षम एजेंट के लिए एक सिस्टम-स्वामित्व वाला cron जॉब बनाए रखता है (openclaw cron list --all में Heartbeat (agent-id) के रूप में दिखाई देता है)। Heartbeat कॉन्फ़िग इच्छित स्थिति का इनपुट बना रहता है, जबकि स्थायी मॉनिटर शेड्यूल वास्तविक टिक और रनर के बाद के कूलडाउन का स्वामी होता है। Gateway स्टार्टअप और कॉन्फ़िग रीलोड पर कॉन्फ़िग परिवर्तन लिखता है; openclaw doctor --fix अगला Gateway शुरू होने से पहले अनुपलब्ध या पुराने मॉनिटर रो बना सकता है। cron जॉब नहीं, agents.*.heartbeat संपादित करें। शेड्यूल किए गए Heartbeat के लिए cron आवश्यक है। जब cron.enabled, false या OPENCLAW_SKIP_CRON=1 होता है, तो Gateway स्टार्टअप चेतावनी लॉग करता है और शेड्यूल किए गए Heartbeat नहीं चलाता; मैन्युअल और ईवेंट-संचालित Heartbeat वेक उपलब्ध रहते हैं। Heartbeat के लिए कोई अलग फ़ॉलबैक टाइमर नहीं है। समस्या निवारण: शेड्यूल किए गए टास्क

तुरंत शुरुआत (शुरुआती उपयोगकर्ताओं के लिए)

1

आवृत्ति चुनें

Heartbeat को सक्षम रहने दें (डिफ़ॉल्ट 30m है, या Anthropic OAuth/टोकन प्रमाणीकरण कॉन्फ़िगर होने पर, Claude CLI के पुनः उपयोग सहित, 1h) या अपनी आवृत्ति सेट करें।
2

मॉनिटर स्क्रैच जोड़ें (वैकल्पिक)

openclaw cron scratch <jobId> --set "..." के साथ Heartbeat मॉनिटर के स्क्रैच में एक छोटी चेकलिस्ट संग्रहीत करें।
3

तय करें कि Heartbeat संदेश कहाँ जाने चाहिए

target: "none" डिफ़ॉल्ट है; अंतिम संपर्क तक रूट करने के लिए target: "last" सेट करें।
4

वैकल्पिक समायोजन

  • यदि Heartbeat रन को केवल मॉनिटर स्क्रैच की आवश्यकता है, तो हल्के बूटस्ट्रैप संदर्भ का उपयोग करें।
  • प्रत्येक Heartbeat के साथ पूरा वार्तालाप इतिहास भेजने से बचने के लिए अलग-थलग सत्र सक्षम करें।
  • Heartbeat को सक्रिय घंटों (स्थानीय समय) तक सीमित करें।
उदाहरण कॉन्फ़िग:

डिफ़ॉल्ट

  • अंतराल: 30m। जब समाधान किया गया प्रमाणीकरण मोड OAuth/टोकन हो (Claude CLI के पुनः उपयोग सहित), तब Anthropic प्रदाता डिफ़ॉल्ट लागू करने से यह 1h हो जाता है, लेकिन केवल जब heartbeat.every सेट न हो। agents.defaults.heartbeat.every या प्रति-एजेंट agents.entries.*.heartbeat.every सेट करें; अक्षम करने के लिए 0m का उपयोग करें।
  • प्रॉम्प्ट का मुख्य भाग (agents.defaults.heartbeat.prompt के माध्यम से कॉन्फ़िगर करने योग्य): Follow the heartbeat monitor scratch context when provided. Recurring tasks are cron jobs; create or change their schedules with cron tools or the openclaw cron CLI, not heartbeat scratch. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.
  • टाइमआउट: Heartbeat टर्न में टाइमआउट सेट न होने पर, यदि agents.defaults.timeoutSeconds सेट है तो उसका उपयोग किया जाता है। अन्यथा, वे अधिकतम 600 सेकंड तक सीमित Heartbeat आवृत्ति का उपयोग करते हैं। लंबे Heartbeat कार्य के लिए agents.defaults.heartbeat.timeoutSeconds या प्रति-एजेंट agents.entries.*.heartbeat.timeoutSeconds सेट करें।
  • Heartbeat प्रॉम्प्ट उपयोगकर्ता संदेश के रूप में बिल्कुल ज्यों का त्यों भेजा जाता है। डिफ़ॉल्ट एजेंट के लिए Heartbeat सक्षम होने पर सिस्टम प्रॉम्प्ट में “Heartbeats” अनुभाग शामिल होता है और रन को आंतरिक रूप से चिह्नित किया जाता है।
  • 0m से Heartbeat अक्षम किए जाने पर, मॉनिटर cron जॉब बना रहता है लेकिन अक्षम होता है और आवृत्ति दोबारा सक्षम करने के लिए उसका स्क्रैच सुरक्षित रखा जाता है।
  • जब cron स्वयं अक्षम होता है, तो Heartbeat आवृत्ति सक्षम रहने पर भी शेड्यूल किए गए Heartbeat नहीं चलते।
  • सक्रिय घंटों (heartbeat.activeHours) की जाँच कॉन्फ़िगर किए गए समय क्षेत्र में की जाती है। विंडो के बाहर, विंडो के भीतर अगले टिक तक Heartbeat छोड़ दिए जाते हैं।
  • cron कार्य सक्रिय या कतारबद्ध होने पर, या उस एजेंट के सत्र-कुंजी वाले सबएजेंट अथवा नेस्टेड कमांड लेन व्यस्त होने पर Heartbeat अपने आप स्थगित हो जाते हैं। समान स्तर के एजेंट एक-दूसरे को विराम नहीं देते।

Heartbeat प्रॉम्प्ट का उद्देश्य

डिफ़ॉल्ट प्रॉम्प्ट जानबूझकर व्यापक रखा गया है:
  • बैकग्राउंड टास्क: “लंबित टास्क पर विचार करें” एजेंट को फ़ॉलो-अप (इनबॉक्स, कैलेंडर, रिमाइंडर, कतारबद्ध कार्य) की समीक्षा करने और किसी भी अत्यावश्यक चीज़ को सामने लाने के लिए प्रेरित करता है।
  • मानवीय हाल-चाल: “दिन के समय कभी-कभी अपने उपयोगकर्ता का हाल पूछें” कभी-कभार हल्का “क्या आपको किसी चीज़ की आवश्यकता है?” संदेश भेजने के लिए प्रेरित करता है, लेकिन आपके कॉन्फ़िगर किए गए स्थानीय समय क्षेत्र का उपयोग करके रात के समय अनावश्यक संदेशों से बचता है (समय क्षेत्र देखें)।
Heartbeat पूर्ण हो चुके बैकग्राउंड टास्क पर प्रतिक्रिया दे सकता है, लेकिन Heartbeat रन स्वयं कोई टास्क रिकॉर्ड नहीं बनाता। यदि आप चाहते हैं कि Heartbeat कोई बहुत विशिष्ट कार्य करे (उदाहरण के लिए, “Gmail PubSub आँकड़े जाँचें” या “Gateway का स्वास्थ्य सत्यापित करें”), तो agents.defaults.heartbeat.prompt (या agents.entries.*.heartbeat.prompt) को कस्टम मुख्य भाग पर सेट करें (ज्यों का त्यों भेजा जाता है)।

प्रतिक्रिया अनुबंध

  • यदि किसी चीज़ पर ध्यान देने की आवश्यकता नहीं है, तो HEARTBEAT_OK से उत्तर दें।
  • Heartbeat रन इसके बजाय बिना किसी दृश्यमान अपडेट के लिए notify: false के साथ heartbeat_respond, या अलर्ट के लिए notificationText के साथ notify: true को कॉल कर सकते हैं। संरचित टूल प्रतिक्रिया मौजूद होने पर उसे टेक्स्ट फ़ॉलबैक पर प्राथमिकता मिलती है।
  • notify: false वाला अर्थपूर्ण heartbeat_respond परिणाम मौन रहता है, लेकिन उस सत्र में अगले उपयोगकर्ता टर्न के लिए सीमित आंतरिक संदर्भ के रूप में याद रखा जाता है। no_change अभिस्वीकृतियाँ और दृश्यमान सूचनाएँ इस तरह संग्रहीत नहीं की जातीं।
  • Heartbeat रन के दौरान, यदि HEARTBEAT_OK उत्तर के आरंभ या अंत में दिखाई देता है, तो OpenClaw उसे अभिस्वीकृति मानता है। टोकन हटा दिया जाता है और यदि शेष सामग्री अधिकतम 300 वर्ण है, तो उत्तर छोड़ दिया जाता है।
  • यदि HEARTBEAT_OK उत्तर के बीच में दिखाई देता है, तो उसके साथ कोई विशेष व्यवहार नहीं किया जाता।
  • अलर्ट के लिए HEARTBEAT_OK शामिल न करें; केवल अलर्ट टेक्स्ट लौटाएँ।
Heartbeat के बाहर, संदेश के आरंभ/अंत में आने वाला अनपेक्षित HEARTBEAT_OK हटा दिया जाता है और लॉग किया जाता है; केवल HEARTBEAT_OK वाला संदेश छोड़ दिया जाता है।

कॉन्फ़िग

दायरा और प्राथमिकता

  • agents.defaults.heartbeat वैश्विक Heartbeat व्यवहार सेट करता है।
  • agents.entries.*.heartbeat इसके ऊपर मर्ज होता है; यदि किसी एजेंट में heartbeat ब्लॉक है, तो केवल वही एजेंट Heartbeat चलाते हैं।
  • channels.defaults.heartbeatVisibility सभी चैनलों के लिए दृश्यता डिफ़ॉल्ट सेट करता है।
  • channels.<channel>.heartbeatVisibility चैनल डिफ़ॉल्ट को ओवरराइड करता है।
  • channels.<channel>.accounts.<id>.heartbeatVisibility (बहु-अकाउंट चैनल) प्रति-चैनल सेटिंग को ओवरराइड करता है।

प्रति-एजेंट Heartbeat

यदि किसी agents.entries.* प्रविष्टि में heartbeat ब्लॉक शामिल है, तो केवल वही एजेंट Heartbeat चलाते हैं। प्रति-एजेंट ब्लॉक agents.defaults.heartbeat के ऊपर मर्ज होता है (इसलिए आप साझा डिफ़ॉल्ट एक बार सेट कर सकते हैं और प्रति एजेंट ओवरराइड कर सकते हैं)। उदाहरण: दो एजेंट, केवल दूसरा एजेंट Heartbeat चलाता है।

सक्रिय घंटों का उदाहरण

किसी विशिष्ट समय क्षेत्र में Heartbeat को व्यावसायिक घंटों तक सीमित करें:
इस विंडो के बाहर (पूर्वी समय के अनुसार सुबह 9 बजे से पहले या रात 10 बजे के बाद), Heartbeat छोड़ दिए जाते हैं। विंडो के भीतर अगला शेड्यूल किया गया टिक सामान्य रूप से चलेगा।

24/7 सेटअप

यदि आप चाहते हैं कि Heartbeat पूरे दिन चलें, तो इनमें से किसी एक पैटर्न का उपयोग करें:
  • activeHours को पूरी तरह छोड़ दें (समय-विंडो का कोई प्रतिबंध नहीं; यही डिफ़ॉल्ट व्यवहार है)।
  • पूरे दिन की विंडो सेट करें: activeHours: { start: "00:00", end: "24:00" }
start और end का समय समान सेट न करें (उदाहरण के लिए 08:00 से 08:00)। इसे शून्य-चौड़ाई वाली विंडो माना जाता है, इसलिए Heartbeat हमेशा छोड़ दिए जाते हैं।

बहु-अकाउंट उदाहरण

Telegram जैसे बहु-अकाउंट चैनलों पर किसी विशिष्ट अकाउंट को लक्षित करने के लिए accountId का उपयोग करें:

फ़ील्ड संबंधी टिप्पणियाँ

string
Heartbeat अंतराल (अवधि स्ट्रिंग; डिफ़ॉल्ट इकाई = मिनट)।
string
Heartbeat रन के लिए वैकल्पिक मॉडल ओवरराइड (provider/model)।
boolean
डिफ़ॉल्ट:"false"
true होने पर, Heartbeat रन हल्के बूटस्ट्रैप संदर्भ का उपयोग करते हैं और वर्कस्पेस बूटस्ट्रैप फ़ाइलों को छोड़ देते हैं। दोनों स्थितियों में Heartbeat रनर मॉनिटर स्क्रैच इंजेक्ट करता है।
boolean
डिफ़ॉल्ट:"false"
true होने पर, प्रत्येक Heartbeat बिना किसी पूर्व वार्तालाप इतिहास के नए सत्र में चलता है। cron sessionTarget: "isolated" जैसे समान आइसोलेशन पैटर्न का उपयोग करता है। प्रति Heartbeat टोकन लागत बहुत कम करता है। अधिकतम बचत के लिए lightContext: true के साथ संयोजित करें। डिलीवरी रूटिंग फिर भी मुख्य सत्र संदर्भ का उपयोग करती है।
string
Heartbeat रन के लिए वैकल्पिक सत्र कुंजी।
  • main (डिफ़ॉल्ट): एजेंट का मुख्य सत्र।
  • स्पष्ट सत्र कुंजी (openclaw sessions --json या सत्र CLI से कॉपी करें)।
  • सत्र कुंजी प्रारूप: सत्र और समूह देखें।
string
  • last: अंतिम बार उपयोग किए गए बाहरी चैनल पर डिलीवर करें।
  • स्पष्ट चैनल: कोई भी कॉन्फ़िगर किया गया चैनल या Plugin id, उदाहरण के लिए discord, matrix, telegram, या whatsapp
  • none (डिफ़ॉल्ट): Heartbeat चलाएँ लेकिन बाहरी रूप से डिलीवर न करें
"allow" | "block"
डिफ़ॉल्ट:"allow"
प्रत्यक्ष/DM डिलीवरी व्यवहार नियंत्रित करता है। allow: प्रत्यक्ष/DM Heartbeat डिलीवरी की अनुमति दें। block: प्रत्यक्ष/DM डिलीवरी रोकें (reason=dm-blocked)।
string
वैकल्पिक प्राप्तकर्ता ओवरराइड (चैनल-विशिष्ट id, जैसे WhatsApp के लिए E.164 या Telegram chat id)। Telegram topics/threads के लिए, <chatId>:topic:<messageThreadId> का उपयोग करें।
string
बहु-अकाउंट चैनलों के लिए वैकल्पिक account id। जब target: "last" हो, तो account id निर्धारित अंतिम चैनल पर लागू होती है यदि वह अकाउंट का समर्थन करता है; अन्यथा इसे अनदेखा कर दिया जाता है। यदि account id निर्धारित चैनल के किसी कॉन्फ़िगर किए गए अकाउंट से मेल नहीं खाती, तो डिलीवरी छोड़ दी जाती है।
string
डिफ़ॉल्ट प्रॉम्प्ट सामग्री को ओवरराइड करता है (मर्ज नहीं किया जाता)।
number
डिफ़ॉल्ट:"global timeout or min(every, 600)"
Heartbeat एजेंट टर्न को निरस्त किए जाने से पहले अनुमत अधिकतम सेकंड। सेट न करने पर, यदि agents.defaults.timeoutSeconds सेट है तो उसका उपयोग होता है, अन्यथा अधिकतम 600 सेकंड तक सीमित Heartbeat आवृत्ति का।
object
Heartbeat रन को एक समय-अवधि तक सीमित करता है। start (HH:MM, समावेशी; दिन की शुरुआत के लिए 00:00 का उपयोग करें), end (HH:MM अपवर्जी; दिन के अंत के लिए 24:00 अनुमत), और वैकल्पिक timezone वाला ऑब्जेक्ट।
  • छोड़े जाने पर या "user": यदि आपका agents.defaults.userTimezone सेट है तो उसका उपयोग करता है, अन्यथा होस्ट सिस्टम टाइमज़ोन का उपयोग करता है।
  • "local": हमेशा होस्ट सिस्टम टाइमज़ोन का उपयोग करता है।
  • कोई भी IANA पहचानकर्ता (जैसे America/New_York): सीधे उपयोग किया जाता है; अमान्य होने पर ऊपर दिए गए "user" व्यवहार का उपयोग होता है।
  • सक्रिय समय-अवधि के लिए start और end समान नहीं होने चाहिए; समान मानों को शून्य-चौड़ाई माना जाता है (हमेशा समय-अवधि से बाहर)।
  • सक्रिय समय-अवधि से बाहर, Heartbeat अगली समय-अवधि के भीतर आने वाली टिक तक छोड़ दिए जाते हैं।

डिलीवरी व्यवहार

  • डिफ़ॉल्ट रूप से Heartbeat एजेंट के मुख्य सेशन (agent:<id>:<mainKey>) में चलते हैं, या session.scope = "global" होने पर global में। किसी विशिष्ट चैनल सेशन (Discord/WhatsApp/आदि) पर ओवरराइड करने के लिए session सेट करें।
  • session केवल रन संदर्भ को प्रभावित करता है; डिलीवरी target और to द्वारा नियंत्रित होती है।
  • किसी विशिष्ट चैनल/प्राप्तकर्ता पर डिलीवर करने के लिए, target + to सेट करें। target: "last" के साथ, डिलीवरी उस सेशन के अंतिम बाहरी चैनल का उपयोग करती है।
  • Heartbeat डिलीवरी डिफ़ॉल्ट रूप से प्रत्यक्ष/DM लक्ष्यों की अनुमति देती हैं। Heartbeat टर्न को चलाते हुए प्रत्यक्ष-लक्ष्य प्रेषण रोकने के लिए directPolicy: "block" सेट करें।
  • यदि मुख्य क्यू, लक्ष्य सेशन लेन, Cron लेन, या कोई सक्रिय Cron जॉब व्यस्त है, तो Heartbeat छोड़ दिया जाता है और बाद में पुनः प्रयास किया जाता है।
  • यदि target किसी बाहरी गंतव्य पर निर्धारित नहीं होता, तो रन फिर भी होता है लेकिन कोई आउटबाउंड संदेश नहीं भेजा जाता।
  • यदि showOk, showAlerts, और useIndicator सभी अक्षम हैं, तो रन को पहले ही reason=alerts-disabled के रूप में छोड़ दिया जाता है।
  • यदि केवल अलर्ट डिलीवरी अक्षम है, तो OpenClaw फिर भी Heartbeat चला सकता है, नियत टास्क के टाइमस्टैम्प अपडेट कर सकता है, सेशन निष्क्रियता टाइमस्टैम्प पुनर्स्थापित कर सकता है, और बाहरी अलर्ट पेलोड को रोक सकता है।
  • यदि निर्धारित Heartbeat लक्ष्य टाइपिंग का समर्थन करता है, तो Heartbeat रन सक्रिय रहने के दौरान OpenClaw टाइपिंग दिखाता है। यह उसी लक्ष्य का उपयोग करता है जिस पर Heartbeat चैट आउटपुट भेजता, और इसे typingMode: "never" द्वारा अक्षम किया जाता है।
  • केवल Heartbeat वाले उत्तर सेशन को सक्रिय नहीं रखते। Heartbeat मेटाडेटा सेशन पंक्ति को अपडेट कर सकता है, लेकिन निष्क्रियता समाप्ति अंतिम वास्तविक उपयोगकर्ता/चैनल संदेश के lastInteractionAt का उपयोग करती है, और दैनिक समाप्ति sessionStartedAt का उपयोग करती है।
  • Control UI और WebChat इतिहास Heartbeat प्रॉम्प्ट तथा केवल-OK अभिस्वीकृतियाँ छिपाते हैं। अंतर्निहित सेशन ट्रांस्क्रिप्ट में ऑडिट/रीप्ले के लिए वे टर्न अब भी शामिल हो सकते हैं।
  • अलग किए गए बैकग्राउंड टास्क सिस्टम इवेंट को क्यू में डाल सकते हैं और जब मुख्य सेशन को किसी चीज़ पर शीघ्र ध्यान देना चाहिए तब Heartbeat जगा सकते हैं। वह वेक Heartbeat रन को बैकग्राउंड टास्क नहीं बनाता।

दृश्यता नियंत्रण

डिफ़ॉल्ट रूप से, अलर्ट सामग्री डिलीवर होने के दौरान HEARTBEAT_OK अभिस्वीकृतियाँ रोक दी जाती हैं। आप इसे प्रति चैनल या प्रति अकाउंट समायोजित कर सकते हैं:
प्राथमिकता: प्रति-अकाउंट → प्रति-चैनल → चैनल डिफ़ॉल्ट → अंतर्निहित डिफ़ॉल्ट।

प्रत्येक फ़्लैग क्या करता है

  • showOk: जब मॉडल केवल-OK उत्तर देता है, तब HEARTBEAT_OK अभिस्वीकृति भेजता है।
  • showAlerts: जब मॉडल गैर-OK उत्तर देता है, तब अलर्ट सामग्री भेजता है।
  • useIndicator: UI स्थिति सतहों के लिए संकेतक इवेंट उत्सर्जित करता है।
यदि तीनों false हैं, तो OpenClaw Heartbeat रन को पूरी तरह छोड़ देता है (कोई मॉडल कॉल नहीं)।

प्रति-चैनल बनाम प्रति-अकाउंट उदाहरण

सामान्य पैटर्न

मॉनिटर स्क्रैच (वैकल्पिक)

प्रत्येक Heartbeat मॉनिटर Cron जॉब साझा स्टेट डेटाबेस में संग्रहीत एक निजी स्क्रैच दस्तावेज़ का स्वामी होता है। इसे अपनी “Heartbeat चेकलिस्ट” मानें: छोटी, स्थिर, और प्रत्येक 30 मिनट में विचार करने के लिए सुरक्षित। जब स्क्रैच मौजूद होता है, उसकी सामग्री Heartbeat प्रॉम्प्ट में जोड़ दी जाती है। इसे Cron CLI से प्रबंधित करें (जॉब id openclaw cron list --all से आती है):
लेखन compare-and-swap द्वारा सुरक्षित है: किसी समवर्ती संपादन को ओवरराइट करने के बजाय विफल होने के लिए --expected-revision <n> पास करें। स्क्रैच की सीमा 256 KiB है और यह कभी भी cron list/cron runs आउटपुट में दिखाई नहीं देता। एजेंट अपना स्क्रैच भी अपडेट कर सकता है: Heartbeat टर्न के दौरान, heartbeat_respond एक वैकल्पिक scratch स्ट्रिंग स्वीकार करता है जो भविष्य के Heartbeat के लिए मॉनिटर के स्क्रैच को पूरी तरह बदल देती है।
HEARTBEAT.md या केवल-कॉन्फ़िगरेशन आवृत्ति से माइग्रेट कर रहे हैं? openclaw doctor --fix चलाएँ। Doctor पहले agents.*.heartbeat से सिस्टम-स्वामित्व वाली मॉनिटर पंक्तियाँ बनाता या अपडेट करता है, फिर प्रत्येक एजेंट के वर्कस्पेस HEARTBEAT.md को मॉनिटर के स्क्रैच में आयात करता है, सभी मान्य विरासती tasks: प्रविष्टियों को Cron जॉब में बदलता है, मूल को स्टेट डायरेक्टरी (backups/heartbeat-migration/) के अंतर्गत संग्रहित करता है, और फ़ाइल हटा देता है। रनटाइम Heartbeat निर्देश केवल डेटाबेस स्क्रैच से आते हैं; रनटाइम कभी भी HEARTBEAT.md नहीं पढ़ता।
यदि स्क्रैच मौजूद है लेकिन प्रभावी रूप से खाली है (केवल रिक्त पंक्तियाँ, Markdown/HTML टिप्पणियाँ, # Heading जैसे Markdown शीर्षक, फ़ेंस मार्कर, या खाली चेकलिस्ट स्टब), तो API कॉल बचाने के लिए OpenClaw Heartbeat रन छोड़ देता है। उस स्किप को reason=empty-heartbeat-file के रूप में रिपोर्ट किया जाता है। यदि कोई स्क्रैच मौजूद नहीं है, तो Heartbeat फिर भी चलता है और मॉडल तय करता है कि क्या करना है। प्रॉम्प्ट को अनावश्यक रूप से बड़ा होने से बचाने के लिए इसे छोटा रखें (संक्षिप्त चेकलिस्ट या अनुस्मारक)। स्क्रैच का उदाहरण:

Cron से आवर्ती जाँच शेड्यूल करें

Heartbeat स्क्रैच प्रॉम्प्ट संदर्भ है, शेड्यूलर नहीं। प्रत्येक आवर्ती जाँच को Cron जॉब के रूप में बनाएँ, ताकि उसकी अपनी आवृत्ति, सक्षम/अक्षम स्थिति, और रन इतिहास हो। जब जाँच को सामान्य वार्तालाप संदर्भ का उपयोग करना हो, तब भी Cron जॉब मुख्य सेशन को लक्षित कर सकते हैं। पुराने स्क्रैच में संरचित tasks: ब्लॉक हो सकता है। अपग्रेड करने के बाद एक बार openclaw doctor --fix चलाएँ: Doctor प्रत्येक मान्य प्रविष्टि को स्वतंत्र रूप से शेड्यूल किए गए Cron जॉब में बदलता है, उसका अंतराल और पिछली अंतिम-रन टाइमिंग सुरक्षित रखता है, और आसपास के स्क्रैच गद्य को बनाए रखते हुए सेवानिवृत्त ब्लॉक हटा देता है। रनटाइम Heartbeat टर्न tasks: टेक्स्ट को शेड्यूल के रूप में पार्स नहीं करते। Doctor द्वारा बनाए गए Heartbeat टास्क जॉब Heartbeat के सक्रिय घंटे, कूलडाउन, फ़्लड और व्यस्तता गार्ड बनाए रखते हैं। एक साथ नियत जॉब एक Heartbeat टर्न में समेकित हो सकते हैं। सक्रिय घंटों से बाहर की घटना छोड़ दी जाती है और उसकी अगली Cron घटना पर पुनः प्रयास किया जाता है।

क्या एजेंट अपना स्क्रैच अपडेट कर सकता है?

हाँ। Heartbeat टर्न के दौरान, एजेंट भविष्य के Heartbeat के लिए मॉनिटर गद्य को पूरी तरह बदलने हेतु heartbeat_respond को scratch मान दे सकता है। आप सामान्य चैट में उससे openclaw cron scratch <jobId> --set ... चलाने के लिए भी कह सकते हैं, या उसी कमांड से स्वयं स्क्रैच संपादित कर सकते हैं। स्क्रैच में शेड्यूलर सिंटैक्स लिखने के बजाय आवर्ती शेड्यूल को Cron से प्रबंधित करें।
मॉनिटर स्क्रैच में सीक्रेट (API keys, फ़ोन नंबर, निजी टोकन) न रखें - यह प्रॉम्प्ट संदर्भ का हिस्सा बन जाता है।

मैन्युअल वेक (माँग पर)

सिस्टम इवेंट को क्यू में डालने और वैकल्पिक रूप से तत्काल Heartbeat ट्रिगर करने के लिए openclaw system event का उपयोग करें:
यदि कोई --session-key नहीं दिया गया है और कई एजेंट के लिए heartbeat कॉन्फ़िगर किया गया है, तो --mode now उनमें से प्रत्येक एजेंट का Heartbeat तुरंत चलाता है। उसी CLI समूह में संबंधित Heartbeat नियंत्रण:

लागत संबंधी सजगता

Heartbeat एजेंट के पूर्ण टर्न चलाते हैं। छोटे अंतराल अधिक टोकन खर्च करते हैं। लागत घटाने के लिए:
  • वार्तालाप का पूरा इतिहास भेजने से बचने के लिए isolatedSession: true का उपयोग करें (प्रति रन ~100K टोकन से घटकर ~2-5K)।
  • Heartbeat रन के लिए वर्कस्पेस बूटस्ट्रैप फ़ाइलें छोड़ने हेतु lightContext: true का उपयोग करें।
  • कम लागत वाला model सेट करें (उदा. ollama/llama3.2:1b)।
  • मॉनिटर स्क्रैच को छोटा रखें।
  • यदि आप केवल आंतरिक स्थिति अपडेट चाहते हैं, तो target: "none" का उपयोग करें।

Heartbeat के बाद कॉन्टेक्स्ट ओवरफ़्लो

रन पूरा होने के बाद Heartbeat साझा सेशन के मौजूदा रनटाइम मॉडल को बनाए रखते हैं, इसलिए किसी सेशन को छोटे स्थानीय मॉडल पर स्विच करने वाला Heartbeat (उदाहरण के लिए 32k विंडो वाला Ollama मॉडल) अगले मुख्य-सेशन टर्न के लिए उस मॉडल को यथावत छोड़ सकता है। यदि अगला टर्न फिर कॉन्टेक्स्ट ओवरफ़्लो की रिपोर्ट करता है और सेशन का अंतिम रनटाइम मॉडल कॉन्फ़िगर किए गए heartbeat.model से मेल खाता है, तो OpenClaw का पुनर्प्राप्ति संदेश संभावित कारण के रूप में Heartbeat मॉडल के प्रभाव को इंगित करता है और समाधान सुझाता है। इससे बचने के लिए: नए सेशन में Heartbeat चलाने हेतु isolatedSession: true का उपयोग करें (सबसे छोटे प्रॉम्प्ट के लिए वैकल्पिक रूप से lightContext: true के साथ), या साझा सेशन के लिए पर्याप्त बड़ी कॉन्टेक्स्ट विंडो वाला Heartbeat मॉडल चुनें।

संबंधित