Agent coordination

سندباکس و ابزارهای چندعاملی

Status: active

هر عامل در یک پیکربندی چندعاملی می‌تواند سندباکس سراسری و خط‌مشی ابزار را بازنویسی کند. این صفحه پیکربندی هر عامل، قواعد تقدم و نمونه‌ها را پوشش می‌دهد.


نمونه‌های پیکربندی

نمونه ۱: عامل شخصی + عامل خانوادگی محدود
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 و ارسال پیام در گفت‌وگوی جاری را دارد.
نمونه ۲: عامل کاری با سندباکس مشترک
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"]        }      }    ]  }}
نمونه ۲ب: پروفایل برنامه‌نویسی سراسری + عامل صرفاً پیام‌رسان
json
{  "tools": { "profile": "coding" },  "agents": {    "list": [      {        "id": "support",        "tools": { "profile": "messaging", "allow": ["slack"] }      }    ]  }}

نتیجه:

  • عامل‌های پیش‌فرض ابزارهای برنامه‌نویسی را دریافت می‌کنند.
  • عامل support صرفاً پیام‌رسان است (+ ابزار Slack).
نمونه ۳: حالت‌های متفاوت سندباکس برای هر عامل
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