Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Heartbeat أم cron؟ راجع الأتمتة للحصول على إرشادات حول وقت استخدام كل منهما.
البدء السريع (للمبتدئين)
اختر وتيرة
اترك Heartbeat مفعّلا (الإعداد الافتراضي هو
30m، أو 1h لمصادقة Anthropic OAuth/الرمز، بما في ذلك إعادة استخدام Claude CLI) أو عيّن وتيرتك الخاصة.أضف HEARTBEAT.md (اختياري)
أنشئ قائمة تحقق صغيرة في
HEARTBEAT.md أو كتلة tasks: في مساحة عمل الوكيل.حدد أين يجب أن تذهب رسائل 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 حرفيا كرسالة المستخدم. يتضمن موجه النظام قسم “Heartbeat” فقط عندما تكون Heartbeats مفعّلة للوكيل الافتراضي، وتُعلّم التشغيلة داخليا.
- عند تعطيل Heartbeats باستخدام
0m، تحذف التشغيلات العادية أيضاHEARTBEAT.mdمن سياق التمهيد حتى لا يرى النموذج تعليمات مخصصة لـ Heartbeat فقط. - تُفحص ساعات النشاط (
heartbeat.activeHours) في المنطقة الزمنية المضبوطة. خارج النافذة، تُتخطى Heartbeats حتى النبضة التالية داخل النافذة. - تؤجل Heartbeats تلقائيا أثناء كون عمل cron نشطا أو في قائمة الانتظار. عيّن
heartbeat.skipWhenBusy: trueلتأجيل وكيل أيضا عند انشغال الوكلاء الفرعيين ذوي مفتاح الجلسة الخاصة به أو مسارات الأوامر المتداخلة؛ لم تعد الوكلاء الأشقاء تتوقف لمجرد أن وكيلا آخر لديه عمل وكيل فرعي قيد التنفيذ.
ما الغرض من موجه Heartbeat
الموجه الافتراضي واسع عمدا:- المهام الخلفية: “Consider outstanding tasks” يدفع الوكيل إلى مراجعة المتابعات (البريد الوارد والتقويم والتذكيرات والعمل في قائمة الانتظار) وإظهار أي شيء عاجل.
- تفقّد الإنسان: “Checkup sometimes on your human during day time” يدفع إلى رسالة خفيفة أحيانا مثل “هل تحتاج إلى شيء؟”، لكنه يتجنب رسائل الإزعاج ليلا باستخدام منطقتك الزمنية المحلية المضبوطة (راجع المنطقة الزمنية).
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).عند التمكين، يتم أيضًا تسليم رسالة
Reasoning: المنفصلة عند توفرها (بالبنية نفسها مثل /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 ولكن عدم التسليم خارجيًا.
يتحكم في سلوك التسليم المباشر/عبر الرسائل الخاصة.
allow: السماح بتسليم Heartbeat المباشر/عبر الرسائل الخاصة. block: منع تسليم Heartbeat المباشر/عبر الرسائل الخاصة (reason=dm-blocked).تجاوز اختياري للمستلم (معرّف خاص بالقناة، مثل E.164 لـ WhatsApp أو معرّف دردشة Telegram). لمواضيع/سلاسل Telegram، استخدم
<chatId>:topic:<messageThreadId>.معرّف حساب اختياري للقنوات متعددة الحسابات. عند استخدام
target: "last"، يُطبَّق معرّف الحساب على آخر قناة تم حلها إذا كانت تدعم الحسابات؛ وإلا فيتم تجاهله. إذا لم يطابق معرّف الحساب حسابًا مكوّنًا للقناة التي تم حلها، يتم تخطي التسليم.يتجاوز نص الموجه الافتراضي (دون دمج).
الحد الأقصى للأحرف المسموح بها بعد
HEARTBEAT_OK قبل التسليم.عند ضبطه على true، يكتم حمولات تحذير أخطاء الأدوات أثناء تشغيل Heartbeat.
يقصر تشغيل 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 حتى النبضة التالية داخل النافذة.
سلوك التسليم
توجيه الجلسة والهدف
توجيه الجلسة والهدف
- تعمل 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إلى عدم وجود وجهة خارجية، يظل التشغيل يحدث لكن لا تُرسل أي رسالة صادرة.
الرؤية وسلوك التخطي
الرؤية وسلوك التخطي
- إذا كانت
showOkوshowAlertsوuseIndicatorكلها معطلة، يُتخطى التشغيل مسبقًا معreason=alerts-disabled. - إذا كان تسليم التنبيهات فقط معطلًا، يمكن لـ OpenClaw مع ذلك تشغيل Heartbeat، وتحديث الطوابع الزمنية للمهام المستحقة، واستعادة طابع خمول الجلسة الزمني، وكتم حمولة التنبيه الخارجية.
- إذا كان هدف Heartbeat المحلول يدعم الكتابة، يعرض OpenClaw مؤشر الكتابة أثناء نشاط تشغيل Heartbeat. يستخدم هذا الهدف نفسه الذي كانت Heartbeat سترسل إليه مخرجات الدردشة، ويُعطَّل بواسطة
typingMode: "never".
دورة حياة الجلسة والتدقيق
دورة حياة الجلسة والتدقيق
- لا تُبقي الردود الخاصة بـ Heartbeat فقط الجلسة حية. قد تحدّث بيانات Heartbeat الوصفية صف الجلسة، لكن انتهاء الصلاحية بسبب الخمول يستخدم
lastInteractionAtمن آخر رسالة حقيقية للمستخدم/القناة، ويستخدم انتهاء الصلاحية اليوميsessionStartedAt. - تُخفي واجهة التحكم وسجل 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 } |
| OK في قناة واحدة فقط | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md (اختياري)
إذا كان ملفHEARTBEAT.md موجودًا في مساحة العمل، فإن الموجه الافتراضي يخبر الوكيل بقراءته. فكّر فيه على أنه “قائمة تحقق Heartbeat” الخاصة بك: صغيرة، وثابتة، وآمنة للتضمين كل 30 دقيقة.
في عمليات التشغيل العادية، لا يُحقن HEARTBEAT.md إلا عندما تكون إرشادات Heartbeat مفعلة للوكيل الافتراضي. يؤدي تعطيل إيقاع Heartbeat باستخدام 0m أو ضبط includeSystemPromptSection: false إلى حذفه من سياق التمهيد العادي.
إذا كان HEARTBEAT.md موجودًا لكنه فارغ فعليًا (فقط أسطر فارغة وعناوين Markdown مثل # Heading)، يتخطى OpenClaw تشغيل Heartbeat لتوفير استدعاءات API. يُبلَّغ عن ذلك التخطي كـ reason=empty-heartbeat-file. إذا كان الملف مفقودًا، تظل Heartbeat تعمل ويقرر النموذج ما يجب فعله.
أبقِه صغيرًا جدًا (قائمة تحقق قصيرة أو تذكيرات) لتجنب تضخم الموجه.
مثال HEARTBEAT.md:
كتل tasks:
يدعم HEARTBEAT.md أيضًا كتلة tasks: منظمة صغيرة للفحوصات القائمة على الفواصل الزمنية داخل Heartbeat نفسها.
مثال:
السلوك
السلوك
- يحلل 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
Reasoning: (بالشكل نفسه مثل /reasoning on). قد يكون هذا مفيدًا عندما يدير الوكيل عدة جلسات/codexes وتريد أن ترى لماذا قرر مراسلتك — لكنه قد يسرّب أيضًا تفاصيل داخلية أكثر مما تريد. يُفضّل إبقاؤه معطلًا في دردشات المجموعات.
الوعي بالتكلفة
تشغل 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
- استكشاف الأخطاء وإصلاحها — تصحيح مشكلات الأتمتة