Why AI Agents need operation-level sandboxes
LLM-driven Agents no longer just autocomplete a few lines — they read and write files, invoke terminals, pull dependencies, and call external APIs. On macOS you often still need Xcode, code signing, and on-device Apple Neural Engine inference; Linux containers cannot provide that stack, while running Agents bare on your daily MacBook means they share the same permission plane as your SSH keys, Keychain, and IDE global storage.
OpenClaw is ZovCloud’s sandbox layer on dedicated Mac mini M4 hardware: each task gets configurable, traceable, stoppable boundaries while keeping full native macOS capabilities. Unlike handing over the whole machine, sandbox sessions carry independent policies and audit streams — Owners can revoke tokens and terminate active jobs at any time.
This article covers everything from a solo session to “team + CI production.” After reading you should be able to: provision a node → initialize OpenClaw → author policy YAML → assign roles → spin up isolated review sessions in GitHub Actions → query and export audit logs.
Written against OpenClaw 1.4.2 on macOS Sequoia 15.3, tested on a Singapore-node Mac mini M4 (10-core · 16 GB · 256 GB SSD). Console UI may shift between releases; CLI semantics and YAML field structure stay stable.
Prerequisites: node, network, and permission expectations
OpenClaw runs on ZovCloud dedicated physical hardware — it is not sold as standalone software licensing. You need a delivered Mac mini M4 node first. On the order page, pick one of five regions (Singapore, Japan, Korea, Hong Kong, US East); base plans start at $19.8/day, provision in 1–5 minutes after payment, with SSH and VNC credentials emailed automatically.
First-time initialization requests macOS Endpoint Security authorization (file and process auditing) plus network filter extension permissions. If your corporate network uses outbound proxies, confirm Agent API domains are reachable or pre-seed allowlist entries in policy YAML. For teams, have the Owner finish initialization before inviting Operators and Auditors — multiple people triggering ES prompts at once causes confusion.
Console initialization: from instance to first claw status
-
01
Sign in to the console and open instance details
Under My Instances, select the target Mac mini M4 and confirm it is running. On fresh nodes, SSH in first to verify disk and network connectivity.
-
02
Open the OpenClaw tab and run zero-trust initialization
First visit generates an Ed25519 key pair, installs the
com.zovcloud.openclaw.daemonservice, and creates/var/log/openclaw/for audits. Follow on-screen prompts for ES and network extension approval. -
03
Configure members and access policies
Under Access Control, add collaborators and assign Owner / Operator / Auditor roles. Operators can start sandbox sessions; Auditors can read audit logs only — no policy edits.
-
04
Download the CLI bundle and token, then verify
The console provides a one-line install script. SSH to the node and run
claw status— expectdaemon: runningandauth: valid. If not, runclaw doctorfirst.
After initialization, the dashboard shows active session counts, per-session CPU/RAM usage, BLOCK events in the last 24 hours, and can export PDF compliance summaries for security review. Set alerts on BLOCK spikes so loose policies do not go unnoticed.
CLI command groups and daily ops rhythm
Day-to-day work revolves around claw. We group commands by responsibility for easier scripting:
# Health checks
claw status
claw doctor
# Session lifecycle
claw run --config policy.yaml
claw run --template ci-review --detach
claw attach <session-id>
claw stop <session-id>
claw list
# Policy templates
claw template list
claw template export agent > policy.yaml
claw template save my-ci-policy
# Audit and network probes
claw audit tail <session> --follow
claw audit query --since 24h --action BLOCK
claw audit export <session> --format json
claw net test --domain api.openai.com
Include claw doctor in routine checks: daemon health, Endpoint Security authorization, audit directory writability, token expiry.
When sandbox start fails with vague errors, diagnose first — common causes are expired ES approval or a missing workspace path.
In production, use different templates for CI vs human tasks: ci-review leans read-only with a narrow network allowlist;
agent-dev allows workspace and DerivedData writes but always denies ~/.ssh and Keychain paths.
Production policy.yaml: field meanings and pitfalls
The policy file is the single source of truth for sandbox boundaries. Below is a full config commonly used for production Agents, with section notes:
version: "1"
session:
name: "prod-agent"
auto_cleanup: false
max_duration: "4h"
idle_timeout: "30m"
filesystem:
workspace: "~/agent-workspace"
readonly_mounts:
- /Applications
- /usr/local/bin
- /Library/Developer
deny:
- ~/.ssh
- ~/Library/Keychains
- ~/Library/Application Support/Cursor/User/globalStorage
syscalls:
preset: "agent"
deny: [ptrace, setuid, mount]
network:
allow_domains:
- "api.openai.com"
- "api.anthropic.com"
- "*.github.com"
- "registry.npmjs.org"
- "pypi.org"
block_all_others: true
log_blocked: true
The session block controls lifecycle: max_duration stops unattended jobs from holding 16 GB RAM indefinitely;
idle_timeout reclaims resources after Agent inactivity; auto_cleanup: false suits code-generation tasks where you need to keep artifacts.
In filesystem, deny wins over readonly_mounts.
OpenClaw resolves symlink targets — if Homebrew tools point into Cellar, add Cellar to readonly mounts or git / python3 calls fail silently.
For network, keep block_all_others: true and enable log_blocked: true:
unauthorized egress is dropped quietly, but the audit stream still records attempts to reach unknown domains.
Besides /Applications/Xcode.app, mount /Library/Developer
and make ~/Library/Developer/Xcode/DerivedData a writable workspace subpath.
Missing DerivedData forces full rebuilds — we have seen 3–5× slower compiles, and one case where an Agent wiped cache and triggered an 18-minute clean build.
Multi-user zero trust: roles, tokens, and collaboration boundaries
In team setups, assign three roles under least privilege. Each role authenticates with its own CLI token (default 24-hour TTL); Owners can revoke tokens and kill matching active sessions. Issue time-limited Guest tokens for external consultants — they expire without touching the master policy file.
| Role | Start sandbox | View audit | Edit policy | Typical user |
|---|---|---|---|---|
| Owner | Yes | Yes | Yes | Tech lead / DevOps |
| Operator | Yes | Yes | No | Day-to-day developer |
| Auditor | No | Yes | No | Security / compliance |
Zero trust here means every CLI call carries a short-lived token; policy changes and high-risk actions (like widening network allowlists) are Owner-only,
and every ALLOW/BLOCK event lands in a tamper-evident audit stream.
Do not put Owner tokens in CI secret stores — create scoped Operator tokens for pipelines, bound to the ci-review template only.
GitHub Actions integration: one sandbox session per PR
After registering your ZovCloud M4 as a self-hosted Runner, you can spin up an isolated sandbox for each AI code review in a PR pipeline. Pattern: start session → run Agent inside sandbox → export audit regardless of outcome → stop session.
# .github/workflows/ai-review.yml
name: AI Code Review (Sandboxed)
on: [pull_request]
jobs:
review:
runs-on: self-hosted
steps:
- uses: actions/checkout@v4
- name: Start OpenClaw sandbox
run: |
claw run --template ci-review --detach
SESSION=$(claw list --json | jq -r '.[0].id')
echo "SESSION_ID=$SESSION" >> $GITHUB_ENV
- name: Run AI review agent
run: |
claw attach $SESSION_ID --exec \
"claude -p 'Review this PR for security issues'"
- name: Export audit log
if: always()
run: |
claw audit export $SESSION_ID \
--format json \
--output audit-${{ github.run_id }}.json
- name: Stop sandbox
if: always()
run: claw stop $SESSION_ID
Store the ci-review template YAML under .openclaw/ in the repo, versioned with the workflow —
policy changes go through Code Review so security can inspect effective boundaries.
When multiple projects share one node, register different Runner labels per repo, or use OpenClaw to cap each session’s filesystem scope so Agents cannot read other projects’ source trees.
Audit logs, alerts, and common troubleshooting
To investigate anomalies, filter the audit stream by time and type:
claw audit query --since 7d --action BLOCK --type network --format table
claw audit query --since 24h --action BLOCK --type write --format json \
| jq '.[] | select(.target | contains("/etc"))'
Compliance exports support JSON, CSV, and PDF. PDFs include session summaries, ALLOW/BLOCK stats, policy snapshots, and timelines — ready for auditors.
The console can alert on rules like “BLOCK > 50 per hour in one session” or “attempt to read ~/.ssh”, notifying Owners via email or Webhook.
| Symptom | Likely cause | Fix |
|---|---|---|
| git / python calls fail | Tool path not mounted | Check symlinks; add Cellar to readonly_mounts |
| Xcode builds very slow | DerivedData not writable | Add writable workspace subpath |
claw run times out |
ES authorization expired | Re-authorize per claw doctor |
| All network BLOCKed | Domain not allowlisted | Verify with claw net test |
| Audit disk usage high | High-frequency job log growth | Rotate logs or raise filter thresholds |
Full auditing costs ~3% CPU on M4 ten-core — negligible for most workloads.
Latency-sensitive edge cases can drop fine-grained syscall auditing and keep file/network layers only; production should still prefer full audit.
Pre-launch checklist: one session per task; policy YAML in Git with review;
~/.ssh, Keychain, and IDE global storage always denied; default-deny network with explicit allowlist;
set max_duration and idle_timeout; export audit in CI with if: always(); configure BLOCK alerts.
When to run OpenClaw on a cloud dedicated Mac instead of locally
Running Agents bare on a MacBook: same privileges as your daily driver, no operation-level audit, swap on 8 GB machines during long jobs, hard to run CI 7×24. Public cloud macOS instances are often virtualized — Neural Engine passthrough and built-in sandboxing are missing, and minimum terms or per-minute pricing can beat flexible daily physical hardware. GitHub Actions macOS Runners bill per minute at high rates, share environments, offer little policy control, and queue badly at peak hours.
ZovCloud offers dedicated Mac mini M4 hardware ($19.8/day, $53.5/week, $99.1/month from), built-in OpenClaw, five regions with 1–5 minute delivery, and 7×24 human support — the collaboration, CI, and audit flows in this guide assume that out-of-the-box stack. Evaluating whether to move Agents off a overloaded laptop? Rent by the day in Singapore or Japan, run the same repo and Agent task, compare audit completeness and completion time, then decide if production review pipelines should live in the cloud.
When your rental ends or you cancel, ZovCloud runs secure disk wipe automatically; archive audit logs with claw audit export to object storage before releasing the node so compliance artifacts are not destroyed with the instance.
For a lighter first pass, try the five-minute quickstart, then extend into team and CI scenarios using this guide.
Bring OpenClaw sandbox into your production pipeline
ZovCloud Mac mini M4 dedicated node: zero-trust collaboration, full audit logs, 16 GB unified memory and 38 TOPS AI compute — from $19.8/day, no contract lock-in.