Deployment runbook: Standalone Mac mini (local-first, high privacy)

March 27, 2026 · View on GitHub

Note: This guide is for OpenClaw (formerly Moltbot/Clawdbot).

Table of contents (Explain OpenClaw)


Goal: run OpenClaw on a dedicated Mac mini at home with minimal network exposure.

If you can, this is the safest default deployment: you control the hardware, disk encryption is easy, and “remote exposure” can be optional.

Related official docs:


  • gateway.bind: "loopback" (localhost only)
  • DM policy: pairing or allowlist
  • Only enable the channels you actually need
  • Avoid exposing browser control remotely
  • Run openclaw security audit --deep after setup and after any config change

Step-by-step setup

If you treat this Mac mini as an "assistant appliance", create a dedicated macOS user (e.g. moltbot) and run the service under that user. This reduces accidental data leakage into your main user's home directory.

Create the user via System Settings, or use dscl for scripted setup:

sudo dscl . -create /Users/moltbot
sudo dscl . -create /Users/moltbot UserShell /bin/zsh
sudo dscl . -create /Users/moltbot UniqueID 550
sudo dscl . -create /Users/moltbot PrimaryGroupID 20
sudo dscl . -create /Users/moltbot NFSHomeDirectory /Users/moltbot
sudo mkdir -p /Users/moltbot
sudo chown moltbot:staff /Users/moltbot

2) Install OpenClaw

curl -fsSL https://openclaw.ai/install.sh | bash

Or:

npm install -g openclaw@latest

Verify Node.js version (22.14.0+ required):

node --version  # Should be v22.14.0 or later

3) Onboard and install the background service

openclaw onboard --install-daemon

This typically sets up a per-user service (launchd) and writes config under ~/.openclaw/.

For automated/headless setup with a custom LLM provider (Ollama, LM Studio, etc.):

export CUSTOM_API_KEY="your-api-key-here"
openclaw onboard --non-interactive --install-daemon \
  --custom-base-url "http://localhost:11434/v1" \
  --custom-model-id "llama3" \
  --custom-compatibility openai

See Non-interactive onboarding flags for all options.

4) Verify basics

openclaw gateway status
openclaw status
openclaw health
openclaw security audit --deep

If the audit suggests fixes:

openclaw security audit --fix

5) Open the dashboard (Control UI)

Local (same machine):

If auth is enabled and you don’t have the token in the browser yet:

openclaw dashboard

Connecting messaging channels (high-level guidance)

OpenClaw supports many channels; two common ones:

WhatsApp

  • Uses WhatsApp Web / Baileys.
  • Login flow typically uses QR code:
openclaw channels login

Docs: https://docs.openclaw.ai/channels/whatsapp

Telegram

  • Uses a bot token created via @BotFather.
  • DM pairing is commonly enabled by default; approve yourself:
openclaw pairing list telegram
openclaw pairing approve telegram <CODE>

Docs: https://docs.openclaw.ai/channels/telegram


Optional: remote access (still private)

Option A (universal): SSH tunnel

From your laptop:

ssh -N -L 18789:127.0.0.1:18789 user@mac-mini

Then open:

Option B (best UX): Tailscale Serve

Keep gateway.bind: "loopback" and use Tailscale Serve to publish the Control UI to your tailnet over HTTPS.

brew install tailscale
tailscale up
sudo tailscale serve --bg --https=443 127.0.0.1:18789
{
  "gateway": {
    "bind": "loopback",
    "tailscale": { "mode": "serve" },
    "auth": { "allowTailscale": true }
  }
}

Access at https://<machine-name>.<tailnet>.ts.net/.

For shields-up, ACLs, and Funnel details, see VPS Tailscale section.

Docs: https://docs.openclaw.ai/gateway/tailscale


Post-Deployment: Read This First

Before you start using OpenClaw daily, read these operational gotchas from real users:

  • The 60% Success Rule — Tasks with >10 steps fail 40% of the time due to context drift
  • "Draft vs Send" Ambiguity — Agents may interpret "draft" as "create and send"
  • Browser Profile Bleed — Using your daily Chrome profile gives agent access to ALL your logged-in accounts
  • Dormancy Trap — Long sessions cause agent to freeze or lose track of context
  • Always-On Cost — Running 24/7 costs more than expected (473 requests/day = $847/month in one case)

See: Operational Gotchas for 10 real-world usage patterns that go wrong and how to fix them.


Host hardening checklist (Mac mini)

Based on VibeProof Security Guide (uses legacy "Moltbot" name) and code review.

Operating System

  • Enable FileVault (full disk encryption)
  • Keep macOS updated: softwareupdate -ia
  • Enable firewall: System Settings → Network → Firewall → Turn On

User Isolation

  • Create a dedicated user (see Step 1 above)
  • Run the gateway service under that user

Node.js Version

Ensure Node.js 22.14.0+ (minimum required per package.json engines field):

node --version  # Should be v22.14.0 or later

Gateway Security

Set a gateway auth token for production:

export GATEWAY_AUTH_TOKEN="$(openssl rand -hex 32)"
# Add to ~/.zprofile or pass via config

Credential Protection

  • Treat ~/.openclaw/ as secret material (mode 0700)
  • Avoid installing random global npm packages

Protect shell history from credential leakage:

# Add to ~/.zshrc or ~/.zprofile
export HISTCONTROL=ignoreboth
export HISTFILESIZE=0

Sandbox Configuration

Enable Docker sandbox for code execution tools:

# In openclaw.json
# "agents.defaults.sandbox.mode": "all"
# "agents.defaults.sandbox.docker.network": "none"

This isolates any successful prompt injection to the container environment.

See: Prompt Injection Attacks for 30 examples of the attack patterns sandbox isolation defends against.


Backups (privacy-first)

If you back up anything, back up only what you understand, and encrypt it.

Consider backing up:

  • your openclaw.json config
  • only the credentials you are comfortable restoring

Avoid backing up:

  • session transcripts (unless you explicitly need them)

Docs: https://docs.openclaw.ai/gateway/security