---
read_when:
    - ضبط وتيرة نبضات الحياة أو رسائلها
    - اتخاذ قرار بين نبضات الحياة وcron للمهام المجدولة
summary: رسائل استطلاع نبضات الحياة وقواعد الإشعارات
title: نبضات الحياة
x-i18n:
    generated_at: "2026-04-11T02:44:48Z"
    model: gpt-5.4
    provider: openai
    source_hash: e4485072148753076d909867a623696829bf4a82dcd0479b95d5d0cae43100b0
    source_path: gateway/heartbeat.md
    workflow: 15
---

# نبضات الحياة (Gateway)

> **نبضات الحياة أم Cron؟** راجع [الأتمتة والمهام](/ar/automation) للحصول على إرشادات حول وقت استخدام كل منهما.

تشغّل نبضات الحياة **دورات دورية للوكيل** في الجلسة الرئيسية حتى يتمكن النموذج من
إبراز أي شيء يحتاج إلى اهتمام من دون إغراقك بالرسائل.

نبضات الحياة هي دورة مجدولة في الجلسة الرئيسية — وهي **لا** تنشئ سجلات [مهام في الخلفية](/ar/automation/tasks).
سجلات المهام مخصصة للعمل المنفصل (عمليات ACP، والوكلاء الفرعيون، ووظائف cron المعزولة).

استكشاف الأخطاء وإصلاحها: [المهام المجدولة](/ar/automation/cron-jobs#troubleshooting)

## بدء سريع (للمبتدئين)

1. اترك نبضات الحياة مفعلة (الإعداد الافتراضي هو `30m`، أو `1h` لمصادقة Anthropic OAuth/token، بما في ذلك إعادة استخدام Claude CLI) أو اضبط الوتيرة التي تريدها.
2. أنشئ قائمة تحقق صغيرة في `HEARTBEAT.md` أو كتلة `tasks:` في مساحة عمل الوكيل (اختياري لكنه موصى به).
3. حدّد إلى أين يجب أن تذهب رسائل نبضات الحياة (`target: "none"` هو الإعداد الافتراضي؛ اضبط `target: "last"` للتوجيه إلى آخر جهة اتصال).
4. اختياري: فعّل تسليم الاستدلال الخاص بنبضات الحياة من أجل مزيد من الشفافية.
5. اختياري: استخدم سياق bootstrap خفيفًا إذا كانت عمليات نبضات الحياة تحتاج فقط إلى `HEARTBEAT.md`.
6. اختياري: فعّل الجلسات المعزولة لتجنب إرسال سجل المحادثة الكامل مع كل نبضة حياة.
7. اختياري: قيّد نبضات الحياة بالساعات النشطة (بالتوقيت المحلي).

مثال على الإعداد:

```json5
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",
        target: "last", // تسليم صريح إلى آخر جهة اتصال (الإعداد الافتراضي هو "none")
        directPolicy: "allow", // الافتراضي: السماح بالأهداف المباشرة/الرسائل الخاصة؛ اضبط "block" لمنعها
        lightContext: true, // اختياري: حقن `HEARTBEAT.md` فقط من ملفات bootstrap
        isolatedSession: true, // اختياري: جلسة جديدة في كل تشغيل (من دون سجل محادثة)
        // activeHours: { start: "08:00", end: "24:00" },
        // includeReasoning: true, // اختياري: إرسال رسالة `Reasoning:` منفصلة أيضًا
      },
    },
  },
}
```

## الإعدادات الافتراضية

- الفاصل الزمني: `30m` (أو `1h` عندما يكون وضع المصادقة المكتشف هو Anthropic OAuth/token، بما في ذلك إعادة استخدام 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” فقط عندما تكون نبضات الحياة مفعلة للوكيل
  الافتراضي، ويكون التشغيل مميزًا داخليًا على هذا الأساس.
- عند تعطيل نبضات الحياة باستخدام `0m`، تحذف العمليات العادية أيضًا `HEARTBEAT.md`
  من سياق bootstrap حتى لا يرى النموذج تعليمات مخصصة لنبضات الحياة فقط.
- يتم التحقق من الساعات النشطة (`heartbeat.activeHours`) في المنطقة الزمنية المهيأة.
  وخارج النافذة المحددة، يتم تخطي نبضات الحياة حتى النبضة التالية داخل النافذة.

## ما الغرض من مطالبة نبضات الحياة

المطالبة الافتراضية عامة عمدًا:

- **المهام في الخلفية**: إن عبارة “Consider outstanding tasks” تدفع الوكيل إلى مراجعة
  المتابعات (الوارد، والتقويم، والتذكيرات، والعمل الموجود في الطابور) وإبراز أي شيء عاجل.
- **الاطمئنان على الإنسان**: إن عبارة “Checkup sometimes on your human during day time” تدفع إلى
  إرسال رسالة خفيفة من حين لآخر مثل “هل تحتاج إلى شيء؟”، لكنها تتجنب الإزعاج ليلًا
  باستخدام منطقتك الزمنية المحلية المهيأة (راجع [/concepts/timezone](/ar/concepts/timezone)).

يمكن لنبضات الحياة التفاعل مع [المهام في الخلفية](/ar/automation/tasks) المكتملة، لكن تشغيل نبضات الحياة نفسه لا ينشئ سجل مهمة.

إذا كنت تريد من نبضات الحياة أن تقوم بشيء محدد جدًا (مثل “check Gmail PubSub
stats” أو “verify gateway health”)، فاضبط `agents.defaults.heartbeat.prompt` (أو
`agents.list[].heartbeat.prompt`) على نص مخصص (يُرسل حرفيًا).

## عقد الاستجابة

- إذا لم يكن هناك شيء يحتاج إلى اهتمام، فاستجب بـ **`HEARTBEAT_OK`**.
- أثناء تشغيل نبضات الحياة، يتعامل OpenClaw مع `HEARTBEAT_OK` على أنه
  تأكيد عندما يظهر في **بداية** الرد أو **نهايته**. وتُزال هذه العلامة ويُحذف الرد
  إذا كان المحتوى المتبقي **≤ `ackMaxChars`** (الافتراضي: 300).
- إذا ظهر `HEARTBEAT_OK` في **منتصف** الرد، فلا تتم معاملته
  معاملة خاصة.
- بالنسبة إلى التنبيهات، **لا** تُضمّن `HEARTBEAT_OK`؛ أرجع نص التنبيه فقط.

خارج نبضات الحياة، تتم إزالة أي `HEARTBEAT_OK` عارضة في بداية الرسالة/نهايتها
ويُسجل ذلك؛ أما الرسالة التي تكون فقط `HEARTBEAT_OK` فتُحذف.

## الإعداد

```json5
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m", // الافتراضي: 30m (0m للتعطيل)
        model: "anthropic/claude-opus-4-6",
        includeReasoning: false, // الافتراضي: false (تسليم رسالة `Reasoning:` منفصلة عند توفرها)
        lightContext: false, // الافتراضي: false؛ تجعل القيمة true السياق مقتصرًا على `HEARTBEAT.md` فقط من ملفات bootstrap في مساحة العمل
        isolatedSession: false, // الافتراضي: false؛ تجعل القيمة true كل نبضة حياة تعمل في جلسة جديدة (من دون سجل محادثة)
        target: "last", // الافتراضي: none | الخيارات: last | none | <channel id> (أساسي أو plugin، مثل "bluebubbles")
        to: "+15551234567", // تجاوز اختياري خاص بالقناة
        accountId: "ops-bot", // معرّف قناة اختياري للحسابات المتعددة
        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, // الحد الأقصى للأحرف المسموح بها بعد `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`
(حتى تتمكن من تعيين إعدادات مشتركة مرة واحدة ثم تجاوزها لكل وكيل).

مثال: وكيلان، ولا يشغّل نبضات الحياة إلا الوكيل الثاني.

```json5
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",
        target: "last", // تسليم صريح إلى آخر جهة اتصال (الإعداد الافتراضي هو "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.",
        },
      },
    ],
  },
}
```

### مثال على الساعات النشطة

قيّد نبضات الحياة بساعات العمل في منطقة زمنية محددة:

```json5
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",
        target: "last", // تسليم صريح إلى آخر جهة اتصال (الإعداد الافتراضي هو "none")
        activeHours: {
          start: "09:00",
          end: "22:00",
          timezone: "America/New_York", // اختياري؛ يستخدم `userTimezone` إذا كان مضبوطًا، وإلا فيستخدم المنطقة الزمنية للمضيف
        },
      },
    },
  },
}
```

خارج هذه النافذة (قبل التاسعة صباحًا أو بعد العاشرة مساءً بتوقيت الساحل الشرقي)، يتم تخطي نبضات الحياة. وستعمل النبضة المجدولة التالية داخل النافذة بشكل طبيعي.

### إعداد 24/7

إذا كنت تريد تشغيل نبضات الحياة طوال اليوم، فاستخدم أحد هذين النمطين:

- احذف `activeHours` بالكامل (من دون تقييد بنافذة زمنية؛ وهذا هو السلوك الافتراضي).
- اضبط نافذة يوم كامل: `activeHours: { start: "00:00", end: "24:00" }`.

لا تضبط `start` و`end` على الوقت نفسه (مثلًا `08:00` إلى `08:00`).
يُعامل ذلك على أنه نافذة بعرض صفري، لذلك تُتخطى نبضات الحياة دائمًا.

### مثال على الحسابات المتعددة

استخدم `accountId` لاستهداف حساب محدد في القنوات متعددة الحسابات مثل Telegram:

```json5
{
  agents: {
    list: [
      {
        id: "ops",
        heartbeat: {
          every: "1h",
          target: "telegram",
          to: "12345678:topic:42", // اختياري: التوجيه إلى موضوع/سلسلة رسائل محددة
          accountId: "ops-bot",
        },
      },
    ],
  },
  channels: {
    telegram: {
      accounts: {
        "ops-bot": { botToken: "YOUR_TELEGRAM_BOT_TOKEN" },
      },
    },
  },
}
```

### ملاحظات الحقول

- `every`: الفاصل الزمني لنبضات الحياة (سلسلة مدة؛ ووحدة القياس الافتراضية = الدقائق).
- `model`: تجاوز اختياري للنموذج في تشغيلات نبضات الحياة (`provider/model`).
- `includeReasoning`: عند التفعيل، يُسلَّم أيضًا رسالة `Reasoning:` المنفصلة عند توفرها (بنفس صيغة `/reasoning on`).
- `lightContext`: عند تفعيلها، تستخدم تشغيلات نبضات الحياة سياق bootstrap خفيفًا وتحتفظ فقط بـ `HEARTBEAT.md` من ملفات bootstrap في مساحة العمل.
- `isolatedSession`: عند تفعيلها، تعمل كل نبضة حياة في جلسة جديدة من دون أي سجل محادثة سابق. وتستخدم نمط العزل نفسه المستخدم في cron مع `sessionTarget: "isolated"`. وهذا يقلل بصورة كبيرة تكلفة التوكن لكل نبضة حياة. اجمعها مع `lightContext: true` لتحقيق أكبر قدر من التوفير. ومع ذلك، يظل توجيه التسليم يستخدم سياق الجلسة الرئيسية.
- `session`: مفتاح جلسة اختياري لتشغيلات نبضات الحياة.
  - `main` (الافتراضي): الجلسة الرئيسية للوكيل.
  - مفتاح جلسة صريح (انسخه من `openclaw sessions --json` أو من [CLI الجلسات](/cli/sessions)).
  - تنسيقات مفاتيح الجلسات: راجع [الجلسات](/ar/concepts/session) و[المجموعات](/ar/channels/groups).
- `target`:
  - `last`: التسليم إلى آخر قناة خارجية مستخدمة.
  - قناة صريحة: أي قناة مهيأة أو معرّف plugin، مثل `discord` أو `matrix` أو `telegram` أو `whatsapp`.
  - `none` (الافتراضي): تشغيل نبضات الحياة لكن **من دون تسليم** خارجي.
- `directPolicy`: يتحكم في سلوك التسليم المباشر/الرسائل الخاصة:
  - `allow` (الافتراضي): السماح بتسليم نبضات الحياة المباشر/عبر الرسائل الخاصة.
  - `block`: منع التسليم المباشر/عبر الرسائل الخاصة (`reason=dm-blocked`).
- `to`: تجاوز اختياري للمستلم (معرّف خاص بالقناة، مثل E.164 لـ WhatsApp أو معرّف دردشة Telegram). وبالنسبة إلى مواضيع/سلاسل Telegram، استخدم `<chatId>:topic:<messageThreadId>`.
- `accountId`: معرّف حساب اختياري للقنوات متعددة الحسابات. عند استخدام `target: "last"`، يُطبَّق معرّف الحساب على آخر قناة محلولة إذا كانت تدعم الحسابات؛ وإلا فيتم تجاهله. وإذا لم يطابق معرّف الحساب حسابًا مهيأً للقناة المحلولة، فسيتم تخطي التسليم.
- `prompt`: يتجاوز نص المطالبة الافتراضي (من دون دمج).
- `ackMaxChars`: الحد الأقصى للأحرف المسموح بها بعد `HEARTBEAT_OK` قبل التسليم.
- `suppressToolErrorWarnings`: عند تفعيلها، تُمنع حمولات تحذيرات أخطاء الأدوات أثناء تشغيلات نبضات الحياة.
- `activeHours`: يقيّد تشغيلات نبضات الحياة بنافذة زمنية. وهو كائن يحتوي على `start` (بتنسيق HH:MM، شامل؛ استخدم `00:00` لبداية اليوم)، و`end` (بتنسيق HH:MM، غير شامل؛ ويُسمح بـ `24:00` لنهاية اليوم)، و`timezone` اختياري.
  - إذا حُذف أو كانت قيمته `"user"`: يستخدم `agents.defaults.userTimezone` إذا كان مضبوطًا، وإلا يعود إلى المنطقة الزمنية لنظام المضيف.
  - `"local"`: يستخدم دائمًا المنطقة الزمنية لنظام المضيف.
  - أي معرّف IANA (مثل `America/New_York`): يُستخدم مباشرة؛ وإذا كان غير صالح، يعود إلى سلوك `"user"` المذكور أعلاه.
  - يجب ألا تكون `start` و`end` متساويتين بالنسبة إلى نافذة نشطة؛ إذ تُعامل القيم المتساوية كنافذة بعرض صفري (دائمًا خارج النافذة).
  - خارج النافذة النشطة، يتم تخطي نبضات الحياة حتى النبضة التالية داخل النافذة.

## سلوك التسليم

- تعمل نبضات الحياة في الجلسة الرئيسية للوكيل افتراضيًا (`agent:<id>:<mainKey>`)،
  أو `global` عندما تكون `session.scope = "global"`. اضبط `session` لتجاوز ذلك إلى
  جلسة قناة محددة (Discord/WhatsApp/إلخ).
- يؤثر `session` في سياق التشغيل فقط؛ أما التسليم فتتحكم فيه `target` و`to`.
- للتسليم إلى قناة/مستلم محدد، اضبط `target` + `to`. وعند استخدام
  `target: "last"`، يستخدم التسليم آخر قناة خارجية لتلك الجلسة.
- تسمح عمليات تسليم نبضات الحياة بالأهداف المباشرة/الرسائل الخاصة افتراضيًا. اضبط `directPolicy: "block"` لمنع الإرسال إلى الأهداف المباشرة مع الاستمرار في تشغيل دورة نبضات الحياة.
- إذا كان الطابور الرئيسي مشغولًا، يتم تخطي نبضات الحياة وتُعاد المحاولة لاحقًا.
- إذا لم يُحل `target` إلى وجهة خارجية، فسيستمر التشغيل ولكن لن
  تُرسل أي رسالة صادرة.
- إذا كانت `showOk` و`showAlerts` و`useIndicator` كلها معطلة، فسيتم تخطي التشغيل مسبقًا مع `reason=alerts-disabled`.
- إذا كان تسليم التنبيهات فقط معطلًا، فلا يزال بإمكان OpenClaw تشغيل نبضات الحياة، وتحديث الطوابع الزمنية للمهام المستحقة، واستعادة الطابع الزمني لخمول الجلسة، ومنع حمولة التنبيه الخارجية.
- الردود الخاصة بنبضات الحياة فقط **لا** تُبقي الجلسة نشطة؛ إذ تتم استعادة آخر قيمة لـ `updatedAt`
  بحيث يعمل انتهاء الخمول كالمعتاد.
- يمكن [للمهام في الخلفية](/ar/automation/tasks) المنفصلة إدراج حدث نظام وتنشيط نبضات الحياة عندما ينبغي أن تلاحظ الجلسة الرئيسية شيئًا بسرعة. هذا التنشيط لا يجعل تشغيل نبضات الحياة مهمةً في الخلفية.

## عناصر التحكم في الظهور

افتراضيًا، تُحجب تأكيدات `HEARTBEAT_OK` بينما يتم
تسليم محتوى التنبيه. ويمكنك ضبط هذا لكل قناة أو لكل حساب:

```yaml
channels:
  defaults:
    heartbeat:
      showOk: false # إخفاء `HEARTBEAT_OK` (الافتراضي)
      showAlerts: true # إظهار رسائل التنبيه (الافتراضي)
      useIndicator: true # إصدار أحداث المؤشر (الافتراضي)
  telegram:
    heartbeat:
      showOk: true # إظهار تأكيدات OK على Telegram
  whatsapp:
    accounts:
      work:
        heartbeat:
          showAlerts: false # منع تسليم التنبيهات لهذا الحساب
```

الأولوية: لكل حساب → لكل قناة → إعدادات القنوات الافتراضية → الإعدادات الافتراضية المضمنة.

### ما الذي تفعله كل علامة

- `showOk`: يرسل تأكيد `HEARTBEAT_OK` عندما يعيد النموذج ردًا يتضمن OK فقط.
- `showAlerts`: يرسل محتوى التنبيه عندما يعيد النموذج ردًا لا يتضمن OK.
- `useIndicator`: يصدر أحداث مؤشر لواجهات حالة UI.

إذا كانت **القيم الثلاث كلها** false، فإن OpenClaw يتخطى تشغيل نبضات الحياة بالكامل (من دون استدعاء للنموذج).

### أمثلة: لكل قناة مقابل لكل حساب

```yaml
channels:
  defaults:
    heartbeat:
      showOk: false
      showAlerts: true
      useIndicator: true
  slack:
    heartbeat:
      showOk: true # جميع حسابات Slack
    accounts:
      ops:
        heartbeat:
          showAlerts: false # منع التنبيهات لحساب ops فقط
  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` في مساحة العمل، فإن المطالبة الافتراضية تطلب من
الوكيل قراءته. ويمكنك اعتباره “قائمة التحقق الخاصة بنبضات الحياة”: صغيرة، وثابتة،
وآمنة للتضمين كل 30 دقيقة.

في التشغيلات العادية، لا يتم حقن `HEARTBEAT.md` إلا عندما تكون إرشادات نبضات الحياة
مفعلة للوكيل الافتراضي. يؤدي تعطيل وتيرة نبضات الحياة باستخدام `0m` أو
ضبط `includeSystemPromptSection: false` إلى حذف الملف من سياق bootstrap
العادي.

إذا كان `HEARTBEAT.md` موجودًا ولكنه فارغ فعليًا (فقط أسطر فارغة وعناوين markdown
مثل `# Heading`)، فإن OpenClaw يتخطى تشغيل نبضات الحياة لتوفير استدعاءات API.
ويتم الإبلاغ عن هذا التخطي على أنه `reason=empty-heartbeat-file`.
أما إذا كان الملف مفقودًا، فستستمر نبضات الحياة ويقرر النموذج ما يجب فعله.

اجعله صغيرًا (قائمة تحقق قصيرة أو تذكيرات) لتجنب تضخم المطالبة.

مثال على `HEARTBEAT.md`:

```md
# قائمة التحقق الخاصة بنبضات الحياة

- فحص سريع: هل يوجد شيء عاجل في صناديق الوارد؟
- إذا كان الوقت نهارًا، فأجرِ تواصلًا خفيفًا إذا لم يكن هناك شيء آخر قيد الانتظار.
- إذا كانت مهمة ما متوقفة، فاكتب _ما الذي ينقص_ واسأل Peter في المرة القادمة.
```

### كتل `tasks:`

يدعم `HEARTBEAT.md` أيضًا كتلة منظمة صغيرة `tasks:` للفحوصات
القائمة على الفواصل الزمنية داخل نبضات الحياة نفسها.

مثال:

```md
tasks:

- name: inbox-triage
  interval: 30m
  prompt: "افحص رسائل البريد الإلكتروني غير المقروءة العاجلة وحدد أي شيء حساس للوقت."
- name: calendar-scan
  interval: 2h
  prompt: "افحص الاجتماعات القادمة التي تحتاج إلى تحضير أو متابعة."

# تعليمات إضافية

- اجعل التنبيهات قصيرة.
- إذا لم يكن هناك ما يحتاج إلى اهتمام بعد جميع المهام المستحقة، فردّ بـ HEARTBEAT_OK.
```

السلوك:

- يقوم OpenClaw بتحليل كتلة `tasks:` والتحقق من كل مهمة وفق `interval` الخاص بها.
- لا تُضمَّن في مطالبة نبضات الحياة لتلك النبضة إلا المهام **المستحقة**.
- إذا لم تكن هناك مهام مستحقة، يتم تخطي نبضات الحياة بالكامل (`reason=no-tasks-due`) لتجنب استدعاء نموذج بلا فائدة.
- يتم الاحتفاظ بالمحتوى غير الخاص بالمهام في `HEARTBEAT.md` وإلحاقه كسياق إضافي بعد قائمة المهام المستحقة.
- تُخزَّن الطوابع الزمنية لآخر تشغيل للمهام في حالة الجلسة (`heartbeatTaskState`)، لذلك تبقى الفواصل الزمنية محفوظة عبر عمليات إعادة التشغيل العادية.
- لا يتم تقديم الطوابع الزمنية للمهام إلا بعد أن يكمل تشغيل نبضات الحياة مسار الرد العادي. أما التشغيلات المتخطاة بسبب `empty-heartbeat-file` / `no-tasks-due` فلا تُعلَّم فيها المهام على أنها مكتملة.

وضع المهام مفيد عندما تريد أن يحتوي ملف نبضات حياة واحد على عدة فحوصات دورية من دون دفع تكلفة جميعها في كل نبضة.

### هل يمكن للوكيل تحديث `HEARTBEAT.md`؟

نعم — إذا طلبت منه ذلك.

`HEARTBEAT.md` هو مجرد ملف عادي في مساحة عمل الوكيل، لذلك يمكنك أن تطلب من
الوكيل (في محادثة عادية) شيئًا مثل:

- “حدّث `HEARTBEAT.md` لإضافة فحص يومي للتقويم.”
- “أعد كتابة `HEARTBEAT.md` ليكون أقصر وأكثر تركيزًا على متابعات الوارد.”

إذا كنت تريد أن يحدث هذا بشكل استباقي، فيمكنك أيضًا تضمين سطر صريح في
مطالبة نبضات الحياة مثل: “إذا أصبحت قائمة التحقق قديمة، فحدّث HEARTBEAT.md
بقائمة أفضل.”

ملاحظة أمان: لا تضع أسرارًا (مفاتيح API، أو أرقام هواتف، أو رموز وصول خاصة) في
`HEARTBEAT.md` — لأنه يصبح جزءًا من سياق المطالبة.

## تنشيط يدوي (عند الطلب)

يمكنك إدراج حدث نظام وتشغيل نبضة حياة فورية باستخدام:

```bash
openclaw system event --text "Check for urgent follow-ups" --mode now
```

إذا كانت هناك عدة وكلاء لديهم `heartbeat` مهيأ، فإن التنشيط اليدوي يشغّل نبضات حياة كل واحد من هؤلاء الوكلاء فورًا.

استخدم `--mode next-heartbeat` للانتظار حتى النبضة المجدولة التالية.

## تسليم الاستدلال (اختياري)

افتراضيًا، تسلّم نبضات الحياة حمولة “الإجابة” النهائية فقط.

إذا كنت تريد مزيدًا من الشفافية، فعّل:

- `agents.defaults.heartbeat.includeReasoning: true`

عند التفعيل، ستسلّم نبضات الحياة أيضًا رسالة منفصلة مسبوقة بـ
`Reasoning:` (بنفس صيغة `/reasoning on`). قد يكون هذا مفيدًا عندما يكون الوكيل
يدير عدة جلسات/Skills وتريد معرفة سبب قراره بتنبيهك —
لكنه قد يكشف أيضًا تفاصيل داخلية أكثر مما تريد. لذا يُفضَّل إبقاؤه
معطلًا في الدردشات الجماعية.

## مراعاة التكلفة

تشغّل نبضات الحياة دورات وكيل كاملة. وكلما قصرت الفواصل الزمنية زاد استهلاك التوكنات. لتقليل التكلفة:

- استخدم `isolatedSession: true` لتجنب إرسال سجل المحادثة الكامل (من ~100K توكن إلى ~2-5K لكل تشغيل).
- استخدم `lightContext: true` لحصر ملفات bootstrap على `HEARTBEAT.md` فقط.
- اضبط `model` أرخص (مثل `ollama/llama3.2:1b`).
- أبقِ `HEARTBEAT.md` صغيرًا.
- استخدم `target: "none"` إذا كنت تريد فقط تحديثات الحالة الداخلية.

## ذو صلة

- [الأتمتة والمهام](/ar/automation) — نظرة سريعة على جميع آليات الأتمتة
- [المهام في الخلفية](/ar/automation/tasks) — كيفية تتبع العمل المنفصل
- [المنطقة الزمنية](/ar/concepts/timezone) — كيف تؤثر المنطقة الزمنية في جدولة نبضات الحياة
- [استكشاف الأخطاء وإصلاحها](/ar/automation/cron-jobs#troubleshooting) — تصحيح مشكلات الأتمتة
