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 (...).

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

عدة مرات في اليوم أو الأسبوع أو الشهر

أتمتة واحدة بعنوان واحد — اكتب الأوقات أو الأيام مفصولة بفواصل: يمكن أن تكون الأيام والأوقات قوائم معاً — يعمل كل يوم مذكور في كل وقت مذكور، فـ Weekly (Monday, Friday 09:00, 17:00) تعني أربع مرات في الأسبوع. لا يلزم أن تتشارك الأوقات الدقيقة نفسها (Daily (08:00, 12:30, 18:00) تعمل). ولأي جدولة لا تغطيها القوائم، تقبل Cron (…) عدة تعبيرات مفصولة بـ ;. في صفحة الأتمتة، تبني الأزرار أعلى حقل الجدولة هذه الصيغ لك: اختر مرة / مرتين / 3 مرات / 4 مرات / 5 مرات ثم كل يوم / أسبوع / شهر، فتتوزع مرات التشغيل بالتساوي على الفترة بدءاً من الآن.
الجداول خارج النطاق تُرفَض فوراً — Every (0m) أو Daily (99:99) أو Once (...) في الماضي لن تُقبَل بصمت ثم لا تعمل أبداً. إذا حرّرت عنواناً غير صالح يدوياً، يظهر مُعلَّماً عندما يسرد وولفيش مهامك.

تنفيذ المهام

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

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

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

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

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

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

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

صفحة الأتمتة

البيت الداخلي للنبض هو تبويب الأتمتة من صفحة المكتبة. فمنذ الإصدار 1.0.286 صارت الأتمتة والمشاريع والإجراءات وجهةً واحدة اسمها المكتبة بثلاثة تبويبات، بدل ثلاثة صفوفٍ في الشريط الجانبيّ تفتح ثلاث شبكاتٍ متشابهة — زرُّ الرجوع يتصدّر، والتبويبات بجانبه، والشبكة تملأ الباقي. ولم يتغيّر شيءٌ على البطاقات، والتبويب الذي تركته هو الذي تعود إليه بعد جولةٍ في المحادثة. والهاتف صنع الحركة نفسها في إصداره 1.0.56. وكلّ مهمة بطاقة تلبس رمزاً تعبيرياً خاصاً بها — 📧 لجولة البريد، 📰 لموجز الأخبار — وجدولها بلغة واضحة وتعليمتها وحالة آخر تشغيل على مرأى. وتتشارك شريحتان الصفَّ الأعلى من البطاقة، مدفوعتين إلى حافّتيها:
  • متى تعمل المرّة القادمة، عدًّا تنازليًّا — التشغيل القادم بعد 3 ساعات (الإصدار 1.0.281). وفي الدقيقة الأخيرة تعدّ بالثانية، وحين تمضي اللحظة تتدحرج البطاقة إلى الموعد التالي بنفسها بدل أن تجلس على وقتٍ مضى. والأتمتة المطفأة تلبس الشريحة رماديّةً بدل أن تعد بتشغيلٍ لن يأتي. والجدول ذو القائمة يعرض تشغيله القادم لا أوّله — فأتمتةٌ تنطلق عند 08:00 و14:00 و20:00 تقرأ 14:00 حين تنظر وقت الغداء.
  • القاعدة التي تعمل بها (الإصدار 1.0.292) — Daily (09:00)، أو Weekly (Mon 09:00)، أو سطر cron خام — تلبس رمزَ فترتها: شمساً لليوميّ، وحقيبةً لأيّام العمل، وتقويماً للأسبوعيّ والشهريّ، وساعةَ إيقافٍ للساعيّ، وصاروخاً لما ينطلق عند الإقلاع، وقوسين زاويّين لـcron الخام. وcron الطويل ينزل إلى سطره بدل أن ينضغط.
وتحتهما سطرٌ أحاديّ المسافة صغير لا يحمل إلّا ما كان له دائماً: لحظةَ التشغيل القادم بالساعة والدقيقة، والمشروعَ الذي تنتمي إليه المهمة، ومتى حرّرتها آخر مرّة. والتحرير يفتح لوحةً كاملة الارتفاع تنزلق من الحافّة (الإصدار 1.0.281) — السطح نفسه الذي تستعمله أوراق السجلّات والملفات والمحادثات، فتتمرّر الاستمارة بينما يثبت العنوان وشريط «تم»:
  • رقاقات جدولة للأشكال الشائعة — يومي، وأيام الأسبوع، وأسبوعي، وشهري، وفتري، وكل ساعة، وعند الإقلاع، ولمرة واحدة، وcron الكامل — فتختار شكلاً بدل أن تتذكر صيغة.
  • مُدخَل وقت حقيقي بدل حقل نصي لتضبط HH:MM صحيحة.
  • معاينة «التشغيل القادم» حيّةً تريك متى ستنطلق المهمة بالضبط، محسوبةً من الجدول الذي تبنيه، قبل أن تحفظ.
  • حفظ تلقائي بانضباط محرّر الإجراءات نفسه — لا زرّ حفظ، فقط «تم».
  • والتعليمة تقع مباشرةً تحت الاسم والمشروع منذ الإصدار 1.0.283، والملفات والمجلّدات تحتها، وهي محرِّرٌ حقيقيّ في مكانه لا معاينةٌ تنقرها. والزرّ بجانبها يفتح الورقة الموسَّعة كاملة الارتفاع نفسها التي يستعملها عارضا الملفات وPDF (الإصدار 1.0.283)، بزرّ إغلاقٍ وباستجابةٍ لـEscape — ولم تعد نقرةٌ شاردة على الخلفية تُغلق المحرّر في منتصف المسوَّدة.
  • والمحرّر يعاين الشريحةَ التنازليّة نفسها التي ستلبسها البطاقة بعد الحفظ.
وتبقى نظرة الماركداون الخام على heartbeat.md على بُعد نقرة على سطح المكتب للتحرير اليدوي، وكل ما يلي عن صيغة الملف يظل صحيحاً — فالصفحة والملف نظرتان على المهام نفسها. (أمّا الهاتف فيعرض البطاقات وحدها منذ إصداره 1.0.56: فعلى الهاتف البطاقاتُ هي الجدول، وسطحٌ ثانٍ للمخزن نفسه موضعٌ ثانٍ للخطأ فيه.) ورمز البطاقة يُختَم على كل محادثة تنشئها تشغيلات المهمة، فتُعرَف تشغيلات الأتمتة بلمحة في قائمة المحادثات والسجل. وتستطيع أيضاً أن تلصق أي شيء في تعليمة أتمتة دون قلقٍ من قواعد الملف نفسه: فالمستند الملصوق الحامل عناوينَ ## خاصةً به أو فواصلَ --- أو علاماتِ تعليقات HTML كان يُبتَر بصمتٍ عند أولها، ومنذ الإصدار 1.0.246 صار المحرّر يُهرِّب تلك الأسطر لحظةَ الحفظ — تُعاد كتابتها بأقرب صورةٍ يقرؤها الملف نصاً خالصاً، مُثبَتةً على مُحلِّلات المحرّك نفسها، ومطابقةً بايتاً ببايت لما يكتبه محرّر الهاتف. أما أدوات automation_* الخاصة بالوكيل فتسلك الطريق الأخرى: ترفض مثل هذه التعليمة وتقول كيف تُعاد صياغتها.

المهمّة تختار مستوى تفكيرها

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

توجيه دورٍ أثناء الطيران

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

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

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

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

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

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

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

إدارة المهام

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

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

يدوياً

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

أمثلة عملية

إحاطة الصباح

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

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

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

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

ضغط الذاكرة

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

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

انظر أيضاً