Agent coordination
الوكلاء الفرعيون
الوكلاء الفرعيون هم تشغيلات وكلاء في الخلفية يتم إنشاؤها من تشغيل وكيل موجود.
يعملون في جلستهم الخاصة (agent:<agentId>:subagent:<uuid>) و،
عند الانتهاء، يعلنون نتيجتهم مرة أخرى في قناة دردشة مقدم الطلب.
يتم تتبع كل تشغيل لوكيل فرعي باعتباره
مهمة خلفية.
للاطلاع على نموذج الأمان وراء التفويض، راجع حدود الوكلاء المتعددين والوكلاء الفرعيين. الوكلاء الفرعيون وحدات عزل وسير عمل مفيدة، لكنهم ليسوا حد تفويض متعدد المستأجرين عدائيًا داخل Gateway مشترك واحد.
الأهداف الأساسية:
- موازاة أعمال "البحث / المهمة الطويلة / الأداة البطيئة" دون حظر التشغيل الرئيسي.
- إبقاء الوكلاء الفرعيين معزولين افتراضيًا (فصل الجلسات + عزل اختياري).
- إبقاء سطح الأدوات صعب إساءة الاستخدام: لا يحصل الوكلاء الفرعيون على أدوات الجلسة افتراضيًا.
- دعم عمق تداخل قابل للتكوين لأنماط المنسقين.
أمر الشرطة المائلة
استخدم /subagents لفحص تشغيلات الوكلاء الفرعيين أو التحكم فيها لـ الجلسة
الحالية:
/subagents list
/subagents kill <id|#|all>
/subagents log <id|#> [limit] [tools]
/subagents info <id|#>
/subagents send <id|#> <message>
/subagents steer <id|#> <message>
/subagents spawn <agentId> <task> [--model <model>] [--thinking <level>]
استخدم /steer <message> من المستوى الأعلى لتوجيه التشغيل النشط لجلسة مقدم الطلب الحالية. استخدم /subagents steer <id|#> <message> عندما يكون الهدف تشغيلًا ابنًا.
يعرض /subagents info بيانات وصفية للتشغيل (الحالة، الطوابع الزمنية، معرف الجلسة،
مسار نص الجلسة، التنظيف). استخدم sessions_history لعرض استدعاء محدود
ومرشح للأمان؛ افحص مسار نص الجلسة على القرص عندما
تحتاج إلى النص الكامل الخام للجلسة.
عناصر التحكم في ربط السلاسل
تعمل هذه الأوامر على القنوات التي تدعم روابط سلاسل مستمرة. راجع القنوات الداعمة للسلاسل أدناه.
/focus <subagent-label|session-key|session-id|session-label>
/unfocus
/agents
/session idle <duration|off>
/session max-age <duration|off>
سلوك الإنشاء
يبدأ /subagents spawn وكيلًا فرعيًا في الخلفية كأمر مستخدم (وليس
ترحيلًا داخليًا) ويرسل تحديث اكتمال نهائيًا واحدًا مرة أخرى إلى
دردشة مقدم الطلب عند انتهاء التشغيل.
Non-blocking, push-based completion
- أمر الإنشاء غير حاجب؛ يعيد معرف تشغيل فورًا.
- عند الاكتمال، يعلن الوكيل الفرعي رسالة ملخص/نتيجة مرة أخرى إلى قناة دردشة مقدم الطلب.
- الاكتمال قائم على الدفع. بعد الإنشاء، لا تستطلع
/subagents listأوsessions_listأوsessions_historyفي حلقة لمجرد انتظار انتهائه؛ افحص الحالة عند الطلب فقط للتصحيح أو التدخل. - عند الاكتمال، يغلق OpenClaw على أساس أفضل جهد علامات تبويب/عمليات المتصفح المتعقبة التي فتحتها جلسة ذلك الوكيل الفرعي قبل أن يستمر تدفق تنظيف الإعلان.
Manual-spawn delivery resilience
- يحاول OpenClaw التسليم المباشر إلى
agentأولًا باستخدام مفتاح ثبات مستقر. - إذا فشلت دورة اكتمال وكيل مقدم الطلب، أو لم تنتج مخرجًا مرئيًا، أو أعادت بادئة غير مكتملة بوضوح من نتيجة الابن الملتقطة، يتراجع OpenClaw إلى تسليم اكتمال مباشر من نتيجة الابن الملتقطة.
- إذا تعذر استخدام التسليم المباشر، فإنه يتراجع إلى التوجيه عبر الطابور.
- إذا ظل التوجيه عبر الطابور غير متاح، يعاد الإعلان بتراجع أسي قصير قبل الاستسلام النهائي.
- يحافظ تسليم الاكتمال على مسار مقدم الطلب المحلول: تفوز مسارات الاكتمال المرتبطة بالسلسلة أو المرتبطة بالمحادثة عند توفرها؛ إذا كان أصل الاكتمال يوفر قناة فقط، يملأ OpenClaw الهدف/الحساب المفقود من المسار المحلول لجلسة مقدم الطلب (
lastChannel/lastTo/lastAccountId) بحيث يظل التسليم المباشر يعمل.
Completion handoff metadata
تسليم الاكتمال إلى جلسة مقدم الطلب هو سياق داخلي مولد وقت التشغيل (وليس نصًا من تأليف المستخدم) ويتضمن:
Result— أحدث نص ردassistantمرئي، وإلا أحدث نص أداة/toolResult منظف. لا تعيد التشغيلات الفاشلة الطرفية استخدام نص الرد الملتقط.Status—completed successfully/failed/timed out/unknown.- إحصاءات تشغيل/رموز مدمجة.
- تعليمة تسليم تخبر وكيل مقدم الطلب بإعادة الصياغة بصوت المساعد الطبيعي (لا إعادة توجيه البيانات الوصفية الداخلية الخام).
Modes and ACP runtime
- يتجاوز
--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، يستخدم OpenClaw agents.defaults.subagents.runTimeoutSecondsعند ضبطه؛ وإلا يتراجع إلى0(بلا مهلة).
معاملات الأداة
taskstringrequiredوصف المهمة للوكيل الفرعي.
labelstringتسمية اختيارية قابلة للقراءة من الإنسان.
agentIdstringأنشئ تحت معرف وكيل آخر عندما يسمح بذلك subagents.allowAgents.
runtime"subagent" | "acp"acp مخصص فقط لأحزمة ACP الخارجية (claude أو droid أو gemini أو opencode أو Codex ACP/acpx المطلوب صراحة) ولإدخالات agents.list[] التي يكون runtime.type الخاص بها هو acp.
resumeSessionIdstringACP فقط. يستأنف جلسة حزام ACP موجودة عندما يكون runtime: "acp"؛ يتم تجاهله لإنشاء الوكلاء الفرعيين الأصليين.
streamTo"parent"ACP فقط. يبث مخرج تشغيل ACP إلى الجلسة الأصل عندما يكون runtime: "acp"؛ احذفه لإنشاء الوكلاء الفرعيين الأصليين.
modelstringتجاوز نموذج الوكيل الفرعي. يتم تخطي القيم غير الصالحة ويعمل الوكيل الفرعي على النموذج الافتراضي مع تحذير في نتيجة الأداة.
thinkingstringتجاوز مستوى التفكير لتشغيل الوكيل الفرعي.
runTimeoutSecondsnumberيكون الافتراضي agents.defaults.subagents.runTimeoutSeconds عند ضبطه، وإلا 0. عند ضبطه، يتم إجهاض تشغيل الوكيل الفرعي بعد N ثانية.
threadbooleanعندما يكون true، يطلب ربط سلسلة القناة لجلسة هذا الوكيل الفرعي.
mode"run" | "session"إذا كان thread: true وmode محذوفًا، يصبح الافتراضي session. يتطلب mode: "session" وجود thread: true.
cleanup"delete" | "keep"يقوم "delete" بالأرشفة فورًا بعد الإعلان (مع الاحتفاظ بنص الجلسة عبر إعادة التسمية).
sandbox"inherit" | "require"يرفض require الإنشاء ما لم يكن وقت تشغيل الابن المستهدف معزولًا.
context"isolated" | "fork"يفرع fork نص جلسة مقدم الطلب الحالي إلى جلسة الابن. للوكلاء الفرعيين الأصليين فقط. تكون الإنشاءات المرتبطة بالسلسلة افتراضيًا fork؛ وتكون الإنشاءات غير المرتبطة بالسلسلة افتراضيًا isolated.
الجلسات المرتبطة بالسلاسل
عند تمكين روابط السلاسل لقناة، يمكن للوكيل الفرعي أن يبقى مرتبطًا بسلسلة بحيث تستمر رسائل المستخدم اللاحقة في تلك السلسلة في التوجيه إلى جلسة الوكيل الفرعي نفسها.
القنوات الداعمة للسلاسل
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.
تدفق سريع
Spawn
sessions_spawn مع thread: true (واختياريًا mode: "session").
Bind
ينشئ OpenClaw سلسلة محادثات أو يربط واحدة بهدف الجلسة ذلك في القناة النشطة.
Route follow-ups
تُوجَّه الردود ورسائل المتابعة في سلسلة المحادثات تلك إلى الجلسة المرتبطة.
Inspect timeouts
استخدم /session idle لفحص/تحديث إلغاء التركيز التلقائي عند عدم النشاط و
/session max-age للتحكم في الحد الأقصى الصارم.
Detach
استخدم /unfocus للفصل يدويًا.
عناصر التحكم اليدوية
| الأمر | الأثر |
|---|---|
/focus <target> |
ربط سلسلة المحادثات الحالية (أو إنشاء واحدة) بهدف وكيل فرعي/جلسة |
/unfocus |
إزالة الربط لسلسلة المحادثات المرتبطة الحالية |
/agents |
سرد التشغيلات النشطة وحالة الربط (thread:<id> أو unbound) |
/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.requireAgentIdbooleanحظر استدعاءات sessions_spawn التي تحذف agentId (يفرض اختيار ملف التعريف صراحة). تجاوز لكل وكيل: agents.list[].subagents.requireAgentId.
إذا كانت جلسة الطالب معزولة، يرفض sessions_spawn الأهداف
التي ستعمل من دون عزل.
الاكتشاف
استخدم agents_list لمعرفة معرّفات الوكلاء المسموح بها حاليًا لـ
sessions_spawn. تتضمن الاستجابة النموذج الفعّال لكل وكيل مدرج
وبيانات تعريف وقت التشغيل المضمّنة بحيث يستطيع المستدعون التمييز بين PI، وخادم تطبيق Codex،
وأوقات التشغيل الأصلية الأخرى المكوّنة.
الأرشفة التلقائية
- تُؤرشف جلسات الوكلاء الفرعيين تلقائيًا بعد
agents.defaults.subagents.archiveAfterMinutes(الافتراضي60). - تستخدم الأرشفة
sessions.deleteوتعيد تسمية النص المنسوخ إلى*.deleted.<timestamp>(المجلد نفسه). - يؤرشف
cleanup: "delete"مباشرة بعد الإعلان (مع استمرار الاحتفاظ بالنص المنسوخ عبر إعادة التسمية). - الأرشفة التلقائية هي أفضل محاولة؛ تُفقد المؤقتات المعلّقة إذا أُعيد تشغيل Gateway.
- لا يقوم
runTimeoutSecondsبالأرشفة التلقائية؛ إنه يوقف التشغيل فقط. تبقى الجلسة حتى الأرشفة التلقائية. - تنطبق الأرشفة التلقائية بالتساوي على جلسات العمق 1 والعمق 2.
- تنظيف المتصفح منفصل عن تنظيف الأرشفة: تُغلق علامات تبويب/عمليات المتصفح المتتبعة بأفضل محاولة عند انتهاء التشغيل، حتى إذا احتُفظ بسجل النص المنسوخ/الجلسة.
الوكلاء الفرعيون المتداخلون
افتراضيًا، لا يستطيع الوكلاء الفرعيون إنشاء وكلائهم الفرعيين
(maxSpawnDepth: 1). عيّن maxSpawnDepth: 2 لتمكين مستوى واحد من
التداخل — نمط المنسّق: الرئيسي → وكيل فرعي منسّق →
وكلاء فرعيون عاملون.
{
agents: {
defaults: {
subagents: {
maxSpawnDepth: 2, // allow sub-agents to spawn children (default: 1)
maxChildrenPerAgent: 5, // max active children per agent session (default: 5)
maxConcurrent: 8, // global concurrency lane cap (default: 8)
runTimeoutSeconds: 900, // default timeout for sessions_spawn when omitted (0 = no timeout)
},
},
},
}
مستويات العمق
| العمق | شكل مفتاح الجلسة | الدور | هل يمكنه الإنشاء؟ |
|---|---|---|---|
| 0 | agent:<id>:main |
الوكيل الرئيسي | دائمًا |
| 1 | agent:<id>:subagent:<uuid> |
وكيل فرعي (منسّق عند السماح بالعمق 2) | فقط إذا كان maxSpawnDepth >= 2 |
| 2 | agent:<id>:subagent:<uuid>:subagent:<uuid> |
وكيل فرعي فرعي (عامل طرفي) | أبدًا |
سلسلة الإعلان
تتدفق النتائج صعودًا عبر السلسلة:
- ينهي عامل العمق 2 عمله ← يعلن إلى أصله (منسّق العمق 1).
- يتلقى منسّق العمق 1 الإعلان، ويؤلف النتائج، وينهي عمله ← يعلن إلى الرئيسي.
- يتلقى الوكيل الرئيسي الإعلان ويسلّمه إلى المستخدم.
يرى كل مستوى الإعلانات الواردة من أبنائه المباشرين فقط.
سياسة الأدوات حسب العمق
- يُكتب الدور ونطاق التحكم في بيانات تعريف الجلسة عند وقت الإنشاء. يحافظ ذلك على مفاتيح الجلسات المسطحة أو المستعادة من استعادة امتيازات المنسّق بالخطأ.
- العمق 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) — وليست مستنتجة من نص النموذج |
| محتوى النتيجة | أحدث نص مساعد مرئي، وإلا فأحدث نص أداة/toolResult مُنقّى |
| المتابعة | تعليمة تصف متى يجب الرد مقابل البقاء صامتًا |
تبلغ التشغيلات الطرفية الفاشلة عن حالة الفشل دون إعادة تشغيل نص الرد الملتقط. عند انتهاء المهلة، إذا لم يتجاوز الابن استدعاءات الأدوات، يمكن للإعلان أن يختصر ذلك التاريخ في ملخص قصير للتقدم الجزئي بدلًا من إعادة تشغيل خرج الأداة الخام.
سطر الإحصاءات
تتضمن حمولات الإعلان سطر إحصاءات في النهاية (حتى عند الالتفاف):
- وقت التشغيل (مثل
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 حتى يتمكنوا من إدارة أبنائهم.
التجاوز عبر الإعدادات
{
agents: {
defaults: {
subagents: {
maxConcurrent: 1,
},
},
},
tools: {
subagents: {
tools: {
// deny wins
deny: ["gateway", "cron"],
// if allow is set, it becomes allow-only (deny still wins)
// allow: ["read", "exec", "process"]
},
},
},
}
tools.subagents.tools.allow هو مرشح نهائي للسماح فقط. يمكنه تضييق
مجموعة الأدوات التي تم حلها بالفعل، لكنه لا يستطيع إضافة أداة أزيلت
بواسطة tools.profile من جديد. على سبيل المثال، يتضمن tools.profile: "coding"
web_search/web_fetch ولكن لا يتضمن أداة browser. للسماح
للوكلاء الفرعيين ذوي ملف التعريف الخاص بالبرمجة باستخدام أتمتة المتصفح، أضف browser في
مرحلة ملف التعريف:
{
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في محادثة الطالب إلى إجهاض جلسة الطالب وإيقاف أي تشغيلات نشطة للوكلاء الفرعيين أُنشئت منها، مع التسلسل إلى الأبناء المتداخلين. - يوقف
/subagents kill <id>وكيلًا فرعيًا محددًا ويتسلسل إلى أبنائه.
القيود
- إعلان الوكيل الفرعي أفضل جهد. إذا أُعيد تشغيل Gateway، يُفقد عمل "الإعلان رجوعًا" المعلق.
- لا يزال الوكلاء الفرعيون يتشاركون موارد عملية Gateway نفسها؛ تعامل مع
maxConcurrentكصمام أمان. sessions_spawnدائمًا غير حاجز: يعيد{ status: "accepted", runId, childSessionKey }فورًا.- يحقن سياق الوكيل الفرعي
AGENTS.md+TOOLS.mdفقط (لا يحقنSOUL.mdأوIDENTITY.mdأوUSER.mdأوHEARTBEAT.mdأوBOOTSTRAP.md). - أقصى عمق تداخل هو 5 (نطاق
maxSpawnDepth: 1–5). يوصى بالعمق 2 لمعظم حالات الاستخدام. - يحد
maxChildrenPerAgentمن الأبناء النشطين لكل جلسة (الافتراضي5، النطاق1–20).