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 منظف. لا تعيد التشغيلات الفاشلة الطرفية استخدام نص الرد الملتقط.
  • Statuscompleted 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 عند تصحيح الاكتمالات أو حلقات وكيل إلى وكيل. عند تمكين 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 و fullsessions_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.

resumeSessionIdstring

ACP فقط. يستأنف جلسة حزام 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> وكيل فرعي فرعي (عامل طرفي) أبدًا

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

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

    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.
    • يوقف /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_list
    • sessions_history
    • sessions_send
    • sessions_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).

    ذات صلة