Setup multi-agent sandbox infrastructure with Docker, Discord, SSH, and Tailscale. Use when: (1) creating a sandboxed agent for cross-gateway collaboration, (2) setting up Discord multi-bot with separate accounts and requireMention gating, (3) configuring socat bridges for container→VPS SSH via Tailscale, (4) enabling bidirectional agent-to-agent communication via sessions_send with per-agent A2A allowlists, (5) sharing a VPS workspace between agents from different OpenClaw gateways, (6) isolati
搭建沙盒化智能体,通过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.json的agents.list下添加:
json
{
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, sessionssend, sessionslist, sessions_history],
deny: [gateway, process, whatsapp_login, cron],
sandbox: {
tools: {
allow: [
exec, process, read, write, edit, apply_patch,
image, websearch, webfetch,
sessionslist, sessionshistory, sessionssend, sessionsspawn,
subagents, session_status, message, browser
],
deny: [
canvas, nodes, gateway, telegram, irc, googlechat,
slack, signal, imessage, whatsapp_login, cron
]
}
}
}
}
关键约束:
使用基于智能体的出站白名单配置双向通信(PR #39102):
json
{
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 ✅
两个智能体还需要为sessions_spawn设置subagents.allowAgents:
json
// 主智能体
subagents: { allowAgents: [sandbox] }
// 沙盒智能体
subagents: { allowAgents: [main-agent] }
必须在两个智能体上都设置。 忘记一个方向 = 静默访问被拒绝错误。
默认沙盒镜像缺少SSH。编辑Dockerfile.sandbox:
dockerfile
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/*
重建并强制重新创建容器:
bash
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
每个主机上两个桥接。始终绑定在172.17.0.1(docker0),绝不使用0.0.0.0。
ini
[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
ini
[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
启用、启动并开放防火墙:
bash
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接口存在之前尝试连接——导致静默失败。
json
discord: {
enabled: true,
accounts: {
default: {
enabled: true,
name: 主机器人,
token: $DISCORDTOKENMAIN,
groupPolicy: allowlist,
dmPolicy: allowlist,
allowFrom: [<你的Discord用户ID>],
guilds: {
<
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 multi-agent-sandbox-1776191191 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 multi-agent-sandbox-1776191191 技能
skillhub install multi-agent-sandbox-1776191191
文件大小: 4.63 KB | 发布时间: 2026-4-15 11:31