Agent coordination

الوكلاء الفرعيون

الوكلاء الفرعيون هم عمليات تشغيل لوكلاء في الخلفية تُنشأ من عملية تشغيل وكيل موجودة. يعمل كل منهم في جلسته الخاصة (agent:<agentId>:subagent:<uuid>)، وعند الانتهاء، يعلن نتيجته مرة أخرى في قناة دردشة مقدم الطلب. تُتتبّع كل عملية تشغيل لوكيل فرعي بوصفها مهمة في الخلفية.

الأهداف:

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

أمر الشرطة المائلة

يفحص /subagents عمليات تشغيل الوكلاء الفرعيين في الجلسة الحالية:

text
/subagents list/subagents log <id|#> [limit] [tools]/subagents info <id|#>

يعرض /subagents info بيانات تعريف عملية التشغيل (الحالة، والطوابع الزمنية، ومعرّف الجلسة، ومسار النص، والتنظيف). يطبع /subagents log أحدث أدوار الدردشة لعملية تشغيل؛ أضف رمز tools لتضمين رسائل استدعاء الأدوات ونتائجها (تُحذف افتراضيًا). استخدم sessions_history للحصول على عرض استرجاع محدود ومفلتر من أجل السلامة من داخل دور وكيل، أو افحص مسار النص على القرص للحصول على النص الكامل الخام.

في واجهة التحكم، تحتوي الجلسات الأم التي لها عمليات تشغيل تابعة حديثة على صف قابل للتوسيع في الشريط الجانبي. تعرض الصفوف المتداخلة حالة الوكيل التابع ومدة تشغيله، ويؤدي تحديد أحدها إلى فتح دردشة ذلك الوكيل التابع مع الحفاظ على التسلسل الهرمي للأصل.

عناصر التحكم في ربط السلاسل

تعمل هذه الأوامر على القنوات ذات روابط السلاسل الدائمة. راجع القنوات الداعمة للسلاسل أدناه.

text
/focus <subagent-label|session-key|session-id|session-label>/unfocus/agents/session idle <duration|off>/session max-age <duration|off>

سلوك الإنشاء

تبدأ الوكلاء وكلاء فرعيين في الخلفية باستخدام أداة sessions_spawn. تعود حالات الإكمال بوصفها أحداثًا داخلية للجلسة الأم؛ ويقرر وكيل الأصل/مقدم الطلب ما إذا كان يلزم تحديث ظاهر للمستخدم.

إكمال غير حاجب قائم على الدفع
  • لا يحظر sessions_spawn التنفيذ؛ بل يعيد معرّف عملية تشغيل فورًا.
  • عند الإكمال، يرسل الوكيل الفرعي تقريره مرة أخرى إلى جلسة الأصل/مقدم الطلب.
  • ينبغي لأدوار الوكيل التي تحتاج إلى نتائج الوكلاء التابعين استدعاء sessions_yield بعد إنشاء العمل المطلوب. ينهي ذلك الدور الحالي ويسمح بوصول حدث الإكمال بوصفه الرسالة التالية الظاهرة للنموذج.
  • الإكمال قائم على الدفع. بعد الإنشاء، لا تستطلع /subagents list أو sessions_list أو sessions_history في حلقة لمجرد انتظار انتهائه؛ تحقّق من الحالة عند الطلب فقط أثناء تصحيح الأخطاء.
  • مخرجات الوكيل التابع هي تقرير/دليل ليولّفه وكيل مقدم الطلب. وليست نص تعليمات صادرًا عن المستخدم، ولا يمكنها تجاوز سياسة النظام أو المطور أو المستخدم.
  • عند الإكمال، يغلق OpenClaw بأفضل جهد علامات تبويب المتصفح/العمليات المتتبعة التي فتحتها جلسة ذلك الوكيل الفرعي قبل متابعة تدفق تنظيف الإعلان.
تسليم الإكمال
  • يسلّم OpenClaw حالات الإكمال مرة أخرى إلى جلسة مقدم الطلب عبر دور agent ذي مفتاح ثبات تكراري مستقر.
  • إذا كانت عملية تشغيل مقدم الطلب لا تزال نشطة، يحاول OpenClaw أولًا إيقاظ/توجيه تلك العملية بدلًا من بدء مسار رد مرئي ثانٍ.
  • إذا تعذّر إيقاظ مقدم طلب نشط، يعود OpenClaw إلى تسليم لوكيل مقدم الطلب بسياق الإكمال نفسه بدلًا من إسقاط الإعلان.
  • يُكمل التسليم الناجح إلى الأصل تسليم الوكيل الفرعي حتى عندما يقرر الأصل عدم الحاجة إلى تحديث مرئي للمستخدم.
  • لا تحصل الوكلاء الفرعيون الأصلية على أداة الرسائل. فهي تعيد نص مساعد عادي إلى وكيل الأصل/مقدم الطلب؛ وتظل الردود المرئية للبشر خاضعة لسياسة التسليم العادية لوكيل الأصل/مقدم الطلب.
  • إذا تعذّر استخدام التسليم المباشر، يعود التسليم إلى توجيه قائمة الانتظار، ثم إلى إعادة محاولة قصيرة للإعلان بتراجع أُسّي قبل التخلي النهائي.
  • يحتفظ التسليم بمسار مقدم الطلب المحسوم: تتقدم مسارات الإكمال المرتبطة بسلسلة أو المرتبطة بمحادثة عند توفرها. إذا كان مصدر الإكمال لا يوفر سوى قناة، يملأ OpenClaw الهدف/الحساب المفقود من المسار المحسوم لجلسة مقدم الطلب (lastChannel / lastTo / lastAccountId) بحيث يظل التسليم المباشر يعمل.
بيانات تعريف تسليم الإكمال

تسليم الإكمال إلى جلسة مقدم الطلب هو سياق داخلي مولّد في وقت التشغيل (وليس نصًا صادرًا عن المستخدم)، ويتضمن:

  • Result — أحدث نص رد assistant مرئي من الوكيل التابع. لا تُرفع مخرجات tool/toolResult إلى نتائج الوكيل التابع. لا تعيد عمليات التشغيل الفاشلة نهائيًا استخدام نص الرد الملتقط.
  • Statuscompleted; ready for parent review / failed / timed out / unknown.
  • إحصاءات مدمجة لوقت التشغيل/الرموز.
  • تعليمة مراجعة تطلب من وكيل مقدم الطلب التحقق من النتيجة قبل تقرير ما إذا كانت المهمة الأصلية قد اكتملت.
  • إرشادات متابعة تطلب من وكيل مقدم الطلب متابعة المهمة أو تسجيل متابعة عندما تترك نتيجة الوكيل التابع إجراءً إضافيًا.
  • تعليمة تحديث نهائي لمسار عدم وجود مزيد من الإجراءات، مكتوبة بصوت المساعد العادي من دون تمرير بيانات التعريف الداخلية الخام.
الأوضاع وبيئة تشغيل ACP
  • يتجاوز --model و--thinking الإعدادات الافتراضية لعملية التشغيل المحددة تلك.
  • استخدم info/log لفحص التفاصيل والمخرجات بعد الإكمال.
  • بالنسبة إلى الجلسات الدائمة المرتبطة بسلسلة، استخدم sessions_spawn مع thread: true وmode: "session".
  • إذا كانت قناة مقدم الطلب لا تدعم روابط السلاسل، فاستخدم mode: "run" بدلًا من إعادة محاولة تركيبة مرتبطة بسلسلة يستحيل تنفيذها.
  • بالنسبة إلى جلسات مسخّر ACP (Claude Code أو Gemini CLI أو OpenCode أو Codex ACP/acpx الصريح)، استخدم sessions_spawn مع runtime: "acp" عندما تعلن الأداة عن بيئة التشغيل تلك. راجع نموذج تسليم ACP عند تصحيح حالات الإكمال أو حلقات وكيل إلى وكيل. عند تمكين Plugin codex، ينبغي للتحكم في دردشة/سلسلة Codex تفضيل /codex ... على ACP ما لم يطلب المستخدم ACP/acpx صراحةً.
  • يخفي OpenClaw runtime: "acp" حتى يُمكّن ACP، ولا يكون مقدم الطلب معزولًا، ويُحمّل Plugin للواجهة الخلفية مثل acpx. يتوقع runtime: "acp" معرّف مسخّر ACP خارجيًا، أو إدخال agents.list[] مع runtime.type="acp"؛ استخدم بيئة تشغيل الوكيل الفرعي الافتراضية لوكلاء إعداد OpenClaw العاديين من agents_list.

أوضاع السياق

تبدأ الوكلاء الفرعيون الأصلية معزولة ما لم يطلب المستدعي صراحةً تفريع النص الحالي.

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

استخدم fork باعتدال. فهو مخصص للتفويض الحساس للسياق، وليس بديلًا عن كتابة مطالبة مهمة واضحة.

الأداة: sessions_spawn

تبدأ عملية تشغيل وكيل فرعي باستخدام deliver: false على مسار subagent العام، ثم تنفّذ خطوة إعلان وتنشر رد الإعلان في قناة دردشة مقدم الطلب.

يعتمد التوفر على سياسة الأدوات الفعلية للمستدعي. يتضمن ملف التعريف المضمّن coding الأداة sessions_spawn؛ بينما لا يتضمنها messaging وminimal. يسمح full بكل أداة. أضف tools.alsoAllow: ["sessions_spawn", "sessions_yield", "subagents"]، أو استخدم tools.profile: "coding"، للوكلاء ذوي ملف تعريف أضيق الذين ينبغي مع ذلك أن يفوضوا العمل. لا يزال بإمكان سياسات السماح/الرفض الخاصة بالقناة/المجموعة، والمزوّد، والعزل، وكل وكيل إزالة الأداة بعد مرحلة ملف التعريف. استخدم /tools من الجلسة نفسها لتأكيد قائمة الأدوات الفعلية.

الإعدادات الافتراضية:

  • النموذج: ترث الوكلاء الفرعيون الأصلية المستدعي ما لم تعيّن agents.defaults.subagents.model (أو agents.list[].subagents.model الخاص بكل وكيل). تستخدم عمليات إنشاء بيئة تشغيل ACP نموذج الوكيل الفرعي المضبوط نفسه عند وجوده؛ وإلا يحتفظ مسخّر ACP بإعداده الافتراضي الخاص. يظل sessions_spawn.model الصريح هو الغالب.
  • التفكير: ترث الوكلاء الفرعيون الأصلية المستدعي ما لم تعيّن agents.defaults.subagents.thinking (أو agents.list[].subagents.thinking الخاص بكل وكيل). تطبّق عمليات إنشاء بيئة تشغيل ACP أيضًا agents.defaults.models["provider/model"].params.thinking للنموذج المحدد. يظل sessions_spawn.thinking الصريح هو الغالب.
  • مهلة عملية التشغيل: يستخدم OpenClaw ‏agents.defaults.subagents.runTimeoutSeconds عند تعيينه؛ وإلا يعود إلى 0 (من دون مهلة). لا يقبل sessions_spawn تجاوزات مهلة خاصة بكل استدعاء.
  • تسليم المهمة: تتلقى الوكلاء الفرعيون الأصلية المهمة المفوضة في أول رسالة [Subagent Task] مرئية لها. تحمل مطالبة نظام الوكيل الفرعي قواعد وقت التشغيل وسياق التوجيه، لا نسخة مخفية مكررة من المهمة.

تتضمن عمليات إنشاء الوكلاء الفرعيين الأصلية المقبولة بيانات تعريف نموذج الوكيل التابع المحسومة في نتيجة الأداة: يحتوي resolvedModel على مرجع النموذج المطبق، ويحتوي resolvedProvider على بادئة المزوّد عندما يتضمن المرجع واحدة.

وضع مطالبة التفويض

يتحكم agents.defaults.subagents.delegationMode في إرشادات المطالبة فقط؛ ولا يغيّر سياسة الأدوات أو يفرض التفويض.

  • suggest (افتراضي): يحافظ على التوجيه القياسي في المطالبة لاستخدام الوكلاء الفرعيين في الأعمال الأكبر أو الأبطأ.
  • prefer: يطلب من الوكيل الرئيسي أن يظل مستجيبًا وأن يفوض أي عمل أكثر تعقيدًا من الرد المباشر عبر sessions_spawn.

التجاوز الخاص بكل وكيل: agents.list[].subagents.delegationMode.

json5
{  agents: {    defaults: {      subagents: {        delegationMode: "prefer",        maxConcurrent: 4,      },    },    list: [      {        id: "coordinator",        subagents: { delegationMode: "prefer" },      },    ],  },}

معلمات الأداة

taskstringrequired

وصف المهمة للوكيل الفرعي.

taskNamestring

مُعرّف ثابت اختياري لتحديد وكيل فرعي معيّن في مخرجات الحالة اللاحقة. يجب أن يطابق [a-z][a-z0-9_-]{0,63} ولا يمكن أن يكون هدفًا محجوزًا مثل last أو all.

labelstring

تسمية اختيارية سهلة القراءة.

agentIdstring

أنشئ العملية ضمن معرّف وكيل آخر مُهيّأ عندما يسمح بذلك subagents.allowAgents.

cwdstring

دليل عمل اختياري للمهمة من أجل تشغيل الوكيل الفرعي. تظل الوكلاء الفرعية الأصلية تحمّل ملفات التمهيد من مساحة عمل الوكيل المستهدف؛ ولا يغيّر cwd سوى المكان الذي تنفّذ فيه أدوات وقت التشغيل وأطر CLI العمل المفوّض.

runtime"subagent" | "acp"default: subagent

يُستخدم acp فقط لأطر ACP الخارجية (claude، وdroid، وgemini، وopencode، أو Codex ACP/acpx المطلوب صراحةً) ولإدخالات agents.list[] التي يكون فيها runtime.type هو acp.

resumeSessionIdstring

خاص بـ ACP فقط. يستأنف جلسة إطار ACP موجودة عندما يكون runtime: "acp"؛ ويُتجاهل عند إنشاء الوكلاء الفرعية الأصلية.

streamTo"parent"

خاص بـ ACP فقط. يبث مخرجات تشغيل ACP إلى الجلسة الأم عندما يكون runtime: "acp"؛ احذفه عند إنشاء الوكلاء الفرعية الأصلية.

modelstring

تجاوز نموذج الوكيل الفرعي. تُتخطى القيم غير الصالحة ويعمل الوكيل الفرعي باستخدام النموذج الافتراضي مع تحذير في نتيجة الأداة.

thinkingstring

تجاوز مستوى التفكير لتشغيل الوكيل الفرعي.

threadbooleandefault: false

عندما يكون true، يطلب ربط سلسلة المحادثة في القناة بجلسة الوكيل الفرعي هذه.

mode"run" | "session"default: run

إذا كان thread: true وحُذف mode، تصبح القيمة الافتراضية session. يتطلب mode: "session" وجود thread: true. إذا لم يكن ربط سلسلة المحادثة متاحًا لقناة مقدّم الطلب، فاستخدم mode: "run" بدلًا منه.

cleanup"delete" | "keep"default: keep

يؤرشف "delete" الجلسة فور الإعلان (مع الاحتفاظ بنسخة المحادثة عبر إعادة التسمية).

sandbox"inherit" | "require"default: inherit

يرفض require الإنشاء ما لم يكن وقت تشغيل الوكيل الفرعي المستهدف معزولًا.

context"isolated" | "fork"default: isolated

يفرّع fork نسخة المحادثة الحالية لمقدّم الطلب إلى جلسة الوكيل الفرعي. للوكلاء الفرعية الأصلية فقط. تكون القيمة الافتراضية لعمليات الإنشاء المرتبطة بسلسلة محادثة هي fork؛ ولعمليات الإنشاء غير المرتبطة بسلسلة محادثة هي isolated.

أسماء المهام والاستهداف

taskName هو مُعرّف موجّه للنموذج من أجل التنسيق، وليس مفتاح جلسة. استخدمه لأسماء الوكلاء الفرعية الثابتة مثل review_subagents، أو linux_validation، أو docs_update عندما قد يحتاج المنسّق إلى فحص ذلك الوكيل الفرعي لاحقًا.

يقبل حلّ الهدف التطابقات التامة مع taskName والبادئات غير الملتبسة. يقتصر نطاق المطابقة على نافذة الأهداف النشطة/الحديثة نفسها المستخدمة بواسطة أهداف /subagents المرقّمة، ولذلك لا يجعل وكيل فرعي مكتمل قديم المُعرّف المعاد استخدامه ملتبسًا. إذا تشارك وكيلان فرعيان نشطان أو حديثان taskName نفسه، يكون الهدف ملتبسًا؛ استخدم فهرس القائمة، أو مفتاح الجلسة، أو معرّف التشغيل بدلًا منه.

الهدفان المحجوزان last وall ليسا قيمتين صالحتين لـ taskName لأن لهما بالفعل دلالات تحكم.

الأداة: sessions_yield

تنهي دور النموذج الحالي وتنتظر وصول أحداث وقت التشغيل، ولا سيما أحداث اكتمال الوكلاء الفرعية، في الرسالة التالية. استخدمها بعد إنشاء أعمال الوكلاء الفرعية المطلوبة عندما يتعذر على مقدّم الطلب تقديم إجابة نهائية حتى وصول عمليات الاكتمال تلك.

sessions_yield هي آلية الانتظار الأساسية. لا تستبدلها بحلقات استقصاء عبر subagents، أو sessions_list، أو sessions_history، أو sleep في الصدفة، أو استقصاء العمليات لمجرد اكتشاف اكتمال الوكيل الفرعي.

لا تستخدم sessions_yield إلا عندما تتضمنها قائمة الأدوات الفعلية للجلسة. قد تعرض بعض ملفات تعريف الأدوات المصغّرة أو المخصصة sessions_spawn و subagents من دون عرض sessions_yield؛ وفي هذه الحالة، لا تنشئ حلقة استقصاء لمجرد انتظار الاكتمال.

عند وجود وكلاء فرعيين نشطين، يُدرج OpenClaw كتلة مطالبة موجزة مُنشأة في وقت التشغيل من Active Subagents ضمن الأدوار العادية كي يتمكن مقدّم الطلب من رؤية جلسات الوكلاء الفرعية الحالية، ومعرّفات التشغيل، والحالات، والتسميات، والمهام، والأسماء البديلة لـ taskName من دون استقصاء. تُقتبس حقول المهمة والتسمية في تلك الكتلة بوصفها بيانات لا تعليمات، لأنها قد تنشأ من معاملات إنشاء يقدّمها المستخدم/النموذج.

الأداة: subagents

تسرد عمليات تشغيل الوكلاء الفرعية المنشأة والمملوكة لجلسة مقدّم الطلب. يقتصر نطاقها على مقدّم الطلب الحالي؛ ولا يمكن للوكيل الفرعي رؤية سوى الوكلاء الفرعية الخاضعة لتحكمه.

استخدم subagents لمعرفة الحالة وتصحيح الأخطاء عند الطلب. واستخدم sessions_yield لانتظار أحداث الاكتمال.

الجلسات المرتبطة بسلسلة محادثة

عند تمكين روابط سلاسل المحادثات لإحدى القنوات، يمكن أن يظل الوكيل الفرعي مرتبطًا بسلسلة محادثة بحيث يستمر توجيه رسائل المستخدم اللاحقة في تلك السلسلة إلى جلسة الوكيل الفرعي نفسها.

القنوات الداعمة لسلاسل المحادثات

تدعم القناة جلسات الوكلاء الفرعية الدائمة المرتبطة بسلاسل المحادثات (sessions_spawn مع thread: true) عندما تسجّل محوّل ربط للمحادثات. القنوات المضمّنة التي تدعم ذلك: Discord، وiMessage، وMatrix، وTelegram. ينشئ Discord وMatrix افتراضيًا سلسلة محادثة فرعية؛ بينما يربط Telegram وiMessage افتراضيًا المحادثة الحالية. استخدم مفاتيح إعداد threadBindings الخاصة بكل قناة للتمكين، والمهل الزمنية، وspawnSessions.

التدفق السريع

  • الإنشاء

    sessions_spawn مع thread: true (واختياريًا mode: "session").

  • الربط

    ينشئ OpenClaw سلسلة محادثة أو يربطها بهدف تلك الجلسة في القناة النشطة.

  • توجيه الرسائل اللاحقة

    تُوجّه الردود والرسائل اللاحقة في سلسلة المحادثة تلك إلى الجلسة المرتبطة.

  • فحص المهل الزمنية

    استخدم /session idle لفحص/تحديث إلغاء التركيز التلقائي عند عدم النشاط، واستخدم /session max-age للتحكم في الحد الأقصى الصارم.

  • فصل الربط

    استخدم /unfocus لفصل الربط يدويًا.

  • عناصر التحكم اليدوية

    الأمر التأثير
    /focus <target> ربط سلسلة المحادثة الحالية (أو إنشاء واحدة) بهدف وكيل فرعي/جلسة
    /unfocus إزالة الربط لسلسلة المحادثة الحالية المرتبطة
    /agents سرد عمليات التشغيل النشطة وحالة الربط (binding:<id>، أو unbound، أو bindings unavailable)
    /session idle فحص/تحديث إلغاء التركيز التلقائي عند الخمول (لسلاسل المحادثات المرتبطة والمركّز عليها فقط)
    /session max-age فحص/تحديث الحد الأقصى الصارم (لسلاسل المحادثات المرتبطة والمركّز عليها فقط)

    مفاتيح الإعداد

    • القيمة الافتراضية العامة: session.threadBindings.enabled، وsession.threadBindings.idleHours، وsession.threadBindings.maxAgeHours.
    • مفاتيح تجاوز القناة والربط التلقائي عند الإنشاء خاصة بكل محوّل. راجع القنوات الداعمة لسلاسل المحادثات أعلاه.

    راجع مرجع الإعداد و أوامر الشرطة المائلة للاطلاع على تفاصيل المحوّلات الحالية.

    قائمة السماح

    agents.list[].subagents.allowAgentsstring[]

    قائمة معرّفات الوكلاء المُهيّأة التي يمكن استهدافها عبر agentId الصريح (يسمح ["*"] بأي هدف مُهيّأ). القيمة الافتراضية: وكيل مقدّم الطلب فقط. إذا عيّنت قائمة وما زلت تريد أن ينشئ مقدّم الطلب نفسه باستخدام agentId، فأدرج معرّف مقدّم الطلب في القائمة.

    agents.defaults.subagents.allowAgentsstring[]

    قائمة السماح الافتراضية لأهداف الوكلاء المُهيّأة، وتُستخدم عندما لا يعيّن وكيل مقدّم الطلب subagents.allowAgents الخاص به.

    agents.defaults.subagents.requireAgentIdbooleandefault: false

    حظر استدعاءات sessions_spawn التي تحذف agentId (ما يفرض اختيار ملف تعريف صريحًا). التجاوز الخاص بكل وكيل: agents.list[].subagents.requireAgentId.

    agents.defaults.subagents.announceTimeoutMsnumberdefault: 120000

    مهلة كل استدعاء لمحاولات تسليم إعلان agent عبر Gateway. القيم أعداد صحيحة موجبة بالمللي ثانية، وتُقيّد بالحد الأقصى الآمن للمؤقت على المنصة. قد تجعل عمليات إعادة المحاولة العابرة إجمالي انتظار الإعلان أطول من مهلة واحدة مُهيّأة.

    إذا كانت جلسة مقدّم الطلب معزولة، يرفض sessions_spawn الأهداف التي ستعمل من دون عزل.

    الاكتشاف

    استخدم agents_list لمعرفة معرّفات الوكلاء المسموح بها حاليًا لـ sessions_spawn. تتضمن الاستجابة النموذج الفعلي لكل وكيل مدرج والبيانات الوصفية المضمّنة لوقت التشغيل كي يتمكن المستدعون من التمييز بين OpenClaw، وخادم تطبيق Codex، وأوقات التشغيل الأصلية المُهيّأة الأخرى.

    يجب أن تشير إدخالات allowAgents إلى معرّفات وكلاء مُهيّأة في agents.list[]. يعني ["*"] أي وكيل هدف مُهيّأ بالإضافة إلى مقدّم الطلب. إذا حُذف إعداد وكيل لكن بقي معرّفه في allowAgents، يرفض sessions_spawn ذلك المعرّف ويحذفه agents_list. شغّل openclaw doctor --fix لتنظيف إدخالات قائمة السماح القديمة، أو أضف إدخال agents.list[] مصغّرًا عندما ينبغي أن يظل الهدف قابلًا للإنشاء مع وراثة القيم الافتراضية.

    الأرشفة التلقائية

    • تُؤرشف جلسات الوكلاء الفرعية تلقائيًا بعد agents.defaults.subagents.archiveAfterMinutes (القيمة الافتراضية 60).
    • تستخدم الأرشفة sessions.delete وتعيد تسمية نسخة المحادثة إلى *.deleted.<timestamp> (في المجلد نفسه).
    • يؤرشف cleanup: "delete" الجلسة فور الإعلان (مع الاحتفاظ بنسخة المحادثة عبر إعادة التسمية).
    • تُنفّذ الأرشفة التلقائية على أساس بذل أفضل جهد؛ وتُفقد المؤقتات المعلّقة إذا أُعيد تشغيل Gateway.
    • لا تؤدي مهل التشغيل المُهيّأة إلى الأرشفة التلقائية؛ فهي توقف التشغيل فقط. وتظل الجلسة موجودة حتى الأرشفة التلقائية.
    • تنطبق الأرشفة التلقائية بالتساوي على جلسات العمق 1 والعمق 2.
    • تنظيف المتصفح منفصل عن تنظيف الأرشيف: تُغلق علامات تبويب المتصفح وعملياته المتعقبة على أساس بذل أفضل جهد عند انتهاء التشغيل، حتى إذا تم الاحتفاظ بنسخة المحادثة/سجل الجلسة.

    الوكلاء الفرعية المتداخلة

    لا يمكن للوكلاء الفرعية افتراضيًا إنشاء وكلائها الفرعية الخاصة (maxSpawnDepth: 1). عيّن maxSpawnDepth: 2 لتمكين مستوى واحد من التداخل — نمط المنسّق: الرئيسي ← وكيل فرعي منسّق ← وكلاء فرعيون منفّذون.

    json5
    {  agents: {    defaults: {      subagents: {        maxSpawnDepth: 2, // السماح للوكلاء الفرعية بإنشاء وكلاء فرعيين (القيمة الافتراضية: 1، النطاق 1-5)        maxChildrenPerAgent: 5, // الحد الأقصى للوكلاء الفرعية النشطين لكل جلسة وكيل (القيمة الافتراضية: 5، النطاق 1-20)        maxConcurrent: 8, // الحد الأقصى العام لمسار التزامن (القيمة الافتراضية: 8)        runTimeoutSeconds: 900, // المهلة الافتراضية لـ sessions_spawn (0 = بلا مهلة)        announceTimeoutMs: 120000, // مهلة إعلان Gateway لكل استدعاء      },    },  },}

    مستويات العمق

    العمق بنية مفتاح الجلسة الدور هل يمكنه إنشاء وكلاء؟
    0 agent:<id>:main الوكيل الرئيسي دائمًا
    1 agent:<id>:subagent:<uuid> وكيل فرعي (منسّق عند السماح بالعمق 2) فقط إذا كان maxSpawnDepth >= 2
    2 agent:<id>:subagent:<uuid>:subagent:<uuid> وكيل فرعي متداخل (عامل طرفي) أبدًا

    سلسلة الإعلان

    تتدفق النتائج عائدةً صعودًا عبر السلسلة:

    1. ينتهي عامل العمق 2 ← يعلن إلى أصله (منسّق العمق 1).
    2. يتلقى منسّق العمق 1 الإعلان، ويدمج النتائج، وينتهي ← يعلن إلى الوكيل الرئيسي.
    3. يتلقى الوكيل الرئيسي الإعلان ويوصله إلى المستخدم.

    لا يرى كل مستوى سوى إعلانات أبنائه المباشرين.

    سياسة الأدوات حسب العمق

    • يُكتب الدور ونطاق التحكم في البيانات الوصفية للجلسة عند الإنشاء. يمنع ذلك مفاتيح الجلسات المسطحة أو المستعادة من استعادة صلاحيات المنسّق عن طريق الخطأ.
    • العمق 1 (منسّق، عندما يكون maxSpawnDepth >= 2): يحصل على sessions_spawn وsubagents وsessions_list وsessions_history ليتمكن من إنشاء الأبناء وفحص حالتهم. تظل أدوات الجلسة/النظام الأخرى محظورة.
    • العمق 1 (طرفي، عندما يكون maxSpawnDepth == 1): لا توجد أدوات جلسة (السلوك الافتراضي الحالي).
    • العمق 2 (عامل طرفي): لا توجد أدوات جلسة — يُحظر sessions_spawn دائمًا عند العمق 2. ولا يمكنه إنشاء أبناء إضافيين.

    حد الإنشاء لكل وكيل

    يمكن لكل جلسة وكيل (عند أي عمق) أن تضم في الوقت نفسه ما لا يزيد عن maxChildrenPerAgent من الأبناء النشطين (القيمة الافتراضية 5). يمنع ذلك التفرّع الجامح من منسّق واحد.

    الإيقاف المتسلسل

    يؤدي إيقاف منسّق من العمق 1 تلقائيًا إلى إيقاف جميع أبنائه من العمق 2:

    • يوقف /stop في المحادثة الرئيسية جميع وكلاء العمق 1، ويمتد الإيقاف إلى أبنائهم من العمق 2.

    المصادقة

    تُحدَّد مصادقة الوكيل الفرعي بواسطة معرّف الوكيل، لا بواسطة نوع الجلسة:

    • مفتاح جلسة الوكيل الفرعي هو agent:<agentId>:subagent:<uuid>.
    • يُحمَّل مخزن المصادقة من agentDir لذلك الوكيل.
    • تُدمج ملفات تعريف مصادقة الوكيل الرئيسي باعتبارها خيارًا احتياطيًا؛ وتتغلب ملفات تعريف الوكيل على ملفات تعريف الوكيل الرئيسي عند التعارض.

    الدمج إضافي، لذا تظل ملفات تعريف الوكيل الرئيسي متاحة دائمًا كخيارات احتياطية. لا تتوفر بعد مصادقة معزولة بالكامل لكل وكيل.

    الإعلان

    ترسل الوكلاء الفرعية تقاريرها عبر خطوة إعلان:

    • تعمل خطوة الإعلان داخل جلسة الوكيل الفرعي (لا داخل جلسة الطالب).
    • إذا رد الوكيل الفرعي بالنص المطابق تمامًا ANNOUNCE_SKIP، فلن يُنشر شيء.
    • إذا كان أحدث نص للمساعد هو رمز الصمت المطابق تمامًا NO_REPLY / no_reply، يُمنع إخراج الإعلان حتى إذا وُجد تقدم مرئي سابق.

    يعتمد التسليم على عمق الطالب:

    • تستخدم جلسات الطالب من المستوى الأعلى استدعاء متابعة agent مع التسليم الخارجي (deliver=true).
    • تتلقى جلسات الوكيل الفرعي الطالب المتداخلة حقن متابعة داخليًا (deliver=false) ليتمكن المنسّق من دمج نتائج الأبناء داخل الجلسة.
    • إذا اختفت جلسة وكيل فرعي طالب متداخلة، يعود OpenClaw إلى طالب تلك الجلسة عند توفره.

    بالنسبة إلى جلسات الطالب من المستوى الأعلى، يحل التسليم المباشر في وضع الإكمال أولًا أي مسار محادثة/سلسلة مرتبط وأي تجاوز للخطاف، ثم يملأ حقول القناة والهدف المفقودة من المسار المخزّن لجلسة الطالب. يحافظ ذلك على وصول الإكمالات إلى المحادثة/الموضوع الصحيح حتى عندما لا يحدد مصدر الإكمال سوى القناة.

    يقتصر تجميع إكمالات الأبناء على تشغيل الطالب الحالي عند إنشاء نتائج الإكمال المتداخلة، ما يمنع تسرب مخرجات الأبناء القديمة من عمليات تشغيل سابقة إلى الإعلان الحالي. وتحافظ ردود الإعلان على توجيه السلسلة/الموضوع عند توفره في محوّلات القنوات.

    سياق الإعلان

    يُطبَّع سياق الإعلان إلى كتلة حدث داخلية مستقرة:

    الحقل المصدر
    المصدر subagent أو cron
    معرّفات الجلسة مفتاح/معرّف جلسة الوكيل الابن
    النوع نوع الإعلان + تسمية المهمة
    الحالة مشتقة من نتيجة وقت التشغيل (ok، أو error، أو timeout، أو unknown) — وليست مستنتجة من نص النموذج
    محتوى النتيجة أحدث نص مرئي للمساعد من الوكيل الابن
    المتابعة تعليمة توضّح متى يجب الرد ومتى يجب التزام الصمت

    تُبلِّغ عمليات التشغيل النهائية الفاشلة عن حالة الفشل من دون إعادة تشغيل نص الرد الملتقط. ولا تُرقّى مخرجات الأداة/نتيجة الأداة إلى نص نتيجة الوكيل الابن.

    سطر الإحصاءات

    تتضمن حمولات الإعلان سطر إحصاءات في النهاية (حتى عند تغليفها):

    • وقت التشغيل (مثل runtime 5m12s).
    • استخدام الرموز المميزة (الإدخال/الإخراج/الإجمالي).
    • التكلفة المقدّرة عند إعداد تسعير النموذج (models.providers.*.models[].cost).
    • sessionKey وsessionId ومسار النص المنسوخ، لكي يتمكن الوكيل الرئيسي من جلب السجل عبر sessions_history أو فحص الملف على القرص.

    البيانات الوصفية الداخلية مخصّصة للتنسيق فقط؛ وينبغي إعادة صياغة الردود الموجّهة إلى المستخدم بصوت المساعد المعتاد.

    لماذا يُفضَّل sessions_history

    يمثل sessions_history مسار التنسيق الأكثر أمانًا لقراءة النص المنسوخ لوكيل ابن من داخل دور وكيل:

    • يحجب النصوص الشبيهة ببيانات الاعتماد/الرموز المميزة حتى عند تعطيل حجب السجلات العام.
    • يقتطع كتل النص الطويلة (4000 حرف لكل كتلة)، ويحذف توقيعات التفكير وحمولات إعادة تشغيل الاستدلال وبيانات الصور المضمنة.
    • يفرض حدًا أقصى للاستجابة قدره 80 كيلوبايت؛ وتُستبدل الصفوف المتجاوزة للحجم بـ [sessions_history omitted: message too large].
    • استخدم nextOffset عند وجوده للتنقل إلى الخلف عبر نوافذ النص المنسوخ الأقدم.
    • لا يزيل sessions_history وسوم الاستدلال أو بنية <relevant-memories> أو XML لاستدعاءات الأدوات من نص الرسالة — بل يعيد كتل محتوى منظّمة وقريبة من بنية النص المنسوخ الخام، مع الحجب وتقييد الحجم فقط. يطبّق /subagents log منقّي النص الأشد (يزيل وسوم الاستدلال وبنية الذاكرة وXML لاستدعاءات الأدوات) لأنه يعرض أسطر محادثة نصية بسيطة بدلًا من الكتل المنظّمة.
    • يُعد فحص النص المنسوخ الخام على القرص الخيار الاحتياطي عندما تحتاج إلى النص المنسوخ الكامل المطابق بايتًا ببايت.

    سياسة الأدوات

    تستخدم الوكلاء الفرعية أولًا مسار ملف التعريف وسياسة الأدوات نفسه المستخدم للوكيل الأصل أو المستهدف. بعد ذلك، يطبّق OpenClaw طبقة تقييد الوكيل الفرعي.

    تفقد الوكلاء الفرعية دائمًا gateway وagents_list وsession_status و cron بصرف النظر عن العمق أو الدور (أدوات على مستوى النظام/تفاعلية، أو أدوات ينبغي أن ينسّقها الوكيل الرئيسي). كما تفقد الوكلاء الفرعية الطرفية (سلوك العمق 1 الافتراضي، ودائمًا عند العمق 2) subagents و sessions_list وsessions_history وsessions_spawn. ولا تحصل الوكلاء الفرعية أبدًا على أداة message — فهي معطّلة عند الإنشاء، وليست مصفّاة بواسطة قائمة الحظر هذه — ويظل sessions_send محظورًا لكي تتواصل الوكلاء الفرعية فقط عبر سلسلة الإعلان.

    يظل sessions_history هنا أيضًا عرض استدعاء محدودًا ومنقّى — وليس تفريغًا خامًا للنص المنسوخ.

    عندما يكون maxSpawnDepth >= 2، تتلقى الوكلاء الفرعية المنسّقة من العمق 1 أيضًا sessions_spawn وsubagents وsessions_list و sessions_history لتتمكن من إدارة أبنائها.

    التجاوز عبر الإعدادات

    json5
    {  agents: {    defaults: {      subagents: {        maxConcurrent: 1,      },    },  },  tools: {    subagents: {      tools: {        // الحظر له الأولوية        deny: ["gateway", "cron"],        // إذا ضُبط السماح، يصبح قائمة سماح حصرية (ويظل الحظر ذا أولوية)        // allow: ["read", "exec", "process"]      },    },  },}

    يمثل tools.subagents.tools.allow مرشح سماح حصريًا نهائيًا. ويمكنه تضييق مجموعة الأدوات التي حُلّت بالفعل، لكنه لا يستطيع إعادة إضافة أداة أزالها tools.profile. على سبيل المثال، يتضمن tools.profile: "coding" web_search/web_fetch، لكن ليس أداة browser. للسماح للوكلاء الفرعية ذات ملف تعريف البرمجة باستخدام أتمتة المتصفح، أضف المتصفح في مرحلة ملف التعريف:

    json5
    {  tools: {    profile: "coding",    alsoAllow: ["browser"],  },}

    استخدم agents.list[].tools.alsoAllow: ["browser"] الخاص بكل وكيل عندما ينبغي أن يحصل وكيل واحد فقط على أتمتة المتصفح.

    التزامن

    تستخدم الوكلاء الفرعية مسار طابور مخصصًا داخل العملية:

    • اسم المسار: subagent
    • التزامن: agents.defaults.subagents.maxConcurrent (القيمة الافتراضية 8)

    الحيوية والاسترداد

    لا يتعامل OpenClaw مع غياب endedAt على أنه دليل دائم على أن الوكيل الفرعي ما زال نشطًا. تتوقف عمليات التشغيل غير المنتهية الأقدم من نافذة تقادم التشغيل (ساعتان، أو مهلة التشغيل المضبوطة مع فترة سماح قصيرة، أيهما أطول) عن الاحتساب كنشطة/معلّقة في /subagents list وملخصات الحالة وبوابة إكمال المتحدرين وفحوصات التزامن لكل جلسة.

    بعد إعادة تشغيل Gateway، تُحذف عمليات التشغيل المستعادة القديمة غير المنتهية ما لم تكن جلسة الوكيل الابن معلّمة بـ abortedLastRun: true. تظل عمليات التشغيل التي أُجهضت بسبب إعادة التشغيل مسجّلة لتدفق استرداد الوكيل الفرعي اليتيم: تُنهى عمليات التشغيل القديمة من دون استئناف، بينما تتلقى جلسات الأبناء الحديثة رسالة استئناف اصطناعية قبل مسح علامة الإجهاض.

    يكون الاسترداد التلقائي بعد إعادة التشغيل محدودًا لكل جلسة وكيل ابن. إذا قُبل الوكيل الفرعي الابن نفسه لاسترداد الوكيل اليتيم بشكل متكرر ضمن نافذة التعطل السريع المتكرر، يحفظ OpenClaw علامة توقف للاسترداد في تلك الجلسة ويتوقف عن استئنافها تلقائيًا في عمليات إعادة التشغيل اللاحقة. شغّل openclaw tasks maintenance --apply لتسوية سجل المهمة، أو openclaw doctor --fix لمسح علامات الاسترداد القديمة المجهضة في الجلسات ذات علامة التوقف.

    الإيقاف

    • يؤدي إرسال /stop في محادثة مقدِّم الطلب إلى إلغاء جلسة مقدِّم الطلب وإيقاف أي عمليات تشغيل نشطة لوكلاء فرعيين أُنشئت منها، مع امتداد الإيقاف إلى العناصر الفرعية المتداخلة.

    القيود

    • إعلان الوكيل الفرعي هو بذلٌ لأفضل جهد. إذا أُعيد تشغيل Gateway، فستُفقد أعمال "الإعلان للجهة الأصلية" المعلّقة.
    • لا يزال الوكلاء الفرعيون يتشاركون موارد عملية Gateway نفسها؛ تعامل مع maxConcurrent بوصفه صمام أمان.
    • يكون sessions_spawn دائمًا غير حاجب: إذ يعيد { status: "accepted", runId, childSessionKey } فورًا.
    • لا يحقن سياق الوكيل الفرعي سوى AGENTS.md وTOOLS.md (من دون SOUL.md أو IDENTITY.md أو USER.md أو MEMORY.md أو HEARTBEAT.md أو BOOTSTRAP.md). وتتبع الوكلاء الفرعية الأصلية في Codex الحد نفسه: يبقى TOOLS.md ضمن تعليمات سلسلة Codex الموروثة، بينما تُحقن ملفات الشخصية والهوية والمستخدم الخاصة بالوكيل الأب فقط بوصفها تعليمات تعاون محددة بنطاق الدور، كي لا تستنسخها العناصر الفرعية.
    • الحد الأقصى لعمق التداخل هو 5 (نطاق maxSpawnDepth: ‏1-5). يُوصى بالعمق 2 لمعظم حالات الاستخدام.
    • يضع maxChildrenPerAgent حدًا أقصى للعناصر الفرعية النشطة لكل جلسة (القيمة الافتراضية 5، والنطاق 1-20).

    ذو صلة

    Was this useful?
    On this page

    On this page