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

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

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

## أمر slash

استخدم `/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 ‏(Codex, Claude Code, Gemini CLI)، استخدم `sessions_spawn` مع `runtime: "acp"` وراجع [ACP Agents](/ar/tools/acp-agents)، وخصوصًا [نموذج التسليم ACP](/ar/tools/acp-agents#delivery-model) عند تصحيح الإكمالات أو حلقات وكيل إلى وكيل.

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

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

ملاحظة التكلفة: لكل وكيل فرعي **سياقه واستخدامه الخاص للرموز**. بالنسبة إلى المهام الثقيلة أو المتكررة،
اضبط نموذجًا أرخص للوكلاء الفرعيين وأبقِ وكيلك الرئيسي على نموذج أعلى جودة.
يمكنك تكوين ذلك عبر `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) و[أوامر Slash](/ar/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"` إلى الأرشفة مباشرة بعد الإعلان (مع الاحتفاظ بالنص عبر إعادة التسمية).
- تكون الأرشفة التلقائية بأفضل جهد؛ وتُفقد المؤقتات المعلقة إذا أُعيد تشغيل gateway.
- لا تؤدي `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 = بلا مهلة)
      },
    },
  },
}
```

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

| العمق | شكل مفتاح الجلسة | الدور | هل يمكنه الإنشاء؟ |
| ----- | -------------------------------------------- | --------------------------------------------- | ---------------------------- |
| 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`، فلا يتم نشر أي شيء.
- إذا كان أحدث نص من `assistant` هو الرمز الصامت المطابق تمامًا `NO_REPLY` / `no_reply`،
  فسيتم كبت مخرجات الإعلان حتى لو وُجد تقدم مرئي سابق.
- بخلاف ذلك يعتمد التسليم على عمق الطالب:
  - تستخدم جلسات الطالب من المستوى الأعلى استدعاء `agent` لاحقًا مع تسليم خارجي (`deliver=true`)
  - تتلقى جلسات الوكيل الفرعي المتداخلة التابعة للطالب حقن متابعة داخليًا (`deliver=false`) حتى يتمكن المنسق من توليف نتائج الأبناء داخل الجلسة
  - إذا اختفت جلسة وكيل فرعي متداخلة تابعة للطالب، يعود OpenClaw إلى الطالب الخاص بتلك الجلسة عند توفره
- بالنسبة إلى جلسات الطالب من المستوى الأعلى، يقوم التسليم المباشر في وضع الاكتمال أولًا بحل أي مسار محادثة/سلسلة مرتبط وتجاوز hook، ثم يملأ حقول هدف القناة المفقودة من المسار المخزن لجلسة الطالب. وهذا يحافظ على الإكمالات في الدردشة/الموضوع الصحيحين حتى عندما يحدد أصل الاكتمال القناة فقط.
- يكون تجميع إكمالات الأبناء مقيّدًا بتشغيل الطالب الحالي عند بناء نتائج الاكتمال المتداخلة، مما يمنع تسرب مخرجات أبناء قديمة من تشغيلات سابقة إلى الإعلان الحالي.
- تحافظ ردود الإعلان على توجيه السلسلة/الموضوع عند توفره في مهايئات القنوات.
- تتم تسوية سياق الإعلان إلى كتلة أحداث داخلية ثابتة:
  - المصدر (`subagent` أو `cron`)
  - مفتاح/معرّف جلسة الابن
  - نوع الإعلان + تسمية المهمة
  - سطر حالة مشتق من نتيجة وقت التشغيل (`success` أو `error` أو `timeout` أو `unknown`)
  - محتوى النتيجة المختار من أحدث نص مرئي من `assistant`، وإلا أحدث نص منقح من `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، يصبح السماح حصريًا (ويبقى الرفض هو الفائز)
        // allow: ["read", "exec", "process"]
      },
    },
  },
}
```

## التوازي

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

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

## الإيقاف

- يؤدي إرسال `/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).
