وكلاء متعددون يتواصلون عبر صناديق بريد ملفية
من subagent إلى teammate: لمرة واحدة ← دائم؛ مجهول ← له اسم؛ بلا تواصل ← صندوق بريد ملفي.
ما الفرق بين Subagent و Teammate؟
subagent في S04 بسيط ومباشر: أطلق ← نفّذ ← أعد الملخص ← أُنهي. لمرة واحدة، بلا اسم، لا تواصل ثنائي بين الأب والابن.
teammate في s09 وكيل مستقل له اسم، يمكن إعادة استدعائه، يستطيع استقبال الرسائل وإرسالها:
subagent (s04): spawn -> execute -> return -> destroyed
teammate (s09): spawn -> work -> idle -> work -> ... -> shutdown
الاثنان لهما استخدامات مختلفة:
- subagent مناسب لـ «تنفيذ استكشاف محدد» (مثل مراجعة PR).
- teammate مناسب لـ «الاضطلاع بدور مستمر» (مثل مراجع دائم يُستدعى عند كل commit جديد).
صندوق البريد ملف JSONL
كيف يتواصل أعضاء الفريق؟ يستخدم s09 أبسط آلية: ملف JSONL بنمط append-only.
.team/ config.json # 团队花名册 inbox/ alice.jsonl # 给 alice 的信都 append 到这里 bob.jsonl lead.jsonl
الإرسال: open("alice.jsonl", "a").write(msg)؛ القراءة: قراءة الملف بأكمله وتحليل JSONL ثم truncate للتفريغ (دلالات drain).
لماذا ملفات لا queue في الذاكرة؟ الملفات دائمة بطبيعتها. سواء أُعيد تشغيل الوكيل، أو انهارت العملية، أو حتى أُعيد تشغيل الجهاز — الرسائل باقية. إضافة إلى ذلك يمكن قراءتها وgrep فيها، مما يجعل تجربة التصحيح ممتازة.
شاهد رحلة رسالة من lead إلى alice
المكوّن التالي يتيح لك إرسال رسالة إلى alice ومشاهدة ما يجري على القرص خطوة بخطوة.
5 أنواع رسائل
s09 يُعرّف 5 أنواع رسائل (VALID_MSG_TYPES)، لكن ينفّذ الأولين فقط، والثلاثة الباقية تُكتمل في درس بروتوكولات s10:
message— رسالة نصية عادية.broadcast— إرسال لجميع زملاء الفريق ما عدا المُرسِل.shutdown_request/shutdown_response— طلب/استجابة إيقاف تشغيل منظم (s10).plan_approval_response— موافقة على خطة (s10).
لماذا الإعلان دون التنفيذ؟ لأن s09 يريد جعل «توسيع البروتوكول» نمطاً مفتوحاً — نوع الرسالة enum، وإضافة نوع جديد يتطلب فقط إدخالاً في القاموس ومعالج في روتر _exec.