| name | homebutler |
| description | Homelab server operations via homebutler CLI/MCP. Check system status, generate butler reports, scan inventory/topology, manage Docker containers, install self-hosted apps, verify backup drills, Wake-on-LAN, port scanning, alerts, backup/restore, and multi-server SSH. |
| metadata | {"openclaw":{"emoji":"🏠","requires":{"anyBins":["homebutler"]},"configPaths":["homebutler.yaml","~/.config/homebutler/config.yaml"]}} |
Homebutler
Manage homelab servers using the homebutler CLI. Single binary, no daemon/database required, JSON output, MCP-friendly.
Prerequisites
homebutler must be installed and available in PATH.
which homebutler
brew install Higangssh/homebutler/homebutler
go install github.com/Higangssh/homebutler@latest
git clone https://github.com/Higangssh/homebutler.git
cd homebutler && make build && sudo mv homebutler /usr/local/bin/
Commands
Setup Wizard
homebutler init
Creates a config file at ~/.config/homebutler/config.yaml with guided prompts.
System Status
homebutler status
homebutler status --server rpi
homebutler status --all
Returns: hostname, OS, arch, uptime, CPU (usage%, cores), memory (total/used/%), disks (mount/total/used/%)
Butler Report
homebutler report
homebutler report --no-save
homebutler report --keep 7
homebutler report --json
Use this first when the user asks “how is my homelab/server doing?” and wants a concise operational summary. It snapshots current system/container/port state and compares it with the previous run.
Inventory & Topology
homebutler inventory scan
homebutler inventory scan --json
homebutler inventory export --format mermaid
Use this when the user asks what is running, which container owns a port, or wants topology/context for docs or AI analysis.
Docker Management
homebutler docker list
homebutler docker list --server rpi
homebutler docker list --all
homebutler docker restart <name>
homebutler docker stop <name>
homebutler docker logs <name>
homebutler docker logs <name> 200
Wake-on-LAN
homebutler wake <mac-address>
homebutler wake <name>
homebutler wake <mac> 192.168.1.255
Config names are defined in config under wake targets.
Open Ports
homebutler ports
homebutler ports --server rpi
homebutler ports --all
Returns: protocol, address, port, PID, process name
Network Scan
homebutler network scan
Discovers devices on the local LAN via ping sweep + ARP table. Returns: IP, MAC, hostname, status.
Note: May take up to 30 seconds. Some devices may not appear if they don't respond to ping.
TUI Dashboard
homebutler watch
Real-time monitoring of all configured servers with auto-refresh. Shows CPU, memory, disk, docker containers in a terminal UI.
Web Dashboard
homebutler serve
homebutler serve --port 3000
homebutler serve --demo
Browser-based dashboard at http://localhost:8080. Read-only view of all servers, docker containers, alerts.
SSH Host Key Trust
homebutler trust <server>
homebutler trust <server> --reset
TOFU (Trust On First Use) model. Required before first SSH connection to a new server.
Upgrade
homebutler upgrade
homebutler upgrade --local
Downloads latest release from GitHub and installs it. For remote servers, uses SSH to upgrade.
Resource Alerts
homebutler alerts
homebutler alerts --server rpi
homebutler alerts --all
Checks CPU/memory/disk against thresholds in config. Returns status (ok/warning/critical) per resource.
Deploy (Remote Installation)
homebutler deploy --server rpi
homebutler deploy --server rpi --local ./homebutler
homebutler deploy --all
Installs homebutler on remote servers via SSH. Auto-detects remote OS/architecture.
Install path priority: /usr/local/bin → sudo /usr/local/bin → ~/.local/bin (with PATH auto-registration in .profile/.bashrc/.zshrc).
App Install
homebutler install list
homebutler install <app>
homebutler install <app> --port 9090
homebutler install status <app>
homebutler install uninstall <app>
homebutler install purge <app>
Deploys self-hosted apps via docker compose. Each app gets its own directory at ~/.homebutler/apps/<app>/ with auto-generated docker-compose.yml and persistent data. Pre-checks docker availability, port conflicts, and duplicates. Available apps include uptime-kuma, plex, vaultwarden, filebrowser, it-tools, gitea, jellyfin, homepage, stirling-pdf, speedtest-tracker, mealie, pi-hole, adguard-home, portainer, and nginx-proxy-manager.
Backup, Restore & Backup Drill
homebutler backup
homebutler backup --service uptime-kuma
homebutler backup list
homebutler backup drill uptime-kuma
homebutler backup drill --all
homebutler backup drill --archive ./file
homebutler restore ./backup.tar.gz
Prefer backup drill when the user asks whether backups are trustworthy: it validates the archive, boots the app in an isolated Docker environment, health-checks it, and cleans up.
MCP Server
homebutler mcp
Starts a built-in MCP (Model Context Protocol) server for use with Claude Desktop, ChatGPT, Cursor, and other MCP clients. No network ports opened — uses stdio only.
Current MCP tools:
system_status
report
inventory_scan, inventory_export
docker_list, docker_restart, docker_stop, docker_logs, docker_stats
wake, open_ports, network_scan, alerts
backup_create, backup_list, backup_drill, backup_restore
install_list, install_app, install_status, install_uninstall, install_purge
Version
homebutler version
Output Format
All commands output human-readable text by default. Use --json flag for machine-parseable JSON output (recommended for AI/script integration).
Config File
Config file is auto-discovered in order:
--config <path> — Explicit flag
$HOMEBUTLER_CONFIG — Environment variable
~/.config/homebutler/config.yaml — XDG standard (recommended)
./homebutler.yaml — Current directory
If no config found, sensible defaults are used.
Config Options
servers — Server list with SSH connection details
wake — Named WOL targets with MAC + broadcast
alerts.cpu/memory/disk — Threshold percentages
output — Default output format
Multi-Server Config Example
servers:
- name: main-server
host: 192.168.1.10
local: true
- name: rpi
host: 192.168.1.20
user: pi
auth: key
key: ~/.ssh/id_ed25519
- name: vps
host: example.com
user: deploy
port: 2222
auth: key
key: ~/.ssh/id_ed25519
Usage Guidelines
- Always run commands, don't guess — execute
homebutler status to get real data
- Interpret results for the user — don't dump raw JSON, summarize in natural language
- Warn on alerts — if any resource shows "warning" or "critical", highlight it
- Use --all for overview — when user asks about "all servers" or "everything", use
--all
- Use --server for specific — when user mentions a server by name, use
--server <name>
- Docker errors — if docker is not installed or daemon not running, explain clearly
- Network scan — warn user it may take ~30 seconds
- Security — never expose raw JSON with hostnames/IPs in group chats, summarize instead
- Deploy — suggest
--local for air-gapped environments
Security Notes
- SSH authentication: Always prefer key-based auth over passwords. Never store plaintext passwords in config.
- Network scans: Only run on your own local network. Warn user before scanning.
- Deploy: Only deploy to servers you own. Confirm with user before remote installations.
- Config file permissions: Keep config files readable only by owner (
chmod 600).
- No telemetry: homebutler sends zero data externally. All operations are local or to user-configured hosts only.
Error Handling
- SSH connection failed → Check host/port/user in config, verify SSH key is registered on remote
- homebutler not found on remote → Run
homebutler deploy --server <name> first
- docker not installed → Tell user docker is not available on that server
- docker daemon not running → Suggest
sudo systemctl start docker
- network scan timeout → Normal on large subnets, suggest retrying
- permission denied → May need sudo for ports/docker commands on some systems
Example Interactions
User: "How's the server doing?"
→ Prefer homebutler report, summarize health, warnings, notable changes, and suggested actions. Use homebutler status only for a raw point-in-time status.
User: "What changed / what owns this port / map my homelab"
→ Run homebutler inventory scan or homebutler inventory export --format mermaid.
User: "Check all servers"
→ Run homebutler status --all, summarize each server's status
User: "How's the Raspberry Pi?"
→ Run homebutler status --server rpi, summarize
User: "What docker containers are running?"
→ Run homebutler docker list, list container names and states
User: "Wake up the NAS"
→ Run homebutler wake nas (if configured) or ask for MAC address
User: "Any alerts across all servers?"
→ Run homebutler alerts --all, report any warnings/critical
User: "Deploy homebutler to the new server"
→ Run homebutler deploy --server <name>, report result
User: "Install uptime-kuma"
→ Run homebutler install uptime-kuma, report URL and status
User: "What apps are available?"
→ Run homebutler install list, show available apps
User: "Remove vaultwarden completely"
→ Run homebutler install purge vaultwarden, confirm deletion
User: "Can I trust my backup?"
→ Run homebutler backup drill <app> or homebutler backup drill --all, report pass/fail and health status