عن المشروع
## ما هي postbag
أداة postbag هي جسر صغير يسمح لجلسات وكلاء البرمجة بالذكاء الاصطناعي التي تعمل على نفس الجهاز بكتابة رسائل لبعضها البعض. قد تكون الجلسات من نفس المورد أو من موردين مختلفين — جلسة Claude Code وجلسة Codex، أو جلستان من Claude Code، أو جلستان من Codex. يتم تسليم كل رسالة من خلال آلية التنبيه ("الباب") الخاصة بالمورد المستلم، وتُضاف إلى سجل مشترك واحد، وتُحتسب ضمن ميزانية رسائل يحددها الإنسان.
تشير وثيقة README إلى استخدامات نموذجية: جعل أحد الوكلاء يراجع التغييرات (diff) التي أجراها الآخر، أو تقسيم مهمة بين وكيلين والاتفاق على الواجهة عبر الرسائل، أو الحصول على رأي ثانٍ دون لصق السياق يدويًا. وتصف الوثيقة تقسيم العمل بأن "النصوص تنتقل عبر postbag، والكود ينتقل عبر git".
## كيف تعمل
- يقوم الأمر `join` بتسجيل "باب" الجلسة في السجل تحت اسم معين. بالنسبة لـ Claude Code، يكون هذا هو مقبس المراسلة والرمز الخاص بالجلسة؛ وبالنسبة لـ Codex، يكون هو معرف الخيط (thread id).
- يقوم الأمر `send` بالطرق على الباب المسجل (المقبس أو `codex queue`)، ثم يضيف الرسالة تحت قفل ملف، بحيث تحصل الرسائل المتزامنة على أرقام مميزة وتتشارك ميزانية واحدة.
- يبدأ الأمر `open` التبادل التالي من طرفية عادية، خارج أي جلسة. يتم ترقيم الرسائل داخل التبادل، وتتم مشاركة الميزانية بين الجميع في الحقيبة. وبدون `--limit` يحتوي التبادل على 12 رسالة.
- يقوم الأمر `read` بطباعة الأسماء الموجودة حاليًا في الحقيبة، والتبادل المفتوح، والسجلات.
- السجل الموجود في `~/.postbag/ledger.jsonl` هو الحالة الوحيدة. لا يوجد daemon، أو polling، أو hooks، أو خادم أو ملف تكوين. يؤدي تعيين نفس `POSTBAG_LEDGER` في كلتا الجلستين والطرفية إلى إنشاء حقيبة منفصلة.
يستيقظ المستلم برسالة مرقمة، والعدد المتبقي، ومحتوى الرسالة، والأمر الوحيد الذي يرد عليها (أمر `send` مع الرد عبر stdin). تشير الرسالة الأخيرة في التبادل إلى عدم الرد، ويرفض الإرسال التالي ويخبر الوكيل بالتوقف وسؤال الإنسان.
## المتطلبات
Python 3.10 أو أحدث، المكتبة القياسية فقط؛ يمكن تثبيتها عبر `pipx install postbag`. تحتاج جلسة Claude Code إلى تصدير مقبس المراسلة الخاص بالجلسة عبر `CLAUDE_CODE_MESSAGING_SOCKET` و `CLAUDE_CODE_MESSAGING_TOKEN`. تحتاج جلسة Codex إلى أمر `queue` الذي تم تقديمه في Codex 0.149، وتصدير `CODEX_SESSION_ID` ووجود `codex queue --help` يعمل؛ ويمكن لـ `POSTBAG_CODEX` الإشارة إلى ملف ثنائي غير قياسي. لا تحتاج جلستا Claude إلى ملف ثنائي لـ Codex، ولا تحتاج جلستا Codex إلى مقبس Claude.
## التحقق ودعم المنصات
تذكر وثيقة README التحقق المباشر على macOS: الإصدار 1.0.2 مع Claude Code 2.1.263 و Codex 0.153.4 من تطبيق ChatGPT لسطح المكتب، والإصدار 1.1.0 مع جلستين حقيقيتين من Claude Code 2.1.263، بما في ذلك تبادل ثنائيها ورفض الميزانية المستنفدة. يجتاز Linux اختبارات CI ولكن التسليم المباشر موصوف بأنه غير متحقق منه هناك، بينما Windows غير مدعوم.
## القيود وملاحظات الأمان
- يحتوي السجل على كل رمز جلسة Claude بالإضافة إلى الرسائل. تحافظ عمليات الكتابة على الملف بصلاحية `0600` ومجلدات الحالة الجديدة بصلاحية `0700`؛ أما المجلد المخصص الموجود مسبقًا فيُترك كما هو. يخفي الأمر `read` حقول الباب، بينما لا يفعل `cat` ذلك، لذا يجب إبقاء الملف الخام بعيدًا عن git والسجلات ولقطات الشاشة.
- تصبح الرسالة دور مستخدم في جلسة المستلم، لذا يجب الوثوق بكلتا الجلستين في المهمة. لا ترسل postbag أي شيء خارج الجهاز، ولكن جلسات المورد ترسل الرسالة إلى خدمات النماذج الخاصة بها مثل أي مطالبة (prompt).
- الاسم هو عنوان وليس مصادقة. يرفض `open` التشغيل داخل جلسة. تقرأ هذه الفحوصات متغيرات جلسة الموردين — وهي حاجز ضد خلط الأدوار، وليست حماية ضد عملية أخرى تعمل بنفس المستخدم.
- لوحظ تسليم غير مراقب إلى Claude مع أذونات التجاوز في الإصدارات المختبرة؛ قد تحتفظ الأوضاع الأخرى بالرسالة للموافقة. يحتاج Codex إلى إذن لكتابة السجل والاتصال بمقبس Claude.
- "تم التسليم" تعني تم التقديم عبر الباب، وليس القراءة. يؤدي انتهاء المهلة أو الانهيار بين التقديم والتسجيل إلى ترك الرسالة في حالة شك، ولا توجد إشعارات استلام أو محاولات إعادة إرسال.
## النطاق والتوافق
تكوين جلستين هو الإعداد المدعوم. يوصف استخدام ثلاث جلسات أو أكثر بأنه تجريبي؛ يذكر `read` ذلك وتدرج كل رسالة حينها الأسماء المسجلة. السجلات المكتوبة بواسطة 1.0 تُقرأ دون إعادة كتابة، مع قراءة أقران الموردين القدامى كـ `@claude` و `@codex`. خلط جلسة 1.0 مع جلسة 1.1 غير مدعوم، لأن `send` في 1.0 يقبل فقط `claude` أو `codex` المجردة وبالتالي لا يمكنه تشغيل أمر الرد الموجود في رسالة 1.1؛ يجب ترقية كلتا الجلستين وطلبهما بـ `join` مرة أخرى. بعد إعادة التشغيل، يجب على الجلسة تنفيذ `join` مرة أخرى تحت الاسم الذي كانت تحمله، ويصل أمر الرد إلى من يحمل الاسم عند التشغيل.
المستودع مرخص بموجب MIT ويتضمن وثيقة مفاهيم في شكل `CONCEPT.md` وسجل تغييرات وإرشادات المساهمة ووثيقة بحثية تسرد أدوات أخرى في هذا المجال.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.