हार्टबीट (Gateway)
Heartbeat बनाम Cron? प्रत्येक का उपयोग कब करना है, इसके लिए Cron vs Heartbeat देखें।Heartbeat मुख्य सत्र में आवधिक एजेंट टर्न चलाता है, ताकि मॉडल बिना आपको स्पैम किए ध्यान देने योग्य किसी भी चीज़ को सामने ला सके। समस्या-निवारण: /automation/troubleshooting
त्वरित प्रारंभ (शुरुआती)
- Heartbeat सक्षम रहने दें (डिफ़ॉल्ट
30mहै, या Anthropic OAuth/setup-token के लिए1h) या अपनी स्वयं की आवृत्ति सेट करें। - एजेंट वर्कस्पेस में एक छोटी
HEARTBEAT.mdचेकलिस्ट बनाएँ (वैकल्पिक, लेकिन अनुशंसित)। - तय करें कि Heartbeat संदेश कहाँ जाने चाहिए (
target: "last"डिफ़ॉल्ट है)। - वैकल्पिक: पारदर्शिता के लिए Heartbeat reasoning डिलीवरी सक्षम करें।
- वैकल्पिक: Heartbeat को सक्रिय घंटों तक सीमित करें (स्थानीय समय)।
डिफ़ॉल्ट
- Interval:
30m(or1hwhen Anthropic OAuth/setup-token is the detected auth mode). Setagents.defaults.heartbeat.everyor per-agentagents.list[].heartbeat.every; use0mto disable. - Prompt body (configurable via
agents.defaults.heartbeat.prompt):Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK. - The heartbeat prompt is sent verbatim as the user message. The system prompt includes a “Heartbeat” section and the run is flagged internally.
- Active hours (
heartbeat.activeHours) are checked in the configured timezone. Outside the window, heartbeats are skipped until the next tick inside the window.
Heartbeat प्रॉम्प्ट का उद्देश्य
डिफ़ॉल्ट प्रॉम्प्ट जानबूझकर व्यापक है:- पृष्ठभूमि कार्य: “Consider outstanding tasks” एजेंट को फ़ॉलो-अप (इनबॉक्स, कैलेंडर, रिमाइंडर, कतारबद्ध कार्य) की समीक्षा करने और किसी भी तात्कालिक चीज़ को सामने लाने के लिए प्रेरित करता है।
- Human check-in: “Checkup sometimes on your human during day time” nudges an occasional lightweight “anything you need?” message, but avoids night-time spam by using your configured local timezone (see /concepts/timezone).
agents.defaults.heartbeat.prompt (या
agents.list[].heartbeat.prompt) को कस्टम बॉडी पर सेट करें (जैसा है वैसा भेजा जाएगा)।
प्रतिक्रिया अनुबंध
- यदि किसी चीज़ पर ध्यान देने की आवश्यकता नहीं है, तो
HEARTBEAT_OKके साथ उत्तर दें। - During heartbeat runs, OpenClaw treats
HEARTBEAT_OKas an ack when it appears at the start or end of the reply. The token is stripped and the reply is dropped if the remaining content is ≤ackMaxChars(default: 300). - यदि
HEARTBEAT_OKउत्तर के मध्य में दिखाई देता है, तो इसे विशेष रूप से नहीं माना जाता। - अलर्ट के लिए,
HEARTBEAT_OKशामिल न करें; केवल अलर्ट पाठ लौटाएँ।
HEARTBEAT_OK हटा दिया जाता है
और लॉग किया जाता है; जो संदेश केवल HEARTBEAT_OK होता है, उसे गिरा दिया जाता है।
विन्यास
स्कोप और प्राथमिकता
agents.defaults.heartbeatवैश्विक Heartbeat व्यवहार सेट करता है।agents.list[].heartbeatऊपर से मर्ज होता है; यदि किसी भी एजेंट मेंheartbeatब्लॉक है, तो केवल वही एजेंट Heartbeat चलाते हैं।channels.defaults.heartbeatसभी चैनलों के लिए दृश्यता डिफ़ॉल्ट सेट करता है।channels.<channel>.heartbeatoverrides channel defaults.channels.<channel>.accounts.<id>.heartbeat(multi-account channels) overrides per-channel settings.
प्रति-एजेंट Heartbeat
If anyagents.list[] entry includes a heartbeat block, only those agents
run heartbeats. The per-agent block merges on top of agents.defaults.heartbeat
(so you can set shared defaults once and override per agent).
उदाहरण: दो एजेंट, केवल दूसरा एजेंट Heartbeat चलाता है।
सक्रिय घंटे का उदाहरण
किसी विशिष्ट टाइमज़ोन में Heartbeat को व्यावसायिक घंटों तक सीमित करें:मल्टी-अकाउंट उदाहरण
Telegram जैसे मल्टी-अकाउंट चैनलों पर किसी विशिष्ट अकाउंट को लक्षित करने के लिएaccountId का उपयोग करें:
फ़ील्ड नोट्स
every: Heartbeat अंतराल (अवधि स्ट्रिंग; डिफ़ॉल्ट इकाई = मिनट)।model: Heartbeat रन के लिए वैकल्पिक मॉडल ओवरराइड (provider/model)।includeReasoning: सक्षम होने पर, उपलब्ध होने पर अलगReasoning:संदेश भी डिलीवर करता है (आकार/reasoning onजैसा ही)।session: Heartbeat रन के लिए वैकल्पिक सत्र कुंजी।main(डिफ़ॉल्ट): एजेंट मुख्य सत्र।- स्पष्ट सत्र कुंजी (
openclaw sessions --jsonया sessions CLI से कॉपी करें)। - सत्र कुंजी प्रारूप: Sessions और Groups देखें।
target:last(डिफ़ॉल्ट): अंतिम उपयोग किए गए बाहरी चैनल पर डिलीवर करें।- स्पष्ट चैनल:
whatsapp/telegram/discord/googlechat/slack/msteams/signal/imessage। none: Heartbeat चलाएँ लेकिन बाहरी रूप से डिलीवर न करें।
to: वैकल्पिक प्राप्तकर्ता ओवरराइड (चैनल-विशिष्ट आईडी, जैसे WhatsApp के लिए E.164 या Telegram चैट आईडी)।accountId: मल्टी-अकाउंट चैनलों के लिए वैकल्पिक अकाउंट आईडी। जबtarget: "last"हो, तो अकाउंट आईडी resolved अंतिम चैनल पर लागू होती है यदि वह अकाउंट्स को सपोर्ट करता है; अन्यथा इसे अनदेखा कर दिया जाता है। यदि अकाउंट आईडी resolved चैनल के लिए कॉन्फ़िगर किए गए किसी अकाउंट से मेल नहीं खाती, तो डिलीवरी स्किप कर दी जाती है।prompt: डिफ़ॉल्ट प्रॉम्प्ट बॉडी को ओवरराइड करता है (मर्ज नहीं किया जाता)।ackMaxChars:HEARTBEAT_OKके बाद डिलीवरी से पहले अनुमत अधिकतम वर्ण।activeHours: हार्टबीट रन को एक समय विंडो तक सीमित करता है।start(HH:MM, inclusive),end(HH:MM exclusive; दिन के अंत के लिए24:00अनुमत), और वैकल्पिकtimezoneके साथ ऑब्जेक्ट।- छोड़ा गया या
"user": यदि सेट है तो आपकेagents.defaults.userTimezoneका उपयोग करता है, अन्यथा होस्ट सिस्टम टाइमज़ोन पर वापस जाता है। "local": हमेशा होस्ट सिस्टम टाइमज़ोन का उपयोग करता है।- कोई भी IANA पहचानकर्ता (जैसे
America/New_York): सीधे उपयोग किया जाता है; यदि अमान्य है, तो ऊपर दिए गए"user"व्यवहार पर वापस जाता है। - सक्रिय विंडो के बाहर, Heartbeat को विंडो के भीतर अगले टिक तक छोड़ा जाता है।
- छोड़ा गया या
डिलीवरी व्यवहार
- हार्टबीट्स डिफ़ॉल्ट रूप से एजेंट के मुख्य सत्र में चलते हैं (
agent:<id>:<mainKey>), याglobalजबsession.scope = "global"हो।sessionको सेट करके किसी विशिष्ट चैनल सत्र (Discord/WhatsApp/etc.) पर ओवरराइड करें। sessionकेवल रन संदर्भ को प्रभावित करता है; डिलीवरीtargetऔरtoद्वारा नियंत्रित होती है।- किसी विशिष्ट चैनल/प्राप्तकर्ता को डिलीवर करने के लिए
target+toसेट करें।target: "last"के साथ, डिलीवरी उस सत्र के लिए अंतिम बाहरी चैनल का उपयोग करती है। - यदि मुख्य कतार व्यस्त है, तो Heartbeat छोड़ा जाता है और बाद में पुनः प्रयास किया जाता है।
- यदि
targetकिसी बाहरी गंतव्य में हल नहीं होता, तो रन फिर भी होता है लेकिन कोई आउटबाउंड संदेश नहीं भेजा जाता। - केवल Heartbeat प्रतिक्रियाएँ सत्र को जीवित नहीं रखतीं; अंतिम
updatedAtपुनर्स्थापित किया जाता है ताकि निष्क्रिय समाप्ति सामान्य रूप से व्यवहार करे।
दृश्यता नियंत्रण
डिफ़ॉल्ट रूप से, अलर्ट कंटेंट डिलीवर होने के दौरानHEARTBEAT_OK acknowledgments दबा दिए जाते हैं। आप इसे प्रति चैनल या प्रति अकाउंट समायोजित कर सकते हैं:
प्रत्येक फ़्लैग क्या करता है
showOk: जब मॉडल केवल OK वाला उत्तर लौटाता है, तोHEARTBEAT_OKacknowledgment भेजता है।showAlerts: जब मॉडल गैर-OK उत्तर लौटाता है, तो अलर्ट सामग्री भेजता है।useIndicator: UI स्थिति सतहों के लिए संकेतक इवेंट उत्पन्न करता है।
प्रति-चैनल बनाम प्रति-अकाउंट उदाहरण
सामान्य पैटर्न
| लक्ष्य | विन्यास |
|---|---|
| डिफ़ॉल्ट व्यवहार (मौन OKs, अलर्ट चालू) | (कोई विन्यास आवश्यक नहीं) |
| पूर्णतः मौन (कोई संदेश नहीं, कोई संकेतक नहीं) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| केवल संकेतक (कोई संदेश नहीं) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true } |
| केवल एक चैनल में OKs | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (वैकल्पिक)
यदि वर्कस्पेस मेंHEARTBEAT.md फ़ाइल मौजूद है, तो डिफ़ॉल्ट प्रॉम्प्ट एजेंट को इसे पढ़ने के लिए कहता है। इसे अपनी “हार्टबीट चेकलिस्ट” की तरह समझें: छोटी, स्थिर, और हर 30 मिनट में शामिल करने के लिए सुरक्षित।
यदि HEARTBEAT.md मौजूद है लेकिन प्रभावी रूप से खाली है (केवल खाली पंक्तियाँ और # Heading जैसे मार्कडाउन हेडर्स), तो OpenClaw API कॉल बचाने के लिए हार्टबीट रन स्किप कर देता है।
यदि फ़ाइल गायब है, तो हार्टबीट फिर भी चलता है और मॉडल तय करता है कि क्या करना है।
इसे छोटा रखें (संक्षिप्त चेकलिस्ट या रिमाइंडर) ताकि प्रॉम्प्ट फुलाव से बचा जा सके।
उदाहरण HEARTBEAT.md:
क्या एजेंट HEARTBEAT.md को अपडेट कर सकता है?
हाँ — यदि आप उससे ऐसा करने को कहें।HEARTBEAT.md एजेंट वर्कस्पेस में एक सामान्य फ़ाइल है, इसलिए आप एजेंट से (सामान्य चैट में) कुछ ऐसा कह सकते हैं:
- “दैनिक कैलेंडर जाँच जोड़ने के लिए
HEARTBEAT.mdअपडेट करें।” - “
HEARTBEAT.mdको फिर से लिखें ताकि यह छोटा हो और इनबॉक्स फ़ॉलो-अप पर केंद्रित हो।”
HEARTBEAT.md में रहस्य (API कुंजियाँ, फ़ोन नंबर, निजी टोकन) न डालें — यह प्रॉम्प्ट संदर्भ का हिस्सा बन जाता है।
मैनुअल वेक (ऑन-डिमांड)
आप एक सिस्टम इवेंट को कतार में डाल सकते हैं और तुरंत Heartbeat ट्रिगर कर सकते हैं:heartbeat कॉन्फ़िगर है, तो मैनुअल वेक उन सभी एजेंट Heartbeat को तुरंत चलाता है।
अगले निर्धारित टिक की प्रतीक्षा करने के लिए --mode next-heartbeat का उपयोग करें।
Reasoning डिलीवरी (वैकल्पिक)
डिफ़ॉल्ट रूप से, Heartbeat केवल अंतिम “उत्तर” पेलोड डिलीवर करते हैं। यदि आप पारदर्शिता चाहते हैं, तो सक्षम करें:agents.defaults.heartbeat.includeReasoning: true
Reasoning: होगा (आकार /reasoning on जैसा ही)। यह तब उपयोगी हो सकता है जब एजेंट कई सत्रों/कोडेक्स का प्रबंधन कर रहा हो और आप देखना चाहते हों कि उसने आपको पिंग करने का निर्णय क्यों लिया — लेकिन इससे आपकी अपेक्षा से अधिक आंतरिक विवरण लीक हो सकता है। ग्रुप चैट्स में इसे बंद रखना बेहतर है।
लागत जागरूकता
हार्टबीट्स पूर्ण एजेंट टर्न्स चलाते हैं। छोटे इंटरवल अधिक टोकन खर्च करते हैं।HEARTBEAT.md को छोटा रखें और यदि आप केवल आंतरिक स्टेट अपडेट चाहते हैं तो सस्ता model या target: "none" पर विचार करें।