Multi-Agent Sandbox

Polar Sponsor
爱发电 赞助
.NET 9.0

使用 Docker、Discord、SSH 和 Tailscale 搭建多智能体沙箱基础设施。适用于以下场景:(1) 为跨网关协作创建沙箱化智能体……

多代理 Sandbox. 设置沙箱代理,通过Discord和共享的VPS与其他OpenClaw网关的代理合作,而不暴露私人数据.

功能概述

多代理 Sandbox. 设置沙箱代理,通过Discord和共享的VPS与其他OpenClaw网关的代理合作,而不暴露私人数据.是一项面向实际任务的技能,主要用于Architecture.;Three piction: so。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

多智能体沙箱(Multi-Agent Sandbox)

部署隔离的沙箱智能体,通过 Discord 和共享 VPS 与其他 OpenClaw 网关中的智能体协作,同时不暴露私有数据。

架构

网关 A(服务器 A)                  网关 B(服务器 B)
├── 主智能体(完全访问权限)          ├── 主智能体(完全访问权限)
│   agentToAgent.allow: ["*"]         │   agentToAgent.allow: ["*"]
└── 沙箱智能体(Docker)            └── 沙箱智能体(Docker)
    agentToAgent.allow: ["main"]          agentToAgent.allow: ["main"]
    ├── Discord ←── 共享服务器 ──→ Discord
    │                requireMention: true
    └── SSH ─→ socat ─→ Tailscale ─→ 共享 VPS ←── SSH
                                      100.y.y.y

三大支柱:socat 桥接(容器 → 宿主机 → VPS)、Tailscale 网状 VPN(私有网络通信)、Discord + sessions_send(智能体间通信)。

前提条件

  • OpenClaw 已运行,并启用 Docker 沙箱支持
  • 所有机器(服务器 A + VPS + 服务器 B)均已安装 Tailscale
  • 每个沙箱智能体需配置独立的 Discord Bot Token(https://discord.com/developers/applications)
  • 存在一台可通过 Tailscale 访问的共享 VPS

步骤 1 — 创建沙箱智能体

在 openclaw.json 的 agents.list 下添加如下配置:

{
  "id": "sandbox",
  "workspace": "/path/to/workspace-sandbox",
  "model": {
    "primary": "anthropic/claude-sonnet-4-6",
    "fallbacks": ["openai/gpt-4o"]
  },
  "identity": {
    "name": "Sandbox",
    "emoji": "📦"
  },
  "sandbox": {
    "mode": "all",
    "workspaceAccess": "rw",
    "sessionToolsVisibility": "all",
    "scope": "agent",
    "docker": {
      "image": "openclaw-sandbox:bookworm-slim",
      "readOnlyRoot": true,
      "network": "bridge",
      "memory": "1536m",
      "cpus": 2
    },
    "browser": { "enabled": true }
  },
  "tools": {
    "agentToAgent": {
      "allow": ["your-main-agent-id"]
    },
    "alsoAllow": ["message", "sessions_send", "sessions_list", "sessions_history"],
    "deny": ["gateway", "process", "whatsapp_login", "cron"],
    "sandbox": {
      "tools": {
        "allow": [
          "exec", "process", "read", "write", "edit", "apply_patch",
          "image", "web_search", "web_fetch",
          "sessions_list", "sessions_history", "sessions_send", "sessions_spawn",
          "subagents", "session_status", "message", "browser"
        ],
        "deny": [
          "canvas", "nodes", "gateway", "telegram", "irc", "googlechat",
          "slack", "signal", "imessage", "whatsapp_login", "cron"
        ]
      }
    }
  }
}

关键约束说明:

  • sandbox.mode: "all" — 所有 exec 均在 Docker 容器内执行,永不直接运行于宿主机
  • readOnlyRoot: true — 容器根文件系统为只读,仅 workspace 目录可写
  • tools.deny — 禁用 gateway(无法修改配置)、禁用 cron(无法在宿主机上调度任务)
  • scope: "agent" — 每个智能体独占一个隔离容器(合法值:session | agent | shared)

步骤 2 — 智能体到智能体(A2A)权限配置(中心-辐条模式)

使用按智能体配置的出站白名单实现双向通信(PR #39102):

{
  "tools": {
    "agentToAgent": { "enabled": true, "allow": ["*"] }
  },
  "agents": {
    "list": [
      {
        "id": "main-agent",
        "tools": { "agentToAgent": { "allow": ["*"] } }
      },
      {
        "id": "sandbox",
        "tools": { "agentToAgent": { "allow": ["main-agent"] } }
      }
    ]
  }
}

效果:sandbox → main-agent ✅ | sandbox → other-sandbox ❌ | main-agent → anyone ✅

两个智能体还需配置 subagents.allowAgents 以支持 sessions_spawn:

// 主智能体
"subagents": { "allowAgents": ["sandbox"] }

// 沙箱智能体
"subagents": { "allowAgents": ["main-agent"] }

必须在两个智能体上均设置。 遗漏任一方向将导致静默的“访问被拒绝”错误。

步骤 3 — 向 Docker 镜像添加 SSH 支持

默认沙箱镜像不含 SSH。编辑 Dockerfile.sandbox:

RUN apt-get update 
  && apt-get install -y --no-install-recommends 
    bash ca-certificates curl git jq 
    openssh-client 
    python3 ripgrep 
  && rm -rf /var/lib/apt/lists/*

重建并强制重新创建容器:

docker build -f Dockerfile.sandbox -t openclaw-sandbox:bookworm-slim .
docker ps --format "{{.ID}} {{.Image}}" | grep sandbox | awk '{print $1}' | xargs -r docker rm -f

步骤 4 — socat 桥接

每台宿主机需部署两个桥接服务。始终绑定至 172.17.0.1(docker0 接口),切勿 使用 0.0.0.0。

桥接 1:容器 → 网关(本地)

# /etc/systemd/system/socat-bridge-docker0-gateway.service
[Unit]
Description=Socat bridge: docker0 → Gateway
After=network.target docker.service

[Service]
Type=simple
ExecStart=/usr/bin/socat TCP-LISTEN:18789,bind=172.17.0.1,reuseaddr,fork TCP:127.0.0.1:18789
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

桥接 2:容器 → VPS SSH(经 Tailscale)

# /etc/systemd/system/socat-bridge-docker0-vps-ssh.service
[Unit]
Description=Socat bridge: docker0:2222 → VPS Tailscale SSH
After=network.target docker.service tailscaled.service
Wants=tailscaled.service

[Service]
Type=simple
ExecStart=/usr/bin/socat TCP-LISTEN:2222,bind=172.17.0.1,reuseaddr,fork TCP:100.y.y.y:22
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

启用、启动服务并开放防火墙规则:

sudo systemctl daemon-reload
sudo systemctl enable --now socat-bridge-docker0-gateway socat-bridge-docker0-vps-ssh
sudo ufw allow in on docker0 to 172.17.0.1 port 18789 proto tcp comment "socat-gateway"
sudo ufw allow in on docker0 to 172.17.0.1 port 2222 proto tcp comment "socat-vps-ssh"

VPS 桥接依赖 Tailscale(Wants=tailscaled.service)。若缺失该依赖,socat 将在 Tailscale 网络接口就绪前尝试连接,导致静默失败。

步骤 5 — Discord 多机器人配置

创建 Discord 机器人

  1. 访问 https://discord.com/developers/applications → 创建新应用
  2. 进入 Bot 页面 → 重置 Token → 复制新 Token
  3. 启用全部三项 特权网关意图(Privileged Gateway Intents):MESSAGE CONTENT、SERVER MEMBERS、PRESENCE
  4. 邀请链接:https://discord.com/oauth2/authorize?client_id=&permissions=274878024704&scope=bot

在 openclaw.json 中配置

"discord": {
  "enabled": true,
  "accounts": {
    "default": {
      "enabled": true,
      "name": "Main Bot",
      "token": "$DISCORD_TOKEN_MAIN",
      "groupPolicy": "allowlist",
      "dmPolicy": "allowlist",
      "allowFrom": [""],
      "guilds": {
        "": {
          "slug": "private",
          "requireMention": false
        }
      }
    },
    "sandbox": {
      "enabled": true,
      "name": "Sandbox Bot",
      "token": "$DISCORD_TOKEN_SANDBOX",
      "groupPolicy": "allowlist",
      "dmPolicy": "deny",
      "guilds": {
        "": {
          "slug": "shared",
          "requireMention": true
        }
      }
    }
  }
}

智能体路由绑定

"mappings": [
  {
    "agentId": "main-agent",
    "match": { "channel": "discord", "accountId": "default", "guildId": "" }
  },
  {
    "agentId": "sandbox",
    "match": { "channel": "discord", "accountId": "sandbox", "guildId": "" }
  }
]

requireMention: true 在共享服务器中为强制要求。 若未启用,两个机器人将相互响应,引发无限循环及巨额 Token 消耗。

步骤 6 — Tailscale 配置

在所有机器上安装 Tailscale:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh

--ssh 参数启用 Tailscale SSH(基于身份认证,无需管理密钥)。对于无法交互式认证的机器:

# 在 https://login.tailscale.com → Settings → Keys 生成授权密钥
sudo tailscale up --authkey=tskey-auth-xxxxx --ssh

切勿在容器内安装 Tailscale。 其需 NET_ADMIN 权限,违背沙箱设计初衷。请改用 socat 桥接方案。

步骤 7 — 沙箱工作区初始化

创建最小化工作区目录:

mkdir -p /path/to/workspace-sandbox

SOUL.md — 定义智能体身份与约束条件。
TOOLS.md — 记录 SSH 访问方式:ssh -o StrictHostKeyChecking=no root@172.17.0.1 -p 2222

通信模式

# 主智能体 → 沙箱智能体(同一网关)
sessions_send(label="sandbox", message="...")

# 沙箱智能体 → 主智能体(同一网关)
sessions_send(label="main-agent", message="...")

# 智能体 A → 智能体 B(不同网关)
# 仅可通过 Discord @mention 实现。跨网关不可使用 sessions_send。

# 异步协作
# 双方智能体均通过 SSH 连接到 VPS 的 /workspace 目录,以文件为媒介协同。

注意事项

  1. 容器未使用新镜像 — 重建 Docker 镜像后,需手动停止并删除旧容器。OpenClaw 默认复用正在运行的容器。
  2. 跨上下文消息传递 — 由 WhatsApp 触发生成的智能体无法向 Discord 发送消息。首次触发必须来自目标通道。
  3. MESSAGE CONTENT 意图 — 必须在 Discord 开发者门户中启用,否则机器人将收到空消息。
  4. socat 静默超时 — 若 ssh -p 2222 卡住且无报错,请检查 docker0 接口上的 UFW 规则。
  5. 智能体 ID 重命名 — 更改智能体 ID(如 sandbox → spoke)将导致引用旧 ID 的活跃会话失效。应在 agentToAgent.allow 中临时保留旧 ID,直至相关会话过期。
  6. sessions_send 超时设置 — timeoutSeconds: 0 表示即发即弃;timeoutSeconds: 60 表示等待响应。超时 ≠ 消息未送达。
  7. 机器人 Token 泄露 — 切勿在 Discord 频道中发布 Token。一旦泄露,须立即通过开发者门户重置。

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

0

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

0

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

0

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
文心快码功能介绍
文心快码功能介绍

共0课时 | 0人学习

文心快码Agent使用手册
文心快码Agent使用手册

共0课时 | 0人学习

文心快码产品文档
文心快码产品文档

共0课时 | 0人学习