mac-mini-server

Set up OpenClaw on Mac Mini as always-on AI server — hardware recommendations, macOS config, Docker Desktop, launchd auto-start, Tailscale remote access, and cost comparison vs VPS. Use when deploying OpenClaw on Mac Mini for 24/7 personal AI.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "mac-mini-server" with this command: npx skills add aiwithabidi/mac-mini-server

🖥️ Mac Mini Server

Complete guide to running OpenClaw on a Mac Mini as an always-on AI server. From hardware selection to monitoring.


1. Hardware Recommendations

Mac Mini M4 (2024) — $499 base

SpecBaseUpgraded
CPU10-core10-core
GPU10-core10-core
RAM16GB32GB (+$200)
Storage256GB512GB (+$200)

Best for: Personal assistant, small team, cloud API-only usage. Recommendation: Upgrade to 32GB RAM ($699 total) — worth it for Docker overhead + future local models.

Mac Mini M4 Pro — $1,399 base

SpecBaseUpgraded
CPU12-core14-core
GPU16-core20-core
RAM24GB48GB (+$200) / 64GB (+$400)
Storage512GB1TB (+$200)

Best for: Local model inference (Ollama), multiple clients, heavy workloads. Recommendation: 48GB RAM ($1,599) for running 7B-13B models locally alongside OpenClaw.

Which One?

Use CasePickWhy
Cloud APIs only (Claude, GPT)M4 32GBPlenty of power, great value
Local + cloud hybridM4 Pro 48GBRun Ollama + OpenClaw together
Multi-client serverM4 Pro 64GBHeadroom for multiple agents
Budget-consciousM4 16GBWorks fine for single user

2. macOS Initial Setup

Disable Sleep & Energy Settings

# Prevent sleep entirely
sudo pmset -a sleep 0
sudo pmset -a disksleep 0
sudo pmset -a displaysleep 0

# Restart after power failure
sudo pmset -a autorestart 1

# Disable hibernation
sudo pmset -a hibernatemode 0

# Verify settings
pmset -g

System Settings UI path: System Settings → Energy → set all to Never.

Enable Auto-Login

  1. System Settings → Users & Groups → Automatic Login → select your user
  2. System Settings → Lock Screen → disable "Require password"

⚠️ Only do this on a physically secure machine. The Mac Mini should be in a locked location.

Disable Automatic Updates Reboots

# Prevent auto-restart for updates
sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate AutomaticallyInstallMacOSUpdates -bool false

Update manually on your schedule instead.

Enable Remote Access

# Enable SSH
sudo systemsetup -setremotelogin on

# Enable Screen Sharing (optional)
sudo defaults write /var/db/launchd.db/com.apple.launchd/overrides.plist com.apple.screensharing -dict Disabled -bool false
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.screensharing.plist

3. Homebrew + Docker Desktop

Install Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

Install Docker Desktop

brew install --cask docker

# Launch Docker Desktop
open -a Docker

# Wait for Docker to start, then verify
docker --version
docker compose version

Docker Desktop Settings:

  • Resources → CPUs: leave 2 for macOS, give rest to Docker
  • Resources → Memory: leave 4GB for macOS, give rest to Docker
  • General → Start Docker Desktop when you sign in: ✅

Install Essential Tools

brew install git node pnpm tailscale jq htop

4. OpenClaw Docker Compose Setup

Clone and Build

cd ~
git clone https://github.com/openclaw/openclaw.git
cd openclaw

# Install dependencies and build
pnpm install
pnpm build

# Build Docker image
docker build -t openclaw:latest .

Configure

mkdir -p ~/.openclaw
cp openclaw.example.json ~/.openclaw/openclaw.json
nano ~/.openclaw/openclaw.json

docker-compose.yml

version: "3.8"
services:
  openclaw-gateway:
    image: openclaw:latest
    container_name: openclaw-gateway
    restart: unless-stopped
    volumes:
      - ~/.openclaw:/home/node/.openclaw
      - ./:/host/openclaw:rw
      - /var/run/docker.sock:/var/run/docker.sock
      - ~/.ssh:/home/node/.ssh:ro
    ports:
      - "127.0.0.1:3000:3000"
    environment:
      - NODE_ENV=production

⚠️ ALWAYS use 127.0.0.1: prefix on ports. Never expose to 0.0.0.0.

Launch

docker compose up -d
docker compose logs -f  # verify startup

5. Launchd Service (Auto-Start on Boot)

Create ~/Library/LaunchAgents/com.openclaw.gateway.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.openclaw.gateway</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/docker</string>
        <string>compose</string>
        <string>-f</string>
        <string>/Users/YOUR_USER/openclaw/docker-compose.yml</string>
        <string>up</string>
        <string>-d</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>StandardOutPath</key>
    <string>/tmp/openclaw-launchd.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/openclaw-launchd-err.log</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>PATH</key>
        <string>/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin</string>
    </dict>
</dict>
</plist>
# Replace YOUR_USER with actual username
sed -i '' "s/YOUR_USER/$(whoami)/g" ~/Library/LaunchAgents/com.openclaw.gateway.plist

# Load the service
launchctl load ~/Library/LaunchAgents/com.openclaw.gateway.plist

# Verify
launchctl list | grep openclaw

6. Tailscale for Remote Access

# Install (already done via brew)
brew install --cask tailscale

# Or use CLI version
brew install tailscale

# Start and authenticate
sudo tailscale up

# Get your Tailscale IP
tailscale ip -4

# Enable Tailscale Serve for HTTPS
tailscale serve https / http://127.0.0.1:3000

Access from Anywhere

  • SSH: ssh user@100.x.x.x
  • OpenClaw: https://mac-mini.tail-xxxxx.ts.net
  • No port forwarding needed
  • End-to-end encrypted

Tailscale ACLs (recommended)

In the Tailscale admin console, restrict who can access the Mac Mini:

{
  "acls": [
    {"action": "accept", "src": ["your-devices"], "dst": ["mac-mini:*"]}
  ]
}

7. Telegram Bot Configuration

# 1. Create bot via @BotFather on Telegram
# 2. Get your user ID via @userinfobot
# 3. Edit config
nano ~/.openclaw/openclaw.json

Add to config:

{
  "channels": {
    "telegram": {
      "enabled": true,
      "token": "YOUR_BOT_TOKEN",
      "dmPolicy": "allowlist",
      "dmAllowlist": ["YOUR_USER_ID"]
    }
  }
}
# Restart to apply
docker compose restart

8. Port Forwarding Alternatives

If Tailscale isn't an option:

MethodProsCons
Tailscale (recommended)Zero config, encrypted, freeRequires client on each device
Cloudflare TunnelFree, no open portsSlight latency, CF dependency
ngrokEasy setupFree tier limited, costs for production
Router port forwardingDirect accessSecurity risk, dynamic IP issues
WireGuardFast, self-hostedManual setup, maintain yourself

Cloudflare Tunnel (alternative to Tailscale)

brew install cloudflared
cloudflared tunnel login
cloudflared tunnel create openclaw
cloudflared tunnel route dns openclaw agent.yourdomain.com

# Create config: ~/.cloudflared/config.yml
cat > ~/.cloudflared/config.yml << EOF
tunnel: YOUR_TUNNEL_ID
credentials-file: /Users/$USER/.cloudflared/YOUR_TUNNEL_ID.json
ingress:
  - hostname: agent.yourdomain.com
    service: http://localhost:3000
  - service: http_status:404
EOF

cloudflared tunnel run openclaw

9. UPS Recommendations

A UPS prevents data corruption during power outages and gives time for graceful shutdown.

ModelCapacityRuntimePriceBest For
APC BE425M425VA~15min$55Budget, Mac Mini only
CyberPower CP685AVRG685VA~20min$80Mac Mini + router
APC BR700G700VA~25min$120Mac Mini + monitor + router
CyberPower CP1500PFCLCD1500VA~45min$220Full setup with margin

Recommendation: CyberPower CP685AVRG — enough for Mac Mini + router, good price-to-runtime ratio.

Auto-Shutdown on Power Loss

# macOS reads UPS status via USB automatically
# Configure in System Settings → Energy → UPS
# Set: "Shut down after using UPS battery for: 10 minutes"

10. Monitoring and Alerts

Basic Health Check Script

Save as ~/{baseDir}/scripts/health_check.sh:

#!/bin/bash
# Check if OpenClaw container is running
if ! docker ps | grep -q openclaw-gateway; then
    echo "$(date): OpenClaw container not running! Restarting..." >> /tmp/openclaw-monitor.log
    cd ~/openclaw && docker compose up -d
    # Send alert via Telegram (if bot is available on host)
    curl -s "https://api.telegram.org/botYOUR_TOKEN/sendMessage" \
      -d "chat_id=YOUR_ID&text=⚠️ OpenClaw was down. Auto-restarted."
fi

Cron-Based Monitoring

crontab -e
# Check every 5 minutes
*/5 * * * * bash ~/{baseDir}/scripts/health_check.sh

System Metrics

# Install monitoring tools
brew install htop btop

# Check resources
htop                          # Interactive process viewer
docker stats                  # Container resource usage
df -h                         # Disk space

Uptime Monitoring (External)

Consider free external monitors:


11. Cost Comparison

Mac Mini M4 32GB ($699 one-time)

ItemMonthly Cost
Electricity (~15W average)~$2
Internet (existing)$0
TailscaleFree
AI APIs$50-500
Total$52-502/mo
Year 1 (with hardware)$1,323-6,723
Year 2+$624-6,024

VPS (Hetzner CX32 — 4 vCPU, 8GB RAM)

ItemMonthly Cost
Server$15
AI APIs$50-500
Total$65-515/mo
Year 1$780-6,180

Cloud (AWS t3.large)

ItemMonthly Cost
EC2$60
Storage$10
Bandwidth$5-20
AI APIs$50-500
Total$125-590/mo
Year 1$1,500-7,080

Verdict

FactorMac MiniVPSCloud
Upfront cost$699$0$0
Monthly costLowestLowHighest
PerformanceBest (M4 chip)GoodGood
LatencyDepends on internetConsistentConsistent
MaintenanceYou handleManagedManaged
Local models✅ Yes❌ No❌ Expensive
Break-even vs VPS~4 years

TL;DR: Mac Mini wins if you want local model capability or plan to run 2+ years. VPS wins for simplicity and no upfront cost. Cloud is for enterprises with compliance needs.


Quick Start Checklist

  • Buy Mac Mini (M4 32GB recommended)
  • macOS setup (disable sleep, auto-login, SSH)
  • Install Homebrew, Docker, tools
  • Clone and build OpenClaw
  • Configure openclaw.json
  • docker compose up -d
  • Set up launchd auto-start
  • Install and configure Tailscale
  • Set up Telegram bot
  • Connect UPS
  • Configure health monitoring
  • Test reboot recovery

Credits

Built by M. Abidi | agxntsix.ai YouTube | GitHub Part of the AgxntSix Skill Suite for OpenClaw agents.

📅 Need help setting up OpenClaw for your business? Book a free consultation

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Charging Ledger

充电记录账本 - 从截图提取充电信息并记录,支持按周、月查询汇总。**快速暗号**: 充电记录、充电账本、充电汇总。**自然触发**: 记录充电、查询充电费用、充电统计。

Registry SourceRecently Updated
General

qg-skill-sync

从团队 Git 仓库同步最新技能到本机 OpenClaw。支持首次设置、定时自动更新、手动同步和卸载。当用户需要同步技能、设置技能同步、安装或更新团队技能,或提到「技能同步」「同步技能」时使用。

Registry SourceRecently Updated
General

Ad Manager

广告投放管理 - 自动管理广告投放、优化ROI、生成报告。适合:营销人员、电商运营。

Registry SourceRecently Updated