Skip to main content

مهام مستقلة على مؤقّت

النبض هو الطريقة التي يُنجز بها وولفيش الأمور من تلقاء نفسه — إحاطة صباحية الساعة 8، مسح لصندوق البريد كل 15 دقيقة، تذكير لمرة واحدة بعد يومين. المهام تقع في brain/brainstem/heartbeat.md، وتُحلّلها وحدة brainstem وتُشغّلها عبر خط الأنابيب الكامل للوكيل عند حلول موعدها. نادراً ما تُحرّر هذا الملف يدوياً. فقط اطلب من وولفيش — “كل صباح، لخّص رسائلي غير المقروءة” أو “بعد يومين ذكّرني بتجديد نطاقي” — وسيُنشئ المهام ويُعدّلها ويحذفها نيابةً عنك عبر قدرة automations (‏automation_list، automation_create، automation_edit، automation_delete، automation_check، automation_run). التحرير اليدوي يعمل أيضاً، والصيغة موضّحة أدناه.

كيف يعمل

كل عنوان ## في heartbeat.md يُحدّد مهمة. العنوان نفسه هو الجدول (مثلاً ## Daily (08:00)) — لا يوجد اسم منفصل للمهمة. النص أسفله هو التعليمة، وتُرسَل إلى الوكيل كرسالة مستخدم عند حلول الموعد.

صيغ الجدولة

جميع الأوقات تستخدم المنطقة الزمنية المحلية لنظامك بتنسيق 24 ساعة. لا يوجد تحويل إلى UTC — Daily (09:00) تعني الساعة 9 صباحاً أينما كنت.

لمرة واحدة (تعمل مرة ثم تحذف نفسها)

بعد أن تعمل المهمة لمرة واحدة، تُزيل مدخلها من الملف.
In (15m) / In (2h) / In (2d) ليست صيغة عنوان — لا يُحلّل brainstem الصيغة In (...) من heartbeat.md إطلاقاً، فكتابتها كعنوان ## لا تفعل شيئاً. إنها اختصار تستخدمه عند الطلب من وولفيش (“بعد يومين، ذكّرني بتجديد نطاقي”): تُحوِّل قدرة automations التأخيرَ النسبي إلى Once (...) مطلقة عند الإنشاء — إذ لا يمكن لعدٍّ تنازلي نسبي أن يبقى بعد إعادة التشغيل — لذا ما يُكتَب فعلياً في الملف دائماً هو Once (...). لكتابة مهمة لمرة واحدة يدوياً، استخدم Once (...).

متكررة (تعمل حتى تحذفها)

الجداول خارج النطاق تُرفَض فوراً — Every (0m) أو Daily (99:99) أو Once (...) في الماضي لن تُقبَل بصمت ثم لا تعمل أبداً. إذا حرّرت عنواناً غير صالح يدوياً، يظهر مُعلَّماً عندما يسرد وولفيش مهامك.

تنفيذ المهام

مهام النبض تعمل عبر خط الأنابيب الكامل للوكيل — نفس الدماغ، نفس القدرات، نفس الذاكرة. ما يختلف عن المحادثة العادية:
  • موافقة تلقائية: استدعاءات الأدوات تتجاوز تأكيد amygdala (بدون نوافذ موافقة).
  • محادثة مغلقة: كل تشغيل يُنشئ محادثته الخاصة، مرئية في السجل.
  • بدون بث: تُولَّد الاستجابات في الخلفية بدون مقاطعة الواجهة.
لأن مهام النبض توافق تلقائياً على كل استدعاء أداة، كن حذراً فيما تجدوله. مهمة تقول “احذف الملفات القديمة” ستُنفَّذ بدون سؤال. اكتب تعليمات دفاعية — “اعرض الملفات الأقدم من 30 يوماً وأخبرني بما ستحذفه” أفضل من “احذف الملفات الأقدم من 30 يوماً”. راجع ماذا تجدول لطبقة قرارات الأمان الكاملة.

أسطر علامات الإعدادات

يمكن أن يبدأ متن المهمة بأسطر علامات إعدادات — هي إعدادات لا نص تعليمات، وتُحذَف قبل وصول التعليمات إلى الوكيل:
نادراً ما تكتب هذه الأسطر بيدك: صفحة الأتمتة تضعها من محرّرها، ويضعها وولفيش بنفسه حين تطلب منه جدولة شيء (تقبل automation_create / automation_edit معاملَي mode وicon اختياريَّين؛ وأدوات automation_* تحفظ أسطر العلامات تلقائياً عند التحرير).

حتى ثلاث معاً، في طابور — لا تُسقَط أبداً

المهام تعمل حتى ثلاثاً في وقت واحد، جنباً إلى جنب. إذا انطلقت مهمة والخانات الثلاث كلها مشغولة، فإنها تنتظر في الطابور وتعمل لحظة تخلو خانة بدل أن تُتجاهَل. الطابور مُدمَج لكل مهمة — المهمة التي تنطلق وهي أصلاً تعمل أو تنتظر تُطوى في التشغيل المعلّق بدل أن تكدّس نسخاً — فلا يمكن لمهمة بطيئة أن تُراكم تأخّراً من نبضاتها. لست بحاجة لتباعد المهام لتفادي التصادم.

المهام الفائتة تُستدرَك

إذا كان وولفيش مغلقاً عند موعد مهمة، فإنها تعمل مرة واحدة عند التشغيل التالي — مُجمَّعةً: مهمة متكررة فاتتها عدة مواعيد أثناء التوقف تعمل استدراكاً واحداً، لا واحداً لكل موعد فائت. تُعاد فقط الفائتات خلال آخر 24 ساعة؛ وما هو أقدم يُسقَط. المهمة لمرة واحدة التي فات موعدها تعمل إن كانت ضمن تلك النافذة ثم تحذف نفسها؛ وإن كانت أقدم تُزال بهدوء دون تشغيل.

صفحة الأتمتة

البيت الداخلي للنبض هو صفحة الأتمتة، وقد أُعيد بناؤها في الإصدار 1.0.224 حول البطاقات: كل مهمة بطاقة تلبس رمزاً تعبيرياً خاصاً بها — 📧 لجولة البريد، 📰 لموجز الأخبار — وجدولها بلغة واضحة وتعليمتها وحالة آخر تشغيل على مرأى. والتحرير يفتح حواراً محترماً:
  • رقاقات جدولة للأشكال الشائعة — يومي، وأيام الأسبوع، وأسبوعي، وشهري، وفتري، وكل ساعة، وعند الإقلاع، ولمرة واحدة، وcron الكامل — فتختار شكلاً بدل أن تتذكر صيغة.
  • مُدخَل وقت حقيقي بدل حقل نصي لتضبط HH:MM صحيحة.
  • معاينة «التشغيل القادم» حيّةً تريك متى ستنطلق المهمة بالضبط، محسوبةً من الجدول الذي تبنيه، قبل أن تحفظ.
  • حفظ تلقائي بانضباط محرّر الإجراءات نفسه — لا زرّ حفظ، فقط «تم».
وتبقى نظرة الماركداون الخام على heartbeat.md على بُعد نقرة للتحرير اليدوي، وكل ما يلي عن صيغة الملف يظل صحيحاً — فالصفحة والملف نظرتان على المهام نفسها. ورمز البطاقة يُختَم على كل محادثة تنشئها تشغيلات المهمة، فتُعرَف تشغيلات الأتمتة بلمحة في شريط المحادثات والسجل.

مشاهدة التشغيلات حيّةً

المهمة المنطلقة لا تستولي على التطبيق أبداً. بل تطفو بطاقةً حيّةً عائمة مثبَّتةً أعلى الشاشة أيّاً كانت — أيقونة نابضة، واسم المهمة ووضعها (فردي/سير عمل)، وبثّ حيّ لما تفعله الآن — بينما يبقى سائر وولفيش صالحاً للاستعمال كله. حين تتزامن التشغيلات، تصطفّ حتى ثلاث بطاقات جنباً إلى جنب، وتحتها صفّ يَعُدّ ويسمّي ما ينتظر في الطابور خلف الخانات الممتلئة. انقر بطاقةً تتّسع لوحةَ نشاطٍ كاملة — وقت البدء، وعدّاد الوقت المنقضي، وتعليمة المهمة، وسجلّ خطوة بخطوة؛ واضغط Escape أو انقر خارجها تنطوِ راجعةً إلى البطاقة. والتشغيل ماضٍ في الحالين، وإعادة فتح اللوحة في منتصفه لا تُضيع سطراً من السجل. وعلى الصفحة نفسها، المهمة الجارية أو المنتظرة تقول ذلك على بطاقتها، ويستريح زرّ «تشغيل الآن» حتى ينقضي التشغيل — فضغطه ثانيةً لن يزيد على الانطواء في التشغيل المعلّق. والتشغيل الذي يفشل يرفع إشعاراً يسمّي ما انكسر. والهاتف يرى الشيء نفسه: فالتشغيل الجاري يصله بطاقةً في رصّةٍ فوق أيّ شاشةٍ هو فيها، والطلب وراءها على بعد نقرة. تظهر لحظةَ يتّصل الهاتف — حتى لتشغيلٍ بدأ وهو نائم — وتذهب حين يذهب الاتصال.

تشغيلٌ تفتحه وتشاهده

قبل الإصدار 1.0.236 كان التشغيل الذاتيّ يجري حيث لا تبلغه. لا تظهر محادثته في القائمة إلّا بعد انقضائه، وإن أُغلق التطبيق في منتصف الطريق ضاع كلُّ ما كتبه. أمّا اليوم فكلُّ تشغيلٍ ذاتيّ — الأتمتة والإجراءات سواءً بسواء — ينشئ محادثته قبل أن يبدأ:
  • يأخذ مكانه في شريط المحادثات فوراً، بالنبضة نفسها التي يأخذها دور تيليجرام.
  • تستطيع أن تفتحه وتشاهد الردّ يصل حيّاً، تماماً كمحادثةٍ كتبتها أنت.
  • وزرّ الإيقاف يعمل عليه — الزرّ نفسه، والحركة نفسها، لتشغيلٍ لم يكتبه أحد.
  • ويُكتَب التقدّم على القرص في أثناء العمل، فالإغلاق أو الانهيار في منتصف الطريق يخلّف نصّاً حقيقيّاً لا طلباً عارياً.
  • وفتحُ التطبيق من جديد في أثناء التشغيل يجد الأتمتة ماضيةً في عملها بدل أن يجدها ساكنة.

أختام التعديل

كل بطاقة تُظهر متى عُدِّلت مهمتها آخر مرة — والختم يأتي من المحرّك الذي يراقب heartbeat.md نفسه، لا من الصفحة. كل يدٍ تُحسَب: محرّر البطاقات، ونظرة الماركداون الخام، وأدوات automation_* الخاصة بوولفيش، ومحرّر خارجي، بل تعديل جرى والتطبيق مغلق. وتشغيل المهمة أو إيقافها لا يعيد ختمها عمداً — لا يُحسَب إلا تغيير حقيقي في الجدول أو الإعدادات أو التعليمة. والصفحة تُنعش نفسها حيّةً حين يتغيّر الملف من تحتها: اطلب من وولفيش وسط محادثة إضافة أتمتة وراقب البطاقة تظهر.

إدارة المهام

عبر وولفيش (الأفضل)

تحدّث إليه فقط:
  • “ما المهام التلقائية التي لديّ؟” ← يسردها مع جدولها وحالة آخر تشغيل
  • “كل يوم عمل الساعة 7:45، أعطني إحاطة صباحية” ← يُنشئ مهمة متكررة
  • “بعد يومين، ذكّرني بتجديد نطاقي” ← يُنشئ مهمة لمرة واحدة تحذف نفسها
  • “غيّر الإحاطة الصباحية إلى الساعة 8” / “احذف مراقب طلبات السحب” ← يُعدّل أو يحذف
  • “شغّل فحص بريدي الآن” ← يُشغّل مهمة فوراً لتجربتها
التغييرات تُطبَّق مباشرةً — يُعيد brainstem تحميل الجدول بمجرد تغيّر الملف، دون إعادة تشغيل.

يدوياً

حرّر heartbeat.md مباشرةً. لتعطيل مهمة دون حذفها، علّقها بتعليقات HTML:
يُراقب brainstem ملف heartbeat.md ويُعيد التحميل عند الحفظ، فتسري التعديلات اليدوية دون إعادة تشغيل. الأمثلة المُعلَّقة في الملف هي قائمة جاهزة — أزل التعليق عن أحدها لتفعيله.

أمثلة عملية

إحاطة الصباح

فرز البريد الإلكتروني

مراقبة طلبات السحب

تذكير لمرة واحدة

تنطلق هذه مرة واحدة الساعة 11:30 مساءً يوم 31 ديسمبر، ثم تُزيل نفسها من الملف.

ضغط الذاكرة

ضغط الذاكرة (تجميع hippocampus) هو عملية مجدولة منفصلة تُعدّ في الإعدادات > المعرفة > الضغط، وليس في heartbeat.md. يُشغّله brainstem وفق جدوله اليومي/الأسبوعي الخاص، ولن يظهر عندما يسرد وولفيش مهامك.
الضغط يُجمِّع الأحداث اليومية في ملخصات أسبوعية ويُرقّي المعلومات المهمة إلى ملفات المعرفة. يعمل بشكل مستقل عن مهام النبض.

مثال كامل للملف

انظر أيضاً