Cron مقابل Heartbeat: متى تستخدم كلًّا منهما
تتيح لك كلٌّ من heartbeats ووظائف cron تشغيل المهام وفق جدول زمني. يساعدك هذا الدليل على اختيار الآلية المناسبة لحالة الاستخدام لديك.دليل اتخاذ القرار السريع
| حالة الاستخدام | الموصى به | السبب |
|---|---|---|
| فحص صندوق الوارد كل 30 دقيقة | Heartbeat | يُجمَّع مع فحوصات أخرى، واعٍ للسياق |
| إرسال تقرير يومي الساعة 9 صباحًا تمامًا | Cron (معزول) | يتطلب توقيتًا دقيقًا |
| مراقبة التقويم للأحداث القادمة | Heartbeat | ملاءمة طبيعية للوعي الدوري |
| تشغيل تحليل معمّق أسبوعي | Cron (معزول) | مهمة مستقلة، ويمكن استخدام نموذج مختلف |
| ذكرني في 20 دقيقة | Cron (الرئيسي، --at) | مهمة لمرة واحدة بتوقيت دقيق |
| فحص صحة المشروع في الخلفية | Heartbeat | الحشوة في الدورة الحالية |
Heartbeat: الوعي الدوري
تعمل heartbeats ضمن الجلسة الرئيسية على فاصل زمني منتظم (الافتراضي: 30 دقيقة). صُمِّمت ليقوم الوكيل بتفقّد الأمور وإبراز أي شيء مهم.متى تستخدم heartbeat
- فحوصات دورية متعددة: بدل 5 وظائف cron منفصلة لفحص البريد والتقويم والطقس والإشعارات وحالة المشروع، يمكن لنبضة واحدة أن تُجمّع كل ذلك.
- قرارات واعية بالسياق: يمتلك الوكيل سياق الجلسة الرئيسية كاملًا، ما يمكّنه من اتخاذ قرارات ذكية حول ما هو عاجل وما يمكن تأجيله.
- استمرارية محادثية: تشترك تشغيلات heartbeat في الجلسة نفسها، لذا يتذكر الوكيل المحادثات الأخيرة ويتابع بشكل طبيعي.
- مراقبة منخفضة العبء: نبضة واحدة تحل محل العديد من مهام الاستطلاع الصغيرة.
مزايا heartbeat
- تجميع فحوصات متعددة: يمكن لدور واحد للوكيل مراجعة البريد والتقويم والإشعارات معًا.
- تقليل استدعاءات واجهة البرمجة: نبضة واحدة أقل تكلفة من 5 وظائف cron معزولة.
- وعي بالسياق: يعرف الوكيل ما تعمل عليه ويمكنه تحديد الأولويات وفقًا لذلك.
- كبح ذكي: إذا لم يكن هناك ما يتطلب الانتباه، يرد الوكيل بـ
HEARTBEAT_OKولا تُسلَّم أي رسالة. - توقيت طبيعي: ينحرف قليلًا بحسب حمل الطابور، وهو مناسب لمعظم سيناريوهات المراقبة.
مثال heartbeat: قائمة HEARTBEAT.md
تهيئة heartbeat
Cron: الجدولة الدقيقة
تعمل وظائف cron في أوقات محددة بدقة ويمكن أن تعمل ضمن جلسات معزولة دون التأثير على السياق الرئيسي.متى تستخدم cron
- الحاجة إلى توقيت دقيق: «أرسل هذا الساعة 9:00 صباحًا كل يوم اثنين» (وليس «حوالي الساعة 9»).
- مهام مستقلة: مهام لا تحتاج إلى سياق محادثي.
- نموذج/تفكير مختلف: تحليلات ثقيلة تستحق نموذجًا أقوى.
- تذكيرات لمرة واحدة: «ذكّرني بعد 20 دقيقة» مع
--at. - مهام كثيرة أو صاخبة: مهام قد تُربك سجل الجلسة الرئيسية.
- محفزات خارجية: مهام يجب أن تعمل بغض النظر عن نشاط الوكيل.
مزايا cron
- توقيت دقيق: تعابير cron من 5 حقول مع دعم المناطق الزمنية.
- عزل الجلسة: يعمل ضمن
cron:<jobId>دون تلويث السجل الرئيسي. - تجاوز النموذج: استخدام نموذج أرخص أو أقوى لكل مهمة.
- التحكم في التسليم: الوظائف المعزولة افتراضيًا إلى
announce(ملخّص)؛ اخترnoneعند الحاجة. - تسليم فوري: وضع الإعلان ينشر مباشرة دون انتظار heartbeat.
- عدم الحاجة إلى سياق الوكيل: يعمل حتى إذا كانت الجلسة الرئيسية خاملة أو مضغوطة.
- دعم المهام لمرة واحدة:
--atلطوابع زمنية مستقبلية دقيقة.
مثال cron: موجز صباحي يومي
مثال cron: تذكير لمرة واحدة
مخطط تدفق القرار
الجمع بين الاثنين
أكثر الإعدادات كفاءة تستخدم كليهما:- Heartbeat يتولى المراقبة الروتينية (البريد، التقويم، الإشعارات) في دور مُجمَّع كل 30 دقيقة.
- Cron يتولى الجداول الدقيقة (التقارير اليومية، المراجعات الأسبوعية) والتذكيرات لمرة واحدة.
مثال: إعداد أتمتة فعّال
HEARTBEAT.md (يُفحَص كل 30 دقيقة):Lobster: مسارات عمل حتمية مع موافقات
Lobster هو مُشغّل مسارات العمل لـ سلاسل أدوات متعددة الخطوات التي تحتاج تنفيذًا حتميًا وموافقات صريحة. استخدمه عندما تكون المهمة أكثر من دور واحد للوكيل، وتريد مسار عمل قابلًا للاستئناف مع نقاط تحقّق بشرية.متى يكون Lobster مناسبًا
- أتمتة متعددة الخطوات: تحتاج خط أنابيب ثابتًا من استدعاءات الأدوات، وليس مُطالبة لمرة واحدة.
- بوابات موافقة: يجب إيقاف الآثار الجانبية حتى تُوافق، ثم الاستئناف.
- تشغيلات قابلة للاستئناف: متابعة مسار عمل متوقف دون إعادة تشغيل الخطوات السابقة.
كيف يقترن مع heartbeat وcron
- Heartbeat/cron يقرران متى يحدث التشغيل.
- Lobster يحدد ما الخطوات التي تحدث بعد بدء التشغيل.
ملاحظات تشغيلية (من الشيفرة)
- يعمل Lobster كـ عملية فرعية محلية (CLI
lobster) في وضع الأداة ويُرجِع غلاف JSON. - إذا أعادت الأداة
needs_approval، فتابِع الاستئناف باستخدامresumeTokenوعلمapprove. - الأداة مكوّن إضافي اختياري؛ فعّلها تدريجيًا عبر
tools.alsoAllow: ["lobster"](موصى به). - إذا مرّرت
lobsterPath، فيجب أن يكون مسارًا مطلقًا.
الجلسة الرئيسية مقابل الجلسة المعزولة
يمكن لكلٍّ من heartbeat وcron التفاعل مع الجلسة الرئيسية، لكن بطرق مختلفة:| Heartbeat | Cron (الرئيسي) | Cron (معزول) | |
|---|---|---|---|
| الجلسة | الرئيسية | الرئيسية (عبر حدث نظام) | cron:<jobId> |
| التاريخ | مشترك | مشترك | جديد في كل تشغيل |
| السياق | كامل | كامل | بلا سياق (يبدأ نظيفًا) |
| النموذج | نموذج الجلسة الرئيسية | نموذج الجلسة الرئيسية | قابل للتجاوز |
| الإخراج | يُسلَّم إن لم يكن HEARTBEAT_OK | مطالبة heartbeat + حدث | إعلان ملخّص (افتراضي) |
متى تستخدم cron ضمن الجلسة الرئيسية
استخدم--session main مع --system-event عندما تريد:
- ظهور التذكير/الحدث ضمن سياق الجلسة الرئيسية
- أن يتعامل الوكيل معه أثناء نبضة heartbeat التالية مع سياق كامل
- عدم وجود تشغيل معزول منفصل
متى تستخدم cron المعزول
استخدم--session isolated عندما تريد:
- صفحة نظيفة دون سياق سابق
- إعدادات نموذج أو تفكير مختلفة
- إعلان الملخصات مباشرة إلى قناة
- سجلًا لا يزدحم به تاريخ الجلسة الرئيسية
اعتبارات التكلفة
| الآلية | ملف التكلفة |
|---|---|
| Heartbeat | دور واحد كل N دقيقة؛ يتدرج مع حجم HEARTBEAT.md |
| Cron (الرئيسي) | يضيف حدثًا إلى نبضة heartbeat التالية (دون دور معزول) |
| Cron (معزول) | دور وكيل كامل لكل مهمة؛ يمكن استخدام نموذج أرخص |
- أبقِ
HEARTBEAT.mdصغيرًا لتقليل عبء الرموز. - جمّع الفحوصات المتشابهة ضمن heartbeat بدل وظائف cron متعددة.
- استخدم
target: "none"على heartbeat إذا أردت معالجة داخلية فقط. - استخدم cron المعزول مع نموذج أرخص للمهام الروتينية.