Agent coordination

بيئة العزل والأدوات متعددة الوكلاء

Status: active

يمكن لكل وكيل في إعداد متعدد الوكلاء تجاوز سياسة العزل والأدوات العامة. تتناول هذه الصفحة الإعداد لكل وكيل، وقواعد الأولوية، وأمثلة.


أمثلة الإعداد

المثال 1: وكيل شخصي + وكيل عائلي مقيّد
json
{  "agents": {    "list": [      {        "id": "main",        "default": true,        "name": "Personal Assistant",        "workspace": "~/.openclaw/workspace",        "sandbox": { "mode": "off" }      },      {        "id": "family",        "name": "Family Bot",        "workspace": "~/.openclaw/workspace-family",        "sandbox": {          "mode": "all",          "scope": "agent"        },        "tools": {          "allow": ["read", "message"],          "deny": ["exec", "write", "edit", "apply_patch", "process", "browser"],          "message": {            "crossContext": {              "allowWithinProvider": false,              "allowAcrossProviders": false            }          }        }      }    ]  },  "bindings": [    {      "agentId": "family",      "match": {        "provider": "whatsapp",        "accountId": "*",        "peer": {          "kind": "group",          "id": "120363424282127706@g.us"        }      }    }  ]}

النتيجة:

  • الوكيل main: يعمل على المضيف ويتمتع بوصول كامل إلى الأدوات.
  • الوكيل family: يعمل داخل Docker (حاوية واحدة لكل وكيل)، ولا يُسمح له إلا باستخدام read وإرسال الرسائل ضمن المحادثة الحالية.
المثال 2: وكيل عمل بعزل مشترك
json
{  "agents": {    "list": [      {        "id": "personal",        "workspace": "~/.openclaw/workspace-personal",        "sandbox": { "mode": "off" }      },      {        "id": "work",        "workspace": "~/.openclaw/workspace-work",        "sandbox": {          "mode": "all",          "scope": "shared",          "workspaceRoot": "/tmp/work-sandboxes"        },        "tools": {          "allow": ["read", "write", "apply_patch", "exec"],          "deny": ["browser", "gateway", "discord"]        }      }    ]  }}
المثال 2ب: ملف تعريف عام للبرمجة + وكيل للمراسلة فقط
json
{  "tools": { "profile": "coding" },  "agents": {    "list": [      {        "id": "support",        "tools": { "profile": "messaging", "allow": ["slack"] }      }    ]  }}

النتيجة:

  • تحصل الوكلاء الافتراضية على أدوات البرمجة.
  • يقتصر الوكيل support على المراسلة فقط (+ أداة Slack).
المثال 3: أوضاع عزل مختلفة لكل وكيل
json
{  "agents": {    "defaults": {      "sandbox": {        "mode": "non-main",        "scope": "session"      }    },    "list": [      {        "id": "main",        "workspace": "~/.openclaw/workspace",        "sandbox": {          "mode": "off"        }      },      {        "id": "public",        "workspace": "~/.openclaw/workspace-public",        "sandbox": {          "mode": "all",          "scope": "agent"        },        "tools": {          "allow": ["read"],          "deny": ["exec", "write", "edit", "apply_patch"]        }      }    ]  }}

أولوية الإعداد

عند وجود إعدادات عامة (agents.defaults.*) وأخرى خاصة بالوكيل (agents.list[].*) معًا:

إعداد العزل

تتجاوز الإعدادات الخاصة بالوكيل الإعدادات العامة:

text
agents.list[].sandbox.mode > agents.defaults.sandbox.modeagents.list[].sandbox.scope > agents.defaults.sandbox.scopeagents.list[].sandbox.workspaceRoot > agents.defaults.sandbox.workspaceRootagents.list[].sandbox.workspaceAccess > agents.defaults.sandbox.workspaceAccessagents.list[].sandbox.docker.* > agents.defaults.sandbox.docker.*agents.list[].sandbox.browser.* > agents.defaults.sandbox.browser.*agents.list[].sandbox.prune.* > agents.defaults.sandbox.prune.*

قيود الأدوات

ترتيب التصفية هو:

  • ملف تعريف الأدوات

    tools.profile أو agents.list[].tools.profile.

  • ملف تعريف أدوات المزوّد

    tools.byProvider[provider].profile أو agents.list[].tools.byProvider[provider].profile.

  • سياسة الأدوات العامة

    tools.allow / tools.deny.

  • سياسة أدوات المزوّد

    tools.byProvider[provider].allow/deny.

  • سياسة الأدوات الخاصة بالوكيل

    agents.list[].tools.allow/deny.

  • سياسة مزوّد الوكيل

    agents.list[].tools.byProvider[provider].allow/deny.

  • سياسة أدوات العزل

    tools.sandbox.tools أو agents.list[].tools.sandbox.tools.

  • سياسة أدوات الوكيل الفرعي

    tools.subagents.tools، إن كانت منطبقة.

  • قواعد الأولوية
    • يمكن لكل مستوى فرض قيود إضافية على الأدوات، لكنه لا يستطيع إعادة منح الأدوات التي حُظرت في مستويات سابقة.
    • إذا ضُبط agents.list[].tools.sandbox.tools، فإنه يحل محل tools.sandbox.tools لذلك الوكيل.
    • إذا ضُبط agents.list[].tools.profile، فإنه يتجاوز tools.profile لذلك الوكيل.
    • تقبل مفاتيح أدوات المزوّد إما provider (مثل google-antigravity) أو provider/model (مثل openai/gpt-5.4).
    سلوك قائمة السماح الفارغة

    إذا أدت أي قائمة سماح صريحة في تلك السلسلة إلى عدم توفر أي أدوات قابلة للاستدعاء للتشغيل، يتوقف OpenClaw قبل إرسال الموجّه إلى النموذج. هذا مقصود: يجب أن يفشل الوكيل المضبوط بأداة مفقودة مثل agents.list[].tools.allow: ["query_db"] بوضوح إلى أن يُفعّل Plugin الذي يسجّل query_db، بدلًا من الاستمرار بصفته وكيلًا نصيًا فقط.

    تدعم سياسات الأدوات الاختصارات group:* التي تتوسع إلى عدة أدوات. راجع مجموعات الأدوات للاطلاع على القائمة الكاملة.

    يمكن لتجاوزات الوضع المرتفع لكل وكيل (agents.list[].tools.elevated) فرض قيود إضافية على التنفيذ المرتفع لوكلاء محددين. راجع الوضع المرتفع للاطلاع على التفاصيل.


    الترحيل من وكيل واحد

    قبل (وكيل واحد)

    json
    {  "agents": {    "defaults": {      "workspace": "~/.openclaw/workspace",      "sandbox": {        "mode": "non-main"      }    }  },  "tools": {    "sandbox": {      "tools": {        "allow": ["read", "write", "apply_patch", "exec"],        "deny": []      }    }  }}

    بعد (وكلاء متعددون)

    json
    {  "agents": {    "list": [      {        "id": "main",        "default": true,        "workspace": "~/.openclaw/workspace",        "sandbox": { "mode": "off" }      }    ]  }}

    أمثلة قيود الأدوات

    وكيل للقراءة فقط

    json
    {  "tools": {    "allow": ["read"],    "deny": ["exec", "write", "edit", "apply_patch", "process"]  }}

    تنفيذ الصدفة مع تعطيل أدوات نظام الملفات

    json
    {  "tools": {    "allow": ["read", "exec", "process"],    "deny": ["write", "edit", "apply_patch", "browser", "gateway"]  }}

    للاتصال فقط

    json
    {  "tools": {    "sessions": { "visibility": "tree" },    "allow": ["sessions_list", "sessions_send", "sessions_history", "session_status"],    "deny": ["exec", "write", "edit", "apply_patch", "read", "browser"]  }}

    يظل sessions_history في ملف التعريف هذا يعيد عرض استرجاع محدودًا ومنقّحًا بدلًا من تفريغ نص المحادثة الخام. يزيل استرجاع المساعد وسوم التفكير، وبنية <relevant-memories>، وحمولات XML النصية العادية لاستدعاءات الأدوات (بما فيها <tool_call>...</tool_call> و<function_call>...</function_call> و<tool_calls>...</tool_calls> و<function_calls>...</function_calls> وكتل استدعاءات الأدوات المبتورة)، وبنية استدعاءات الأدوات التي خُفّض مستواها، ورموز التحكم المسرّبة للنموذج بتنسيق ASCII/العرض الكامل، وXML المشوّه لاستدعاءات أدوات MiniMax، وذلك قبل التنقيح/الاقتطاع.


    خطأ شائع: "non-main"


    الاختبار

    بعد إعداد العزل والأدوات للوكلاء المتعددين:

  • التحقق من حسم الوكيل

    bash
    openclaw agents list --bindings
  • التحقق من حاويات العزل

    bash
    docker ps --filter "name=openclaw-sbx-"
  • اختبار قيود الأدوات

    • أرسل رسالة تتطلب أدوات مقيّدة.
    • تحقق من أن الوكيل لا يستطيع استخدام الأدوات المحظورة.
  • مراقبة السجلات

    bash
    openclaw logs --follow | grep -E "routing|sandbox|tools"

  • استكشاف الأخطاء وإصلاحها

    الوكيل غير معزول رغم `mode: 'all'`
    • تحقق مما إذا كان هناك agents.defaults.sandbox.mode عام يتجاوزه.
    • للإعداد الخاص بالوكيل الأولوية، لذا اضبط agents.list[].sandbox.mode: "all".
    الأدوات التي تظل متاحة رغم قائمة المنع
    الحاوية غير معزولة لكل وكيل
    • قيمة scope الافتراضية هي "agent" (حاوية واحدة لكل معرّف وكيل).
    • عيّن scope: "session" لاستخدام حاوية واحدة لكل جلسة، أو scope: "shared" لإعادة استخدام حاوية واحدة عبر الوكلاء.

    ذو صلة

    Was this useful?
    On this page

    On this page