Skip to content

多代理沙箱與工具

在多代理設定中,每個代理都可以覆寫全域沙箱與工具政策。本頁涵蓋個別代理的設定、優先規則與範例。

沙箱隔離

後端與模式 — 完整沙箱參考。

沙箱 vs 工具政策 vs 提升權限

偵錯「為什麼被阻擋?」

提升權限模式

針對信任發送者的提升權限執行。


範例 1:個人 + 受限的家庭代理程式
{
"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",
}
}
}
]
}

結果:

  • main 代理程式:在主機上執行,具有完整的工具存取權限。
  • family 代理程式:在 Docker 中執行(每個代理程式一個容器),僅能 read 和傳送目前對話的訊息。
範例 2:具有共用沙箱的工作代理
{
"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"]
}
}
]
}
}
範例 2b:全域編碼設定檔 + 僅訊息代理程式
{
"tools": { "profile": "coding" },
"agents": {
"list": [
{
"id": "support",
"tools": { "profile": "messaging", "allow": ["slack"] }
}
]
}
}

結果:

  • 預設代理程式取得編碼工具。
  • support 代理程式僅用於傳訊 (+ Slack 工具)。
範例 3:每個代理程式的不同沙箱模式
{
"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[].*) 設定同時存在時:

特定代理程式的設定會覆寫全域設定:

agents.list[].sandbox.mode > agents.defaults.sandbox.mode
agents.list[].sandbox.scope > agents.defaults.sandbox.scope
agents.list[].sandbox.workspaceRoot > agents.defaults.sandbox.workspaceRoot
agents.list[].sandbox.workspaceAccess > agents.defaults.sandbox.workspaceAccess
agents.list[].sandbox.docker.* > agents.defaults.sandbox.docker.*
agents.list[].sandbox.browser.* > agents.defaults.sandbox.browser.*
agents.list[].sandbox.prune.* > agents.defaults.sandbox.prune.*

篩選順序如下:

  1. 工具設定檔

    tools.profileagents.list[].tools.profile

  2. 提供者工具設定檔

    tools.byProvider[provider].profileagents.list[].tools.byProvider[provider].profile

  3. 全域工具原則

    tools.allow / tools.deny

  4. 提供者工具原則

    tools.byProvider[provider].allow/deny

  5. 特定代理程式工具原則

    agents.list[].tools.allow/deny

  6. 代理程式提供者原則

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

  7. 沙箱工具原則

    tools.sandbox.toolsagents.list[].tools.sandbox.tools

  8. 子代理程式工具原則

    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)可以進一步限制特定代理程式的提升執行權限。詳情請參閱 提升模式


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


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


配置多代理程式沙箱和工具後:

  1. 檢查代理程式解析

    Terminal window
    openclaw agents list --bindings
  2. 驗證沙箱容器

    Terminal window
    docker ps --filter "name=openclaw-sbx-"
  3. 測試工具限制

    • 傳送一條需要受限工具的訊息。
    • 驗證代理程式無法使用被拒絕的工具。
  4. 監控日誌

    Terminal window
    tail -f "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}/logs/gateway.log" | grep -E "routing|sandbox|tools"

儘管設定了 `mode: 'all'`,代理程式仍未進入沙箱
  • 檢查是否存在覆蓋它的全域 agents.defaults.sandbox.mode
  • 代理程式專用配置具有優先權,因此請設定 agents.list[].sandbox.mode: "all"
儘管有拒絕清單,工具仍可用
  • 檢查工具過濾順序:global → agent → sandbox → subagent。
  • 每個層級只能進一步限制,不能重新授予權限。
  • 透過日誌驗證:[tools] filtering tools for agent:${agentId}
容器未按代理程式隔離
  • 在代理程式專用的沙箱設定中設定 scope: "agent"
  • 預設值為 "session",這會為每個 session 建立一個容器。