Gateway
Heartbeat
Heartbeat در نشست اصلی، گردشهای دورهای عامل را اجرا میکند تا مدل بتواند بدون ارسال هرزپیام به شما، هر چیزی را که نیازمند توجه است مطرح کند.
Heartbeat یک گردش زمانبندیشده در نشست اصلی است — رکوردهای وظیفه پسزمینه ایجاد نمیکند. رکوردهای وظیفه برای کارهای جداشده هستند (اجرای ACP، زیرعاملها، کارهای Cron ایزوله).
عیبیابی: وظایف زمانبندیشده
شروع سریع (مبتدی)
انتخاب تناوب
Heartbeatها را فعال بگذارید (پیشفرض 30m است، یا برای احراز هویت Anthropic OAuth/توکنی، شامل استفاده مجدد از Claude CLI، 1h) یا تناوب خودتان را تنظیم کنید.
افزودن HEARTBEAT.md (اختیاری)
یک چکلیست کوچک HEARTBEAT.md یا بلوک tasks: در فضای کاری عامل ایجاد کنید.
تصمیم بگیرید پیامهای Heartbeat کجا بروند
target: "none" پیشفرض است؛ برای مسیردهی به آخرین مخاطب، target: "last" را تنظیم کنید.
تنظیم اختیاری
- برای شفافیت، تحویل استدلال Heartbeat را فعال کنید.
- اگر اجرای Heartbeat فقط به
HEARTBEAT.mdنیاز دارد، از زمینه راهاندازی سبک استفاده کنید. - برای جلوگیری از ارسال کل تاریخچه گفتگو در هر Heartbeat، نشستهای ایزوله را فعال کنید.
- Heartbeatها را به ساعتهای فعال (زمان محلی) محدود کنید.
نمونه پیکربندی:
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // explicit delivery to last contact (default is "none") directPolicy: "allow", // default: allow direct/DM targets; set "block" to suppress lightContext: true, // optional: only inject HEARTBEAT.md from bootstrap files isolatedSession: true, // optional: fresh session each run (no conversation history) skipWhenBusy: true, // optional: also defer when this agent's subagent or nested lanes are busy // activeHours: { start: "08:00", end: "24:00" }, // includeReasoning: true, // optional: send separate `Thinking` message too }, }, },}پیشفرضها
- بازه:
30m(یا وقتی حالت احراز هویت شناساییشده Anthropic OAuth/توکنی است، شامل استفاده مجدد از Claude CLI،1h).agents.defaults.heartbeat.everyیاagents.list[].heartbeat.everyرا تنظیم کنید؛ برای غیرفعالکردن از0mاستفاده کنید. - بدنه پرامپت (قابل پیکربندی از طریق
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. - زمان پایان: گردشهای Heartbeat تنظیمنشده، وقتی
agents.defaults.timeoutSecondsتنظیم شده باشد از آن استفاده میکنند. در غیر این صورت، از تناوب Heartbeat با سقف ۶۰۰ ثانیه استفاده میکنند. برای کارهای Heartbeat طولانیتر،agents.defaults.heartbeat.timeoutSecondsیا برای هر عاملagents.list[].heartbeat.timeoutSecondsرا تنظیم کنید. - پرامپت Heartbeat عیناً بهعنوان پیام کاربر ارسال میشود. پرامپت سیستم فقط زمانی یک بخش «Heartbeat» دارد که Heartbeatها برای عامل پیشفرض فعال باشند، و اجرا بهصورت داخلی علامتگذاری میشود.
- وقتی Heartbeatها با
0mغیرفعال شوند، اجراهای معمولی نیزHEARTBEAT.mdرا از زمینه راهاندازی حذف میکنند تا مدل دستورالعملهای مخصوص Heartbeat را نبیند. - ساعتهای فعال (
heartbeat.activeHours) در منطقه زمانی پیکربندیشده بررسی میشوند. بیرون از پنجره، Heartbeatها تا تیک بعدی داخل پنجره رد میشوند. - Heartbeatها هنگام فعال یا در صف بودن کار Cron بهصورت خودکار به تعویق میافتند. برای اینکه یک عامل هنگام درگیر بودن زیرعامل دارای کلید نشست خودش یا مسیرهای فرمان تودرتوی خودش نیز به تعویق بیفتد،
heartbeat.skipWhenBusy: trueرا تنظیم کنید؛ عاملهای همسطح دیگر فقط بهخاطر اینکه عامل دیگری کار زیرعامل در حال اجرا دارد متوقف نمیشوند.
پرامپت Heartbeat برای چیست
پرامپت پیشفرض عمداً گسترده است:
- وظایف پسزمینه: «در نظر گرفتن وظایف باقیمانده» عامل را به بررسی پیگیریها (صندوق ورودی، تقویم، یادآورها، کارهای صفشده) و مطرحکردن موارد فوری ترغیب میکند.
- سرکشی انسانی: «گاهی در طول روز از انسان خود سرکشی کن» به یک پیام سبک و گاهبهگاه از نوع «چیزی لازم دارید؟» ترغیب میکند، اما با استفاده از منطقه زمانی محلی پیکربندیشده شما از هرزپیام شبانه جلوگیری میکند (Timezone را ببینید).
Heartbeat میتواند به وظایف پسزمینه تکمیلشده واکنش نشان دهد، اما اجرای خود Heartbeat رکورد وظیفه ایجاد نمیکند.
اگر میخواهید Heartbeat کار بسیار مشخصی انجام دهد (مثلاً «آمار Gmail PubSub را بررسی کن» یا «سلامت Gateway را تأیید کن»)، agents.defaults.heartbeat.prompt (یا agents.list[].heartbeat.prompt) را به یک بدنه سفارشی تنظیم کنید (عیناً ارسال میشود).
قرارداد پاسخ
- اگر چیزی نیازمند توجه نیست، با
HEARTBEAT_OKپاسخ دهید. - اجراهای Heartbeat دارای قابلیت ابزار میتوانند بهجای آن
heartbeat_respondرا باnotify: falseبرای نداشتن بهروزرسانی قابل مشاهده، یاnotify: trueهمراه باnotificationTextبرای هشدار فراخوانی کنند. وقتی وجود داشته باشد، پاسخ ابزار ساختاریافته بر جایگزین متنی اولویت دارد. - در طول اجراهای Heartbeat، OpenClaw وقتی
HEARTBEAT_OKدر ابتدا یا انتهای پاسخ ظاهر شود آن را بهعنوان تأیید در نظر میگیرد. توکن حذف میشود و اگر محتوای باقیمانده ≤ackMaxCharsباشد (پیشفرض: ۳۰۰)، پاسخ کنار گذاشته میشود. - اگر
HEARTBEAT_OKدر میانه پاسخ ظاهر شود، رفتار ویژهای با آن نمیشود. - برای هشدارها،
HEARTBEAT_OKرا وارد نکنید؛ فقط متن هشدار را برگردانید.
بیرون از Heartbeatها، HEARTBEAT_OK سرگردان در ابتدا/انتهای پیام حذف و ثبت میشود؛ پیامی که فقط HEARTBEAT_OK باشد کنار گذاشته میشود.
پیکربندی
{ agents: { defaults: { heartbeat: { every: "30m", // default: 30m (0m disables) model: "anthropic/claude-opus-4-6", includeReasoning: false, // default: false (deliver separate Thinking message when available) lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history) skipWhenBusy: false, // default: false; true also waits for this agent's subagent/nested lanes target: "last", // default: none | options: last | none | <channel id> (core or plugin, e.g. "imessage") to: "+15551234567", // optional channel-specific override accountId: "ops-bot", // optional multi-account channel id 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.", ackMaxChars: 300, // max chars allowed after HEARTBEAT_OK }, }, },}دامنه و اولویت
agents.defaults.heartbeatرفتار سراسری Heartbeat را تنظیم میکند.agents.list[].heartbeatروی آن ادغام میشود؛ اگر هر عاملی یک بلوکheartbeatداشته باشد، فقط همان عاملها Heartbeat اجرا میکنند.channels.defaults.heartbeatپیشفرضهای نمایانی را برای همه کانالها تنظیم میکند.channels.<channel>.heartbeatپیشفرضهای کانال را بازنویسی میکند.channels.<channel>.accounts.<id>.heartbeat(کانالهای چندحسابی) تنظیمات هر کانال را بازنویسی میکند.
Heartbeatهای هر عامل
اگر هر ورودی agents.list[] شامل یک بلوک heartbeat باشد، فقط همان عاملها Heartbeat اجرا میکنند. بلوک هر عامل روی agents.defaults.heartbeat ادغام میشود (بنابراین میتوانید پیشفرضهای مشترک را یکبار تنظیم کنید و برای هر عامل بازنویسی کنید).
مثال: دو عامل، فقط عامل دوم Heartbeat اجرا میکند.
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // explicit delivery to last contact (default is "none") }, }, list: [ { id: "main", default: true }, { id: "ops", heartbeat: { every: "1h", target: "whatsapp", to: "+15551234567", timeoutSeconds: 45, 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.", }, }, ], },}نمونه ساعتهای فعال
Heartbeatها را به ساعتهای کاری در یک منطقه زمانی مشخص محدود کنید:
{ agents: { defaults: { heartbeat: { every: "30m", target: "last", // explicit delivery to last contact (default is "none") activeHours: { start: "09:00", end: "22:00", timezone: "America/New_York", // optional; uses your userTimezone if set, otherwise host tz }, }, }, },}بیرون از این پنجره (پیش از ۹ صبح یا پس از ۱۰ شب به وقت شرق)، Heartbeatها رد میشوند. تیک زمانبندیشده بعدی داخل پنجره بهصورت عادی اجرا میشود.
راهاندازی ۲۴/۷
اگر میخواهید Heartbeatها تمام روز اجرا شوند، از یکی از این الگوها استفاده کنید:
activeHoursرا کاملاً حذف کنید (بدون محدودیت پنجره زمانی؛ این رفتار پیشفرض است).- یک پنجره تمامروز تنظیم کنید:
activeHours: { start: "00:00", end: "24:00" }.
نمونه چندحسابی
برای هدفگیری یک حساب مشخص در کانالهای چندحسابی مانند Telegram از accountId استفاده کنید:
{ agents: { list: [ { id: "ops", heartbeat: { every: "1h", target: "telegram", to: "12345678:topic:42", // optional: route to a specific topic/thread accountId: "ops-bot", }, }, ], }, channels: { telegram: { accounts: { "ops-bot": { botToken: "YOUR_TELEGRAM_BOT_TOKEN" }, }, }, },}نکات فیلدها
everystringبازه Heartbeat (رشته مدت؛ واحد پیشفرض = دقیقه).
modelstringبازنویسی اختیاری مدل برای اجراهای Heartbeat (provider/model).
includeReasoningbooleandefault: falseوقتی فعال باشد، پیام جداگانه Thinking را نیز هنگام موجود بودن تحویل میدهد (همان شکل /reasoning on).
lightContextbooleandefault: falseوقتی true باشد، اجراهای Heartbeat از زمینه راهاندازی سبک استفاده میکنند و فقط HEARTBEAT.md را از فایلهای راهاندازی فضای کاری نگه میدارند.
isolatedSessionbooleandefault: falseوقتی true باشد، هر Heartbeat در یک نشست تازه و بدون تاریخچه گفتگوی قبلی اجرا میشود. از همان الگوی ایزولاسیون Cron sessionTarget: "isolated" استفاده میکند. هزینه توکن هر Heartbeat را بهشدت کاهش میدهد. برای بیشترین صرفهجویی با lightContext: true ترکیب کنید. مسیردهی تحویل همچنان از زمینه نشست اصلی استفاده میکند.
skipWhenBusybooleandefault: falseوقتی true باشد، اجراهای Heartbeat روی مسیرهای مشغول اضافی آن عامل به تعویق میافتند: زیرعامل دارای کلید نشست خودش یا کار فرمان تودرتوی خودش. مسیرهای Cron همیشه Heartbeatها را به تعویق میاندازند، حتی بدون این پرچم، تا میزبانهای مدل محلی پرامپتهای Cron و Heartbeat را همزمان اجرا نکنند.
sessionstringکلید نشست اختیاری برای اجراهای Heartbeat.
main(پیشفرض): نشست اصلی عامل.- کلید نشست صریح (از
openclaw sessions --jsonیا sessions CLI کپی کنید). - قالبهای کلید نشست: Sessions و Groups را ببینید.
targetstringlast: تحویل به آخرین کانال خارجی استفادهشده.- کانال صریح: هر کانال یا شناسه Plugin پیکربندیشده، برای مثال
discord،matrix،telegram، یاwhatsapp. none(پیشفرض): Heartbeat را اجرا کن اما بیرون از سیستم تحویل نده.
directPolicy"allow" | "block"default: allowرفتار تحویل مستقیم/DM را کنترل میکند. allow: تحویل مستقیم/DM Heartbeat را مجاز کن. block: تحویل مستقیم/DM را سرکوب کن (reason=dm-blocked).
tostringبازنویسی اختیاری گیرنده (شناسه مخصوص کانال، مثلاً E.164 برای WhatsApp یا شناسه چت Telegram). برای موضوعات/رشتههای Telegram، از <chatId>:topic:<messageThreadId> استفاده کنید.
accountIdstringشناسهٔ اختیاری حساب برای کانالهای چندحسابی. وقتی target: "last" باشد، شناسهٔ حساب روی آخرین کانال حلشده اعمال میشود، اگر آن کانال از حسابها پشتیبانی کند؛ در غیر این صورت نادیده گرفته میشود. اگر شناسهٔ حساب با هیچ حساب پیکربندیشدهای برای کانال حلشده مطابقت نداشته باشد، تحویل رد میشود.
promptstringبدنهٔ پیشفرض پرامپت را بازنویسی میکند (ادغام نمیشود).
ackMaxCharsnumberdefault: 300بیشینهٔ نویسههای مجاز پس از HEARTBEAT_OK پیش از تحویل.
suppressToolErrorWarningsbooleanوقتی true باشد، در اجرای Heartbeat، محمولههای هشدار خطای ابزار را سرکوب میکند.
timeoutSecondsnumberdefault: global timeout or min(every, 600)بیشینهٔ ثانیههای مجاز برای یک نوبت عامل Heartbeat پیش از لغو شدن. تنظیمنشده رها کنید تا در صورت تنظیم بودن agents.defaults.timeoutSeconds از آن استفاده شود؛ وگرنه از آهنگ Heartbeat با سقف ۶۰۰ ثانیه استفاده میشود.
activeHoursobjectاجرای 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 رد میشود و بعداً دوباره تلاش میشود.
- اگر
skipWhenBusy: trueباشد، زیرعامل کلیدخورده با نشستِ این عامل و مسیرهای تو در تو نیز اجرای Heartbeat را به تعویق میاندازند. مسیرهای مشغول عاملهای دیگر این عامل را به تعویق نمیاندازند. - اگر
targetبه هیچ مقصد خارجی حل نشود، اجرا همچنان انجام میشود اما هیچ پیام خروجی فرستاده نمیشود.
نمایانی و رفتار رد شدن
- اگر
showOk،showAlerts، وuseIndicatorهمگی غیرفعال باشند، اجرا از ابتدا باreason=alerts-disabledرد میشود. - اگر فقط تحویل هشدار غیرفعال باشد، OpenClaw همچنان میتواند Heartbeat را اجرا کند، مهرهای زمانی کارهای سررسیدشده را بهروزرسانی کند، مهر زمانی بیکاری نشست را بازیابی کند، و محمولهٔ هشدار بیرونی را سرکوب کند.
- اگر مقصد حلشدهٔ Heartbeat از تایپکردن پشتیبانی کند، OpenClaw هنگام فعال بودن اجرای Heartbeat تایپکردن را نشان میدهد. این از همان مقصدی استفاده میکند که Heartbeat خروجی چت را به آن میفرستاد، و با
typingMode: "never"غیرفعال میشود.
چرخهٔ عمر نشست و ممیزی
- پاسخهای فقط Heartbeat نشست را زنده نگه نمیدارند. فرادادهٔ Heartbeat ممکن است ردیف نشست را بهروزرسانی کند، اما انقضای بیکاری از
lastInteractionAtاز آخرین پیام واقعی کاربر/کانال استفاده میکند، و انقضای روزانه ازsessionStartedAt. - تاریخچهٔ Control UI و WebChat پرامپتهای Heartbeat و تأییدهای فقط OK را پنهان میکند. رونوشت نشست زیربنایی همچنان میتواند آن نوبتها را برای ممیزی/بازپخش در خود داشته باشد.
- کارهای پسزمینه جداشده میتوانند یک رویداد سیستمی را صف کنند و وقتی نشست اصلی باید چیزی را سریع متوجه شود، Heartbeat را بیدار کنند. آن بیدارسازی اجرای Heartbeat را به یک کار پسزمینه تبدیل نمیکند.
کنترلهای نمایانی
بهطور پیشفرض، تأییدهای HEARTBEAT_OK سرکوب میشوند در حالی که محتوای هشدار تحویل داده میشود. میتوانید این را برای هر کانال یا هر حساب تنظیم کنید:
channels: defaults: heartbeat: showOk: false # Hide HEARTBEAT_OK (default) showAlerts: true # Show alert messages (default) useIndicator: true # Emit indicator events (default) telegram: heartbeat: showOk: true # Show OK acknowledgments on Telegram whatsapp: accounts: work: heartbeat: showAlerts: false # Suppress alert delivery for this accountاولویت: هر حساب → هر کانال → پیشفرضهای کانال → پیشفرضهای توکار.
هر پرچم چه کاری انجام میدهد
showOk: وقتی مدل یک پاسخ فقط OK برمیگرداند، یک تأییدHEARTBEAT_OKمیفرستد.showAlerts: وقتی مدل یک پاسخ غیر OK برمیگرداند، محتوای هشدار را میفرستد.useIndicator: رویدادهای نشانگر را برای سطحهای وضعیت UI منتشر میکند.
اگر هر سه false باشند، OpenClaw اجرای Heartbeat را بهطور کامل رد میکند (بدون فراخوانی مدل).
نمونههای هر کانال در برابر هر حساب
channels: defaults: heartbeat: showOk: false showAlerts: true useIndicator: true slack: heartbeat: showOk: true # all Slack accounts accounts: ops: heartbeat: showAlerts: false # suppress alerts for the ops account only 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.md (اختیاری)
اگر فایل HEARTBEAT.md در فضای کاری وجود داشته باشد، پرامپت پیشفرض به عامل میگوید آن را بخواند. آن را «فهرست بررسی Heartbeat» خود در نظر بگیرید: کوچک، پایدار، و امن برای بررسی هر ۳۰ دقیقه.
در اجراهای عادی، HEARTBEAT.md فقط وقتی تزریق میشود که راهنمای Heartbeat برای عامل پیشفرض فعال باشد. غیرفعال کردن آهنگ Heartbeat با 0m یا تنظیم includeSystemPromptSection: false آن را از زمینهٔ راهاندازی عادی حذف میکند.
در harness بومی Codex، محتوای HEARTBEAT.md به نوبت تزریق نمیشود. اگر فایل وجود داشته باشد و محتوای غیر فاصلهٔ سفید داشته باشد، دستورهای حالت همکاری Heartbeat، Codex را به فایل ارجاع میدهند و به آن میگویند پیش از ادامه آن را بخواند.
اگر HEARTBEAT.md وجود داشته باشد اما عملاً خالی باشد (فقط خطهای خالی، نظرهای Markdown/HTML، تیترهای Markdown مانند # Heading، نشانگرهای fence، یا stubهای خالی فهرست بررسی)، OpenClaw اجرای Heartbeat را برای صرفهجویی در فراخوانیهای API رد میکند. آن رد شدن بهصورت reason=empty-heartbeat-file گزارش میشود. اگر فایل وجود نداشته باشد، Heartbeat همچنان اجرا میشود و مدل تصمیم میگیرد چه کاری انجام دهد.
آن را بسیار کوچک نگه دارید (فهرست بررسی یا یادآوریهای کوتاه) تا از بزرگ شدن پرامپت جلوگیری شود.
نمونهٔ HEARTBEAT.md:
# Heartbeat checklist - Quick scan: anything urgent in inboxes?- If it's daytime, do a lightweight check-in if nothing else is pending.- If a task is blocked, write down _what is missing_ and ask Peter next time.بلوکهای tasks:
HEARTBEAT.md همچنین از یک بلوک ساختیافتهٔ کوچک tasks: برای بررسیهای مبتنی بر بازه درون خود Heartbeat پشتیبانی میکند.
نمونه:
tasks: - name: inbox-triage interval: 30m prompt: "Check for urgent unread emails and flag anything time sensitive."- name: calendar-scan interval: 2h prompt: "Check for upcoming meetings that need prep or follow-up." # Additional instructions - Keep alerts short.- If nothing needs attention after all due tasks, reply HEARTBEAT_OK.رفتار
- OpenClaw بلوک
tasks:را تجزیه میکند و هر کار را در برابرintervalخودش بررسی میکند. - فقط کارهای سررسیدشده در پرامپت Heartbeat برای آن تیک گنجانده میشوند.
- اگر هیچ کاری سررسید نشده باشد، Heartbeat بهطور کامل رد میشود (
reason=no-tasks-due) تا از فراخوانی هدررفتهٔ مدل جلوگیری شود. - محتوای غیرکار در
HEARTBEAT.mdحفظ میشود و پس از فهرست کارهای سررسیدشده بهعنوان زمینهٔ اضافی افزوده میشود. - مهرهای زمانی آخرین اجرای کار در وضعیت نشست (
heartbeatTaskState) ذخیره میشوند، بنابراین بازهها از راهاندازیهای مجدد عادی جان سالم به در میبرند. - مهرهای زمانی کار فقط پس از کامل شدن اجرای Heartbeat در مسیر پاسخ عادی آن جلو برده میشوند. اجراهای ردشدهٔ
empty-heartbeat-file/no-tasks-dueکارها را کاملشده علامت نمیزنند.
حالت کار زمانی مفید است که میخواهید یک فایل Heartbeat چند بررسی دورهای را نگه دارد بدون اینکه در هر تیک هزینهٔ همهٔ آنها را بپردازید.
آیا عامل میتواند HEARTBEAT.md را بهروزرسانی کند؟
بله، اگر از آن بخواهید.
HEARTBEAT.md فقط یک فایل عادی در فضای کاری عامل است، بنابراین میتوانید به عامل (در یک چت عادی) چیزی شبیه این بگویید:
- "
HEARTBEAT.mdرا بهروزرسانی کن تا یک بررسی روزانهٔ تقویم اضافه شود." - "
HEARTBEAT.mdرا بازنویسی کن تا کوتاهتر و متمرکز بر پیگیریهای صندوق ورودی باشد."
اگر میخواهید این کار بهصورت پیشدستانه انجام شود، میتوانید یک خط صریح نیز در پرامپت Heartbeat خود بگنجانید، مانند: «اگر فهرست بررسی کهنه شد، HEARTBEAT.md را با نسخهٔ بهتری بهروزرسانی کن.»
بیدارسازی دستی (درخواستی)
میتوانید یک رویداد سیستمی را صف کنید و با این دستور یک Heartbeat فوری راهاندازی کنید:
openclaw system event --text "Check for urgent follow-ups" --mode nowاگر چند عامل heartbeat پیکربندیشده داشته باشند، بیدارسازی دستی هرکدام از آن Heartbeatهای عامل را فوراً اجرا میکند.
برای انتظار تا تیک زمانبندیشدهٔ بعدی، از --mode next-heartbeat استفاده کنید.
تحویل استدلال (اختیاری)
بهطور پیشفرض، Heartbeatها فقط محمولهٔ «پاسخ» نهایی را تحویل میدهند.
اگر شفافیت میخواهید، این را فعال کنید:
agents.defaults.heartbeat.includeReasoning: true
وقتی فعال باشد، Heartbeatها همچنین یک پیام جداگانه با پیشوند Thinking تحویل میدهند (همان شکل /reasoning on). این میتواند زمانی مفید باشد که عامل چند نشست/کدکس را مدیریت میکند و میخواهید ببینید چرا تصمیم گرفته به شما پینگ بزند؛ اما همچنین میتواند جزئیات داخلی بیشتری از آنچه میخواهید افشا کند. بهتر است در چتهای گروهی آن را خاموش نگه دارید.
آگاهی از هزینه
Heartbeatها نوبتهای کامل عامل را اجرا میکنند. بازههای کوتاهتر توکنهای بیشتری مصرف میکنند. برای کاهش هزینه:
- از
isolatedSession: trueاستفاده کنید تا از ارسال تاریخچهٔ کامل مکالمه جلوگیری شود (از حدود ۱۰۰ هزار توکن به حدود ۲ تا ۵ هزار در هر اجرا). - از
lightContext: trueاستفاده کنید تا فایلهای راهاندازی فقط بهHEARTBEAT.mdمحدود شوند. - یک
modelارزانتر تنظیم کنید (برای نمونهollama/llama3.2:1b). HEARTBEAT.mdرا کوچک نگه دارید.- اگر فقط بهروزرسانیهای وضعیت داخلی میخواهید، از
target: "none"استفاده کنید.
سرریز زمینه پس از Heartbeat
اگر یک Heartbeat قبلاً یک نشست موجود را روی یک مدل محلی کوچکتر باقی گذاشته باشد، برای نمونه یک مدل Ollama با پنجرهٔ 32k، و نوبت بعدی نشست اصلی سرریز زمینه گزارش کند، مدل زماناجرای نشست را به مدل اصلی پیکربندیشده بازنشانی کنید. پیام بازنشانی OpenClaw وقتی آخرین مدل زماناجرا با heartbeat.model پیکربندیشده مطابقت داشته باشد، این را صریح بیان میکند.
Heartbeatهای فعلی پس از کامل شدن اجرا، مدل زماناجرای موجود نشست مشترک را حفظ میکنند. همچنان میتوانید از isolatedSession: true برای اجرای Heartbeatها در یک نشست تازه استفاده کنید، آن را با lightContext: true برای کوچکترین پرامپت ترکیب کنید، یا یک مدل Heartbeat با پنجرهٔ زمینهٔ بهاندازهٔ کافی بزرگ برای نشست مشترک انتخاب کنید.
مرتبط
- اتوماسیون — همه سازوکارهای اتوماسیون در یک نگاه
- وظایف پسزمینه — نحوه رهگیری کارهای جداشده
- منطقه زمانی — نحوه تأثیر منطقه زمانی بر زمانبندی Heartbeat
- عیبیابی — اشکالزدایی مشکلات اتوماسیون