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"], должен завершаться с явной ошибкой, пока не будет включён регистрирующий 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