Heartbeat बनाम cron? प्रत्येक का उपयोग कब करना है, इस पर मार्गदर्शन के लिए Automation देखें।
तुरंत शुरू करें (शुरुआती)
एक cadence चुनें
heartbeats सक्षम छोड़ें (डिफ़ॉल्ट
30m है, या Anthropic OAuth/token auth के लिए 1h, जिसमें Claude CLI reuse भी शामिल है) या अपनी cadence सेट करें।HEARTBEAT.md जोड़ें (वैकल्पिक)
agent workspace में एक छोटी
HEARTBEAT.md checklist या tasks: block बनाएँ।तय करें कि heartbeat संदेश कहाँ जाएँ
target: "none" डिफ़ॉल्ट है; अंतिम contact तक route करने के लिए target: "last" सेट करें।वैकल्पिक tuning
- पारदर्शिता के लिए heartbeat reasoning delivery सक्षम करें।
- अगर heartbeat runs को केवल
HEARTBEAT.mdचाहिए, तो lightweight bootstrap context उपयोग करें। - हर heartbeat पर पूरी conversation history भेजने से बचने के लिए isolated sessions सक्षम करें।
- heartbeats को active hours (local time) तक सीमित करें।
डिफ़ॉल्ट
- अंतराल:
30m(या जब Anthropic OAuth/token auth detected auth mode हो, जिसमें Claude CLI reuse भी शामिल है, तब1h)।agents.defaults.heartbeat.everyया प्रति-agentagents.list[].heartbeat.everyसेट करें; अक्षम करने के लिए0mउपयोग करें। - Prompt body (
agents.defaults.heartbeat.promptके ज़रिए configurable):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. - Timeout: unset heartbeat turns सेट होने पर
agents.defaults.timeoutSecondsउपयोग करते हैं। अन्यथा, वे heartbeat cadence का उपयोग करते हैं, जिसे 600 seconds पर cap किया जाता है। लंबे heartbeat work के लिएagents.defaults.heartbeat.timeoutSecondsया प्रति-agentagents.list[].heartbeat.timeoutSecondsसेट करें। - heartbeat prompt को user message के रूप में जैसा है वैसा भेजा जाता है। system prompt में “Heartbeat” section केवल तब शामिल होता है जब default agent के लिए heartbeats सक्षम हों, और run को internally flagged किया जाता है।
- जब heartbeats
0mसे अक्षम किए जाते हैं, तो normal runs bootstrap context सेHEARTBEAT.mdभी छोड़ देते हैं ताकि मॉडल heartbeat-only निर्देश न देखे। - Active hours (
heartbeat.activeHours) configured timezone में जाँचे जाते हैं। window के बाहर, heartbeats को window के भीतर अगले tick तक skip किया जाता है। - cron work सक्रिय या queued होने पर heartbeats अपने-आप defer हो जाते हैं। किसी agent को उसके अपने session-keyed subagent या nested command lanes पर भी defer करने के लिए
heartbeat.skipWhenBusy: trueसेट करें; sibling agents अब सिर्फ इसलिए pause नहीं होते कि किसी दूसरे agent का subagent work चल रहा है।
heartbeat prompt किसके लिए है
डिफ़ॉल्ट prompt जानबूझकर व्यापक है:- Background tasks: “Consider outstanding tasks” agent को follow-ups (inbox, calendar, reminders, queued work) की समीक्षा करने और जरूरी चीज़ें सामने लाने के लिए प्रेरित करता है।
- Human check-in: “Checkup sometimes on your human during day time” कभी-कभी हल्का “कुछ चाहिए?” संदेश भेजने के लिए प्रेरित करता है, लेकिन आपकी configured local timezone का उपयोग करके रात का spam टालता है (Timezone देखें)।
agents.defaults.heartbeat.prompt (या agents.list[].heartbeat.prompt) को custom body पर सेट करें (जैसा है वैसा भेजा जाता है)।
Response contract
- अगर ध्यान देने योग्य कुछ नहीं है, तो
HEARTBEAT_OKसे reply करें। - Tool-capable heartbeat runs इसके बजाय कोई visible update न देने के लिए
notify: falseके साथheartbeat_respondcall कर सकते हैं, या alert के लिएnotify: trueऔरnotificationTextउपयोग कर सकते हैं। मौजूद होने पर, structured tool response text fallback पर precedence लेता है। - heartbeat runs के दौरान, OpenClaw
HEARTBEAT_OKको ack मानता है जब यह reply के शुरू या अंत में आता है। token हटाया जाता है और यदि बची हुई content ≤ackMaxChars(डिफ़ॉल्ट: 300) है तो reply drop कर दिया जाता है। - यदि
HEARTBEAT_OKreply के बीच में आता है, तो उसके साथ कोई विशेष व्यवहार नहीं होता। - alerts के लिए,
HEARTBEAT_OKशामिल न करें; केवल alert text लौटाएँ।
HEARTBEAT_OK हटाया और logged किया जाता है; केवल HEARTBEAT_OK वाला message drop कर दिया जाता है।
Config
Scope और precedence
agents.defaults.heartbeatglobal heartbeat behavior सेट करता है।agents.list[].heartbeatऊपर merge होता है; यदि किसी agent मेंheartbeatblock है, तो केवल वे agents heartbeats चलाते हैं।channels.defaults.heartbeatसभी channels के लिए visibility defaults सेट करता है।channels.<channel>.heartbeatchannel defaults को override करता है।channels.<channel>.accounts.<id>.heartbeat(multi-account channels) per-channel settings को override करता है।
प्रति-agent heartbeats
यदि किसीagents.list[] entry में heartbeat block शामिल है, तो केवल वे agents heartbeats चलाते हैं। per-agent block agents.defaults.heartbeat के ऊपर merge होता है (इसलिए आप shared defaults एक बार सेट करके प्रति agent override कर सकते हैं)।
उदाहरण: दो agents, केवल दूसरा agent heartbeats चलाता है।
Active hours उदाहरण
किसी विशिष्ट timezone में heartbeats को business hours तक सीमित करें:24/7 setup
अगर आप चाहते हैं कि heartbeats पूरे दिन चलें, तो इनमें से कोई pattern उपयोग करें:activeHoursको पूरी तरह omit करें (कोई time-window restriction नहीं; यह default behavior है)।- full-day window सेट करें:
activeHours: { start: "00:00", end: "24:00" }।
Multi-account उदाहरण
Telegram जैसे multi-account channels पर किसी specific account को target करने के लिएaccountId उपयोग करें:
Field notes
Heartbeat interval (duration string; default unit = minutes)।
heartbeat runs के लिए वैकल्पिक model override (
provider/model)।सक्षम होने पर, उपलब्ध होने पर अलग
Thinking message भी deliver करें (/reasoning on जैसा same shape)।true होने पर, heartbeat runs lightweight bootstrap context उपयोग करते हैं और workspace bootstrap files से केवल
HEARTBEAT.md रखते हैं।true होने पर, प्रत्येक heartbeat बिना prior conversation history के fresh session में चलता है। cron
sessionTarget: "isolated" जैसा same isolation pattern उपयोग करता है। प्रति-heartbeat token cost बहुत कम करता है। अधिकतम savings के लिए lightContext: true के साथ combine करें। Delivery routing अब भी main session context उपयोग करता है।true होने पर, heartbeat runs उस agent की अतिरिक्त busy lanes पर defer होते हैं: उसका अपना session-keyed subagent या nested command work। Cron lanes हमेशा heartbeats को defer करते हैं, इस flag के बिना भी, ताकि local-model hosts एक ही समय में cron और heartbeat prompts न चलाएँ।
heartbeat runs के लिए वैकल्पिक session key।
main(डिफ़ॉल्ट): agent main session।- Explicit session key (
openclaw sessions --jsonया sessions CLI से copy करें)। - Session key formats: Sessions और Groups देखें।
last: अंतिम उपयोग किए गए external channel पर deliver करें।- explicit channel: कोई भी configured channel या plugin id, उदाहरण के लिए
discord,matrix,telegram, याwhatsapp। none(डिफ़ॉल्ट): heartbeat चलाएँ लेकिन externally deliver न करें।
direct/DM delivery behavior को नियंत्रित करता है।
allow: direct/DM heartbeat delivery allow करें। block: direct/DM delivery suppress करें (reason=dm-blocked)।वैकल्पिक recipient override (channel-specific id, जैसे WhatsApp के लिए E.164 या Telegram chat id)। Telegram topics/threads के लिए,
<chatId>:topic:<messageThreadId> उपयोग करें।बहु-खाता चैनलों के लिए वैकल्पिक खाता id। जब
target: "last" हो, तो खाता id हल किए गए अंतिम चैनल पर लागू होता है यदि वह खातों का समर्थन करता है; अन्यथा इसे अनदेखा किया जाता है। यदि खाता id हल किए गए चैनल के लिए कॉन्फ़िगर किए गए खाते से मेल नहीं खाता, तो डिलीवरी छोड़ दी जाती है।डिफ़ॉल्ट प्रॉम्प्ट बॉडी को ओवरराइड करता है (मर्ज नहीं किया जाता)।
डिलीवरी से पहले
HEARTBEAT_OK के बाद अनुमत अधिकतम वर्ण।true होने पर, Heartbeat रन के दौरान टूल त्रुटि चेतावनी पेलोड दबाता है।
Heartbeat एजेंट टर्न के निरस्त होने से पहले अनुमत अधिकतम सेकंड। सेट न होने पर, यदि
agents.defaults.timeoutSeconds सेट है तो उसका उपयोग किया जाता है, अन्यथा Heartbeat कैडेंस का उपयोग किया जाता है, जिसकी सीमा 600 सेकंड है।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 डिलीवरी डिफ़ॉल्ट रूप से direct/DM लक्ष्यों की अनुमति देती हैं। Heartbeat टर्न चलाते हुए भी direct-target भेजने को दबाने के लिए
directPolicy: "block"सेट करें। - यदि मुख्य कतार, लक्ष्य सत्र लेन, Cron लेन, या कोई सक्रिय Cron जॉब व्यस्त है, तो Heartbeat छोड़ दिया जाता है और बाद में फिर से प्रयास किया जाता है।
- यदि
skipWhenBusy: trueहै, तो इस एजेंट का session-keyed subagent और nested lanes भी Heartbeat रन को स्थगित करते हैं। अन्य एजेंटों की व्यस्त लेन इस एजेंट को स्थगित नहीं करतीं। - यदि
targetकिसी बाहरी गंतव्य में हल नहीं होता, तो रन फिर भी होता है लेकिन कोई आउटबाउंड संदेश नहीं भेजा जाता।
दृश्यता और छोड़ने का व्यवहार
दृश्यता और छोड़ने का व्यवहार
- यदि
showOk,showAlerts, औरuseIndicatorसभी अक्षम हैं, तो रन शुरुआत में हीreason=alerts-disabledके रूप में छोड़ दिया जाता है। - यदि केवल अलर्ट डिलीवरी अक्षम है, तो OpenClaw फिर भी Heartbeat चला सकता है, देय-कार्य टाइमस्टैम्प अपडेट कर सकता है, सत्र idle टाइमस्टैम्प पुनर्स्थापित कर सकता है, और बाहरी अलर्ट पेलोड दबा सकता है।
- यदि हल किया गया Heartbeat लक्ष्य typing का समर्थन करता है, तो OpenClaw Heartbeat रन सक्रिय होने के दौरान typing दिखाता है। यह उसी लक्ष्य का उपयोग करता है जिस पर Heartbeat चैट आउटपुट भेजता, और इसे
typingMode: "never"द्वारा अक्षम किया जाता है।
सत्र जीवनचक्र और ऑडिट
सत्र जीवनचक्र और ऑडिट
- केवल-Heartbeat उत्तर सत्र को जीवित नहीं रखते। Heartbeat मेटाडेटा सत्र पंक्ति को अपडेट कर सकता है, लेकिन idle expiry अंतिम वास्तविक उपयोगकर्ता/चैनल संदेश के
lastInteractionAtका उपयोग करती है, और daily expirysessionStartedAtका उपयोग करती है। - Control UI और WebChat इतिहास Heartbeat प्रॉम्प्ट और केवल-OK स्वीकृतियों को छिपाते हैं। अंतर्निहित सत्र ट्रांसक्रिप्ट में ऑडिट/रीप्ले के लिए वे टर्न फिर भी हो सकते हैं।
- अलग किए गए पृष्ठभूमि कार्य एक सिस्टम इवेंट को कतारबद्ध कर सकते हैं और जब मुख्य सत्र को किसी बात पर जल्दी ध्यान देना चाहिए, तब Heartbeat को जगा सकते हैं। वह wake Heartbeat रन को पृष्ठभूमि कार्य नहीं बनाता।
दृश्यता नियंत्रण
डिफ़ॉल्ट रूप से,HEARTBEAT_OK स्वीकृतियां दबाई जाती हैं जबकि अलर्ट सामग्री डिलीवर होती है। आप इसे प्रति चैनल या प्रति खाते समायोजित कर सकते हैं:
प्रत्येक फ़्लैग क्या करता है
showOk: जब मॉडल केवल-OK उत्तर लौटाता है, तोHEARTBEAT_OKस्वीकृति भेजता है।showAlerts: जब मॉडल non-OK उत्तर लौटाता है, तो अलर्ट सामग्री भेजता है।useIndicator: UI स्थिति सतहों के लिए indicator events उत्सर्जित करता है।
प्रति-चैनल बनाम प्रति-खाता उदाहरण
सामान्य पैटर्न
| लक्ष्य | कॉन्फ़िगरेशन |
|---|---|
| डिफ़ॉल्ट व्यवहार (मौन OK, अलर्ट चालू) | (कोई कॉन्फ़िगरेशन आवश्यक नहीं) |
| पूरी तरह मौन (कोई संदेश नहीं, कोई indicator नहीं) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| केवल-indicator (कोई संदेश नहीं) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true } |
| केवल एक चैनल में OK | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (वैकल्पिक)
यदि कार्यक्षेत्र मेंHEARTBEAT.md फ़ाइल मौजूद है, तो डिफ़ॉल्ट प्रॉम्प्ट एजेंट को इसे पढ़ने के लिए कहता है। इसे अपनी “Heartbeat चेकलिस्ट” समझें: छोटी, स्थिर, और हर 30 मिनट में विचार करने के लिए सुरक्षित।
सामान्य रन में, HEARTBEAT.md केवल तब inject किया जाता है जब डिफ़ॉल्ट एजेंट के लिए Heartbeat guidance सक्षम हो। Heartbeat कैडेंस को 0m से अक्षम करना या includeSystemPromptSection: false सेट करना इसे सामान्य bootstrap context से हटा देता है।
native Codex harness पर, HEARTBEAT.md सामग्री टर्न में inject नहीं की जाती। यदि फ़ाइल मौजूद है और उसमें non-whitespace सामग्री है, तो Heartbeat collaboration-mode निर्देश Codex को फ़ाइल की ओर इंगित करते हैं और आगे बढ़ने से पहले उसे पढ़ने को कहते हैं।
यदि HEARTBEAT.md मौजूद है लेकिन व्यावहारिक रूप से खाली है (केवल खाली पंक्तियां, Markdown/HTML टिप्पणियां, # Heading जैसे Markdown शीर्षक, fence markers, या खाली checklist stubs), तो OpenClaw API कॉल बचाने के लिए Heartbeat रन छोड़ देता है। वह छोड़ना reason=empty-heartbeat-file के रूप में रिपोर्ट किया जाता है। यदि फ़ाइल अनुपस्थित है, तो Heartbeat फिर भी चलता है और मॉडल तय करता है कि क्या करना है।
प्रॉम्प्ट bloat से बचने के लिए इसे बहुत छोटा रखें (छोटी चेकलिस्ट या reminders)।
उदाहरण HEARTBEAT.md:
tasks: ब्लॉक
HEARTBEAT.md Heartbeat के अंदर अंतराल-आधारित जांचों के लिए एक छोटे संरचित tasks: ब्लॉक का भी समर्थन करता है।
उदाहरण:
व्यवहार
व्यवहार
- OpenClaw
tasks:ब्लॉक को parse करता है और प्रत्येक कार्य को उसके अपनेintervalके विरुद्ध जांचता है। - उस tick के लिए Heartbeat प्रॉम्प्ट में केवल देय कार्य शामिल किए जाते हैं।
- यदि कोई कार्य देय नहीं है, तो बेकार मॉडल कॉल से बचने के लिए Heartbeat पूरी तरह छोड़ दिया जाता है (
reason=no-tasks-due)। HEARTBEAT.mdमें non-task सामग्री संरक्षित रहती है और due-task सूची के बाद अतिरिक्त संदर्भ के रूप में जोड़ी जाती है।- कार्य last-run टाइमस्टैम्प सत्र स्थिति (
heartbeatTaskState) में संग्रहीत होते हैं, इसलिए अंतराल सामान्य restart के बाद भी बने रहते हैं। - कार्य टाइमस्टैम्प केवल Heartbeat रन के अपना सामान्य reply path पूरा करने के बाद ही आगे बढ़ाए जाते हैं। छोड़े गए
empty-heartbeat-file/no-tasks-dueरन कार्यों को पूरा चिह्नित नहीं करते।
क्या एजेंट HEARTBEAT.md अपडेट कर सकता है?
हां — यदि आप उससे ऐसा करने को कहें।HEARTBEAT.md एजेंट कार्यक्षेत्र में बस एक सामान्य फ़ाइल है, इसलिए आप एजेंट को (सामान्य चैट में) कुछ इस तरह बता सकते हैं:
- “
HEARTBEAT.mdअपडेट करके दैनिक calendar check जोड़ें।” - “
HEARTBEAT.mdको फिर से लिखें ताकि यह छोटा हो और inbox follow-ups पर केंद्रित हो।”
मैन्युअल wake (on-demand)
आप एक सिस्टम इवेंट कतारबद्ध कर सकते हैं और तत्काल Heartbeat trigger कर सकते हैं:heartbeat कॉन्फ़िगर है, तो manual wake उन प्रत्येक एजेंट Heartbeat को तुरंत चलाता है।
अगले scheduled tick की प्रतीक्षा करने के लिए --mode next-heartbeat का उपयोग करें।
Reasoning डिलीवरी (वैकल्पिक)
डिफ़ॉल्ट रूप से, Heartbeat केवल अंतिम “answer” पेलोड डिलीवर करते हैं। यदि आप transparency चाहते हैं, तो सक्षम करें:agents.defaults.heartbeat.includeReasoning: true
Thinking से prefixed एक अलग संदेश भी डिलीवर करेंगे (/reasoning on जैसी ही shape)। यह तब उपयोगी हो सकता है जब एजेंट कई sessions/codexes प्रबंधित कर रहा हो और आप देखना चाहते हों कि उसने आपको ping करने का निर्णय क्यों लिया — लेकिन यह आपकी इच्छा से अधिक internal detail भी leak कर सकता है। group chats में इसे बंद रखना बेहतर है।
लागत जागरूकता
Heartbeat पूर्ण एजेंट टर्न चलाते हैं। छोटे अंतराल अधिक tokens खर्च करते हैं। लागत कम करने के लिए:- पूरी conversation history भेजने से बचने के लिए
isolatedSession: trueका उपयोग करें (~100K tokens से घटकर प्रति रन ~2-5K)। - bootstrap files को केवल
HEARTBEAT.mdतक सीमित करने के लिएlightContext: trueका उपयोग करें। - सस्ता
modelसेट करें (जैसेollama/llama3.2:1b)। HEARTBEAT.mdछोटा रखें।- यदि आप केवल internal state updates चाहते हैं, तो
target: "none"का उपयोग करें।
Heartbeat के बाद संदर्भ overflow
यदि किसी Heartbeat ने पहले मौजूदा सत्र को छोटे local model पर छोड़ दिया था, उदाहरण के लिए 32k window वाला Ollama model, और अगला main-session turn context overflow रिपोर्ट करता है, तो सत्र runtime model को configured primary model पर वापस reset करें। जब अंतिम runtime model configuredheartbeat.model से मेल खाता है, तो OpenClaw का reset message इसे स्पष्ट करता है।
वर्तमान Heartbeat रन पूरा होने के बाद shared session के मौजूदा runtime model को संरक्षित रखते हैं। आप फिर भी fresh session में Heartbeat चलाने के लिए isolatedSession: true का उपयोग कर सकते हैं, सबसे छोटे प्रॉम्प्ट के लिए इसे lightContext: true के साथ जोड़ सकते हैं, या shared session के लिए पर्याप्त बड़े context window वाला Heartbeat model चुन सकते हैं।
संबंधित
- ऑटोमेशन — सभी ऑटोमेशन तंत्रों का एक नज़र में अवलोकन
- पृष्ठभूमि कार्य — अलग चलाए जाने वाले कार्य को कैसे ट्रैक किया जाता है
- समयक्षेत्र — समयक्षेत्र Heartbeat शेड्यूलिंग को कैसे प्रभावित करता है
- समस्या निवारण — ऑटोमेशन समस्याओं को डीबग करना