الوكلاء الفرعيون هم تشغيلات وكلاء في الخلفية تُنشأ من تشغيل وكيل موجود. يعملون في جلساتهم الخاصة (Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
agent:<agentId>:subagent:<uuid>)،
وعند الانتهاء، يعلنون نتيجتهم إلى قناة دردشة الطالب.
يُتتبع كل تشغيل وكيل فرعي بصفته
مهمة خلفية.
الأهداف الأساسية:
- موازاة أعمال “البحث / المهمة الطويلة / الأداة البطيئة” دون حظر التشغيل الرئيسي.
- إبقاء الوكلاء الفرعيين معزولين افتراضيا (فصل الجلسات + عزل اختياري).
- إبقاء سطح الأدوات صعب الإساءة في الاستخدام: لا يحصل الوكلاء الفرعيون على أدوات الجلسة افتراضيا.
- دعم عمق تداخل قابل للتهيئة لأنماط المنسق.
ملاحظة تكلفة: لكل وكيل فرعي سياقه واستهلاكه من الرموز
افتراضيا. للمهام الثقيلة أو المتكررة، عيّن نموذجا أرخص للوكلاء الفرعيين
وأبق وكيلك الرئيسي على نموذج أعلى جودة. هيّئ ذلك عبر
agents.defaults.subagents.model أو التجاوزات لكل وكيل. عندما يحتاج فرع
حقا إلى النص الحالي للطالب، يمكن للوكيل طلب
context: "fork" عند ذلك الإنشاء فقط. جلسات الوكلاء الفرعيين المرتبطة بسلسلة
تكون افتراضيا على context: "fork" لأنها تفرّع المحادثة الحالية إلى
سلسلة متابعة.أمر الشرطة المائلة
استخدم/subagents لفحص تشغيلات الوكلاء الفرعيين أو التحكم بها في الجلسة
الحالية:
/steer <message> على المستوى الأعلى لتوجيه التشغيل النشط لجلسة الطالب الحالية. استخدم /subagents steer <id|#> <message> عندما يكون الهدف تشغيلا فرعيا.
يعرض /subagents info بيانات تعريف التشغيل (الحالة، الطوابع الزمنية، معرّف الجلسة،
مسار النص، التنظيف). استخدم sessions_history للحصول على عرض استدعاء محدود
ومرشح للسلامة؛ افحص مسار النص على القرص عندما تحتاج إلى النص الخام الكامل.
عناصر التحكم في ربط السلاسل
تعمل هذه الأوامر على القنوات التي تدعم روابط السلاسل المستمرة. راجع القنوات الداعمة للسلاسل أدناه.سلوك الإنشاء
يبدأ/subagents spawn وكيلا فرعيا في الخلفية كأمر مستخدم (وليس
ترحيلا داخليا) ويرسل تحديث إكمال نهائيا واحدا إلى دردشة
الطالب عند انتهاء التشغيل.
إكمال غير حاجز وقائم على الدفع
إكمال غير حاجز وقائم على الدفع
- أمر الإنشاء غير حاجز؛ يعيد معرّف تشغيل فورا.
- عند الإكمال، يعلن الوكيل الفرعي رسالة ملخص/نتيجة إلى قناة دردشة الطالب.
- ينبغي لدورات الوكيل التي تحتاج إلى نتائج الفروع استدعاء
sessions_yieldبعد إنشاء العمل المطلوب. ينهي ذلك الدورة الحالية ويسمح بوصول أحداث الإكمال كالرسالة التالية المرئية للنموذج. - الإكمال قائم على الدفع. بعد الإنشاء، لا تستطلع
/subagents listأوsessions_listأوsessions_historyفي حلقة لمجرد انتظار انتهائه؛ افحص الحالة عند الطلب فقط للتصحيح أو التدخل. - مخرج الفرع هو تقرير/دليل لكي يصوغه الوكيل الطالب. ليس نص تعليمات كتبه المستخدم ولا يمكنه تجاوز سياسة النظام أو المطور أو المستخدم.
- عند الإكمال، يغلق OpenClaw بأفضل جهد علامات تبويب/عمليات المتصفح المتتبعة التي فتحتها جلسة ذلك الوكيل الفرعي قبل أن يستمر تدفق تنظيف الإعلان.
مرونة تسليم الإنشاء اليدوي
مرونة تسليم الإنشاء اليدوي
- يعيد OpenClaw الإكمالات إلى جلسة الطالب عبر دورة
agentبمفتاح ثبات مستقر. - إذا كان تشغيل الطالب لا يزال نشطا، يحاول OpenClaw أولا إيقاظ/توجيه ذلك التشغيل بدلا من بدء مسار رد مرئي ثان.
- إذا فشل تسليم إكمال الوكيل الطالب أو لم ينتج مخرجا مرئيا، يعامل OpenClaw التسليم كفاشل ويرجع إلى توجيه/إعادة محاولة قائمة الانتظار. لا يرسل نتيجة الفرع الخام مباشرة إلى الدردشة الخارجية.
- إذا تعذر استخدام التسليم المباشر، يرجع إلى توجيه قائمة الانتظار.
- إذا ظل توجيه قائمة الانتظار غير متاح، يعاد تنفيذ الإعلان بتراجع أسي قصير قبل الاستسلام النهائي.
- يحافظ تسليم الإكمال على مسار الطالب المحلول: تفوز مسارات الإكمال المرتبطة بسلسلة أو المرتبطة بمحادثة عند توفرها؛ إذا كان أصل الإكمال يوفر قناة فقط، يملأ OpenClaw الهدف/الحساب المفقود من المسار المحلول لجلسة الطالب (
lastChannel/lastTo/lastAccountId) كي يستمر التسليم المباشر في العمل.
بيانات تعريف تسليم الإكمال
بيانات تعريف تسليم الإكمال
تسليم الإكمال إلى جلسة الطالب هو سياق داخلي مولد في وقت التشغيل
(وليس نصا كتبه المستخدم) ويتضمن:
Result— أحدث نص ردassistantمرئي، وإلا فأحدث نص أداة/نتيجة أداة منقح. لا تعيد التشغيلات الطرفية الفاشلة استخدام نص الرد الملتقط.Status—completed successfully/failed/timed out/unknown.- إحصاءات وقت تشغيل/رموز مضغوطة.
- تعليمة تسليم تخبر الوكيل الطالب بإعادة الصياغة بصوت مساعد عادي (وليس تمرير بيانات التعريف الداخلية الخام).
الأوضاع وبيئة تشغيل ACP
الأوضاع وبيئة تشغيل ACP
- يتجاوز
--modelو--thinkingالإعدادات الافتراضية لذلك التشغيل المحدد. - استخدم
info/logلفحص التفاصيل والمخرج بعد الإكمال. /subagents spawnهو وضع أحادي اللقطة (mode: "run"). للجلسات المستمرة المرتبطة بسلسلة، استخدمsessions_spawnمعthread: trueوmode: "session".- لجلسات حزمة ACP (Claude Code أو Gemini CLI أو OpenCode أو Codex ACP/acpx الصريح)، استخدم
sessions_spawnمعruntime: "acp"عندما تعلن الأداة عن بيئة التشغيل تلك. راجع نموذج تسليم ACP عند تصحيح الإكمالات أو حلقات وكيل إلى وكيل. عندما يكون Plugincodexمفعلا، ينبغي أن يفضّل التحكم في دردشة/سلسلة 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 و
full الأداة sessions_spawn افتراضيا. ملف التعريف messaging
لا يفعل ذلك؛ أضف tools.alsoAllow: ["sessions_spawn", "sessions_yield", "subagents"] أو استخدم tools.profile: "coding" للوكلاء الذين ينبغي أن يفوضوا
العمل. لا تزال سياسات السماح/الرفض حسب القناة/المجموعة، والموفر، والعزل، وكل وكيل قادرة
على إزالة الأداة بعد مرحلة ملف التعريف. استخدم /tools من الجلسة نفسها
لتأكيد قائمة الأدوات الفعالة.
الإعدادات الافتراضية:
- النموذج: يرث المستدعي ما لم تضبط
agents.defaults.subagents.model(أوagents.list[].subagents.modelلكل وكيل)؛ ولا يزالsessions_spawn.modelالصريح يفوز. - التفكير: يرث المستدعي ما لم تضبط
agents.defaults.subagents.thinking(أوagents.list[].subagents.thinkingلكل وكيل)؛ ولا يزالsessions_spawn.thinkingالصريح يفوز. - مهلة التشغيل: إذا حُذف
sessions_spawn.runTimeoutSeconds، يستخدم OpenClawagents.defaults.subagents.runTimeoutSecondsعند ضبطه؛ وإلا فيرجع إلى0(بلا مهلة).
وضع مطالبة التفويض
يتحكمagents.defaults.subagents.delegationMode في إرشاد المطالبة فقط؛ ولا يغير سياسة الأدوات أو يفرض التفويض.
suggest(افتراضي): أبق التنبيه القياسي لاستخدام الوكلاء الفرعيين للأعمال الأكبر أو الأبطأ.prefer: أخبر الوكيل الرئيسي أن يبقى سريع الاستجابة وأن يفوض أي شيء أكثر تعقيدا من رد مباشر عبرsessions_spawn.
agents.list[].subagents.delegationMode.
معاملات الأداة
وصف المهمة للوكيل الفرعي.
مُعرّف ثابت اختياري للاستهداف اللاحق عبر
subagents. يجب أن يطابق [a-z][a-z0-9_]{0,63} ولا يمكن أن يكون من الأهداف المحجوزة مثل last أو all. يُفضَّل استخدامه عندما قد يحتاج المنسّق إلى توجيه تابع معيّن أو إيقافه أو تحديده بعد إنشاء عدة توابع.تسمية اختيارية قابلة للقراءة البشرية.
أنشئه تحت معرّف وكيل آخر عندما يسمح
subagents.allowAgents بذلك.يُستخدم
acp فقط لحِزَم ACP الخارجية (claude، droid، gemini، opencode، أو Codex ACP/acpx المطلوب صراحةً) ولإدخالات agents.list[] التي يكون فيها runtime.type هو acp.خاص بـ ACP فقط. يستأنف جلسة حزمة ACP موجودة عندما يكون
runtime: "acp"؛ ويُتجاهل عند إنشاء الوكلاء الفرعيين الأصليين.خاص بـ ACP فقط. يبث مخرجات تشغيل ACP إلى جلسة الأصل عندما يكون
runtime: "acp"؛ احذفه عند إنشاء الوكلاء الفرعيين الأصليين.يتجاوز نموذج الوكيل الفرعي. تُتخطّى القيم غير الصالحة ويعمل الوكيل الفرعي على النموذج الافتراضي مع تحذير في نتيجة الأداة.
يتجاوز مستوى التفكير لتشغيل الوكيل الفرعي.
تكون القيمة الافتراضية
agents.defaults.subagents.runTimeoutSeconds عند ضبطها، وإلا فهي 0. عند ضبطها، يُجهض تشغيل الوكيل الفرعي بعد N ثانية.عندما تكون
true، يطلب ربط سلسلة المحادثة في القناة لجلسة هذا الوكيل الفرعي.إذا كانت
thread: true وجرى حذف mode، تصبح القيمة الافتراضية session. يتطلب mode: "session" وجود thread: true.يؤرشف
"delete" فورًا بعد الإعلان (مع الاحتفاظ بالنص عبر إعادة التسمية).يرفض
require الإنشاء ما لم يكن وقت تشغيل التابع المستهدف معزولًا في صندوق رمل.يفرّع
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 لانتظار أحداث الاكتمال.
الجلسات المرتبطة بسلاسل المحادثة
عند تمكين روابط سلاسل المحادثة لقناة، يمكن للوكيل الفرعي أن يظل مرتبطًا بسلسلة محادثة بحيث تستمر رسائل المستخدم اللاحقة في تلك السلسلة في التوجيه إلى جلسة الوكيل الفرعي نفسها.القنوات الداعمة لسلاسل المحادثة
Discord هو القناة الوحيدة المدعومة حاليًا. يدعم جلسات الوكلاء الفرعيين المستمرة المرتبطة بسلاسل المحادثة (sessions_spawn مع
thread: true)، وعناصر التحكم اليدوية في سلاسل المحادثة (/focus، /unfocus، /agents،
/session idle، /session max-age)، ومفاتيح المهايئ
channels.discord.threadBindings.enabled،
channels.discord.threadBindings.idleHours،
channels.discord.threadBindings.maxAgeHours، و
channels.discord.threadBindings.spawnSessions.
التدفق السريع
فحص المهل الزمنية
استخدم
/session idle لفحص/تحديث إلغاء التركيز التلقائي عند عدم النشاط و
/session max-age للتحكم في الحد الأقصى الصارم.عناصر التحكم اليدوية
| الأمر | التأثير |
|---|---|
/focus <target> | اربط سلسلة المحادثة الحالية (أو أنشئ واحدة) بهدف وكيل فرعي/جلسة |
/unfocus | أزل الربط لسلسلة المحادثة المرتبطة الحالية |
/agents | اعرض التشغيلات النشطة وحالة الربط (thread:<id> أو unbound) |
/session idle | افحص/حدّث إلغاء التركيز التلقائي عند الخمول (للسلاسل المرتبطة المركّزة فقط) |
/session max-age | افحص/حدّث الحد الأقصى الصارم (للسلاسل المرتبطة المركّزة فقط) |
مفاتيح التكوين
- الافتراضي العام:
session.threadBindings.enabled،session.threadBindings.idleHours،session.threadBindings.maxAgeHours. - مفاتيح تجاوز القناة والربط التلقائي عند الإنشاء خاصة بالمهايئ. راجع القنوات الداعمة لسلاسل المحادثة أعلاه.
قائمة السماح
قائمة بمعرّفات الوكلاء التي يمكن استهدافها عبر
agentId صريح (["*"] يسمح بأي معرّف). الافتراضي: وكيل مقدّم الطلب فقط. إذا ضبطت قائمة وما زلت تريد أن ينشئ مقدّم الطلب نفسه باستخدام agentId، فأدرج معرّف مقدّم الطلب في القائمة.قائمة السماح الافتراضية للوكلاء المستهدفين المستخدمة عندما لا يضبط وكيل مقدّم الطلب
subagents.allowAgents الخاص به.يحظر استدعاءات
sessions_spawn التي تحذف agentId (يفرض اختيار ملف تعريف صريحًا). تجاوز لكل وكيل: agents.list[].subagents.requireAgentId.مهلة لكل استدعاء لمحاولات تسليم إعلان
agent في Gateway. القيم هي أعداد صحيحة موجبة بالمللي ثانية وتُقيَّد بالحد الأقصى الآمن لمؤقت المنصة. قد تجعل إعادة المحاولة العابرة إجمالي انتظار الإعلان أطول من مهلة واحدة مضبوطة.sessions_spawn الأهداف
التي قد تعمل من دون صندوق رمل.
الاكتشاف
استخدمagents_list لمعرفة معرّفات الوكلاء المسموح بها حاليًا لـ
sessions_spawn. تتضمن الاستجابة النموذج الفعّال لكل وكيل مدرج
وبيانات وصفية مضمّنة لوقت التشغيل حتى يستطيع المستدعون التمييز بين PI وCodex
app-server وأوقات التشغيل الأصلية المكوّنة الأخرى.
الأرشفة التلقائية
- تُؤرشف جلسات الوكلاء الفرعيين تلقائيًا بعد
agents.defaults.subagents.archiveAfterMinutes(الافتراضي60). - تستخدم الأرشفة
sessions.deleteوتعيد تسمية النص إلى*.deleted.<timestamp>(المجلد نفسه). - يؤرشف
cleanup: "delete"فورًا بعد الإعلان (مع الاحتفاظ بالنص عبر إعادة التسمية). - الأرشفة التلقائية تُبذل بأفضل جهد؛ تضيع المؤقتات المعلقة إذا أُعيد تشغيل Gateway.
- لا يقوم
runTimeoutSecondsبالأرشفة التلقائية؛ بل يوقف التشغيل فقط. تبقى الجلسة حتى الأرشفة التلقائية. - تنطبق الأرشفة التلقائية بالتساوي على جلسات العمق 1 والعمق 2.
- تنظيف المتصفح منفصل عن تنظيف الأرشفة: تُغلق علامات تبويب/عمليات المتصفح المتتبعة بأفضل جهد عند انتهاء التشغيل، حتى لو احتُفظ بسجل النص/الجلسة.
الوكلاء الفرعيون المتداخلون
افتراضيًا، لا يستطيع الوكلاء الفرعيون إنشاء وكلائهم الفرعيين (maxSpawnDepth: 1). اضبط maxSpawnDepth: 2 لتمكين مستوى واحد من
التداخل — نمط المنسّق: الرئيسي → وكيل فرعي منسّق →
وكلاء فرعيون فرعيون عاملون.
مستويات العمق
| العمق | شكل مفتاح الجلسة | الدور | هل يمكنه الإنشاء؟ |
|---|---|---|---|
| 0 | agent:<id>:main | الوكيل الرئيسي | دائمًا |
| 1 | agent:<id>:subagent:<uuid> | وكيل فرعي (منسّق عند السماح بالعمق 2) | فقط إذا كان maxSpawnDepth >= 2 |
| 2 | agent:<id>:subagent:<uuid>:subagent:<uuid> | وكيل فرعي فرعي (عامل طرفي) | أبدًا |
سلسلة الإعلان
تتدفق النتائج صعودًا في السلسلة:- ينتهي عامل العمق 2 → يعلن إلى أصله (منسّق العمق 1).
- يتلقى منسّق العمق 1 الإعلان، يركّب النتائج، ينتهي → يعلن إلى الرئيسي.
- يتلقى الوكيل الرئيسي الإعلان ويسلّمه إلى المستخدم.
إرشادات تشغيلية: ابدأ العمل الفرعي مرة واحدة وانتظر أحداث الاكتمال بدلًا من بناء حلقات استطلاع حول
sessions_list أو sessions_history أو /subagents list أو أوامر السكون في exec.
يحافظ sessions_list و/subagents list على تركيز علاقات الجلسات الفرعية على العمل الحي — إذ تظل الفروع الحية مرتبطة، وتبقى الفروع المنتهية مرئية ضمن نافذة حديثة قصيرة، ويتم تجاهل روابط الفروع القديمة الموجودة في المخزن فقط بعد انتهاء نافذة حداثتها. يمنع هذا بيانات spawnedBy /
parentSessionKey الوصفية القديمة من إحياء فروع وهمية بعد إعادة التشغيل. إذا وصل حدث اكتمال فرعي بعد أن تكون قد أرسلت الإجابة النهائية بالفعل، فالمتابعة الصحيحة هي الرمز الصامت الدقيق
NO_REPLY / no_reply.سياسة الأدوات حسب العمق
- تتم كتابة الدور ونطاق التحكم في بيانات الجلسة الوصفية عند وقت الإنشاء. يحافظ ذلك على مفاتيح الجلسات المسطحة أو المستعادة من استعادة امتيازات المنسق عن طريق الخطأ.
- العمق 1 (منسق، عندما يكون
maxSpawnDepth >= 2): يحصل علىsessions_spawnوsubagentsوsessions_listوsessions_historyحتى يتمكن من إدارة فروعه. تظل أدوات الجلسة/النظام الأخرى مرفوضة. - العمق 1 (طرفية، عندما يكون
maxSpawnDepth == 1): لا توجد أدوات جلسة (السلوك الافتراضي الحالي). - العمق 2 (عامل طرفي): لا توجد أدوات جلسة — يتم رفض
sessions_spawnدائمًا عند العمق 2. لا يمكنه إنشاء فروع إضافية.
حد الإنشاء لكل وكيل
يمكن لكل جلسة وكيل (عند أي عمق) أن تحتوي علىmaxChildrenPerAgent
(القيمة الافتراضية 5) من الفروع النشطة كحد أقصى في وقت واحد. يمنع هذا الانتشار الجامح من منسق واحد.
الإيقاف المتتالي
يؤدي إيقاف منسق عند العمق 1 تلقائيًا إلى إيقاف جميع فروعه عند العمق 2:- يؤدي
/stopفي المحادثة الرئيسية إلى إيقاف جميع وكلاء العمق 1 ويتتالى إلى فروعهم عند العمق 2. - يؤدي
/subagents kill <id>إلى إيقاف وكيل فرعي محدد ويتتالى إلى فروعه. - يؤدي
/subagents kill allإلى إيقاف جميع الوكلاء الفرعيين لمقدم الطلب ويتتالى.
المصادقة
تُحل مصادقة الوكيل الفرعي بواسطة معرف الوكيل، وليس بواسطة نوع الجلسة:- مفتاح جلسة الوكيل الفرعي هو
agent:<agentId>:subagent:<uuid>. - يتم تحميل مخزن المصادقة من
agentDirلذلك الوكيل. - يتم دمج ملفات تعريف مصادقة الوكيل الرئيسي كـ احتياطي؛ وتتجاوز ملفات تعريف الوكيل ملفات التعريف الرئيسية عند التعارض.
الإعلان
يرسل الوكلاء الفرعيون تقاريرهم عبر خطوة إعلان:- تعمل خطوة الإعلان داخل جلسة الوكيل الفرعي (وليس جلسة مقدم الطلب).
- إذا رد الوكيل الفرعي بالنص الدقيق
ANNOUNCE_SKIP، فلن يُنشر شيء. - إذا كان أحدث نص للمساعد هو الرمز الصامت الدقيق
NO_REPLY/no_reply، يتم كبت مخرجات الإعلان حتى لو وُجد تقدم مرئي سابق.
- تستخدم جلسات مقدم الطلب ذات المستوى الأعلى استدعاء
agentللمتابعة مع تسليم خارجي (deliver=true). - تتلقى جلسات الوكيل الفرعي لمقدم طلب متداخل حقن متابعة داخليًا (
deliver=false) حتى يتمكن المنسق من تركيب نتائج الفروع داخل الجلسة. - إذا اختفت جلسة الوكيل الفرعي لمقدم طلب متداخل، يعود OpenClaw إلى مقدم الطلب الخاص بتلك الجلسة عندما يكون متاحًا.
سياق الإعلان
يتم تطبيع سياق الإعلان إلى كتلة حدث داخلية مستقرة:| الحقل | المصدر |
|---|---|
| المصدر | subagent أو cron |
| معرفات الجلسة | مفتاح/معرف الجلسة الفرعية |
| النوع | نوع الإعلان + تسمية المهمة |
| الحالة | مشتقة من نتيجة وقت التشغيل (success أو error أو timeout أو unknown) — ليست مستنتجة من نص النموذج |
| محتوى النتيجة | أحدث نص مرئي للمساعد، وإلا أحدث نص أداة/نتيجة أداة منظف |
| المتابعة | تعليمة تصف متى يجب الرد ومتى يجب البقاء صامتًا |
سطر الإحصاءات
تتضمن حمولات الإعلان سطر إحصاءات في النهاية (حتى عند التفافها):- وقت التشغيل (مثل
runtime 5m12s). - استخدام الرموز (الإدخال/الإخراج/الإجمالي).
- التكلفة المقدرة عند تهيئة تسعير النموذج (
models.providers.*.models[].cost). sessionKeyوsessionIdومسار النص الكامل حتى يتمكن الوكيل الرئيسي من جلب السجل عبرsessions_historyأو فحص الملف على القرص.
لماذا تفضّل sessions_history
sessions_history هو مسار التنسيق الأكثر أمانًا:
- يتم تطبيع تذكر المساعد أولًا: إزالة وسوم التفكير؛ إزالة هياكل
<relevant-memories>/<relevant_memories>؛ إزالة كتل حمولات XML لاستدعاءات الأدوات بنص عادي (<tool_call>و<function_call>و<tool_calls>و<function_calls>)، بما في ذلك الحمولات المبتورة التي لا تُغلق بشكل نظيف؛ إزالة هياكل استدعاء/نتيجة الأدوات المخفضة وعلامات السياق التاريخي؛ إزالة رموز تحكم النموذج المتسربة (<|assistant|>، ورموز ASCII الأخرى<|...|>، والرموز كاملة العرض<|...|>)؛ إزالة XML مشوه لاستدعاءات أدوات MiniMax. - يتم تنقيح النص الذي يشبه بيانات الاعتماد/الرموز.
- يمكن اقتطاع الكتل الطويلة.
- يمكن للسجلات الكبيرة جدًا إسقاط الصفوف الأقدم أو استبدال صف زائد الحجم بـ
[sessions_history omitted: message too large]. - فحص النص الكامل الخام على القرص هو البديل عندما تحتاج إلى النص الكامل بايتًا مقابل بايت.
سياسة الأدوات
يستخدم الوكلاء الفرعيون خط سير ملف التعريف وسياسة الأدوات نفسه الخاص بالوالد أو الوكيل الهدف أولًا. بعد ذلك، يطبق OpenClaw طبقة تقييد الوكيل الفرعي. عند عدم وجودtools.profile تقييدي، يحصل الوكلاء الفرعيون على كل الأدوات باستثناء أدوات الجلسة وأدوات النظام:
sessions_listsessions_historysessions_sendsessions_spawn
sessions_history عرض تذكر محدودًا ومنظفًا هنا أيضًا — وليس تفريغًا خامًا للنص الكامل.
عندما يكون maxSpawnDepth >= 2، يتلقى الوكلاء الفرعيون المنسقون عند العمق 1 أيضًا sessions_spawn وsubagents وsessions_list وsessions_history حتى يتمكنوا من إدارة فروعهم.
التجاوز عبر الإعدادات
tools.subagents.tools.allow هو مرشح نهائي للسماح فقط. يمكنه تضييق مجموعة الأدوات المحلولة مسبقًا، لكنه لا يستطيع إعادة إضافة أداة تمت إزالتها بواسطة tools.profile. على سبيل المثال، يتضمن tools.profile: "coding"
web_search/web_fetch ولكن ليس أداة browser. للسماح للوكلاء الفرعيين ذوي ملف تعريف البرمجة باستخدام أتمتة المتصفح، أضف 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 لمسح علامات استرداد الإجهاض القديمة على الجلسات ذات شواهد القبور.
إذا فشل إنشاء وكيل فرعي مع Gateway
PAIRING_REQUIRED /
scope-upgrade، فتحقق من مستدعي RPC قبل تعديل حالة الاقتران.
يجب أن يتصل تنسيق sessions_spawn الداخلي كـ
client.id: "gateway-client" مع client.mode: "backend" عبر مصادقة مباشرة باستخدام local loopback ورمز/كلمة مرور مشتركة؛ لا يعتمد ذلك المسار على خط أساس نطاق الجهاز المقترن الخاص بـ CLI. لا يزال المستدعون البعيدون، وdeviceIdentity الصريح، ومسارات رمز الجهاز الصريحة، وعملاء المتصفح/node بحاجة إلى موافقة الجهاز العادية لترقيات النطاق.الإيقاف
- يؤدي إرسال
/stopفي محادثة مقدم الطلب إلى إجهاض جلسة مقدم الطلب وإيقاف أي تشغيلات وكلاء فرعيين نشطة أُنشئت منها، مع التتالي إلى الفروع المتداخلة. - يؤدي
/subagents kill <id>إلى إيقاف وكيل فرعي محدد ويتتالى إلى فروعه.
القيود
- إعلان الوكيل الفرعي هو أفضل جهد. إذا أعيد تشغيل 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). - أقصى عمق للتداخل هو 5 (نطاق
maxSpawnDepth: 1–5). يوصى بالعمق 2 لمعظم حالات الاستخدام. - يحدد
maxChildrenPerAgentالحد الأقصى للفروع النشطة لكل جلسة (القيمة الافتراضية5، النطاق1–20).