Quick Start
openclaw profile provides:
- Read-only access to the current working directory (Node.js requires this at startup)
- Read+write access to
~/.openclawand~/.config/openclaw(agent config and state) - Read+write access to
~/.local(OpenClaw data/state) - Read+write access to
$TMPDIR/openclaw-$UID(temporary files) - Network access enabled (required for messaging APIs)
Why Sandbox OpenClaw?
OpenClaw agents receive messages from external users and can execute commands on the host system. Without proper isolation:- A malicious message could trick an agent into accessing sensitive files
- Compromised agent code could exfiltrate credentials from
~/.openclaw/ - An agent could be used as a pivot point to attack other systems on the network
nono has already proven capable of stopping some nasty reported CVEs from exploiting live systems, as its protections are impossible to overide
Custom Profile
If you need different permissions, create a custom profile at~/.config/nono/profiles/openclaw-strict.toml:
--trust-unsigned):
Custom profiles override built-in profiles of the same name. If you create
~/.config/nono/profiles/openclaw.toml, it will be used instead of the built-in.Security Tips
Protect Credentials
OpenClaw stores sensitive data in~/.openclaw/ including:
- Channel authentication tokens (WhatsApp sessions, Telegram bot tokens)
- OAuth credentials
- API keys for AI providers
$TELEGRAM_BOT_TOKEN and $OPENAI_API_KEY environment variables. OpenClaw reads these automatically.
Secrets are loaded before the sandbox is applied, then zeroized from nono’s memory after
exec(). The sandboxed process cannot access the keystore directly - it only receives the specific secrets you authorized.Limit Agent Filesystem Access
The built-in profile grants access to OpenClaw’s config directories. To also grant access to a project directory:Network Considerations
OpenClaw requires network access to communicate with:- Messaging platform APIs (WhatsApp, Telegram, Discord, Mattermost)
- AI provider APIs (OpenAI, Anthropic, etc.)
- Optional web search APIs (Brave Search)
Running as a Daemon
When running OpenClaw as a system service, wrap the daemon command with nono: macOS (launchd):Combine with OpenClaw’s Built-in Sandbox
OpenClaw has its own sandboxing option for group/channel sessions. Layer both for defense in depth:- nono: OS-level isolation (Landlock/Seatbelt) - cannot be bypassed by code
- OpenClaw sandbox: Application-level isolation - easier to configure per-agent
Strict Mode Example
For high-security deployments where agents should have minimal access:- Reads config from
~/.openclaw(no writes) - Reads agent code from
~/agents/my-agent - Only allows writes to the workspace subdirectory
- Loads
$TELEGRAM_BOT_TOKENand$OPENAI_API_KEYfrom the system keystore
Already Using Containers?
If you’re running OpenClaw in Docker or Podman, you already have solid isolation. Containers provide process isolation, resource limits, and filesystem separation that protect your host system. That said, there are tradeoffs to consider:| Aspect | nono | Containers |
|---|---|---|
| Startup overhead | ~0ms | ~100-500ms |
| Host file access | Direct | Requires volume mounts |
| Credential blocking | Automatic | Manual (don’t mount ~/.ssh, etc.) |
| Resource limits | No | Yes |
| Environment isolation | No | Yes |
- You need CPU/memory limits to prevent runaway agents
- You want a reproducible environment across machines
- You’re already using container orchestration (Kubernetes, etc.)
- You need fast startup for interactive use
- You want to work directly on host files without volume mount complexity
- You want automatic credential protection without manual configuration
- You want protection from destructive commands like
rm -rf,dd, andchmod
