Gateway
Heartbeat
Heartbeat در نشست اصلی نوبتهای دورهای عامل را اجرا میکند تا مدل بتواند هر چیزی را که نیازمند توجه است، بدون ارسال پیامهای مزاحم به شما، مطرح کند.
Heartbeat یک نوبت زمانبندیشده در نشست اصلی است — رکوردهای background task ایجاد نمیکند. رکوردهای کار برای کارهای جداشده هستند (اجرای ACP، زیرعاملها، کارهای cron ایزوله).
عیبیابی: Scheduled Tasks
شروع سریع (مبتدی)
Pick a cadence
Heartbeatها را فعال بگذارید (پیشفرض 30m است، یا 1h برای احراز هویت Anthropic OAuth/توکن، از جمله استفادهٔ دوباره از Claude CLI) یا ریتم خودتان را تنظیم کنید.
Add HEARTBEAT.md (optional)
یک چکلیست کوچک HEARTBEAT.md یا بلوک tasks: در فضای کاری عامل ایجاد کنید.
Decide where heartbeat messages should go
target: "none" مقدار پیشفرض است؛ برای مسیریابی به آخرین مخاطب، target: "last" را تنظیم کنید.
Optional tuning
- برای شفافیت، تحویل استدلال 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 `Reasoning:` message too }, }, },}پیشفرضها
- بازه:
30m(یا1hوقتی حالت احراز هویت تشخیصدادهشده Anthropic OAuth/توکن باشد، از جمله استفادهٔ دوباره از Claude CLI).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 بهصورت لفظبهلفظ بهعنوان پیام کاربر ارسال میشود. پرامپت سیستم فقط وقتی Heartbeatها برای عامل پیشفرض فعال باشند، شامل بخش «Heartbeat» میشود و اجرا بهصورت داخلی علامتگذاری میشود.
- وقتی Heartbeatها با
0mغیرفعال باشند، اجراهای عادی نیزHEARTBEAT.mdرا از زمینهٔ راهاندازی حذف میکنند تا مدل دستورالعملهای مخصوص Heartbeat را نبیند. - ساعتهای فعال (
heartbeat.activeHours) در منطقهٔ زمانی پیکربندیشده بررسی میشوند. خارج از این بازه، Heartbeatها تا تیک بعدی داخل بازه نادیده گرفته میشوند. - Heartbeatها هنگام فعال یا در صف بودن کار cron بهطور خودکار به تعویق میافتند. برای اینکه یک عامل هنگام شلوغ بودن زیرعاملِ کلیددار به نشست یا مسیرهای فرمان تو در توی خودش نیز به تعویق بیفتد،
heartbeat.skipWhenBusy: trueرا تنظیم کنید؛ عاملهای همسطح دیگر فقط بهدلیل اینکه عامل دیگری کار زیرعامل در جریان دارد متوقف نمیشوند.
پرامپت Heartbeat برای چیست
پرامپت پیشفرض عمداً گسترده است:
- کارهای پسزمینه: «در نظر گرفتن کارهای معوق» عامل را تشویق میکند پیگیریها را مرور کند (صندوق ورودی، تقویم، یادآورها، کارهای در صف) و هر مورد فوری را مطرح کند.
- سر زدن به انسان: «گاهی در طول روز به انسان خود سر بزن» یک پیام سبک و گاهبهگاه از نوع «چیزی نیاز داری؟» را تشویق میکند، اما با استفاده از منطقهٔ زمانی محلی پیکربندیشدهٔ شما، از پیامهای مزاحم شبانه جلوگیری میکند (به Timezone مراجعه کنید).
Heartbeat میتواند به background tasks تکمیلشده واکنش نشان دهد، اما خودِ اجرای 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باشد، پاسخ کنار گذاشته میشود (پیشفرض: 300). - اگر
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 Reasoning: 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 }, }, }, },}خارج از این بازه (قبل از 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", // 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وقتی فعال باشد، پیام جداگانهٔ Reasoning: را نیز در صورت موجود بودن تحویل میدهد (همان شکل /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 باشد، payloadهای هشدار خطای ابزار را هنگام اجرای 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باشد، subagent کلیدخورده به نشست این عامل و مسیرهای تودرتو نیز اجرای Heartbeat را به تعویق میاندازند. مسیرهای مشغول عاملهای دیگر این عامل را به تعویق نمیاندازند. - اگر
targetبه هیچ مقصد بیرونی حل نشود، اجرا همچنان انجام میشود اما هیچ پیام خروجی ارسال نمیشود.
رفتار نمایش و رد شدن
- اگر
showOk،showAlerts، وuseIndicatorهمگی غیرفعال باشند، اجرا از ابتدا باreason=alerts-disabledرد میشود. - اگر فقط تحویل هشدار غیرفعال باشد، OpenClaw همچنان میتواند Heartbeat را اجرا کند، timestampهای کارهای موعددار را بهروزرسانی کند، timestamp بیکاری نشست را بازیابی کند، و payload هشدار بیرونی را سرکوب کند.
- اگر مقصد حلشده Heartbeat از typing پشتیبانی کند، OpenClaw هنگام فعال بودن اجرای Heartbeat، typing را نمایش میدهد. این از همان مقصدی استفاده میکند که Heartbeat خروجی چت را به آن میفرستاد، و با
typingMode: "never"غیرفعال میشود.
چرخه عمر نشست و ممیزی
- پاسخهای فقط Heartbeat نشست را زنده نگه نمیدارند. metadata مربوط به Heartbeat ممکن است ردیف نشست را بهروزرسانی کند، اما انقضای بیکاری از
lastInteractionAtآخرین پیام واقعی کاربر/کانال استفاده میکند، و انقضای روزانه ازsessionStartedAt. - Control UI و تاریخچه WebChat، پرامپتهای Heartbeat و تأییدهای فقط OK را پنهان میکنند. transcript زیرین نشست همچنان میتواند آن نوبتها را برای ممیزی/بازپخش در خود داشته باشد.
- کارهای پسزمینه جداشده میتوانند یک رویداد سیستمی را در صف بگذارند و وقتی نشست اصلی باید سریع متوجه چیزی شود، 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: رویدادهای indicator را برای سطحهای وضعیت 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های بیصدا، هشدارها روشن) | (هیچ پیکربندی لازم نیست) |
| کاملاً بیصدا (بدون پیام، بدون 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 در workspace وجود داشته باشد، پرامپت پیشفرض به عامل میگوید آن را بخواند. آن را «چکلیست Heartbeat» خود در نظر بگیرید: کوچک، پایدار، و امن برای گنجاندن هر ۳۰ دقیقه.
در اجراهای عادی، HEARTBEAT.md فقط زمانی تزریق میشود که راهنمایی Heartbeat برای عامل پیشفرض فعال باشد. غیرفعال کردن cadence مربوط به Heartbeat با 0m یا تنظیم includeSystemPromptSection: false آن را از زمینه bootstrap عادی حذف میکند.
اگر HEARTBEAT.md وجود داشته باشد اما عملاً خالی باشد (فقط خطهای خالی و سربرگهای markdown مانند # Heading)، 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:را parse میکند و هر کار را در برابرintervalخودش بررسی میکند. - فقط کارهای موعدرسیده در پرامپت Heartbeat برای آن تیک گنجانده میشوند.
- اگر هیچ کاری موعدرسیده نباشد، Heartbeat کاملاً رد میشود (
reason=no-tasks-due) تا از فراخوانی هدررفته مدل جلوگیری شود. - محتوای غیرکار در
HEARTBEAT.mdحفظ میشود و بهعنوان زمینه اضافی پس از فهرست کارهای موعدرسیده افزوده میشود. - timestampهای آخرین اجرای کار در وضعیت نشست (
heartbeatTaskState) ذخیره میشوند، بنابراین فاصلهها از راهاندازیهای دوباره عادی جان سالم به در میبرند. - timestampهای کار فقط پس از آن جلو برده میشوند که اجرای Heartbeat مسیر پاسخ عادی خود را کامل کند. اجراهای ردشده
empty-heartbeat-file/no-tasks-dueکارها را کاملشده علامت نمیزنند.
حالت کار زمانی مفید است که بخواهید یک فایل Heartbeat چندین بررسی دورهای را نگه دارد، بدون اینکه در هر تیک هزینه همه آنها را بپردازید.
آیا عامل میتواند HEARTBEAT.md را بهروزرسانی کند؟
بله — اگر از آن بخواهید.
HEARTBEAT.md فقط یک فایل عادی در workspace عامل است، بنابراین میتوانید به عامل (در یک چت عادی) چیزی شبیه این بگویید:
- «
HEARTBEAT.mdرا بهروزرسانی کن تا یک بررسی روزانه تقویم اضافه شود.» - «
HEARTBEAT.mdرا بازنویسی کن تا کوتاهتر و متمرکز بر پیگیریهای inbox باشد.»
اگر میخواهید این کار بهصورت پیشدستانه انجام شود، میتوانید یک خط صریح نیز در پرامپت Heartbeat خود بگنجانید، مانند: «اگر چکلیست کهنه شد، HEARTBEAT.md را با نسخه بهتری بهروزرسانی کن.»
بیدارسازی دستی (درخواستی)
میتوانید یک رویداد سیستمی را در صف بگذارید و یک Heartbeat فوری را با این دستور فعال کنید:
openclaw system event --text "Check for urgent follow-ups" --mode nowاگر چندین عامل heartbeat پیکربندی کرده باشند، بیدارسازی دستی هر یک از آن Heartbeatهای عامل را فوراً اجرا میکند.
برای انتظار تا تیک زمانبندیشده بعدی، از --mode next-heartbeat استفاده کنید.
تحویل Reasoning (اختیاری)
بهطور پیشفرض، Heartbeatها فقط payload نهایی «پاسخ» را تحویل میدهند.
اگر شفافیت میخواهید، فعال کنید:
agents.defaults.heartbeat.includeReasoning: true
وقتی فعال باشد، Heartbeatها همچنین یک پیام جداگانه با پیشوند Reasoning: تحویل میدهند (همان شکل /reasoning on). این میتواند زمانی مفید باشد که عامل چندین نشست/codex را مدیریت میکند و میخواهید ببینید چرا تصمیم گرفته به شما پیام بدهد — اما همچنین میتواند جزئیات داخلی بیشتری از آنچه میخواهید افشا کند. بهتر است در چتهای گروهی آن را خاموش نگه دارید.
آگاهی از هزینه
Heartbeatها نوبتهای کامل عامل را اجرا میکنند. فاصلههای کوتاهتر token بیشتری مصرف میکنند. برای کاهش هزینه:
- از
isolatedSession: trueاستفاده کنید تا از ارسال تاریخچه کامل مکالمه جلوگیری شود (~100K token به ~2-5K در هر اجرا). - از
lightContext: trueاستفاده کنید تا فایلهای bootstrap فقط بهHEARTBEAT.mdمحدود شوند. - یک
modelارزانتر تنظیم کنید (مثلاًollama/llama3.2:1b). HEARTBEAT.mdرا کوچک نگه دارید.- اگر فقط بهروزرسانیهای وضعیت داخلی میخواهید، از
target: "none"استفاده کنید.
سرریز زمینه پس از Heartbeat
اگر یک Heartbeat قبلاً یک نشست موجود را روی یک مدل محلی کوچکتر گذاشته باشد، برای مثال یک مدل Ollama با پنجره 32k، و نوبت بعدی نشست اصلی سرریز زمینه را گزارش کند، مدل runtime نشست را به مدل اصلی پیکربندیشده بازنشانی کنید. پیام بازنشانی OpenClaw این موضوع را وقتی آخرین مدل runtime با heartbeat.model پیکربندیشده برابر باشد صریحاً ذکر میکند.
Heartbeatهای فعلی پس از کامل شدن اجرا، مدل runtime موجود نشست مشترک را حفظ میکنند. همچنان میتوانید از isolatedSession: true برای اجرای Heartbeatها در یک نشست تازه استفاده کنید، آن را با lightContext: true برای کوچکترین پرامپت ترکیب کنید، یا یک مدل Heartbeat با پنجره زمینهای انتخاب کنید که برای نشست مشترک بهاندازه کافی بزرگ باشد.
مرتبط
- اتوماسیون — همه سازوکارهای اتوماسیون در یک نگاه
- کارهای پسزمینه — کار جداشده چگونه ردیابی میشود
- منطقه زمانی — منطقه زمانی چگونه بر زمانبندی Heartbeat اثر میگذارد
- عیبیابی — اشکالزدایی مشکلات اتوماسیون