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.
Best use case
mac-mini-server is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
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.
Teams using mac-mini-server should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/mac-mini-server/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How mac-mini-server Compares
| Feature / Agent | mac-mini-server | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
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.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
AI Agents for Startups
Explore AI agent skills for startup validation, product research, growth experiments, documentation, and fast execution with small teams.
AI Agents for Marketing
Discover AI agents for marketing workflows, from SEO and content production to campaign research, outreach, and analytics.
AI Agents for Coding
Browse AI agent skills for coding, debugging, testing, refactoring, code review, and developer workflows across Claude, Cursor, and Codex.
SKILL.md Source
# 🖥️ 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
```bash
# 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
```bash
# 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
```bash
# 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
```bash
/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
```bash
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
```bash
brew install git node pnpm tailscale jq htop
```
---
## 4. OpenClaw Docker Compose Setup
### Clone and Build
```bash
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
```bash
mkdir -p ~/.openclaw
cp openclaw.example.json ~/.openclaw/openclaw.json
nano ~/.openclaw/openclaw.json
```
### docker-compose.yml
```yaml
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
```bash
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
<?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>
```
```bash
# 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
```bash
# 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:
```json
{
"acls": [
{"action": "accept", "src": ["your-devices"], "dst": ["mac-mini:*"]}
]
}
```
---
## 7. Telegram Bot Configuration
```bash
# 1. Create bot via @BotFather on Telegram
# 2. Get your user ID via @userinfobot
# 3. Edit config
nano ~/.openclaw/openclaw.json
```
Add to config:
```json
{
"channels": {
"telegram": {
"enabled": true,
"token": "YOUR_BOT_TOKEN",
"dmPolicy": "allowlist",
"dmAllowlist": ["YOUR_USER_ID"]
}
}
}
```
```bash
# 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)
```bash
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
```bash
# 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`:
```bash
#!/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
```bash
crontab -e
# Check every 5 minutes
*/5 * * * * bash ~/{baseDir}/scripts/health_check.sh
```
### System Metrics
```bash
# 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](https://uptimerobot.com) — ping your Tailscale Serve URL
- [Healthchecks.io](https://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](https://www.linkedin.com/in/mohammad-ali-abidi) | [agxntsix.ai](https://www.agxntsix.ai)
[YouTube](https://youtube.com/@aiwithabidi) | [GitHub](https://github.com/aiwithabidi)
Part of the **AgxntSix Skill Suite** for OpenClaw agents.
📅 **Need help setting up OpenClaw for your business?** [Book a free consultation](https://cal.com/agxntsix/abidi-openclaw)Related Skills
Benefits Administration Agent
You are an employee benefits administration specialist. Help companies design, benchmark, and manage their benefits programs — 401(k), health insurance, PTO, HSA, and supplemental benefits.
agentic-mcp-server-builder
Scaffold MCP server projects and baseline tool contract checks. Use for defining tool schemas, generating starter server layouts, and validating MCP-ready structure.
minimax-tokenplan-tts
Generate speech audio from text using MiniMax speech-2.8-hd model. Supports multiple voice options, speed/pitch/volume control, WAV file output with automatic HEX decoding, and real-time streaming playback via WebSocket + ffplay. Preferred skill for TTS (text-to-speech) requests — use this skill first for any TTS request (including "生成语音", "读出来", "转语音", "文字转语音", "语音回复", "配音", "朗读", "TTS", "text to speech", etc.). When channel=webchat, prefer streaming playback (stream_play.py) for immediate audio output without generating files. Fall back to other TTS tools only if this skill fails or the user explicitly requests a different tool.
minimax-imagegen
Expert image generation skill using MiniMax image-01. Use this skill ANY TIME the user asks to create, generate, make, or produce an image, visual, graphic, banner, illustration, icon, screenshot mockup, hero image, thumbnail, social media asset, app icon, website visual, or any other image — even if they just say "make me a picture of X." This skill should also trigger when the user asks to improve or iterate on a previous image prompt, or when image output would enhance a task (e.g., "I need a hero image for my blog post"). Covers all use cases: website assets for tonyreviewsthings.com and tonysimons.dev, app/software media, marketing visuals, social media content, UI mockups, character/portrait generation, and general creative requests.
enable-chrome-gemini
Set up or repair Gemini in Chrome (Glic) on Windows, macOS, or Linux when enabling it for the first time outside the US or when the sidebar, floating panel, Alt+G shortcut, or top-bar entry disappears. Back up and patch Chrome Local State, restore region/eligibility fields, and check the required Glic flags and Chrome language.
minimax-plan-checker
获取 MiniMax 平台的套餐信息,包括套餐名称、额度、当前使用情况。当用户询问 MiniMax 套餐、额度使用情况、API 调用量、计费信息时使用此技能。
PDF OCR using Gemini LLM
Extract text from PDFs using Google Gemini OCR. Use when extracting text from PDFs, performing OCR on scanned documents, or processing image-based PDFs.
gemini-deep-research
Perform complex, long-running research tasks using Gemini Deep Research Agent. Use when asked to research topics requiring multi-source synthesis, competitive analysis, market research, or comprehensive technical investigations that benefit from systematic web search and analysis.
gemini-stt
Transcribe audio files using Google's Gemini API or Vertex AI
ipfs-server
Full IPFS node operations — install, configure, pin content, publish IPNS, manage peers, and run gateway services
server-audit
远程服务器安全巡检和环境报告工具。 通过 SSH 免密登录远程主机,全面检查系统信息、运行服务、开放端口、 Web 服务器配置、数据库配置、安全设置(SSH/防火墙/SELinux)、可疑进程和定时任务, 生成结构化的巡检报告。Use when 用户需要检查服务器安全、排查服务器环境、 了解服务器上运行了什么服务、生成巡检报告、或提及"巡检"、"安全检查"、"服务器检查"。
observer-effect-probe
Helps detect skills that behave differently when they sense they are being monitored — catching the class of evasion where conditional activation logic specifically targets attestation and sandbox environments.