التوجيه متعدد الوكلاء
الهدف: عدة وكلاء معزولين (مساحة عمل منفصلة +agentDir + جلسات)، بالإضافة إلى عدة حسابات قنوات (مثل حسابي WhatsApp) ضمن Gateway واحد قيد التشغيل. يتم توجيه الرسائل الواردة إلى وكيل عبر الارتباطات.
ما هو «وكيل واحد»؟
الوكيل هو عقل مُحاط بنطاق كامل وله ما يلي خاصًا به:- مساحة عمل (ملفات، AGENTS.md/SOUL.md/USER.md، ملاحظات محلية، قواعد الشخصية).
- دليل الحالة (
agentDir) لملفات تعريف المصادقة، وسجل النماذج، وتهيئة خاصة بكل وكيل. - مخزن الجلسات (سجل الدردشة + حالة التوجيه) تحت
~/.openclaw/agents/<agentId>/sessions.
agentDir
عبر الوكلاء (لأنه يسبب تعارضات في المصادقة/الجلسات). إذا أردت مشاركة بيانات الاعتماد،
انسخ auth-profiles.json إلى agentDir الخاص بالوكيل الآخر.
تكون Skills لكل وكيل عبر مجلد skills/ الخاص بمساحة عمل كل وكيل، مع توفر Skills
المشتركة من ~/.openclaw/skills. راجع Skills: لكل وكيل مقابل المشتركة.
يمكن لـ Gateway استضافة وكيل واحد (افتراضيًا) أو عدة وكلاء جنبًا إلى جنب.
ملاحظة مساحة العمل: مساحة عمل كل وكيل هي cwd الافتراضي، وليست
sandbox صارمًا. تُحل المسارات النسبية داخل مساحة العمل، لكن المسارات المطلقة قد
تصل إلى مواقع أخرى على المضيف ما لم يتم تمكين sandboxing. راجع
Sandboxing.
المسارات (خريطة سريعة)
- التهيئة:
~/.openclaw/openclaw.json(أوOPENCLAW_CONFIG_PATH) - دليل الحالة:
~/.openclaw(أوOPENCLAW_STATE_DIR) - مساحة العمل:
~/.openclaw/workspace(أو~/.openclaw/workspace-<agentId>) - دليل الوكيل:
~/.openclaw/agents/<agentId>/agent(أوagents.list[].agentDir) - الجلسات:
~/.openclaw/agents/<agentId>/sessions
وضع الوكيل الواحد (الافتراضي)
إذا لم تفعل شيئًا، يعمل OpenClaw بوكيل واحد:agentIdيكون افتراضيًاmain.- تُفهرس الجلسات على شكل
agent:main:<mainKey>. - مساحة العمل تكون افتراضيًا
~/.openclaw/workspace(أو~/.openclaw/workspace-<profile>عند تعيينOPENCLAW_PROFILE). - الحالة تكون افتراضيًا
~/.openclaw/agents/main/agent.
مساعد الوكيل
استخدم معالج الوكيل لإضافة وكيل معزول جديد:bindings (أو دع المعالج يقوم بذلك) لتوجيه الرسائل الواردة.
تحقق باستخدام:
عدة وكلاء = عدة أشخاص، عدة شخصيات
مع تعدد الوكلاء، يصبح كلagentId شخصية معزولة بالكامل:
- أرقام/حسابات مختلفة (لكل قناة
accountId). - شخصيات مختلفة (ملفات مساحة العمل لكل وكيل مثل
AGENTS.mdوSOUL.md). - مصادقة + جلسات منفصلة (لا تداخل إلا إذا فُعِّل صراحة).
رقم WhatsApp واحد، عدة أشخاص (تقسيم الرسائل الخاصة)
يمكنك توجيه رسائل WhatsApp الخاصة المختلفة إلى وكلاء مختلفين مع البقاء على حساب WhatsApp واحد. طابِق على مُرسل E.164 (مثل+15551234567) باستخدام peer.kind: "direct". تظل الردود صادرة من نفس رقم WhatsApp (لا توجد هوية مُرسل منفصلة لكل وكيل).
تفصيل مهم: المحادثات المباشرة تُطوى إلى مفتاح الجلسة الرئيسي للوكيل، لذا يتطلب العزل الحقيقي وكيلًا واحدًا لكل شخص.
مثال:
- التحكم في الوصول للرسائل الخاصة هو عام لكل حساب WhatsApp (الاقتران/قائمة السماح)، وليس لكل وكيل.
- للمجموعات المشتركة، اربط المجموعة بوكيل واحد أو استخدم مجموعات البث.
قواعد التوجيه (كيف تختار الرسائل وكيلًا)
الارتباطات حتمية والأكثر تحديدًا يفوز:- مطابقة
peer(رسالة خاصة/مجموعة/معرّف قناة دقيق) - مطابقة
parentPeer(وراثة السلسلة) guildId + roles(توجيه حسب أدوار Discord)guildId(Discord)teamId(Slack)- مطابقة
accountIdلقناة - مطابقة على مستوى القناة (
accountId: "*") - الرجوع إلى الوكيل الافتراضي (
agents.list[].default، وإلا فأول إدخال في القائمة، الافتراضي:main)
peer + guildId)، فيجب تحقق جميع الحقول المحددة (دلالات AND).
عدة حسابات / أرقام هواتف
القنوات التي تدعم عدة حسابات (مثل WhatsApp) تستخدمaccountId لتعريف
كل تسجيل دخول. يمكن توجيه كل accountId إلى وكيل مختلف، بحيث يمكن لخادم واحد استضافة
عدة أرقام هواتف دون خلط الجلسات.
المفاهيم
agentId: «عقل» واحد (مساحة عمل، مصادقة لكل وكيل، مخزن جلسات لكل وكيل).accountId: مثيل حساب قناة واحد (مثل حساب WhatsApp"personal"مقابل"biz").binding: يوجّه الرسائل الواردة إلىagentIdحسب(channel, accountId, peer)وباختيار مُعرّفات الخادم/الفريق.- المحادثات المباشرة تُطوى إلى
agent:<agentId>:<mainKey>(الرئيسي لكل وكيل؛session.mainKey).
مثال: حسابا WhatsApp → وكيلان
~/.openclaw/openclaw.json (JSON5):
مثال: دردشة WhatsApp اليومية + عمل عميق على Telegram
قسّم حسب القناة: وجّه WhatsApp إلى وكيل سريع للاستخدام اليومي وTelegram إلى وكيل Opus.- إذا كان لديك عدة حسابات لقناة ما، أضف
accountIdإلى الارتباط (على سبيل المثال{ channel: "whatsapp", accountId: "personal" }). - لتوجيه رسالة خاصة/مجموعة واحدة إلى Opus مع إبقاء الباقي على chat، أضف ارتباط
match.peerلذلك النظير؛ تطابقات النظير تفوز دائمًا على قواعد القناة العامة.
مثال: القناة نفسها، نظير واحد إلى Opus
أبقِ WhatsApp على الوكيل السريع، لكن وجّه رسالة خاصة واحدة إلى Opus:وكيل عائلي مرتبط بمجموعة WhatsApp
اربط وكيلًا عائليًا مخصصًا بمجموعة WhatsApp واحدة، مع بوابة الذِكر وسياسة أدوات أكثر تقييدًا:- قوائم السماح/المنع للأدوات هي أدوات وليست Skills. إذا كانت Skill تحتاج لتشغيل
ملف ثنائي، فتأكد من السماح بـ
execوأن الملف الثنائي موجود داخل sandbox. - لبوابة أشد صرامة، عيّن
agents.list[].groupChat.mentionPatternsوأبقِ قوائم السماح للمجموعات مفعّلة للقناة.
Sandbox لكل وكيل وتهيئة الأدوات
بدءًا من الإصدار v2026.1.6، يمكن لكل وكيل امتلاك sandbox وقيود أدوات خاصة به:setupCommand تحت sandbox.docker ويعمل مرة واحدة عند إنشاء الحاوية.
يتم تجاهل تجاوزات sandbox.docker.* الخاصة بكل وكيل عندما يكون النطاق المحسوب هو "shared".
الفوائد:
- عزل أمني: تقييد الأدوات للوكلاء غير الموثوقين
- التحكم بالموارد: وضع بعض الوكلاء داخل sandbox مع إبقاء الآخرين على المضيف
- سياسات مرنة: أذونات مختلفة لكل وكيل
tools.elevated عام ويعتمد على المُرسل؛ ولا يمكن تهيئته لكل وكيل.
إذا احتجت حدودًا لكل وكيل، استخدم agents.list[].tools لمنع exec.
ولاستهداف المجموعات، استخدم agents.list[].groupChat.mentionPatterns بحيث تُطابِق @mentions الوكيل المقصود بدقة.
راجع Multi-Agent Sandbox & Tools لأمثلة تفصيلية.