CLI commands
Cron
openclaw cron
إدارة وظائف Cron لمجدول Gateway.
الجلسات
يقبل --session القيم main أو isolated أو current أو session:<id>.
مفاتيح الجلسات
- يربط
mainبجلسة الوكيل الرئيسية. - ينشئ
isolatedنصًا حواريًا جديدًا ومعرّف جلسة لكل تشغيل. - يربط
currentبالجلسة النشطة وقت الإنشاء. - يثبت
session:<id>على مفتاح جلسة مستمر صريح.
دلالات الجلسة المعزولة
تعيد عمليات التشغيل المعزولة تعيين سياق المحادثة المحيط. تتم إعادة تعيين توجيه القنوات والمجموعات، وسياسة الإرسال/الصف، والرفع، والمنشأ، وربط وقت تشغيل ACP للتشغيل الجديد. يمكن أن تنتقل التفضيلات الآمنة أو تجاوزات النموذج أو المصادقة التي اختارها المستخدم صراحةً عبر عمليات التشغيل.
التسليم
يعرض openclaw cron list وopenclaw cron show <job-id> معاينة لمسار التسليم المحسوم. بالنسبة إلى channel: "last"، تعرض المعاينة ما إذا كان المسار قد حُسم من الجلسة الرئيسية أو الحالية، أو سيفشل بإغلاق آمن.
يمكن للأهداف ذات بادئات المزوّد إزالة الالتباس عن قنوات الإعلان غير المحسومة. على سبيل المثال، يختار to: "telegram:123" Telegram عندما تكون delivery.channel محذوفة أو last. وحدها البادئات التي يعلن عنها Plugin المحمّل تُعد محددات مزوّد. إذا كانت delivery.channel صريحة، فيجب أن تطابق البادئة تلك القناة؛ يتم رفض channel: "whatsapp" مع to: "telegram:123". تبقى بادئات الخدمة مثل imessage: وsms: صيغة أهداف مملوكة للقناة.
ملكية التسليم
تسليم دردشة Cron المعزول مشترك بين الوكيل والمشغّل:
- يمكن للوكيل الإرسال مباشرةً باستخدام أداة
messageعندما يكون مسار الدردشة متاحًا. - يقوم
announceبالتسليم الاحتياطي للرد النهائي فقط عندما لا يرسل الوكيل مباشرةً إلى الهدف المحسوم. - ينشر
webhookالحمولة المنتهية إلى عنوان URL. - يعطل
noneالتسليم الاحتياطي للمشغّل.
--announce هو التسليم الاحتياطي للمشغّل للرد النهائي. يعطل --no-deliver ذلك الاحتياط، لكنه لا يزيل أداة message الخاصة بالوكيل عندما يكون مسار الدردشة متاحًا.
تحتفظ التذكيرات المنشأة من دردشة نشطة بهدف تسليم الدردشة الحي للتسليم الاحتياطي بالإعلان. قد تكون مفاتيح الجلسات الداخلية بأحرف صغيرة؛ لا تستخدمها كمصدر حقيقة لمعرّفات المزوّد الحساسة لحالة الأحرف مثل معرّفات غرف Matrix.
تسليم الفشل
تُحسم إشعارات الفشل بهذا الترتيب:
delivery.failureDestinationفي الوظيفة.cron.failureDestinationالعام.- هدف الإعلان الأساسي للوظيفة (عند عدم تعيين وجهة فشل صريحة).
ملاحظة: تعامل عمليات تشغيل Cron المعزولة إخفاقات الوكيل على مستوى التشغيل كأخطاء وظيفة حتى عندما لا يتم إنتاج حمولة رد، لذلك تظل إخفاقات النموذج/المزوّد تزيد عدادات الأخطاء وتشغّل إشعارات الفشل.
الجدولة
وظائف لمرة واحدة
يجدول --at <datetime> تشغيلًا لمرة واحدة. تُعامل التواريخ والأوقات بلا إزاحة على أنها UTC ما لم تمرر أيضًا --tz <iana>، والذي يفسر وقت الساعة الجدارية في المنطقة الزمنية المعطاة.
الوظائف المتكررة
تستخدم الوظائف المتكررة تراجع إعادة محاولة أسيًا بعد الأخطاء المتتالية: 30s، 1m، 5m، 15m، 60m. يعود الجدول إلى الوضع الطبيعي بعد التشغيل الناجح التالي.
تُتبع عمليات التشغيل المتخطاة بشكل منفصل عن أخطاء التنفيذ. لا تؤثر في تراجع إعادة المحاولة، لكن يمكن لـ openclaw cron edit <job-id> --failure-alert-include-skipped إدراج تنبيهات الفشل في إشعارات عمليات التشغيل المتخطاة المتكررة.
بالنسبة إلى الوظائف المعزولة التي تستهدف مزود نموذج محليًا مهيئًا، يشغل Cron فحصًا تمهيديًا خفيفًا للمزوّد قبل بدء دور الوكيل. يتم فحص مزودي api: "ollama" عبر local loopback والشبكة الخاصة و.local عند /api/tags؛ ويتم فحص مزودي OpenAI المتوافقين المحليين مثل vLLM وSGLang وLM Studio عند /models. إذا تعذر الوصول إلى نقطة النهاية، يسجل التشغيل كـ skipped ويُعاد المحاولة في جدول لاحق؛ وتُخزن نقاط النهاية المعطلة المطابقة مؤقتًا لمدة 5 دقائق لتجنب أن تضغط وظائف كثيرة على الخادم المحلي نفسه.
ملاحظة: تعيش تعريفات وظائف Cron في jobs.json، بينما تعيش حالة وقت التشغيل المعلقة في jobs-state.json. إذا تم تعديل jobs.json خارجيًا، يعيد Gateway تحميل الجداول المتغيرة ويمسح الخانات المعلقة القديمة؛ ولا تمسح عمليات إعادة الكتابة الخاصة بالتنسيق فقط الخانة المعلقة.
عمليات التشغيل اليدوية
يعيد openclaw cron run بمجرد وضع التشغيل اليدوي في الصف. تتضمن الاستجابات الناجحة { ok: true, enqueued: true, runId }. استخدم openclaw cron runs --id <job-id> لمتابعة النتيجة النهائية.
النماذج
يختار cron add|edit --model <ref> نموذجًا مسموحًا به للوظيفة.
يُعد Cron --model أساسيًا للوظيفة، وليس تجاوزًا لـ /model في جلسة الدردشة. هذا يعني:
- تظل بدائل النماذج المهيأة مطبقة عندما يفشل نموذج الوظيفة المحدد.
- تستبدل حمولة كل وظيفة
fallbacksقائمة البدائل المهيأة عند وجودها. - تجعل قائمة بدائل كل وظيفة الفارغة (
fallbacks: []في حمولة/واجهة API الوظيفة) تشغيل Cron صارمًا. - عندما تحتوي وظيفة على
--modelلكن لا توجد قائمة بدائل مهيأة، يمرر OpenClaw تجاوزًا صريحًا فارغًا للبدائل حتى لا تتم إضافة النموذج الأساسي للوكيل كهدف إعادة محاولة مخفي.
أسبقية نموذج Cron المعزول
يحسم Cron المعزول النموذج النشط بهذا الترتيب:
- تجاوز ربط Gmail.
--modelلكل وظيفة.- تجاوز نموذج جلسة Cron المخزن (عندما يختار المستخدم واحدًا).
- اختيار الوكيل أو النموذج الافتراضي.
الوضع السريع
يتبع الوضع السريع في Cron المعزول اختيار النموذج الحي المحسوم. ينطبق إعداد النموذج params.fastMode افتراضيًا، لكن تجاوز الجلسة المخزن fastMode يظل مقدمًا على الإعداد.
إعادة محاولات تبديل النموذج الحي
إذا طرح تشغيل معزول LiveSessionModelSwitchError، يستمر Cron في حفظ المزوّد والنموذج اللذين تم التبديل إليهما (وتجاوز ملف تعريف المصادقة الذي تم التبديل إليه عند وجوده) للتشغيل النشط قبل إعادة المحاولة. حلقة إعادة المحاولة الخارجية محددة بمحاولتي تبديل بعد المحاولة الأولية، ثم تُجهض بدلًا من الدوران إلى الأبد.
مخرجات التشغيل والرفض
كبت الإقرارات القديمة
تكبت أدوار Cron المعزولة الردود القديمة التي تقتصر على الإقرار. إذا كانت النتيجة الأولى مجرد تحديث حالة مؤقت ولم يكن هناك تشغيل وكيل فرعي تابع مسؤول عن الإجابة النهائية، يعيد Cron مطالبة مرة واحدة للحصول على النتيجة الحقيقية قبل التسليم.
كبت الرمز الصامت
إذا أعاد تشغيل Cron معزول الرمز الصامت فقط (NO_REPLY أو no_reply)، يكبت Cron كلًا من التسليم الصادر المباشر ومسار الملخص الاحتياطي الموضوع في الصف، لذلك لا يُنشر شيء إلى الدردشة.
الرفض المنظم
تفضل عمليات Cron المعزولة بيانات وصفية منظمة لرفض التنفيذ من التشغيل المضمن، ثم ترجع إلى علامات الرفض المعروفة في المخرجات النهائية، مثل SYSTEM_RUN_DENIED وINVALID_REQUEST وعبارات رفض ربط الموافقة.
يعرض cron list وسجل التشغيل سبب الرفض بدلًا من الإبلاغ عن أمر محظور باعتباره ok.
الاحتفاظ
يُتحكم في الاحتفاظ والتقليم في الإعداد:
cron.sessionRetention(الافتراضي24h) يقلم جلسات تشغيل Cron المعزولة المكتملة.cron.runLog.maxBytesوcron.runLog.keepLinesيقلّمان~/.openclaw/cron/runs/<jobId>.jsonl.
ترحيل الوظائف الأقدم
تعديلات شائعة
حدّث إعدادات التسليم بدون تغيير الرسالة:
openclaw cron edit <job-id> --announce --channel telegram --to "123456789"
عطّل التسليم لوظيفة معزولة:
openclaw cron edit <job-id> --no-deliver
فعّل سياق تمهيد خفيفًا لوظيفة معزولة:
openclaw cron edit <job-id> --light-context
أعلن إلى قناة محددة:
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"
أعلن إلى موضوع منتدى Telegram:
openclaw cron edit <job-id> --announce --channel telegram --to "-1001234567890" --thread-id 42
أنشئ وظيفة معزولة بسياق تمهيد خفيف:
openclaw cron add \
--name "Lightweight morning brief" \
--cron "0 7 * * *" \
--session isolated \
--message "Summarize overnight updates." \
--light-context \
--no-deliver
ينطبق --light-context على وظائف دور الوكيل المعزولة فقط. بالنسبة إلى عمليات تشغيل Cron، يبقي الوضع الخفيف سياق التمهيد فارغًا بدلًا من حقن مجموعة تمهيد مساحة العمل الكاملة.
أوامر إدارة شائعة
التشغيل اليدوي والفحص:
openclaw cron list
openclaw cron list --agent ops
openclaw cron show <job-id>
openclaw cron run <job-id>
openclaw cron run <job-id> --due
openclaw cron runs --id <job-id> --limit 50
يعرض openclaw cron list كل الوظائف المطابقة افتراضيًا. مرر --agent <id> لعرض الوظائف التي يطابق معرّف الوكيل الفعال المطبع فيها فقط؛ وتُحسب الوظائف التي لا تحتوي على معرّف وكيل مخزن ضمن الوكيل الافتراضي المهيأ.
تتضمن إدخالات cron runs تشخيصات التسليم مع هدف Cron المقصود، والهدف المحسوم، وإرسالات أداة الرسائل، واستخدام الاحتياط، وحالة التسليم.
إعادة استهداف الوكيل والجلسة:
openclaw cron edit <job-id> --agent ops
openclaw cron edit <job-id> --clear-agent
openclaw cron edit <job-id> --session current
openclaw cron edit <job-id> --session "session:daily-brief"
يحذر openclaw cron add عندما يُحذف --agent في وظائف دور الوكيل ويرجع إلى الوكيل الافتراضي (main). مرر --agent <id> وقت الإنشاء لتثبيت وكيل محدد.
تعديلات التسليم:
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"
openclaw cron edit <job-id> --best-effort-deliver
openclaw cron edit <job-id> --no-best-effort-deliver
openclaw cron edit <job-id> --no-deliver