Agent coordination

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

Status: active

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


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

نمونه ۱: عامل شخصی + عامل خانوادگی محدود
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 و در گفت‌وگوی جاری را دارد.
نمونه ۲: عامل کاری با sandbox مشترک
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).
نمونه ۳: حالت‌های متفاوت sandbox برای هر عامل
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.entries.*.*) هر دو وجود داشته باشند:

پیکربندی sandbox

تنظیمات مختص عامل، تنظیمات سراسری را بازنویسی می‌کنند:

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

محدودیت‌های ابزار

ترتیب پالایش به این صورت است:

  • نمایه ابزار

    tools.profile یا agents.entries.*.tools.profile.

  • نمایه ابزار ارائه‌دهنده

    tools.byProvider[provider].profile یا agents.entries.*.tools.byProvider[provider].profile.

  • سیاست ابزار سراسری

    tools.allow / tools.deny.

  • سیاست ابزار ارائه‌دهنده

    tools.byProvider[provider].allow/deny.

  • سیاست ابزار مختص عامل

    agents.entries.*.tools.allow/deny.

  • سیاست ارائه‌دهنده عامل

    agents.entries.*.tools.byProvider[provider].allow/deny.

  • سیاست ابزار sandbox

    tools.sandbox.tools یا agents.entries.*.tools.sandbox.tools.

  • سیاست ابزار زیرعامل

    tools.subagents.tools، در صورت کاربرد.

  • قواعد تقدم
    • هر سطح می‌تواند ابزارها را بیشتر محدود کند، اما نمی‌تواند ابزارهای ردشده در سطوح قبلی را دوباره مجاز کند.
    • اگر agents.entries.*.tools.sandbox.tools تنظیم شده باشد، برای آن عامل جایگزین tools.sandbox.tools می‌شود.
    • اگر agents.entries.*.tools.profile تنظیم شده باشد، برای آن عامل tools.profile را بازنویسی می‌کند.
    • کلیدهای ابزار ارائه‌دهنده، provider (برای مثال google-antigravity) یا provider/model (برای مثال openai/gpt-5.4) را می‌پذیرند.
    رفتار فهرست مجاز خالی

    اگر هر فهرست مجاز صریح در این زنجیره باعث شود هیچ ابزار قابل‌فراخوانی برای اجرا باقی نماند، OpenClaw پیش از ارسال پرامپت به مدل متوقف می‌شود. این رفتار عمدی است: عاملی که با ابزار مفقودی مانند agents.entries.*.tools.allow: ["query_db"] پیکربندی شده است، باید تا زمان فعال‌شدن Plugin ثبت‌کننده query_db با خطایی آشکار متوقف شود، نه اینکه به‌عنوان عاملی فقط متنی ادامه دهد.

    سیاست‌های ابزار از صورت‌های کوتاه group:* پشتیبانی می‌کنند که به چندین ابزار گسترش می‌یابند. برای فهرست کامل، به گروه‌های ابزار مراجعه کنید.

    بازنویسی‌های ارتقایافته هر عامل (agents.entries.*.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"


    آزمایش

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

  • بررسی تفکیک عامل

    bash
    openclaw agents list --bindings
  • تأیید کانتینرهای sandbox

    bash
    docker ps --filter "name=openclaw-sbx-"
  • آزمایش محدودیت‌های ابزار

    • پیامی بفرستید که به ابزارهای محدودشده نیاز داشته باشد.
    • تأیید کنید که عامل نمی‌تواند از ابزارهای ردشده استفاده کند.
  • پایش گزارش‌ها

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

  • عیب‌یابی

    عامل با وجود `mode: 'all'` در sandbox قرار نگرفته است
    • بررسی کنید آیا agents.defaults.sandbox.mode سراسری وجود دارد که آن را بازنویسی کند.
    • پیکربندی مختص عامل تقدم دارد، بنابراین agents.entries.*.sandbox.mode: "all" را تنظیم کنید.
    ابزارهایی که با وجود فهرست منع همچنان در دسترس‌اند
    کانتینر برای هر عامل به‌صورت جداگانه ایزوله نشده است
    • مقدار پیش‌فرض scope برابر با "agent" است (یک کانتینر برای هر شناسهٔ عامل).
    • برای اختصاص یک کانتینر به هر نشست، scope: "session" را تنظیم کنید؛ یا برای استفادهٔ مجدد از یک کانتینر میان عامل‌ها، scope: "shared" را تنظیم کنید.

    مرتبط

    Was this useful?
    On this page

    On this page