homebutler

ไฝœ่€… Higangsshโœ“ ๅทฒ้ชŒ่ฏ

๐Ÿ  Manage your homelab from chat. Single binary, zero dependencies.

231
Stars
14
Forks
Go
่ฏญ่จ€
2026/8/23
ๆทปๅŠ ๆ—ถ้—ด

โš ๏ธ ็ฌฌไธ‰ๆ–น่ฝฏไปถๅฃฐๆ˜Ž

ๆœฌ Skill ไธบ็ฌฌไธ‰ๆ–นๅผ€ๆบ่ฝฏไปถ๏ผŒ็‹ฌ็ซ‹ๆ‰˜็ฎกไบŽ GitHubใ€‚SkillTip ไป…ไธบไฟกๆฏ็›ฎๅฝ•๏ผŒไธๆŽงๅˆถๆˆ–็ปดๆŠคๅบ•ๅฑ‚ไป“ๅบ“ใ€‚ๆ‰€ๆ˜พ็คบ็š„ๅฎ‰ๅ…จๆฃ€ๆŸฅไธบ่‡ชๅŠจๅŒ–ไธ”่Œƒๅ›ดๆœ‰้™๏ผŒๅฎ‰่ฃ…ๅ‰่ฏท่‡ช่กŒๅฎกๆŸฅๆบ็ ใ€‚

้˜…่ฏปๆœๅŠกๆกๆฌพ

ๅฎ‰่ฃ…

ๆทปๅŠ ๅˆฐไฝ ็š„ Claude Code skills ็›ฎๅฝ•๏ผš

# Add to your Claude Code skills
git clone https://github.com/Higangssh/homebutler

ๅฟซ้€Ÿๅ…ฅ้—จ

ไฝฟ็”จ homebutler ็ญ‰ Skills ็š„ๆŒ‡ๅ—ใ€‚

ๅฎ‰ๅ…จๆŠฅๅ‘Š

ๅทฒ้ชŒ่ฏ

ไธŠๆฌกๆ‰ซๆ๏ผšโ€”

{
  "status": "PASSED",
  "issues": []
}

README.md

HomeButler logo

HomeButler

Know what changed before you fix it.
A single Go binary for running a small home server without babysitting it.

Website ยท Docs ยท Releases

Go 1.25+ License: MIT Release homebutler MCP server

HomeButler mascot holding a tiny server

homebutler report output: current status, needs attention, notable changes, and suggested actions

Section rules, labels, and severities are colour-coded in a terminal. Colour is dropped automatically when output is piped, redirected, or run from cron.

That is the whole idea. Most homelab tools show you a graph of right now. HomeButler remembers what your server looked like last time and tells you what moved.

HomeButler helps you answer the boring but painful questions every homelab eventually creates:

  • What is running on my server right now?
  • Which container owns this port?
  • Why did this service restart at 3 AM?
  • Is my backup actually restorable?
  • Can I install this self-hosted app without hand-writing another compose file?
  • Can I let an AI assistant inspect my server without handing it a full SSH shell?

No daemon required. No database. No always-on web service. Just one Go binary you can use from the terminal, scripts, a web dashboard, or AI tools.

The design goal is simple: give humans and agents a narrow, structured interface to the server. HomeButler returns readable summaries and JSON instead of asking you to trust a black-box shell session.

homebutler demo

โ–ถ๏ธ 34s demo โ€” monitor, diagnose, and manage your homelab

Quick Start

# One-line install (auto-detects OS/arch)
curl -fsSL https://raw.githubusercontent.com/Higangssh/homebutler/main/install.sh | sh

# Or via Homebrew
brew install Higangssh/homebutler/homebutler

# Interactive setup โ€” add your servers in seconds
homebutler init

Use it right away:

homebutler status                    # CPU, memory, disk, uptime
homebutler docker list               # running containers
homebutler inventory scan            # containers + ports + topology
homebutler report                    # butler-style health report + change summary
homebutler install uptime-kuma       # deploy a self-hosted app
homebutler backup drill uptime-kuma  # verify a backup actually restores
homebutler watch tui                 # terminal dashboard
homebutler serve                     # web dashboard at http://localhost:8080

Machine-readable output is available everywhere:

homebutler status --json
homebutler inventory scan --json
homebutler report --json

What it does

  • Install apps โ€” deploy Uptime Kuma, Jellyfin, Pi-hole, Gitea, Portainer, and more with one command
  • Map your server โ€” see containers, exposed ports, system ports, and service topology
  • Run a doctor check โ€” diagnose resource pressure, stopped containers, public ports, backup hygiene, notifications, and report baseline readiness
  • Catch crashes โ€” save logs before/after Docker, systemd, or PM2 restarts and detect flapping loops
  • Verify backups โ€” boot backups in isolated containers before you trust them
  • Use it anywhere โ€” CLI, JSON, web dashboard, or MCP for AI agents without giving them SSH

Why homebutler?

Self-hosting is not hard because one docker compose up is hard. It is hard because the maintenance never ends: ports collide, containers restart silently, backups look fine until restore day, and every server becomes a slightly different snowflake.

HomeButler is a small operations toolkit for that messy middle.

Why not just use Portainer, Netdata, or CasaOS?

Those are great dashboards. HomeButler is CLI-first, scriptable, JSON-friendly, air-gap friendly, and safe to copy onto any server. Use it when you want commands you can run from a terminal, cron job, SSH session, CI script, or AI agent โ€” especially when you care more about โ€œwhat changed?โ€ than another graph.

Core workflows

๐Ÿงพ Butler Report

homebutler report
homebutler report --keep 7      # retain only the latest 7 snapshots
homebutler report --no-save     # preview without writing a snapshot

report gives you a concise butler-style summary of your homelab: current health, warnings, notable changes since the previous snapshot, and suggested next commands. On the first run, HomeButler creates a baseline under ~/.homebutler/reports/snapshots/; later runs compare against the latest snapshot. Old snapshots are pruned automatically (--keep 30 by default) so reports do not grow forever.

๐Ÿฉบ Doctor Check

homebutler doctor
homebutler doctor --strict          # non-zero exit if warnings/failures are found
homebutler doctor --json            # automation / MCP friendly

homebutler doctor reporting a full disk, a stopped container, and a missing report baseline, each with the command to run next

doctor is a read-only preflight for the problems homelab users usually discover too late: high disk or memory usage, stopped containers, public bind ports, stale or missing backups, missing notifications, and whether report has a baseline for change detection. Every finding names the next command to run, so --strict makes it usable from cron or CI.

๐Ÿ—‚ Config Validation

homebutler config validate
homebutler config validate --strict   # exit non-zero on warnings too
homebutler config validate --json

config validate reads your config without starting anything and tells you which file was used, which of the four resolution rules picked it, and what homebutler actually made of each section. It exists because the two ways config goes wrong are both silent: a key homebutler does not recognise is dropped without a word, and a --config path that does not exist falls back to built-in defaults rather than failing.

Sections
   โœ“ servers     2 servers (homelab, nas)
   ยท notify      not set
   โœ“ alerts      cpu 95% ยท memory 85% ยท disk 90%

Findings
   โš ๏ธ Line 5: field notifiy not found in the homebutler config
      โ†’ Did you mean "notify"? Unrecognised keys are ignored silently.

๐Ÿ“ฆ One-Command App Install

homebutler install demo

homebutler install uptime-kuma โ€” Deploy self-hosted apps in seconds. Pre-checks Docker, ports, and duplicates. Generates docker-compose.yml automatically. See all available apps โ†’

๐Ÿ—บ๏ธ Inventory & Topology

homebutler inventory scan
homebutler inventory show --filter exposed
homebutler inventory export --format mermaid
homebutler --json inventory scan

inventory scan gives you a quick map of what is running on a server: system health, Docker containers, app ports, and system ports. Docker-published ports are connected back to the container that owns them, so local forwarding details like Colima/Lima stay understandable.

๐Ÿ  Home Network
   Server  homelab (192.168.1.10)
   Summary โœ… 1 running ยท โšช 1 stopped ยท ๐ŸŒ 2 public ports ยท ๐Ÿ”’ 4 local ports

๐Ÿ“ฆ Containers (2)
   โ”œโ”€ โšช vaultwarden ยท not started
   โ”‚  โ””โ”€ image vaultwarden/server:latest
   โ””โ”€ โœ… api-server ยท running
      โ”œโ”€ image my-api:latest
      โ””โ”€ exposes :8080 โ†’ 8080/tcp

๐ŸŒ App Ports (1)
   โ””โ”€ ๐ŸŒ :8080/tcp ยท api-server

To answer "what is reachable from outside my machine/network?" without reading the whole tree, filter the scan to exposed ports only:

homebutler inventory scan --filter exposed
๐Ÿ  Home Network
   Server  homelab

๐ŸŒ Exposed Ports
   โ”œโ”€ :8080/tcp ยท api-server
   โ””โ”€ :8443/tcp ยท dashboard

Only ports listening on all interfaces (0.0.0.0, ::, *) are shown. Anything bound to a specific address is hidden, including loopback and LAN addresses. Unsupported filter values return an error, as does combining --filter with --json; the default inventory scan output is unchanged.

Use Mermaid export when you want a diagram for GitHub, Obsidian, docs, or an AI assistant:

graph TD
  home["๐Ÿ  Home Network"] --> homelab["๐Ÿ–ฅ homelab<br/>192.168.1.10"]
  homelab --> c1["๐Ÿ“ฆ api-server<br/>running"]
  homelab --> p1["๐ŸŒ :8080/tcp<br/>api-server"]
  c1 -. exposes .-> p1

Demo

๐ŸŒ Web Dashboard

homebutler web dashboard

homebutler serve โ€” A real-time web dashboard embedded in the single binary via go:embed. Monitor all your servers, Docker containers, open ports, alerts, and Wake-on-LAN devices from any browser. Dark theme, auto-refresh every 5 seconds, fully responsive.

โœจ Web Dashboard Highlights
  • Server Overview โ€” See all servers at a glance with color-coded status (green = online, red = offline)
  • System Metrics โ€” CPU, memory, disk usage with progress bars and color thresholds
  • Docker Containers โ€” Running/stopped status with friendly labels ("Running ยท 4d", "Stopped ยท 6h ago")
  • Top Processes โ€” Top processes sorted by CPU/memory with zombie detection
  • Resource Warnings โ€” Visual CPU, memory, and disk thresholds in the dashboard
  • Network Ports โ€” Open ports with process names and bind addresses
  • Wake-on-LAN โ€” One-click wake buttons for configured devices
  • Server Switching โ€” Dropdown to switch between local and remote servers
  • Zero dependencies โ€” No Node.js runtime needed. Frontend is compiled into the Go binary at build time
homebutler serve              # Start on port 8080
homebutler serve --port 3000  # Custom port
homebutler serve --demo       # Demo mode with realistic sample data

๐Ÿ”„ Process Restart Watch

Your container crashed at 3 AM โ€” but why? homebutler watch catches it the moment it happens, saves the dying logs, figures out the cause, and tells you if it's happening over and over.

Supported backends: Docker (real-time event stream) ยท systemd (polling) ยท PM2 (polling)

Step 1: Add targets to watch

homebutler watch add nginx              # Interactive: choose Docker / systemd / PM2
homebutler watch add --kind docker nginx          # or specify directly
homebutler watch add --kind systemd nginx.service
homebutler watch add --kind pm2 my-api
homebutler watch list                   # See what you're watching

Step 2: Start monitoring

homebutler watch start                  # Foreground, Ctrl+C to stop
homebutler watch start --interval 10s   # Custom poll interval (default 30s)

When a crash is detected, you'll see:

[03:14:22] INCIDENT: nginx (incident nginx-20260410-031422.581-7a2124)
  Crash: OOM โ€” process killed by SIGKILL (oom, confidence: high)
  โš  FLAPPING: acute (3 restarts in short window)

Step 3: Investigate

homebutler watch history                # List all incidents
homebutler watch show <incident-id>     # Full details

watch show output includes:

  • Pre-death logs โ€” what the process printed right before it died
  • Post-restart logs โ€” what happened after the restart
  • Crash analysis โ€” category (oom / panic / segfault / timeout / dependency / error), reason, confidence level, matched log patterns
  • Flapping status โ€” if the process is stuck in a crash loop

Crash Analysis

Every incident is automatically analyzed using exit codes and log patterns:

SignalExit CodeMeaning
SIGKILL137OOM Killer or forced kill
SIGSEGV139Segmentation fault (memory corruption)
SIGTERM143Graceful shutdown request
โ€”1Application error
โ€”0Clean exit (may be intentional restart)

Log patterns like panic:, Out of memory, Connection refused, FATAL, and timeout are matched automatically to help identify the root cause.

Flapping Detection

Detects when a process is stuck in a restart loop (e.g., crash โ†’ restart โ†’ crash again):

  • Acute โ€” 3+ restarts within 10 minutes (something is broken right now)
  • Chronic โ€” 5+ restarts within 24 hours (slow recurring issue)

Flapping incidents are tagged [FLAPPING] in history and highlighted in watch show.

Notifications (optional, off by default)

Notifications are disabled by default, which is useful for air-gapped or closed networks where everything runs locally.

A minimal example in ~/.config/homebutler/config.yaml:

notify:
  telegram:
    bot_token: "your-bot-token"
    chat_id: "your-chat-id"

watch:
  enabled: true
  notify_on: flapping
  cooldown: 5m
  flapping:
    short_window: 10m
    short_threshold: 3
    long_window: 24h
    long_threshold: 5
  retention:
    max_incidents: 200

alerts:
  cpu: 90
  memory: 85
  disk: 90
  rules:
    - name: cpu-spike
      metric: cpu
      threshold: 90
      action: notify

    - name: elsa-monitor-down
      metric: container
      kind: systemd          # docker (default) | systemd | pm2
      watch: [lh-elsa-monitor.service]
      action: restart

Restarting things that are not containers

action: restart restarts Docker containers unless the rule says otherwise. kind: systemd or kind: pm2 points it at a service or a PM2 app instead.

The kind is written on the rule rather than looked up from the watch list, so restarting a host service is something you asked for in the config. It also means every rule written before kind existed keeps meaning exactly what it meant.

Two things worth knowing before using it:

systemctl restart needs root or a polkit rule. Running homebutler unprivileged, a systemd restart will be refused, reported as failed, and warned about when alerts --watch starts rather than when the rule first fires.

A target that is flapping is not restarted. Restarting something already in a restart loop feeds the loop, and most systemd units carry Restart=always, so homebutler restarting them fights systemd's own backoff. The thresholds are the watch.flapping ones above, and the skip is reported rather than counted as either success or failure. This applies to Docker targets too.

Legacy ~/.homebutler/watch/config.json is still read as a fallback for watch-specific settings, and legacy alerts.yaml notify/webhook provider settings are still accepted for older setups.

  • watch.enabled: true โ€” allow watch notifications
  • watch.notify_on: flapping โ€” notify only when repeated restart loops are detected
  • watch.notify_on: incident โ€” notify on every incident
  • watch.notify_on: all โ€” notify on both incidents and flapping
  • watch.notify_on: off โ€” disable watch notifications without removing provider config
  • watch.cooldown: 5m โ€” suppress duplicate notifications for the same event fingerprint during the cooldown window
  • watch.flapping โ€” optional advanced tuning for restart-loop detection
  • watch.retention.max_incidents: 200 โ€” how many incidents to keep on disk, newest first. Each incident stores up to 100 captured log lines, so the directory grows fastest exactly when a service is restarting in a loop. Set -1 to keep everything.

These settings can also be written under a watch.notify: block, which is the canonical form:

watch:
  notify:
    enabled: true
    notify_on: flapping
    cooldown: 5m
  flapping:
    short_window: 10m

Both spellings are read, so either layout works. If a file contains both, the notify: block wins and homebutler config validate says so.

Manage targets

homebutler watch remove nginx           # Stop watching
homebutler watch check                  # One-shot check (no continuous monitoring)

๐Ÿ–ฅ๏ธ TUI Dashboard

homebutler TUI dashboard

homebutler watch tui โ€” A terminal-based dashboard powered by Bubble Tea. Monitors all configured servers with real-time updates, color-coded resource bars, and Docker container status. No browser needed.

๐Ÿง  AI-Powered Management (MCP)

Use natural language when you want automation. MCP clients can call homebutler tools to check server status, list Docker containers, inspect ports, or run operational workflows. See screenshots & setup โ†’

App Install

Deploy self-hosted apps with a single command. Each app runs via docker compose with automatic pre-checks, health verification, and clean lifecycle management.

# List available apps
homebutler install list

# Install (default port)
homebutler install uptime-kuma

# Install with custom port
homebutler install uptime-kuma --port 8080

# Install jellyfin with media directory
homebutler install jellyfin --media /mnt/movies

# Check status
homebutler install status uptime-kuma

# Stop (data preserved)
homebutler install uninstall uptime-kuma

# Stop + delete everything
homebutler install purge uptime-kuma

How it works

~/.homebutler/apps/
  โ””โ”€โ”€ uptime-kuma/
       โ”œโ”€โ”€ docker-compose.yml   โ† auto-generated, editable
       โ””โ”€โ”€ data/                โ† persistent data (bind mount)
  • Pre-checks โ€” Verifies docker is installed/running, port is available, no duplicate containers
  • Compose-based โ€” Each app gets its own docker-compose.yml you can inspect and customize
  • Data safety โ€” uninstall stops containers but keeps your data; purge removes everything
  • Cross-platform โ€” Auto-detects docker socket (default, colima, podman)

Available apps

AppDefault PortDescriptionNotes
uptime-kuma3001Self-hosted monitoring tool
plex32400Plex Media Server--media /path to mount media dir
vaultwarden8080Bitwarden-compatible password manager
filebrowser8081Web-based file manager
it-tools8082Developer utilities (JSON, Base64, Hash, etc.)
gitea3002Lightweight self-hosted Git service
jellyfin8096Media system (movies, TV, music)--media /path to mount media dir
homepage3010Modern homelab dashboard
stirling-pdf8083All-in-one PDF tool (merge, split, convert, OCR)
speedtest-tracker8084Internet speed test with historical graphs
mealie9925Recipe manager and meal planner
pi-hole8088DNS ad blockingโš ๏ธ Uses port 53 (DNS), NET_ADMIN capability
adguard-home3000DNS ad blocker and privacyโš ๏ธ Uses port 53 (DNS)
portainer9443Docker management GUIโš ๏ธ Mounts Docker socket (HTTPS)
nginx-proxy-manager81Reverse proxy with SSL and web UIโš ๏ธ Uses ports 80/443

App-specific options

# Jellyfin: mount your media library
homebutler install jellyfin --media /mnt/movies

# Pi-hole / AdGuard: DNS ad blocking (port 53 required)
homebutler install pi-hole
# โš ๏ธ If port 53 is in use (Linux): sudo systemctl disable --now systemd-resolved

# Portainer: Docker GUI (mounts docker socket)
homebutler install portainer
# Access via HTTPS: https://localhost:9443

# Nginx Proxy Manager: reverse proxy
homebutler install nginx-proxy-manager
# Default login: admin@example.com / changeme (change immediately!)

# Any app: custom port
homebutler install <app> --port 9999

Safety checks

  • Port conflict detection โ€” Checks if the port is already in use before install
  • DNS mutual exclusion โ€” Warns if pi-hole and adguard-home are both installed
  • Docker socket warning โ€” Alerts when an app requires Docker socket access (portainer)
  • OS-specific guidance โ€” Linux gets systemd-resolved fix, macOS gets lsof command
  • Post-install tips โ€” DNS setup, HTTPS access, default credential warnings

Want more apps? Open an issue or see Contributing.

Usage

homebutler <command> [flags]

Commands:
  status              System status (CPU, memory, disk, uptime)
  doctor              Diagnose health, exposure, backups, and readiness
  config validate     Check the config file and report what is ignored
  docker list         List running containers
  install <app>       Install a self-hosted app (docker compose)
  alerts              Show current alert status
  watch tui           TUI dashboard (monitors all configured servers)
  watch add/list/remove  Manage watched containers
  watch check/start   One-shot or continuous restart detection
  watch history/show  Browse restart history
  serve               Web dashboard (browser-based, go:embed)

Flags:
  --json              JSON output (default: human-readable)
  --server <name>     Run on a specific remote server
  --all               Run on all configured servers in parallel
  --port <number>     Port for serve command (default: 8080)
  --config <path>     Config file (auto-detected, see Configuration)

Run homebutler --help for all commands.

๐Ÿ“‹ All Commands & Flags
Commands:
  init                Interactive setup wizard
  config validate     Check the config file and report what is ignored
  status              System status (CPU, memory, disk, uptime)
  doctor              Diagnose health, exposure, backups, and readiness
  watch tui           TUI dashboard (monitors all configured servers)
  watch add <name>    Add container to restart watch list
  watch list          Show watched containers
  watch remove <name> Remove container from watch list
  watch check         One-shot restart check
  watch start         Continuous restart monitoring loop
  watch history       List restart history (alias: incidents)
  watch show <id>     Show restart details with logs
  serve               Web dashboard (browser-based, go:embed)
  docker list         List running containers
  docker restart <n>  Restart a container
  docker stop <n>     Stop a container
  docker logs <n>     Show container logs
  wake <name>         Send Wake-on-LAN packet
  ports               List open ports with process info
  ps                  Show top processes (alias: processes)
  ps --sort mem       Sort by memory instead of CPU
  ps --limit 20       Show top 20 (default: 10, 0 = all)
  network scan        Discover devices on LAN
  alerts              Show current alert status
  alerts --watch      Continuous monitoring with real-time alerts
  trust <server>      Register SSH host key (TOFU)
  backup              Backup Docker volumes, compose files, and env
  backup list         List existing backups
  backup drill <app>  Verify backup restores correctly (isolated)
  backup drill --all  Verify all apps in backup
  restore <archive>   Restore from a backup archive
  upgrade             Upgrade local + all remote servers to latest
  deploy              Install homebutler on remote servers
  install <app>       Install a self-hosted app (docker compose)
  install list        List available apps
  install status <a>  Check installed app status
  install uninstall   Stop app (keep data)
  install purge       Stop app + delete all data
  mcp                 Start MCP server (JSON-RPC over stdio)
  version             Print version

Flags:
  --json              JSON output (default: human-readable)
  --server <name>     Run on a specific remote server
  --all               Run on all configured servers in parallel
  --port <number>     Port for serve command (default: 8080)
  --demo              Run serve with realistic demo data
  --watch             Continuous monitoring mode (alerts command)
  --interval <dur>    Watch interval, e.g. 30s, 1m (default: 30s)
  --config <path>     Config file (auto-detected, see Configuration)
  --local             Upgrade only the local binary (skip remote servers)
  --local <path>      Use local binary for deploy (air-gapped)
  --service <name>    Target a specific Docker service (backup/restore)
  --to <path>         Custom backup destination directory
  --archive <path>    Specific backup archive for drill
  --all               Verify all supported apps (backup drill)
๐ŸŒ Web Dashboard

homebutler serve starts an embedded web dashboard โ€” no Node.js, no Docker, no extra dependencies.

homebutler serve                # http://localhost:8080
homebutler serve --port 3000    # custom port
homebutler serve --demo         # demo mode with sample data

๐Ÿ“– Web dashboard details โ†’

Backup & Restore

One-command Docker backup โ€” volumes, compose files, and env variables.

homebutler backup                          # backup everything
homebutler backup --service jellyfin       # specific service
homebutler backup --to /mnt/nas/backups/   # custom destination
homebutler backup list                     # list backups
homebutler restore ./backup.tar.gz         # restore

โš ๏ธ Database services should be paused before backup for data consistency.

๐Ÿ“– Full backup documentation โ†’ โ€” how it works, archive structure, security notes.

Alert Thresholds (Advanced)

alerts still exists for CPU, memory, and disk threshold checks, but it is an advanced flow and not the recommended first step for new users.

homebutler alerts --watch                  # default: 30s interval
homebutler alerts --watch --interval 10s   # check every 10 seconds
homebutler alerts history                  # view alert history
homebutler notify test                     # test your notification channels

Default thresholds: CPU 90%, Memory 85%, Disk 90%. Start with watch, then add alerts only if you specifically want threshold-based checks.

๐Ÿ” Backup Drill

"Having a backup" and "being able to restore" are different things.

Backup Drill boots your backup in an isolated Docker environment and verifies the app actually responds โ€” like a fire drill for your data.

homebutler backup drill uptime-kuma        # verify one app
homebutler backup drill --all              # verify all apps
homebutler backup drill --json             # machine-readable output
homebutler backup drill --archive ./file   # use a specific backup

What happens:

  1. Finds the latest backup archive
  2. Verifies archive integrity (tar validation)
  3. Creates an isolated Docker network + random port
  4. Boots the app from backup data
  5. Runs an HTTP health check
  6. Reports pass/fail and cleans up everything
๐Ÿ” Backup Drill โ€” uptime-kuma

  ๐Ÿ“ฆ Backup: ~/.homebutler/backups/backup_2026-04-04_1711.tar.gz
  ๐Ÿ“ Size: 18.6 MB
  ๐Ÿ” Integrity: โœ… tar valid (8 files)

  ๐Ÿš€ Boot: โœ… container started in 0s
  ๐ŸŒ Health: โœ… HTTP 200 on port 58574
  โฑ๏ธ  Total: 2s

  โœ… DRILL PASSED

Zero risk โ€” runs in a completely isolated environment. Your running services are never touched.

Supports health checks for: nginx-proxy-manager, vaultwarden, uptime-kuma, pi-hole, gitea, jellyfin, plex, portainer, homepage, adguard-home.

Configuration

homebutler init    # interactive setup wizard

๐Ÿ“– Configuration details โ†’ โ€” config file locations, watch/notify options, and advanced alert thresholds.

Multi-server

Manage multiple servers from a single machine over SSH.

homebutler status --server rpi     # query specific server
homebutler status --all            # query all in parallel
homebutler deploy --server rpi     # install on remote server
homebutler upgrade                 # upgrade all servers

๐Ÿ“– Multi-server setup โ†’ โ€” SSH auth, config examples, deploy & upgrade.

MCP Server

Built-in MCP server โ€” manage your homelab from any AI tool with natural language.

{
  "mcpServers": {
    "homebutler": {
      "command": "npx",
      "args": ["-y", "homebutler@latest"]
    }
  }
}

Works with Claude Desktop, ChatGPT, Cursor, Windsurf, and any MCP client.

๐Ÿ“– MCP server setup โ†’ โ€” supported clients, available tools, agent skills.

Installation

Homebrew (Recommended)

brew install Higangssh/homebutler/homebutler

Automatically installs to PATH. Works on macOS and Linux.

One-line Install

curl -fsSL https://raw.githubusercontent.com/Higangssh/homebutler/main/install.sh | sh

Auto-detects OS/architecture, downloads the latest release, and installs to PATH.

npm (MCP server)

npm install -g homebutler

Downloads the Go binary automatically. Use npx -y homebutler@latest to run without installing globally.

Go Install

go install github.com/Higangssh/homebutler@latest

Build from Source

git clone https://github.com/Higangssh/homebutler.git
cd homebutler
make build

Uninstall

rm $(which homebutler)           # Remove binary
rm -rf ~/.config/homebutler      # Remove config (optional)

Architecture

Goal: Engineers manage servers from chat โ€” not SSH.

Alert fires โ†’ AI diagnoses โ†’ AI fixes โ†’ you get a summary on your phone.

homebutler is the tool layer in an AI ChatOps stack. It doesn't care what's above it โ€” use any chat platform, any AI agent, or just your terminal.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 3 โ€” Chat Interface                        โ”‚
โ”‚  Telegram ยท Slack ยท Discord ยท Terminal ยท Browser โ”‚
โ”‚  (Your choice โ€” homebutler doesn't touch this)   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 2 โ€” AI Agent                              โ”‚
โ”‚  OpenClaw ยท LangChain ยท n8n ยท Claude Desktop     โ”‚
โ”‚  (Understands intent โ†’ calls the right tool)     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚  CLI exec or MCP (stdio)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 1 โ€” Tool (homebutler)       โ† YOU ARE HERE โ”‚
โ”‚                                                   โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”           โ”‚
โ”‚  โ”‚   CLI   โ”‚  โ”‚   MCP   โ”‚  โ”‚   Web   โ”‚           โ”‚
โ”‚  โ”‚ stdout  โ”‚  โ”‚  stdio  โ”‚  โ”‚  :8080  โ”‚           โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜           โ”‚
โ”‚       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ”‚
โ”‚                    โ–ผ                              โ”‚
โ”‚             internal/*                            โ”‚
โ”‚   system ยท docker ยท ports ยท network               โ”‚
โ”‚   wake ยท alerts ยท remote (SSH)                    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Three interfaces, one core:

InterfaceTransportUse case
CLIShell stdout/stderrTerminal, scripts, AI agents via exec
MCPJSON-RPC over stdioClaude Desktop, ChatGPT, Cursor, any MCP client
WebHTTP (go:embed)Browser dashboard, on-demand with homebutler serve

All three call the same internal/ packages โ€” no code duplication.

homebutler is Layer 1. Swap Layer 2 and 3 to fit your stack:

  • Terminal only โ†’ homebutler status (no agent needed)
  • Claude Desktop โ†’ MCP server, Claude calls tools directly
  • OpenClaw + Telegram โ†’ Agent runs CLI commands from chat
  • Custom Python bot โ†’ subprocess.run(["homebutler", "status", "--json"])
  • n8n / Dify โ†’ Execute node calling homebutler CLI

No ports opened by default. CLI and MCP use stdin/stdout only. The web dashboard is opt-in (homebutler serve, binds 127.0.0.1).

Now: CLI + MCP + Web dashboard โ€” you ask, it answers.

Goal: Full AI ChatOps โ€” infrastructure that manages itself.

Contributing

Contributions welcome! Please open an issue first to discuss what you'd like to change. CONTRIBUTING.md covers what homebutler accepts and what a new target has to prove.

Security

Found a vulnerability? Report it privately through the Security tab rather than a public issue. SECURITY.md covers what is in scope and what to expect.

License

MIT

ๅธธ่ง้—ฎ้ข˜

What is homebutler?โŒ„

homebutler is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Higangssh. ๐Ÿ  Manage your homelab from chat. Single binary, zero dependencies. It has 231 GitHub stars.

Is homebutler safe to use?โŒ„

Yes. homebutler passed SkillsLLM's automated security scan โ€” a dependency vulnerability audit plus prompt-injection heuristics โ€” with no high-severity issues. You can read the full report in the Security Report section on this page.

How do I install homebutler?โŒ„

Clone the repository with "git clone https://github.com/Higangssh/homebutler" and add it to your Claude Code skills directory (see the Installation section above).

What programming language is homebutler written in?โŒ„

homebutler is primarily written in Go. It is open-source under Higangssh on GitHub, so you can review or fork the full source.

Are there alternatives to homebutler?โŒ„

Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh homebutler against similar tools.

่ฏ„่ฎบ (0)

ๆš‚ๆ— ่ฏ„่ฎบ๏ผŒๆˆไธบ็ฌฌไธ€ไธชๅˆ†ไบซๆƒณๆณ•็š„ไบบ๏ผ

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

โญ 201,881โ‘‚ 60,308TypeScript
MCP ๆœๅŠกๅ™จapisai-tools
ๆŸฅ็œ‹่ฏฆๆƒ… โ†’

Scrapling

by D4Vinci

๐Ÿ•ท๏ธ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!

โญ 75,913โ‘‚ 7,581Python
MCP ๆœๅŠกๅ™จ
ๆŸฅ็œ‹่ฏฆๆƒ… โ†’

TrendRadar

by sansan0

โญAI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.๐ŸŽฏ ๅ‘Šๅˆซไฟกๆฏ่ฟ‡่ฝฝ๏ผŒไฝ ็š„ AI ่ˆ†ๆƒ…็›‘ๆŽงๅŠฉๆ‰‹ไธŽ็ƒญ็‚น็ญ›้€‰ๅทฅๅ…ท๏ผ่šๅˆๅคšๅนณๅฐ็ƒญ็‚น + RSS ่ฎข้˜…๏ผŒๆ”ฏๆŒๅ…ณ้”ฎ่ฏ็ฒพๅ‡†็ญ›้€‰ใ€‚AI ๆ™บ่ƒฝ็ญ›้€‰ๆ–ฐ้—ป + AI ็ฟป่ฏ‘ + AI ๅˆ†ๆž็ฎ€ๆŠฅ็›ดๆŽจๆ‰‹ๆœบ๏ผŒไนŸๆ”ฏๆŒๆŽฅๅ…ฅ MCP ๆžถๆž„๏ผŒ่ต‹่ƒฝ AI ่‡ช็„ถ่ฏญ่จ€ๅฏน่ฏๅˆ†ๆžใ€ๆƒ…ๆ„ŸๆดžๅฏŸไธŽ่ถ‹ๅŠฟ้ข„ๆต‹็ญ‰ใ€‚ๆ”ฏๆŒ Docker ๏ผŒๆ•ฐๆฎๆœฌๅœฐ/ไบ‘็ซฏ่‡ชๆŒใ€‚้›†ๆˆๅพฎไฟก/้ฃžไนฆ/้’‰้’‰/Telegram/้‚ฎไปถ/ntfy/bark/slack ็ญ‰ๆธ ้“ๆ™บ่ƒฝๆŽจ้€ใ€‚

โญ 61,652โ‘‚ 24,883Python
MCP ๆœๅŠกๅ™จ
ๆŸฅ็œ‹่ฏฆๆƒ… โ†’

mcp-server-filesystem

by modelcontextprotocol

8

ไธบ AI Agent ๆไพ›ๅฎ‰ๅ…จๆ–‡ไปถ็ณป็ปŸ่ฎฟ้—ฎ็š„ MCP ๆœๅŠกๅ™จใ€‚

โญ 45,000โ‘‚ 5,200TypeScript
MCP ๆœๅŠกๅ™จai-agentsapis
ๆŸฅ็œ‹่ฏฆๆƒ… โ†’

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph โ€” average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

โญ 39,939โ‘‚ 3,219C
MCP ๆœๅŠกๅ™จ
ๆŸฅ็œ‹่ฏฆๆƒ… โ†’

ๅผ€ๅ‘่€…่ฟ˜ๅ–œๆฌข

ๅŸบไบŽๅ–œๆฌขๆญค Skill ็š„ๅผ€ๅ‘่€…ๆŠ•็ฅจๅ’Œๆ”ถ่—

ECC

by affaan-m

10

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

โญ 242,219โ‘‚ 36,702JavaScript
AI ๆ™บ่ƒฝไฝ“ai-agentsanthropicclaude-code
ๆŸฅ็œ‹่ฏฆๆƒ… โ†’

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

โญ 201,881โ‘‚ 60,308TypeScript
MCP ๆœๅŠกๅ™จapisai-tools
ๆŸฅ็œ‹่ฏฆๆƒ… โ†’

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

โญ 185,940โ‘‚ 28,768JavaScript
AI ๆ™บ่ƒฝไฝ“ai-agentsanthropicclaude-code
ๆŸฅ็œ‹่ฏฆๆƒ… โ†’

cc-switch

by farion1231

3

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

โญ 128,868โ‘‚ 8,826Rust
AI ๆ™บ่ƒฝไฝ“claude-codeai-tools
ๆŸฅ็œ‹่ฏฆๆƒ… โ†’