مسار الرسالة
كل رسالة تتبع هذا المسار بالضبط عبر النظام. لا استثناءات، ولا اختصارات.خطوة بخطوة
1. استلام الرسالة
يرسل المستخدم رسالة من واجهة الدردشة. تصل في العملية الرئيسية عبر IPC وتدخل حلقة الوكيل.2. تجميع السياق (prefrontal)
هذه هي أهم خطوة — وهي رشيقة بالتصميم. موجّه النظام لمحادثة جديدة يبلغ نحو 5,000 رمز (كان نحو 44,000). تجمّع القشرة الأمامية الجبهية فقط ما يلي:<identity>— ملفاsoul.md+user.md، مملوكان للمستخدم<device>— حقائق ثابتة عن الجهاز (~40 رمزًا)<prefrontal>— عقد التشغيلagents.core.md(~1.4 ألف رمز) بالإضافة إلى خلاصة التفضيلات المتعلَّمة المحدودة منbasalganglia(~500 رمز)<capabilities>— فهرس بسطر واحد لكل قدرة: الاسم، ووصف لا يتجاوز 90 حرفًا، وعدد الأدوات، وعلامة[loaded]على القدرات القابلة للاستدعاء الآن. ~800 رمز؛ وبعد 60 قدرة مثبَّتة تنهار البقية غير المحمَّلة إلى عدادات مجمَّعة، فتكون التكلفة O(1) مهما ثبَّتَّ من قدرات<memory_map>— خريطة تغطية لما هو موجود ويمكن استرجاعه: أعداد السجلات لكل مصدر (مقرَّبة إلى فئات خشنة)، ونطاقات التواريخ، ومواضيع ملفات المعرفة، وأعداد المحادثات والمُخرَجات. إنها خريطة، وليست محتوى أبدًا، وتُخزَّن مؤقتًا لكل يوم تقويمي حتى لا تُزعزع مخزن موجّهات المزوّد المؤقت<runtime>— منحَّف؛ عدادات الحلقة الحية تركب ذيلًا متقلبًا في نهاية مصفوفة الرسائل الصادرة تمامًا، وليس في الموجّه- تراكبات شرطية: الدور (قائد سير العمل/وكيله — يتضمّن تراكب القائد كتالوج
<workflow_models>بالنماذج القابلة للإطلاق)، تنسيق القناة (WhatsApp)، وتراكب الصدق<local_model>للنماذج المشغَّلة محليًا
memory_search للذاكرة وtool_search للأدوات.
تُكتب لقطة تصحيح لكل موجّه مُجمَّع في brain/prefrontal/.debug/ (بحد أقصى 50 ملفًا مع تدوير).
يمكنك فحص ما استلمه نموذج اللغة بالضبط بقراءة ملفات لقطات التصحيح. هكذا تصحّح أسئلة “لماذا فعل وولفيش ذلك؟“.
3. اختيار الأدوات (cerebellum)
تُشحَن مخططات JSON الكاملة فقط لـالمجموعة الأساسية — نحو 29–47 أداة بحسب ما هو متصل: tool-discovery وintrospect وfilesystem وshell وask وutilities (send_file) وweb-search وsecrets وsystem وworkflow (متاحة للقائد وحده)، بالإضافة إلى أدوات الإرسال telegram/whatsapp/electron ما دامت تلك القنوات متصلة. هذا نحو 4 آلاف رمز من المخططات، ليصبح الطلب الجديد ≈9.4 ألف رمز إجمالًا (مقابل ~94 ألفًا قبل إعادة التصميم الرشيقة).
كل شيء آخر — github وgoogle وnotion والمتصفح واستخدام الحاسوب وأدوات الوسائط والمستندات وجميع خوادم MCP — قابل للاكتشاف:
tool_search(query)— بحث بالمصطلحات في أسماء القدرات وأوصافها ومحفّزاتها وأسماء أدواتها؛ يُحمَّل أفضل تطابق تلقائيًا وتصبح أدواته قابلة للاستدعاء في الدور نفسه.tool_activate(capability)— تحميل صريح بالاسم.- استدعاء أداة معروفة لكن غير محمَّلة مباشرةً يعمل ببساطة (تفعيل تلقائي). أما الأداة المجهولة تمامًا فتُرجع خطأً حتميًا يشير إلى
tool_search.
pinnedCapabilities في config.json قدرات إضافية محمَّلة دائمًا (بالتحرير اليدوي؛ لا واجهة له).
موجّه النظام ومخططات الأدوات يُثبَّتان عند بداية الدور ويُعاد استخدامهما عبر تكرارات الحلقة — ولا يُعاد بناؤهما إلا حين تتغير مجموعة أدوات هذه المحادثة فعلًا (تفعيل tool_search في منتصف الدور، أو إنشاء مهارة أو تحريرها، أو تغيّر في سطح MCP). في أسوأ الحالات، الأساس زائد أثقل 10 تفعيلات ≈41.5 ألف رمز — أي أقل من نصف الحد الأدنى القديم.
4. استدعاء نموذج اللغة (thalamus)
يذهب السياق المُجمَّع إلىthalamus.stream()، الذي:
- يتحقق من
net.isOnline()لكشف وضع عدم الاتصال فوريًا - يستدعي نموذج الدماغ — الذي اخترته صراحةً من مبدّل النماذج في حقل إدخال المحادثة (وفي وضع سير العمل، يحلّ لكل وكيل النموذج الذي اختاره له القائد)
- عند خطأ عابر، يُعيد محاولة دماغ السحابة نفسه وفق جدول تراجع؛ لا يوجد تدرّج تلقائي إلى مزوّد آخر
- يُرجع مولّدًا غير متزامن موحدًا من نوع
StreamChunk
5. تدفق الرد (broca)
يستلمbroca قطع التدفق ويمررها إلى المُعرِّض (renderer) عبر IPC للعرض في الوقت الفعلي في واجهة الدردشة.
6. تحليل الرد (wernicke)
يحللwernicke الرد المتدفق، ويوحّد بين تنسيقات المزودين:
- DeepSeek: كائنات
function_callمتوافقة مع OpenAI - Anthropic: كتل محتوى
tool_use - OpenAI: كائنات
function_call - Ollama: JSON مهيكَل في الاستجابة
ToolCall: { name, args, id }.
7. حلقة تنفيذ الأدوات (إن وُجدت استدعاءات أدوات)
إذا وجدwernicke استدعاءات أدوات، تبدأ الحلقة. لا يوجد سقف رقمي للتكرارات — يقرأ النموذج موضعه في الحلقة من عدادات وقت التشغيل الحية ويتولى بنفسه قرار الإنهاء:
- amygdala.classify() — يتحقق من استدعاء الأداة مقابل أنماط الخطر المُحمَّلة من ملفات SKILL.md. ثلاث نتائج:
safe(المتابعة)،confirm(إظهار مربع حوار موافقة)،block(الرفض). - motor.execute() — ينشئ ملف
TASK-{id}.md، ويسجل الخطوة، ويستدعي الإضافة مع منطق إعادة المحاولة (3 مرات بتأجيل 2ث/6ث/18ث). - cerebellum.executeTool() — يوجّه الاستدعاء إلى إضافة القدرة الصحيحة.
- تعود النتائج إلى نموذج اللغة للتكرار التالي.
دورة حياة السياق
كيف يُبقي الملخص المتجدد المُخزَّن والذيل الحرفي وشبكة الأمان داخل الدور المحادثات الطويلة مستمرةً دون فقدان المعلومات.
8. الذاكرة (hippocampus + basalganglia)
بعد اكتمال الرد:- يضيف
hippocampusملخصًا للدور موسومًا بمصدره (## HH:MM [heartbeat] — …) إلى ملف حلقة اليوم (brain/hippocampus/episodes/YYYY-MM-DD.md) - يسجل
basalgangliaالنتيجة (نجاح/فشل/رفض) في ملف ملاحظات اليوم - يفحص مُلخِّصٌ يعمل بأسلوب أطلِق-وانسَ المحادثةَ المحفوظة: عندما تتجاوز المنطقة غير الملخَّصة نحو 120 ألف حرف، يطوي كل ما قبل حدّ الدور في ملخص واحد مُخزَّن (≤6 آلاف حرف)، مع إبقاء آخر 8 رسائل حرفيًا. استدعاء تلخيص واحد لكل ~120 ألف حرف من النمو، إلى الأبد — والرسائل الأصلية لا تُعدَّل ولا تُحذَف أبدًا.