Skip to content

Instantly share code, notes, and snippets.

@romanlv
Created April 8, 2026 04:08
Show Gist options
  • Select an option

  • Save romanlv/0292a024125b7afd39f92b762d640012 to your computer and use it in GitHub Desktop.

Select an option

Save romanlv/0292a024125b7afd39f92b762d640012 to your computer and use it in GitHub Desktop.
Example openclaw.json showing sandbox defaults, per-agent overrides, and channel bindings. Companion to blog post.
FROM debian:bookworm-slim
# Install essential tools
RUN apt-get update && apt-get install -y \
# Basics
curl \
unzip \
ca-certificates \
git \
# JSON/text processing
jq \
ripgrep \
# File utilities
tree \
file \
# Database
sqlite3 \
# Remote access
openssh-client \
# Media processing
ffmpeg \
imagemagick \
# Python + yt-dlp for transcripts
python3 \
python3-pip \
&& pip3 install --break-system-packages yt-dlp \
&& rm -rf /var/lib/apt/lists/*
# Install Bun.js to a shared location accessible by any uid
RUN curl -fsSL https://bun.sh/install | BUN_INSTALL=/usr/local bash
RUN bun --version
# Install Node.js (required by Lobster CLI shebang)
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y nodejs \
&& rm -rf /var/lib/apt/lists/*
# Install OpenClaw CLI and Lobster CLI
RUN npm install -g openclaw @clawdbot/lobster
WORKDIR /workspace
CMD ["/bin/bash"]
// Excerpt from ~/.openclaw/openclaw.json
// Shows multi-agent sandboxing: shared defaults, per-agent overrides, and channel routing.
{
"agents": {
"defaults": {
"sandbox": {
"mode": "all",
"workspaceAccess": "rw",
"scope": "session",
"docker": {
"image": "openclaw-sandbox:my-image",
"readOnlyRoot": true,
"tmpfs": ["/tmp", "/var/tmp", "/run"],
"network": "bridge",
"dns": ["8.8.8.8", "1.1.1.1"],
"extraHosts": ["host.docker.internal:host-gateway"],
"binds": [
"/Users/roman/.openclaw/scripts/Dockerfile.sandbox:/home/.openclaw/scripts/Dockerfile.sandbox:ro",
"/Users/roman/dev/ai/openclaw:/home/openclaw-src:ro"
],
"dangerouslyAllowExternalBindSources": true
},
"browser": { "allowHostControl": true }
}
},
"list": [
{
"id": "main",
"default": true,
"workspace": "/Users/roman/.openclaw/workspace",
"sandbox": {
"docker": {
"binds": [
"/Users/roman/.openclaw/agents/main:/home/.openclaw/agents/main:ro"
]
}
}
},
{
"id": "family-agent",
"name": "Family Agent",
"workspace": "/Users/roman/.openclaw/workspace-family",
"tools": {
"sandbox": {
"tools": {
"alsoAllow": ["message"],
"deny": ["canvas", "nodes", "gateway", "whatsapp", "discord", "irc", "googlechat", "signal", "imessage"]
}
}
},
"sandbox": {
"docker": {
"binds": [
"/Users/roman/.openclaw/agents/family-agent:/home/.openclaw/agents/family-agent:ro"
]
}
}
}
]
},
"bindings": [
{ "agentId": "family-agent", "match": { "channel": "telegram", "accountId": "family" } }
],
"cron": { "enabled": true }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment