---
read_when:
    - تريد عملاً في الخلفية/بالتوازي عبر الوكيل
    - أنت تغيّر `sessions_spawn` أو سياسة أدوات الوكلاء الفرعيين
    - أنت تنفذ أو تستكشف أخطاء جلسات الوكلاء الفرعيين المرتبطة بالخيوط وإصلاحها
summary: 'الوكلاء الفرعيون: تشغيلات وكلاء معزولة يتم إنشاؤها وتعلن النتائج مرة أخرى إلى دردشة الطالب'
title: الوكلاء الفرعيون
x-i18n:
    generated_at: "2026-04-05T13:00:50Z"
    model: gpt-5.4
    provider: openai
    source_hash: 9df7cc35a3069ce4eb9c92a95df3ce5365a00a3fae92ff73def75461b58fec3f
    source_path: tools/subagents.md
    workflow: 15
---

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

الوكلاء الفرعيون هم تشغيلات وكلاء في الخلفية يتم إنشاؤها من تشغيل وكيل موجود. تعمل في جلستها الخاصة (`agent:<agentId>:subagent:<uuid>`) وعند الانتهاء، **تعلن** نتيجتها مرة أخرى إلى قناة دردشة الطالب. يُتتبَّع كل تشغيل وكيل فرعي باعتباره [مهمة في الخلفية](/ar/automation/tasks).

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

استخدم `/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>]`

عناصر التحكم في ربط الخيوط:

تعمل هذه الأوامر على القنوات التي تدعم روابط خيوط ثابتة. راجع **القنوات الداعمة للخيوط** أدناه.

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

يعرض `/subagents info` بيانات وصفية للتشغيل (الحالة، والطوابع الزمنية، ومعرّف الجلسة، ومسار النص الحواري، والتنظيف).
استخدم `sessions_history` للحصول على عرض استرجاع محدود ومصفّى أمنيًا؛ وافحص
مسار النص الحواري على القرص عندما تحتاج إلى النص الحواري الخام الكامل.

### سلوك الإنشاء

يبدأ `/subagents spawn` وكيلًا فرعيًا في الخلفية كأمر مستخدم، وليس كترحيل داخلي، ويرسل تحديث إكمال نهائيًا واحدًا مرة أخرى إلى دردشة الطالب عند انتهاء التشغيل.

- أمر الإنشاء غير حاجب؛ إذ يعيد معرّف تشغيل فورًا.
- عند الإكمال، يعلن الوكيل الفرعي رسالة ملخص/نتيجة مرة أخرى إلى قناة دردشة الطالب.
- يكون تسليم الإكمال قائمًا على الدفع. بعد الإنشاء، لا تجرِ استقصاءً لـ `/subagents list` أو
  `sessions_list` أو `sessions_history` في حلقة لمجرد انتظار انتهائه؛ افحص الحالة عند الطلب فقط من أجل التصحيح أو التدخل.
- عند الإكمال، يغلق OpenClaw بأفضل جهد علامات تبويب/عمليات المتصفح المتتبعة التي فتحها ذلك الوكيل الفرعي قبل متابعة تدفق تنظيف الإعلان.
- بالنسبة إلى الإنشاءات اليدوية، يكون التسليم مرنًا:
  - يحاول OpenClaw أولًا التسليم المباشر عبر `agent` باستخدام مفتاح idempotency ثابت.
  - إذا فشل التسليم المباشر، فإنه يعود إلى توجيه الطابور.
  - إذا لم يكن توجيه الطابور متاحًا أيضًا، تُعاد محاولة الإعلان مع تراجع أسي قصير قبل التخلي النهائي.
- يحتفظ تسليم الإكمال بمسار الطالب الذي تم حله:
  - تفوز مسارات الإكمال المرتبطة بالخيط أو المحادثة عند توفرها
  - إذا كان أصل الإكمال يوفر قناة فقط، يملأ OpenClaw الهدف/الحساب المفقودين من المسار المحلول لجلسة الطالب (`lastChannel` / `lastTo` / `lastAccountId`) بحيث يستمر التسليم المباشر في العمل
- إن التسليم إلى جلسة الطالب عند الإكمال هو سياق داخلي مولَّد وقت التشغيل (وليس نصًا من تأليف المستخدم) ويتضمن:
  - `Result` (أحدث نص رد `assistant` ظاهر، وإلا أحدث نص مُنقّى لـ tool/toolResult)
  - `Status` (`completed successfully` / `failed` / `timed out` / `unknown`)
  - إحصاءات وقت تشغيل/رموز مدمجة
  - تعليمة تسليم تخبر وكيل الطالب بإعادة الصياغة بصوت المساعد المعتاد (وليس تمرير البيانات الوصفية الداخلية الخام)
- تتجاوز `--model` و`--thinking` القيم الافتراضية لذلك التشغيل المحدد.
- استخدم `info`/`log` لفحص التفاصيل والمخرجات بعد الإكمال.
- يعمل `/subagents spawn` في وضع اللقطة الواحدة (`mode: "run"`). أما جلسات الارتباط الدائم بالخيط، فاستخدم `sessions_spawn` مع `thread: true` و`mode: "session"`.
- بالنسبة إلى جلسات ACP harness ‏(Codex وClaude Code وGemini CLI)، استخدم `sessions_spawn` مع `runtime: "acp"` وراجع [وكلاء ACP](/tools/acp-agents).

الأهداف الأساسية:

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

ملاحظة حول التكلفة: لكل وكيل فرعي **سياقه الخاص** واستخدامه الخاص للرموز. بالنسبة إلى المهام الثقيلة أو المتكررة،
عيّن نموذجًا أرخص للوكلاء الفرعيين وأبقِ وكيلك الرئيسي على نموذج أعلى جودة.
يمكنك ضبط ذلك عبر `agents.defaults.subagents.model` أو عبر تجاوزات لكل وكيل.

## الأداة

استخدم `sessions_spawn`:

- يبدأ تشغيل وكيل فرعي (`deliver: false`، المسار العام: `subagent`)
- ثم يشغّل خطوة إعلان وينشر رد الإعلان إلى قناة دردشة الطالب
- النموذج الافتراضي: يرث من المستدعي إلا إذا عيّنت `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` (من دون مهلة).

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

- `task` (مطلوب)
- `label?` (اختياري)
- `agentId?` (اختياري؛ الإنشاء تحت معرّف وكيل آخر إذا كان مسموحًا)
- `model?` (اختياري؛ يتجاوز نموذج الوكيل الفرعي؛ يتم تخطي القيم غير الصالحة ويعمل الوكيل الفرعي على النموذج الافتراضي مع تحذير في نتيجة الأداة)
- `thinking?` (اختياري؛ يتجاوز مستوى التفكير لتشغيل الوكيل الفرعي)
- `runTimeoutSeconds?` (القيمة الافتراضية هي `agents.defaults.subagents.runTimeoutSeconds` عند تعيينها، وإلا `0`؛ وعند التعيين، يُجهض تشغيل الوكيل الفرعي بعد N ثانية)
- `thread?` (الافتراضي `false`؛ وعند `true` يطلب ربط خيط القناة لهذه الجلسة الفرعية)
- `mode?` (`run|session`)
  - الافتراضي هو `run`
  - إذا كانت `thread: true` وتم حذف `mode`، تصبح القيمة الافتراضية `session`
  - يتطلب `mode: "session"` القيمة `thread: true`
- `cleanup?` (`delete|keep`، الافتراضي `keep`)
- `sandbox?` (`inherit|require`، الافتراضي `inherit`؛ وترفض `require` الإنشاء ما لم يكن وقت تشغيل الطفل الهدف معزولًا)
- لا يقبل `sessions_spawn` معلمات تسليم القنوات (`target`، `channel`، `to`، `threadId`، `replyTo`، `transport`). بالنسبة إلى التسليم، استخدم `message`/`sessions_send` من التشغيل المُنشأ.

## الجلسات المرتبطة بالخيوط

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

### القنوات الداعمة للخيوط

- 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.spawnSubagentSessions`.

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

1. أنشئ باستخدام `sessions_spawn` مع `thread: true` (واختياريًا `mode: "session"`).
2. ينشئ OpenClaw خيطًا أو يربطه بهدف تلك الجلسة في القناة النشطة.
3. تُوجَّه الردود ورسائل المتابعة في ذلك الخيط إلى الجلسة المرتبطة.
4. استخدم `/session idle` لفحص/تحديث إلغاء التركيز التلقائي عند عدم النشاط واستخدم `/session max-age` للتحكم في الحد الصلب.
5. استخدم `/unfocus` لفك الارتباط يدويًا.

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

- يربط `/focus <target>` الخيط الحالي (أو ينشئ واحدًا) بهدف وكيل فرعي/جلسة.
- يزيل `/unfocus` الربط للخيط المرتبط الحالي.
- يسرد `/agents` التشغيلات النشطة وحالة الربط (`thread:<id>` أو `unbound`).
- يعمل `/session idle` و`/session max-age` فقط للخيوط المركّزة المرتبطة.

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

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

راجع [مرجع الإعدادات](/ar/gateway/configuration-reference) و[أوامر الشرطة المائلة](/tools/slash-commands) للاطلاع على تفاصيل المهايئ الحالية.

قائمة السماح:

- `agents.list[].subagents.allowAgents`: قائمة بمعرّفات الوكلاء التي يمكن استهدافها عبر `agentId` ‏(`["*"]` للسماح بأي منها). الافتراضي: وكيل الطالب فقط.
- `agents.defaults.subagents.allowAgents`: قائمة السماح الافتراضية لوكيل الهدف والمستخدمة عندما لا يعيّن وكيل الطالب `subagents.allowAgents` الخاص به.
- حارس وراثة العزل: إذا كانت جلسة الطالب معزولة، يرفض `sessions_spawn` الأهداف التي ستعمل من دون عزل.
- `agents.defaults.subagents.requireAgentId` / `agents.list[].subagents.requireAgentId`: عند `true`، تُحظر استدعاءات `sessions_spawn` التي تحذف `agentId` (لفرض اختيار ملف تعريف صريح). الافتراضي: false.

الاكتشاف:

- استخدم `agents_list` لمعرفة معرّفات الوكلاء المسموح بها حاليًا لـ `sessions_spawn`.

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

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

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

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

### كيفية التمكين

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

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

| Depth | Session key shape                            | Role                                          | Can spawn?                   |
| ----- | -------------------------------------------- | --------------------------------------------- | ---------------------------- |
| 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. يتلقى الوكيل الرئيسي الإعلان ويسلّمه إلى المستخدم

كل مستوى يرى فقط الإعلانات القادمة من أطفاله المباشرين.

إرشادات تشغيلية:

- ابدأ عمل الطفل مرة واحدة وانتظر أحداث الإكمال بدلًا من بناء حلقات استقصاء
  حول `sessions_list` أو `sessions_history` أو `/subagents list` أو
  أوامر `exec` مع sleep.
- إذا وصل حدث إكمال طفل بعد أن أرسلت الإجابة النهائية بالفعل،
  فالمتابعة الصحيحة هي الرمز الصامت الدقيق `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 إلى طالب تلك الجلسة عند توفره
- بالنسبة إلى جلسات الطالب ذات المستوى الأعلى، يحل التسليم المباشر في وضع الإكمال أولًا أي مسار محادثة/خيط مرتبط وأي تجاوز hook، ثم يملأ حقول هدف القناة المفقودة من المسار المخزن لجلسة الطالب. وهذا يُبقي عمليات الإكمال على الدردشة/الموضوع الصحيحين حتى عندما لا يحدد أصل الإكمال سوى القناة.
- يقتصر تجميع إكمالات الأطفال على تشغيل الطالب الحالي عند بناء نتائج الإكمال المتداخلة، مما يمنع تسرب مخرجات أطفال قديمة من تشغيل سابق إلى الإعلان الحالي.
- تحافظ ردود الإعلان على توجيه الخيط/الموضوع عند توفره في مهايئات القنوات.
- يُطبَّع سياق الإعلان إلى كتلة أحداث داخلية مستقرة:
  - المصدر (`subagent` أو `cron`)
  - مفتاح/معرّف جلسة الطفل
  - نوع الإعلان + تسمية المهمة
  - سطر حالة مشتق من ناتج وقت التشغيل (`success` أو `error` أو `timeout` أو `unknown`)
  - محتوى النتيجة المختار من أحدث نص مساعد ظاهر، وإلا أحدث نص مُنقّى لـ tool/toolResult
  - تعليمة متابعة تصف متى يجب الرد ومتى يجب البقاء صامتًا
- لا يُستنتج `Status` من مخرجات النموذج؛ بل يأتي من إشارات ناتج وقت التشغيل.
- عند انتهاء المهلة، إذا لم يحصل الطفل إلا على استدعاءات أدوات، يمكن للإعلان أن يختزل ذلك السجل إلى ملخص قصير للتقدم الجزئي بدلًا من إعادة تشغيل مخرجات الأدوات الخام.

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

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

يُعد `sessions_history` المسار التنسيقي الأكثر أمانًا:

- يُطبَّع استرجاع المساعد أولًا:
  - تُزال وسوم التفكير
  - تُزال كتل البنية `<relevant-memories>` / `<relevant_memories>`
  - تُزال كتل حمولات XML النصية العادية لاستدعاءات الأدوات مثل `<tool_call>...</tool_call>`،
    و`<function_call>...</function_call>`، و`<tool_calls>...</tool_calls>`، و
    `<function_calls>...</function_calls>`، بما في ذلك الحمولات المقتطعة التي لا تُغلق بشكل صحيح
  - تُزال بنية استدعاءات/نتائج الأدوات المخفّضة وعلامات السياق التاريخي
  - تُزال رموز التحكم بالنموذج المسرّبة مثل `<|assistant|>`، وغيرها من
    رموز ASCII من الشكل `<|...|>`، والمتغيرات كاملة العرض `<｜...｜>`
  - يُزال XML المشوّه لاستدعاءات أدوات MiniMax
- يُحجب النص الشبيه ببيانات الاعتماد/الرموز
- قد تُقتطع الكتل الطويلة
- قد تُسقط السجلات الكبيرة جدًا الصفوف الأقدم أو تستبدل صفًا كبيرًا جدًا بالقيمة
  `[sessions_history omitted: message too large]`
- يكون فحص النص الحواري الخام على القرص هو الاحتياطي عندما تحتاج إلى النص الحواري الكامل بايتًا لبايت

## سياسة الأدوات (أدوات الوكلاء الفرعيين)

افتراضيًا، تحصل الوكلاء الفرعيون على **كل الأدوات باستثناء أدوات الجلسات** وأدوات النظام:

- `sessions_list`
- `sessions_history`
- `sessions_send`
- `sessions_spawn`

ويظل `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، فإنه يصبح السماح فقط (ويظل deny له الأولوية)
        // allow: ["read", "exec", "process"]
      },
    },
  },
}
```

## التزامن

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

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

## الإيقاف

- يؤدي إرسال `/stop` في دردشة الطالب إلى إجهاض جلسة الطالب وإيقاف أي تشغيلات وكلاء فرعيين نشطة تم إنشاؤها منها، مع الانتقال تسلسليًا إلى الأطفال المتداخلين.
- يؤدي `/subagents kill <id>` إلى إيقاف وكيل فرعي محدد وينتقل ذلك تسلسليًا إلى أطفاله.

## القيود

- الإعلان الرجوعي للوكيل الفرعي يتم **بأفضل جهد**. إذا أُعيد تشغيل البوابة، فستُفقد أعمال "الإعلان رجوعًا" المعلقة.
- لا تزال الوكلاء الفرعيون تشترك في موارد عملية البوابة نفسها؛ فاعتبر `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).
