Skills 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.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/aiwithabidi/mac-mini-server" ~/.claude/skills/clawdbot-skills-mac-mini-server && rm -rf "$T"
skills/aiwithabidi/mac-mini-server/SKILL.md🖥️ 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
| Spec | Base | Upgraded |
|---|---|---|
| CPU | 10-core | 10-core |
| GPU | 10-core | 10-core |
| RAM | 16GB | 32GB (+$200) |
| Storage | 256GB | 512GB (+$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
| Spec | Base | Upgraded |
|---|---|---|
| CPU | 12-core | 14-core |
| GPU | 16-core | 20-core |
| RAM | 24GB | 48GB (+$200) / 64GB (+$400) |
| Storage | 512GB | 1TB (+$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 Case | Pick | Why |
|---|---|---|
| Cloud APIs only (Claude, GPT) | M4 32GB | Plenty of power, great value |
| Local + cloud hybrid | M4 Pro 48GB | Run Ollama + OpenClaw together |
| Multi-client server | M4 Pro 64GB | Headroom for multiple agents |
| Budget-conscious | M4 16GB | Works 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
- System Settings → Users & Groups → Automatic Login → select your user
- 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
prefix on ports. Never expose to127.0.0.1:.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:
| Method | Pros | Cons |
|---|---|---|
| Tailscale (recommended) | Zero config, encrypted, free | Requires client on each device |
| Cloudflare Tunnel | Free, no open ports | Slight latency, CF dependency |
| ngrok | Easy setup | Free tier limited, costs for production |
| Router port forwarding | Direct access | Security risk, dynamic IP issues |
| WireGuard | Fast, self-hosted | Manual 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.
| Model | Capacity | Runtime | Price | Best For |
|---|---|---|---|---|
| APC BE425M | 425VA | ~15min | $55 | Budget, Mac Mini only |
| CyberPower CP685AVRG | 685VA | ~20min | $80 | Mac Mini + router |
| APC BR700G | 700VA | ~25min | $120 | Mac Mini + monitor + router |
| CyberPower CP1500PFCLCD | 1500VA | ~45min | $220 | Full 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:
- UptimeRobot — ping your Tailscale Serve URL
- Healthchecks.io — cron job monitoring (ping on success)
11. Cost Comparison
Mac Mini M4 32GB ($699 one-time)
| Item | Monthly Cost |
|---|---|
| Electricity (~15W average) | ~$2 |
| Internet (existing) | $0 |
| Tailscale | Free |
| 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)
| Item | Monthly Cost |
|---|---|
| Server | $15 |
| AI APIs | $50-500 |
| Total | $65-515/mo |
| Year 1 | $780-6,180 |
Cloud (AWS t3.large)
| Item | Monthly Cost |
|---|---|
| EC2 | $60 |
| Storage | $10 |
| Bandwidth | $5-20 |
| AI APIs | $50-500 |
| Total | $125-590/mo |
| Year 1 | $1,500-7,080 |
Verdict
| Factor | Mac Mini | VPS | Cloud |
|---|---|---|---|
| Upfront cost | $699 | $0 | $0 |
| Monthly cost | Lowest | Low | Highest |
| Performance | Best (M4 chip) | Good | Good |
| Latency | Depends on internet | Consistent | Consistent |
| Maintenance | You handle | Managed | Managed |
| 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