Gateway
Heartbeat
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 के लिए कोई अलग फ़ॉलबैक टाइमर नहीं है।
समस्या निवारण: शेड्यूल किए गए टास्क
तुरंत शुरुआत (शुरुआती उपयोगकर्ताओं के लिए)
आवृत्ति चुनें
Heartbeat को सक्षम रहने दें (डिफ़ॉल्ट 30m है, या Anthropic OAuth/टोकन प्रमाणीकरण कॉन्फ़िगर होने पर, Claude CLI के पुनः उपयोग सहित, 1h) या अपनी आवृत्ति सेट करें।
मॉनिटर स्क्रैच जोड़ें (वैकल्पिक)
openclaw cron scratch <jobId> --set "..." के साथ Heartbeat मॉनिटर के स्क्रैच में एक छोटी चेकलिस्ट संग्रहीत करें।
तय करें कि Heartbeat संदेश कहाँ जाने चाहिए
target: "none" डिफ़ॉल्ट है; अंतिम संपर्क तक रूट करने के लिए target: "last" सेट करें।
वैकल्पिक समायोजन
- यदि Heartbeat रन को केवल मॉनिटर स्क्रैच की आवश्यकता है, तो हल्के बूटस्ट्रैप संदर्भ का उपयोग करें।
- प्रत्येक Heartbeat के साथ पूरा वार्तालाप इतिहास भेजने से बचने के लिए अलग-थलग सत्र सक्षम करें।
- Heartbeat को सक्रिय घंटों (स्थानीय समय) तक सीमित करें।
उदाहरण कॉन्फ़िग:
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // अंतिम संपर्क को स्पष्ट डिलीवरी (डिफ़ॉल्ट "none" है) directPolicy: "allow", // डिफ़ॉल्ट: प्रत्यक्ष/DM लक्ष्य अनुमत करें; रोकने के लिए "block" सेट करें lightContext: true, // वैकल्पिक: Heartbeat रन के लिए वर्कस्पेस बूटस्ट्रैप फ़ाइलें छोड़ें isolatedSession: true, // वैकल्पिक: हर रन में नया सत्र (कोई वार्तालाप इतिहास नहीं) // activeHours: { start: "08:00", end: "24:00" }, }, }, },}डिफ़ॉल्ट
- अंतराल:
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: { every: "30m", // डिफ़ॉल्ट: 30m (0m अक्षम करता है) model: "anthropic/claude-opus-4-6", lightContext: false, // डिफ़ॉल्ट: false; true Heartbeat रन के लिए वर्कस्पेस बूटस्ट्रैप फ़ाइलें छोड़ता है isolatedSession: false, // डिफ़ॉल्ट: false; true प्रत्येक Heartbeat को नए सत्र में चलाता है (कोई वार्तालाप इतिहास नहीं) target: "last", // डिफ़ॉल्ट: none | विकल्प: last | none | <channel id> (कोर या Plugin, उदाहरण "imessage") to: "+15551234567", // वैकल्पिक चैनल-विशिष्ट ओवरराइड accountId: "ops-bot", // वैकल्पिक बहु-अकाउंट चैनल आईडी prompt: "उपलब्ध कराए जाने पर Heartbeat मॉनिटर स्क्रैच संदर्भ का पालन करें। आवर्ती टास्क cron जॉब होते हैं; उनके शेड्यूल Heartbeat स्क्रैच से नहीं, बल्कि cron टूल या openclaw cron CLI से बनाएँ या बदलें। पिछली चैट से पुराने टास्क का अनुमान न लगाएँ या उन्हें न दोहराएँ। यदि किसी चीज़ पर ध्यान देने की आवश्यकता नहीं है, तो 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 चलाता है।
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // अंतिम संपर्क को स्पष्ट डिलीवरी (डिफ़ॉल्ट "none" है) }, }, list: [ { id: "main", default: true }, { id: "ops", heartbeat: { every: "1h", target: "whatsapp", to: "+15551234567", timeoutSeconds: 45, prompt: "उपलब्ध कराए जाने पर Heartbeat मॉनिटर स्क्रैच संदर्भ का पालन करें। आवर्ती टास्क cron जॉब होते हैं; उनके शेड्यूल Heartbeat स्क्रैच से नहीं, बल्कि cron टूल या openclaw cron CLI से बनाएँ या बदलें। पिछली चैट से पुराने टास्क का अनुमान न लगाएँ या उन्हें न दोहराएँ। यदि किसी चीज़ पर ध्यान देने की आवश्यकता नहीं है, तो HEARTBEAT_OK उत्तर दें।", }, }, ], },}सक्रिय घंटों का उदाहरण
किसी विशिष्ट समय क्षेत्र में Heartbeat को व्यावसायिक घंटों तक सीमित करें:
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // अंतिम संपर्क को स्पष्ट डिलीवरी (डिफ़ॉल्ट "none" है) activeHours: { start: "09:00", end: "22:00", timezone: "America/New_York", // वैकल्पिक; सेट होने पर आपके userTimezone का, अन्यथा होस्ट के समय क्षेत्र का उपयोग करता है }, }, }, },}इस विंडो के बाहर (पूर्वी समय के अनुसार सुबह 9 बजे से पहले या रात 10 बजे के बाद), Heartbeat छोड़ दिए जाते हैं। विंडो के भीतर अगला शेड्यूल किया गया टिक सामान्य रूप से चलेगा।
24/7 सेटअप
यदि आप चाहते हैं कि Heartbeat पूरे दिन चलें, तो इनमें से किसी एक पैटर्न का उपयोग करें:
activeHoursको पूरी तरह छोड़ दें (समय-विंडो का कोई प्रतिबंध नहीं; यही डिफ़ॉल्ट व्यवहार है)।- पूरे दिन की विंडो सेट करें:
activeHours: { start: "00:00", end: "24:00" }।
बहु-अकाउंट उदाहरण
Telegram जैसे बहु-अकाउंट चैनलों पर किसी विशिष्ट अकाउंट को लक्षित करने के लिए accountId का उपयोग करें:
{ agents: { list: [ { id: "ops", heartbeat: { every: "1h", target: "telegram", to: "12345678:topic:42", // वैकल्पिक: किसी विशिष्ट विषय/थ्रेड पर रूट करें accountId: "ops-bot", }, }, ], }, channels: { telegram: { accounts: { "ops-bot": { botToken: "YOUR_TELEGRAM_BOT_TOKEN" }, }, }, },}फ़ील्ड संबंधी टिप्पणियाँ
everystringHeartbeat अंतराल (अवधि स्ट्रिंग; डिफ़ॉल्ट इकाई = मिनट)।
modelstringHeartbeat रन के लिए वैकल्पिक मॉडल ओवरराइड (provider/model)।
lightContextbooleandefault: falsetrue होने पर, Heartbeat रन हल्के बूटस्ट्रैप संदर्भ का उपयोग करते हैं और वर्कस्पेस बूटस्ट्रैप फ़ाइलों को छोड़ देते हैं। दोनों स्थितियों में Heartbeat रनर मॉनिटर स्क्रैच इंजेक्ट करता है।
isolatedSessionbooleandefault: falsetrue होने पर, प्रत्येक Heartbeat बिना किसी पूर्व वार्तालाप इतिहास के नए सत्र में चलता है। cron sessionTarget: "isolated" जैसे समान आइसोलेशन पैटर्न का उपयोग करता है। प्रति Heartbeat टोकन लागत बहुत कम करता है। अधिकतम बचत के लिए lightContext: true के साथ संयोजित करें। डिलीवरी रूटिंग फिर भी मुख्य सत्र संदर्भ का उपयोग करती है।
sessionstringHeartbeat रन के लिए वैकल्पिक सत्र कुंजी।
targetstringlast: अंतिम बार उपयोग किए गए बाहरी चैनल पर डिलीवर करें।- स्पष्ट चैनल: कोई भी कॉन्फ़िगर किया गया चैनल या Plugin id, उदाहरण के लिए
discord,matrix,telegram, याwhatsapp। none(डिफ़ॉल्ट): Heartbeat चलाएँ लेकिन बाहरी रूप से डिलीवर न करें।
directPolicy"allow" | "block"default: allowप्रत्यक्ष/DM डिलीवरी व्यवहार नियंत्रित करता है। allow: प्रत्यक्ष/DM Heartbeat डिलीवरी की अनुमति दें। block: प्रत्यक्ष/DM डिलीवरी रोकें (reason=dm-blocked)।
tostringवैकल्पिक प्राप्तकर्ता ओवरराइड (चैनल-विशिष्ट id, जैसे WhatsApp के लिए E.164 या Telegram chat id)। Telegram topics/threads के लिए, <chatId>:topic:<messageThreadId> का उपयोग करें।
accountIdstringबहु-अकाउंट चैनलों के लिए वैकल्पिक account id। जब target: "last" हो, तो account id निर्धारित अंतिम चैनल पर लागू होती है यदि वह अकाउंट का समर्थन करता है; अन्यथा इसे अनदेखा कर दिया जाता है। यदि account id निर्धारित चैनल के किसी कॉन्फ़िगर किए गए अकाउंट से मेल नहीं खाती, तो डिलीवरी छोड़ दी जाती है।
promptstringडिफ़ॉल्ट प्रॉम्प्ट सामग्री को ओवरराइड करता है (मर्ज नहीं किया जाता)।
timeoutSecondsnumberdefault: global timeout or min(every, 600)Heartbeat एजेंट टर्न को निरस्त किए जाने से पहले अनुमत अधिकतम सेकंड। सेट न करने पर, यदि agents.defaults.timeoutSeconds सेट है तो उसका उपयोग होता है, अन्यथा अधिकतम 600 सेकंड तक सीमित Heartbeat आवृत्ति का।
activeHoursobjectHeartbeat रन को एक समय-अवधि तक सीमित करता है। 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 अभिस्वीकृतियाँ रोक दी जाती हैं। आप इसे प्रति चैनल या प्रति अकाउंट समायोजित कर सकते हैं:
channels: defaults: heartbeat: showOk: false # HEARTBEAT_OK छिपाएँ (डिफ़ॉल्ट) showAlerts: true # अलर्ट संदेश दिखाएँ (डिफ़ॉल्ट) useIndicator: true # संकेतक इवेंट उत्सर्जित करें (डिफ़ॉल्ट) telegram: heartbeat: showOk: true # Telegram पर OK अभिस्वीकृतियाँ दिखाएँ whatsapp: accounts: work: heartbeat: showAlerts: false # इस अकाउंट के लिए अलर्ट डिलीवरी रोकेंप्राथमिकता: प्रति-अकाउंट → प्रति-चैनल → चैनल डिफ़ॉल्ट → अंतर्निहित डिफ़ॉल्ट।
प्रत्येक फ़्लैग क्या करता है
showOk: जब मॉडल केवल-OK उत्तर देता है, तबHEARTBEAT_OKअभिस्वीकृति भेजता है।showAlerts: जब मॉडल गैर-OK उत्तर देता है, तब अलर्ट सामग्री भेजता है।useIndicator: UI स्थिति सतहों के लिए संकेतक इवेंट उत्सर्जित करता है।
यदि तीनों false हैं, तो OpenClaw Heartbeat रन को पूरी तरह छोड़ देता है (कोई मॉडल कॉल नहीं)।
प्रति-चैनल बनाम प्रति-अकाउंट उदाहरण
channels: defaults: heartbeat: showOk: false showAlerts: true useIndicator: true slack: heartbeat: showOk: true # सभी Slack अकाउंट accounts: ops: heartbeat: showAlerts: false # केवल ops अकाउंट के लिए अलर्ट रोकें telegram: heartbeat: showOk: trueसामान्य पैटर्न
| लक्ष्य | कॉन्फ़िगरेशन |
|---|---|
| डिफ़ॉल्ट व्यवहार (मौन OK, अलर्ट चालू) | (किसी कॉन्फ़िगरेशन की आवश्यकता नहीं) |
| पूरी तरह मौन (कोई संदेश या संकेतक नहीं) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| केवल संकेतक (कोई संदेश नहीं) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true } |
| केवल एक चैनल में OK | channels.telegram.heartbeat: { showOk: true } |
मॉनिटर स्क्रैच (वैकल्पिक)
प्रत्येक Heartbeat मॉनिटर Cron जॉब साझा स्टेट डेटाबेस में संग्रहीत एक निजी स्क्रैच दस्तावेज़ का स्वामी होता है। इसे अपनी "Heartbeat चेकलिस्ट" मानें: छोटी, स्थिर, और प्रत्येक 30 मिनट में विचार करने के लिए सुरक्षित। जब स्क्रैच मौजूद होता है, उसकी सामग्री Heartbeat प्रॉम्प्ट में जोड़ दी जाती है।
इसे Cron CLI से प्रबंधित करें (जॉब id openclaw cron list --all से आती है):
openclaw cron scratch <jobId> # वर्तमान स्क्रैच प्रिंट करेंopenclaw cron scratch <jobId> --set "..." # इसे सटीक टेक्स्ट से बदलेंopenclaw cron scratch <jobId> --file notes.md # इसे फ़ाइल से बदलें (stdin के लिए -)openclaw cron scratch <jobId> --unset # इसे हटाएँलेखन compare-and-swap द्वारा सुरक्षित है: किसी समवर्ती संपादन को ओवरराइट करने के बजाय विफल होने के लिए --expected-revision <n> पास करें। स्क्रैच की सीमा 256 KiB है और यह कभी भी cron list/cron runs आउटपुट में दिखाई नहीं देता।
एजेंट अपना स्क्रैच भी अपडेट कर सकता है: Heartbeat टर्न के दौरान, heartbeat_respond एक वैकल्पिक scratch स्ट्रिंग स्वीकार करता है जो भविष्य के Heartbeat के लिए मॉनिटर के स्क्रैच को पूरी तरह बदल देती है।
यदि स्क्रैच मौजूद है लेकिन प्रभावी रूप से खाली है (केवल रिक्त पंक्तियाँ, Markdown/HTML टिप्पणियाँ, # Heading जैसे Markdown शीर्षक, फ़ेंस मार्कर, या खाली चेकलिस्ट स्टब), तो API कॉल बचाने के लिए OpenClaw Heartbeat रन छोड़ देता है। उस स्किप को reason=empty-heartbeat-file के रूप में रिपोर्ट किया जाता है। यदि कोई स्क्रैच मौजूद नहीं है, तो Heartbeat फिर भी चलता है और मॉडल तय करता है कि क्या करना है।
प्रॉम्प्ट को अनावश्यक रूप से बड़ा होने से बचाने के लिए इसे छोटा रखें (संक्षिप्त चेकलिस्ट या अनुस्मारक)।
स्क्रैच का उदाहरण:
# Heartbeat चेकलिस्ट - तुरंत जाँचें: क्या इनबॉक्स में कुछ अत्यावश्यक है?- यदि दिन का समय है और कुछ अन्य लंबित नहीं है, तो संक्षिप्त रूप से हालचाल जाँचें।- यदि कोई टास्क अवरुद्ध है, तो लिखें कि _क्या अनुपलब्ध है_ और अगली बार Peter से पूछें।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 से प्रबंधित करें।
मैन्युअल वेक (माँग पर)
सिस्टम इवेंट को क्यू में डालने और वैकल्पिक रूप से तत्काल Heartbeat ट्रिगर करने के लिए openclaw system event का उपयोग करें:
openclaw system event --text "अत्यावश्यक फ़ॉलो-अप की जाँच करें" --mode now| फ़्लैग | विवरण |
|---|---|
--text <text> |
सिस्टम इवेंट का टेक्स्ट (आवश्यक)। |
--mode <mode> |
now तुरंत Heartbeat चलाता है; next-heartbeat (डिफ़ॉल्ट) अगले निर्धारित टिक की प्रतीक्षा करता है। |
--session-key <sessionKey> |
इवेंट के लिए किसी विशिष्ट सेशन को लक्षित करें; डिफ़ॉल्ट रूप से एजेंट का मुख्य सेशन उपयोग होता है। |
--json |
JSON आउटपुट करें। |
यदि कोई --session-key नहीं दिया गया है और कई एजेंट के लिए heartbeat कॉन्फ़िगर किया गया है, तो --mode now उनमें से प्रत्येक एजेंट का Heartbeat तुरंत चलाता है।
उसी CLI समूह में संबंधित Heartbeat नियंत्रण:
openclaw system heartbeat last # अंतिम Heartbeat इवेंट दिखाएँopenclaw system heartbeat enable # Heartbeat सक्षम करेंopenclaw system heartbeat disable # 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 मॉडल चुनें।
संबंधित
- ऑटोमेशन - सभी ऑटोमेशन तंत्रों का एक नज़र में अवलोकन
- बैकग्राउंड कार्य - अलग किए गए कार्य को कैसे ट्रैक किया जाता है
- समय क्षेत्र - समय क्षेत्र Heartbeat शेड्यूलिंग को कैसे प्रभावित करता है
- समस्या निवारण - ऑटोमेशन समस्याओं को डीबग करना