نبضات القلب (Gateway)
نبضات القلب أم Cron؟ راجع Cron vs Heartbeat للإرشاد حول متى تستخدم كلًّا منهما.تشغّل نبضات القلب دورات وكيل دورية في الجلسة الرئيسية بحيث يمكن للنموذج إبراز أي أمر يحتاج إلى انتباه دون إغراقك بالرسائل. استكشاف الأخطاء وإصلاحها: /automation/troubleshooting
البدء السريع (للمبتدئين)
- اترك نبضات القلب مُمكّنة (الافتراضي هو
30m، أو1hلمصادقة Anthropic OAuth/setup-token) أو اضبط وتيرتك الخاصة. - أنشئ قائمة تحقق صغيرة
HEARTBEAT.mdفي مساحة عمل الوكيل (اختياري لكنها مُستحسنة). - قرر أين يجب أن تذهب رسائل نبضات القلب (
target: "last"هو الافتراضي). - اختياري: فعّل تسليم الاستدلال الخاص بنبضات القلب لزيادة الشفافية.
- اختياري: قيّد نبضات القلب بساعات النشاط (التوقيت المحلي).
الإعدادات الافتراضية
- الفاصل الزمني:
30m(أو1hعندما تكون مصادقة Anthropic OAuth/setup-token هي الوضع المكتشف). عيّن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.activeHours) ضمن المنطقة الزمنية المُهيّأة. خارج النافذة، تُتخطّى نبضات القلب حتى العلامة التالية داخل النافذة.
ما الغرض من موجّه نبضات القلب
الموجّه الافتراضي عام عن قصد:- المهام الخلفية: عبارة «Consider outstanding tasks» تحفّز الوكيل على مراجعة المتابعات (البريد الوارد، التقويم، التذكيرات، الأعمال المُصطفّة) وإبراز أي أمر عاجل.
- تفقّد بشري: عبارة «Checkup sometimes on your human during day time» تحفّز رسالة خفيفة عرضية من نوع «هل تحتاج إلى شيء؟»، مع تجنّب الإزعاج الليلي باستخدام منطقتك الزمنية المحلية المُهيّأة (راجع /concepts/timezone).
agents.defaults.heartbeat.prompt (أو
agents.list[].heartbeat.prompt) إلى نص مخصص (يُرسَل كما هو).
عقد الاستجابة
- إذا لم يكن هناك ما يستدعي الانتباه، أجب بـ
HEARTBEAT_OK. - أثناء تشغيل نبضات القلب، يتعامل OpenClaw مع
HEARTBEAT_OKعلى أنه إقرار عند ظهوره في بداية أو نهاية الرد. يُزال الرمز ويُسقَط الرد إذا كان المحتوى المتبقي ≤ackMaxChars(الافتراضي: 300). - إذا ظهر
HEARTBEAT_OKفي منتصف الرد، فلا يُعامَل معاملة خاصة. - للتنبيهات، لا تُدرج
HEARTBEAT_OK؛ أعد نص التنبيه فقط.
HEARTBEAT_OK الشاردة في بداية/نهاية الرسالة؛
والرسالة التي تكون فقط HEARTBEAT_OK تُسقَط.
التهيئة
النطاق والأولوية
- يحدد
agents.defaults.heartbeatسلوك نبضات القلب العام. - يندمج
agents.list[].heartbeatفوقه؛ إذا كان لأي وكيل كتلةheartbeat، فإن هؤلاء الوكلاء فقط هم من يشغّلون نبضات القلب. - يحدد
channels.defaults.heartbeatافتراضيات الرؤية لجميع القنوات. - يتجاوز
channels.<channel>.heartbeatافتراضيات القنوات. - يتجاوز
channels.<channel>.accounts.<id>.heartbeat(قنوات متعددة الحسابات) إعدادات القناة لكل حساب.
نبضات القلب لكل وكيل
إذا تضمّن أي إدخالagents.list[] كتلة heartbeat، فإن هؤلاء الوكلاء فقط
يشغّلون نبضات القلب. تندمج كتلة كل وكيل فوق agents.defaults.heartbeat
(حتى تتمكن من تعيين افتراضيات مشتركة مرة واحدة ثم تجاوزها لكل وكيل).
مثال: وكيلاَن، الوكيل الثاني فقط يشغّل نبضات القلب.
مثال ساعات النشاط
قيّد نبضات القلب بساعات العمل في منطقة زمنية محددة:مثال متعدد الحسابات
استخدمaccountId لاستهداف حساب محدد على قنوات متعددة الحسابات مثل Telegram:
ملاحظات الحقول
every: فاصل نبضات القلب (سلسلة مدة؛ وحدة افتراضية = دقائق).model: تجاوز اختياري للنموذج لتشغيلات نبضات القلب (provider/model).includeReasoning: عند التمكين، يسلّم أيضًا رسالةReasoning:المنفصلة عند توفرها (بنفس شكل/reasoning on).session: مفتاح جلسة اختياري لتشغيلات نبضات القلب.main(الافتراضي): الجلسة الرئيسية للوكيل.- مفتاح جلسة صريح (انسخه من
openclaw sessions --jsonأو من sessions CLI). - تنسيقات مفاتيح الجلسات: راجع Sessions وGroups.
target:last(الافتراضي): التسليم إلى آخر قناة خارجية مستخدمة.- قناة صريحة:
whatsapp/telegram/discord/googlechat/slack/msteams/signal/imessage. none: تشغيل نبضة القلب لكن من دون تسليم خارجي.
to: تجاوز اختياري للمستلم (معرّف خاص بالقناة، مثل E.164 لـ WhatsApp أو معرّف دردشة Telegram).accountId: معرّف حساب اختياري للقنوات متعددة الحسابات. عندما يكونtarget: "last"، ينطبق معرّف الحساب على آخر قناة مُحلَّلة إذا كانت تدعم الحسابات؛ وإلا فيُتجاهل. إذا لم يطابق معرّف الحساب حسابًا مُهيّأً للقناة المُحلَّلة، يُتخطّى التسليم.prompt: يتجاوز نص الموجّه الافتراضي (غير مدمج).ackMaxChars: الحد الأقصى لعدد الأحرف المسموح بها بعدHEARTBEAT_OKقبل التسليم.activeHours: يقيّد تشغيلات نبضات القلب بنافذة زمنية. كائن يحتوي علىstart(HH:MM، شامل)، وend(HH:MM حصري؛ يُسمح بـ24:00لنهاية اليوم)، وtimezoneاختياري.- في حال الإغفال أو
"user": يستخدمagents.defaults.userTimezoneلديك إن كان مضبوطًا، وإلا يعود إلى المنطقة الزمنية لنظام المضيف. "local": يستخدم دائمًا المنطقة الزمنية لنظام المضيف.- أي معرّف IANA (مثل
America/New_York): يُستخدم مباشرة؛ وإن كان غير صالح يعود إلى سلوك"user"أعلاه. - خارج نافذة النشاط، تُتخطّى نبضات القلب حتى العلامة التالية داخل النافذة.
- في حال الإغفال أو
سلوك التسليم
- تعمل نبضات القلب في الجلسة الرئيسية للوكيل افتراضيًا (
agent:<id>:<mainKey>)، أوglobalعندما يكونsession.scope = "global". عيّنsessionللتجاوز إلى جلسة قناة محددة (Discord/WhatsApp/etc.). - يؤثر
sessionفقط على سياق التشغيل؛ يتحكم التسليم كلٌّ منtargetوto. - للتسليم إلى قناة/مستلم محدد، عيّن
target+to. معtarget: "last"، يستخدم التسليم آخر قناة خارجية لتلك الجلسة. - إذا كان الطابور الرئيسي مشغولًا، تُتخطّى نبضة القلب وتُعاد المحاولة لاحقًا.
- إذا حُلِّل
targetإلى وجهة خارجية غير موجودة، فسيحدث التشغيل لكن لن تُرسل رسالة صادرة. - ردود «نبضات القلب فقط» لا تُبقي الجلسة حيّة؛ يُستعاد آخر
updatedAtبحيث ينتهي الخمول بشكل طبيعي.
ضوابط الرؤية
افتراضيًا، تُخفى إقراراتHEARTBEAT_OK بينما يُسلَّم محتوى التنبيه. يمكنك ضبط ذلك لكل قناة أو لكل حساب:
ما الذي يفعله كل علم
showOk: يرسل إقرارHEARTBEAT_OKعندما يعيد النموذج ردًا من نوع OK فقط.showAlerts: يرسل محتوى التنبيه عندما يعيد النموذج ردًا غير OK.useIndicator: يُصدر أحداث مؤشرات لواجهات حالة المستخدم.
أمثلة لكل قناة مقابل لكل حساب
أنماط شائعة
| الهدف | التهيئة |
|---|---|
| السلوك الافتراضي (إقرارات صامتة، تنبيهات مفعّلة) | (لا حاجة لتهيئة) |
| صامت تمامًا (لا رسائل، لا مؤشّر) | 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 في مساحة العمل، يخبر الموجّه الافتراضي
الوكيل بقراءته. فكّر فيه على أنه «قائمة تحقق نبضات القلب» الخاصة بك:
صغيرة، ثابتة، وآمنة للإدراج كل 30 دقيقة.
إذا كان HEARTBEAT.md موجودًا لكنه فارغ فعليًا (أسطر فارغة فقط وعناوين Markdown مثل # Heading)، يتخطّى OpenClaw تشغيل نبضة القلب لتوفير استدعاءات واجهة برمجة التطبيقات.
إذا كان الملف مفقودًا، ستظل نبضة القلب تعمل ويقرر النموذج ما الذي يفعله.
أبقِه صغيرًا (قائمة قصيرة أو تذكيرات) لتجنّب تضخّم الموجّه.
مثال HEARTBEAT.md:
هل يمكن للوكيل تحديث HEARTBEAT.md؟
نعم — إذا طلبت منه ذلك.HEARTBEAT.md هو مجرد ملف عادي في مساحة عمل الوكيل، لذا يمكنك أن تقول للوكيل
(في محادثة عادية) شيئًا مثل:
- «حدّث
HEARTBEAT.mdلإضافة فحص يومي للتقويم». - «أعد كتابة
HEARTBEAT.mdليكون أقصر ومركّزًا على متابعات البريد الوارد».
HEARTBEAT.md — إذ يصبح جزءًا من سياق الموجّه.
إيقاظ يدوي (عند الطلب)
يمكنك إدراج حدث نظامي وتشغيل نبضة قلب فورية عبر:heartbeat مُهيّأ، فإن الإيقاظ اليدوي يشغّل
نبضات قلب هؤلاء الوكلاء فورًا.
استخدم --mode next-heartbeat للانتظار حتى العلامة المجدولة التالية.
تسليم الاستدلال (اختياري)
افتراضيًا، تسلّم نبضات القلب فقط حمولة «الإجابة» النهائية. إذا أردت الشفافية، فعّل:agents.defaults.heartbeat.includeReasoning: true
Reasoning: (بنفس شكل /reasoning on). قد يكون هذا مفيدًا عندما
يدير الوكيل جلسات/مدونات متعددة وتريد معرفة سبب قراره بتنبيهك —
لكن قد يسرّب أيضًا تفاصيل داخلية أكثر مما ترغب. يُفضَّل إبقاؤه
مُعطّلًا في الدردشات الجماعية.
الوعي بالتكلفة
تشغّل نبضات القلب دورات وكيل كاملة. الفواصل الأقصر تستهلك رموزًا أكثر. أبقِHEARTBEAT.md صغيرًا وفكّر في model أو target: "none" الأرخص
إذا كنت تريد فقط تحديثات حالة داخلية.