Heartbeat مقابل Cron؟ راجع الأتمتة للحصول على إرشادات حول وقت استخدام كل منهما.
بدء سريع (للمبتدئين)
اختر وتيرة
اترك Heartbeat مفعلا (القيمة الافتراضية هي
30m، أو 1h لمصادقة Anthropic OAuth/الرمز، بما في ذلك إعادة استخدام Claude CLI) أو اضبط وتيرتك الخاصة.قرر إلى أين يجب أن تذهب رسائل Heartbeat
target: "none" هي القيمة الافتراضية؛ اضبط target: "last" للتوجيه إلى آخر جهة اتصال.القيم الافتراضية
- الفاصل الزمني:
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 غير المضبوطة
agents.defaults.timeoutSecondsعند ضبطها. وإلا، فإنها تستخدم وتيرة Heartbeat بحد أقصى 600 ثانية. اضبطagents.defaults.heartbeat.timeoutSecondsأوagents.list[].heartbeat.timeoutSecondsلكل وكيل لعمل Heartbeat أطول. - يرسل موجه Heartbeat حرفيا كرسالة المستخدم. يتضمن موجه النظام قسما باسم “Heartbeat” فقط عندما تكون Heartbeat مفعلة للوكيل الافتراضي، ويتم تعليم التشغيل داخليا.
- عند تعطيل Heartbeat باستخدام
0m، تحذف التشغيلات العادية أيضاHEARTBEAT.mdمن سياق التمهيد حتى لا يرى النموذج تعليمات خاصة بـ Heartbeat فقط. - يتم التحقق من ساعات النشاط (
heartbeat.activeHours) في المنطقة الزمنية المضبوطة. خارج النافذة، يتم تخطي Heartbeat حتى النبضة التالية داخل النافذة. - تؤجل Heartbeat تلقائيا أثناء كون عمل Cron نشطا أو في قائمة الانتظار. اضبط
heartbeat.skipWhenBusy: trueلتأجيل وكيل أيضا على مسارات الوكيل الفرعي المرتبطة بمفتاح جلسته أو مسارات الأوامر المتداخلة الخاصة به؛ لم تعد الوكلاء النظيرة تتوقف لمجرد أن وكيلا آخر لديه عمل وكيل فرعي قيد التنفيذ.
الغرض من موجه Heartbeat
الموجه الافتراضي واسع عمدا:- المهام الخلفية: “النظر في المهام المعلقة” يدفع الوكيل إلى مراجعة المتابعات (صندوق الوارد، التقويم، التذكيرات، العمل في قائمة الانتظار) وإظهار أي شيء عاجل.
- اطمئنان بشري: “الاطمئنان أحيانا على الإنسان أثناء النهار” يدفع رسالة خفيفة من حين لآخر مثل “هل تحتاج إلى شيء؟”، لكنه يتجنب الإزعاج ليلا باستخدام منطقتك الزمنية المحلية المضبوطة (راجع المنطقة الزمنية).
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_OK العارض في بداية/نهاية رسالة وتسجيله؛ وتسقط الرسالة التي تكون فقط 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.
مثال ساعات النشاط
قيّد Heartbeat بساعات العمل في منطقة زمنية محددة:إعداد 24/7
إذا أردت أن تعمل Heartbeat طوال اليوم، فاستخدم أحد هذين النمطين:- احذف
activeHoursبالكامل (لا يوجد قيد نافذة زمنية؛ هذا هو السلوك الافتراضي). - اضبط نافذة ليوم كامل:
activeHours: { start: "00:00", end: "24:00" }.
مثال متعدد الحسابات
استخدمaccountId لاستهداف حساب محدد على القنوات متعددة الحسابات مثل Telegram:
ملاحظات الحقول
فاصل Heartbeat الزمني (سلسلة مدة؛ الوحدة الافتراضية = دقائق).
تجاوز اختياري للنموذج لتشغيلات Heartbeat (
provider/model).عند التفعيل، يتم أيضا تسليم رسالة
Thinking المنفصلة عند توفرها (بالشكل نفسه مثل /reasoning on).عند الضبط على true، تستخدم تشغيلات Heartbeat سياق تمهيد خفيفا وتحتفظ فقط بـ
HEARTBEAT.md من ملفات تمهيد مساحة العمل.عند الضبط على true، يعمل كل Heartbeat في جلسة جديدة دون سجل محادثة سابق. يستخدم نمط العزل نفسه مثل Cron
sessionTarget: "isolated". يقلل تكلفة الرموز لكل Heartbeat بشكل كبير. ادمجه مع lightContext: true لتحقيق أقصى توفير. لا يزال توجيه التسليم يستخدم سياق الجلسة الرئيسية.عند الضبط على true، تؤجل تشغيلات Heartbeat على مسارات الانشغال الإضافية لذلك الوكيل: وكيله الفرعي المرتبط بمفتاح الجلسة الخاص به أو عمل الأوامر المتداخل. تؤجل مسارات Cron دائما Heartbeat، حتى دون هذه العلامة، بحيث لا تشغل مضيفات النماذج المحلية موجهات Cron وHeartbeat في الوقت نفسه.
مفتاح جلسة اختياري لتشغيلات Heartbeat.
main(الافتراضي): الجلسة الرئيسية للوكيل.- مفتاح جلسة صريح (انسخه من
openclaw sessions --jsonأو من CLI الجلسات). - تنسيقات مفاتيح الجلسة: راجع الجلسات والمجموعات.
last: التسليم إلى آخر قناة خارجية مستخدمة.- قناة صريحة: أي قناة مضبوطة أو معرف Plugin، على سبيل المثال
discordأوmatrixأوtelegramأوwhatsapp. none(الافتراضي): شغّل Heartbeat لكن لا تسلم خارجيا.
يتحكم في سلوك التسليم المباشر/DM.
allow: السماح بتسليم Heartbeat المباشر/DM. block: منع التسليم المباشر/DM (reason=dm-blocked).تجاوز اختياري للمستلم (معرف خاص بالقناة، مثل E.164 لـ WhatsApp أو معرف محادثة Telegram). لمواضيع/سلاسل Telegram، استخدم
<chatId>:topic:<messageThreadId>.معرّف حساب اختياري للقنوات متعددة الحسابات. عند
target: "last"، ينطبق معرّف الحساب على آخر قناة محلولة إذا كانت تدعم الحسابات؛ وإلا فيتم تجاهله. إذا لم يطابق معرّف الحساب حسابًا مهيأً للقناة المحلولة، يتم تخطي التسليم.يتجاوز متن الموجه الافتراضي (لا يتم دمجه).
الحد الأقصى للأحرف المسموح بها بعد
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 حتى النبضة التالية داخل النافذة.
سلوك التسليم
Session and target routing
Session and target routing
- تعمل Heartbeats في الجلسة الرئيسية للوكيل افتراضيًا (
agent:<id>:<mainKey>)، أوglobalعندما تكونsession.scope = "global". اضبطsessionللتجاوز إلى جلسة قناة محددة (Discord/WhatsApp/إلخ). - يؤثر
sessionفقط في سياق التشغيل؛ يتحكمtargetوtoفي التسليم. - للتسليم إلى قناة/مستلم محدد، اضبط
target+to. معtarget: "last"، يستخدم التسليم آخر قناة خارجية لتلك الجلسة. - تسمح تسليمات Heartbeat بالأهداف المباشرة/DM افتراضيًا. اضبط
directPolicy: "block"لكتم الإرسالات إلى الأهداف المباشرة مع استمرار تشغيل دورة Heartbeat. - إذا كان الطابور الرئيسي، أو مسار جلسة الهدف، أو مسار Cron، أو مهمة Cron نشطة مشغولًا، يتم تخطي Heartbeat وإعادة المحاولة لاحقًا.
- إذا كان
skipWhenBusy: true، فإن الوكيل الفرعي المرتبط بمفتاح جلسة هذا الوكيل والمسارات المتداخلة تؤجل أيضًا تشغيلات Heartbeat. لا تؤجل المسارات المشغولة لوكلاء آخرين هذا الوكيل. - إذا لم يُحل
targetإلى وجهة خارجية، فسيظل التشغيل يحدث لكن لا تُرسل رسالة صادرة.
Visibility and skip behavior
Visibility and skip behavior
- إذا كانت
showOkوshowAlertsوuseIndicatorكلها معطلة، يتم تخطي التشغيل مسبقًا كـreason=alerts-disabled. - إذا كان تسليم التنبيه فقط معطلًا، يستطيع OpenClaw مع ذلك تشغيل Heartbeat، وتحديث الطوابع الزمنية للمهام المستحقة، واستعادة الطابع الزمني لخمول الجلسة، وكتم حمولة التنبيه الخارجية.
- إذا كان هدف Heartbeat المحلول يدعم الكتابة، يعرض OpenClaw حالة الكتابة أثناء نشاط تشغيل Heartbeat. يستخدم هذا الهدف نفسه الذي كان Heartbeat سيرسل إليه إخراج الدردشة، ويتم تعطيله بواسطة
typingMode: "never".
Session lifecycle and audit
Session lifecycle and audit
- لا تُبقي ردود Heartbeat فقط الجلسة حية. قد تحدّث بيانات Heartbeat الوصفية صف الجلسة، لكن انتهاء الخمول يستخدم
lastInteractionAtمن آخر رسالة مستخدم/قناة حقيقية، ويستخدم انتهاء الصلاحية اليوميsessionStartedAt. - يخفي سجل Control UI وWebChat موجهات Heartbeat وإقرارات OK فقط. قد يظل نص الجلسة الأساسي يحتوي على تلك الدورات لأغراض التدقيق/إعادة التشغيل.
- يمكن لـ مهام الخلفية المنفصلة إدراج حدث نظام وإيقاظ Heartbeat عندما يجب أن تلاحظ الجلسة الرئيسية شيئًا بسرعة. لا يجعل ذلك الإيقاظ تشغيل Heartbeat مهمة خلفية.
عناصر التحكم في الظهور
افتراضيًا، تُكتم إقراراتHEARTBEAT_OK بينما يتم تسليم محتوى التنبيه. يمكنك ضبط هذا لكل قناة أو لكل حساب:
ما يفعله كل علم
showOk: يرسل إقرارHEARTBEAT_OKعندما يعيد النموذج ردًا يحتوي على OK فقط.showAlerts: يرسل محتوى التنبيه عندما يعيد النموذج ردًا ليس OK.useIndicator: يصدر أحداث مؤشر لأسطح حالة واجهة المستخدم.
أمثلة لكل قناة مقابل لكل حساب
أنماط شائعة
| الهدف | الإعداد |
|---|---|
| السلوك الافتراضي (OK صامتة، التنبيهات مفعلة) | (لا حاجة إلى إعداد) |
| صامت بالكامل (لا رسائل، لا مؤشر) | 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 موجودًا في مساحة العمل، فإن الموجه الافتراضي يطلب من الوكيل قراءته. فكر فيه كأنه “قائمة تحقق Heartbeat” الخاصة بك: صغيرة، ومستقرة، وآمنة للنظر فيها كل 30 دقيقة.
في التشغيلات العادية، لا يتم حقن HEARTBEAT.md إلا عندما تكون إرشادات Heartbeat مفعلة للوكيل الافتراضي. يؤدي تعطيل إيقاع Heartbeat باستخدام 0m أو ضبط includeSystemPromptSection: false إلى حذفه من سياق التمهيد العادي.
في حزمة Codex الأصلية، لا يتم حقن محتوى HEARTBEAT.md في الدورة. إذا كان الملف موجودًا ويحتوي على محتوى غير مسافات بيضاء، تشير تعليمات وضع التعاون في Heartbeat إلى الملف وتطلب منه القراءة قبل المتابعة.
إذا كان HEARTBEAT.md موجودًا لكنه فارغ فعليًا (أسطر فارغة فقط، أو تعليقات Markdown/HTML، أو عناوين Markdown مثل # Heading، أو علامات سياج، أو نماذج قوائم تحقق فارغة)، يتخطى OpenClaw تشغيل Heartbeat لتوفير استدعاءات API. يتم الإبلاغ عن ذلك التخطي كـ reason=empty-heartbeat-file. إذا كان الملف مفقودًا، يظل Heartbeat يعمل ويقرر النموذج ما يجب فعله.
اجعله صغيرًا جدًا (قائمة تحقق قصيرة أو تذكيرات) لتجنب تضخم الموجه.
مثال HEARTBEAT.md:
كتل tasks:
يدعم HEARTBEAT.md أيضًا كتلة tasks: منظمة صغيرة للفحوصات القائمة على الفواصل الزمنية داخل Heartbeat نفسه.
مثال:
Behavior
Behavior
- يحلل OpenClaw كتلة
tasks:ويفحص كل مهمة مقابلintervalالخاص بها. - لا تُدرج في موجه Heartbeat لتلك النبضة إلا المهام المستحقة.
- إذا لم تكن هناك مهام مستحقة، يتم تخطي Heartbeat بالكامل (
reason=no-tasks-due) لتجنب استدعاء نموذج مهدور. - يتم الحفاظ على المحتوى غير المرتبط بالمهام في
HEARTBEAT.mdوإلحاقه كسياق إضافي بعد قائمة المهام المستحقة. - تُخزّن الطوابع الزمنية لآخر تشغيل للمهام في حالة الجلسة (
heartbeatTaskState)، لذلك تبقى الفواصل الزمنية بعد عمليات إعادة التشغيل العادية. - لا يتم تقديم طوابع المهام الزمنية إلا بعد اكتمال تشغيل Heartbeat عبر مسار الرد العادي. لا تضع تشغيلات
empty-heartbeat-file/no-tasks-dueالمتخطاة علامة اكتمال على المهام.
هل يستطيع الوكيل تحديث HEARTBEAT.md؟
نعم — إذا طلبت منه ذلك.HEARTBEAT.md مجرد ملف عادي في مساحة عمل الوكيل، لذا يمكنك إخبار الوكيل (في دردشة عادية) بشيء مثل:
- “حدّث
HEARTBEAT.mdلإضافة فحص يومي للتقويم.” - “أعد كتابة
HEARTBEAT.mdليكون أقصر ويركز على متابعات البريد الوارد.”
إيقاظ يدوي (عند الطلب)
يمكنك إدراج حدث نظام وتشغيل Heartbeat فوري باستخدام:heartbeat مهيأ، فإن الإيقاظ اليدوي يشغل كل Heartbeats لهؤلاء الوكلاء فورًا.
استخدم --mode next-heartbeat للانتظار حتى النبضة المجدولة التالية.
تسليم الاستدلال (اختياري)
افتراضيًا، لا تسلّم Heartbeats إلا حمولة “الإجابة” النهائية. إذا أردت الشفافية، فعّل:agents.defaults.heartbeat.includeReasoning: true
Thinking (بالشكل نفسه مثل /reasoning on). يمكن أن يكون هذا مفيدًا عندما يدير الوكيل عدة جلسات/نسخ Codex وتريد معرفة سبب قراره مراسلتك — لكنه قد يسرّب أيضًا تفاصيل داخلية أكثر مما تريد. يُفضّل إبقاؤه معطلًا في الدردشات الجماعية.
الوعي بالتكلفة
تعمل Heartbeats كدورات وكيل كاملة. الفواصل الزمنية الأقصر تستهلك رموزًا أكثر. لتقليل التكلفة:- استخدم
isolatedSession: trueلتجنب إرسال سجل المحادثة الكامل (~100K رمز إلى ~2-5K لكل تشغيل). - استخدم
lightContext: trueلقصر ملفات التمهيد علىHEARTBEAT.mdفقط. - اضبط
modelأرخص (مثلollama/llama3.2:1b). - أبقِ
HEARTBEAT.mdصغيرًا. - استخدم
target: "none"إذا كنت تريد تحديثات حالة داخلية فقط.
فيضان السياق بعد Heartbeat
إذا ترك Heartbeat سابقًا جلسة موجودة على نموذج محلي أصغر، على سبيل المثال نموذج Ollama بنافذة 32k، وأبلغت دورة الجلسة الرئيسية التالية عن فيضان في السياق، فأعد ضبط نموذج وقت تشغيل الجلسة إلى النموذج الأساسي المهيأ. تذكر رسالة إعادة الضبط في OpenClaw هذا عندما يطابق آخر نموذج وقت تشغيلheartbeat.model المهيأ.
تحافظ Heartbeats الحالية على نموذج وقت التشغيل الموجود للجلسة المشتركة بعد اكتمال التشغيل. لا يزال بإمكانك استخدام isolatedSession: true لتشغيل Heartbeats في جلسة جديدة، أو دمجه مع lightContext: true لأصغر موجه، أو اختيار نموذج Heartbeat بنافذة سياق كبيرة بما يكفي للجلسة المشتركة.
ذو صلة
- الأتمتة — جميع آليات الأتمتة بنظرة سريعة
- المهام الخلفية — كيف يتم تتبّع العمل المنفصل
- المنطقة الزمنية — كيف تؤثر المنطقة الزمنية في جدولة Heartbeat
- استكشاف الأخطاء وإصلاحها — تصحيح مشكلات الأتمتة