×

I manage my entire homelab from Telegram with one skill by Ts-ssh in openclaw

[–]Ts-ssh[S] 0 points1 point  (0 children)

Cloud. The AI runs on a cloud LLM — the Pi just runs homebutler as a CLI tool. The Telegram chat goes through an AI orchestration layer (like OpenClaw or Claude Desktop) which calls homebutler's MCP server on the Pi or any machine.

I manage my entire homelab from Telegram with one skill by Ts-ssh in openclaw

[–]Ts-ssh[S] 1 point2 points  (0 children)

No sudo. homebutler runs entirely as a regular user — docker commands, system stats, SSH, all unprivileged. The only thing that might want elevated access is WoL (wake-on-lan) and even that works fine without sudo on most setups.

I manage my entire homelab from Telegram with one skill by Ts-ssh in openclaw

[–]Ts-ssh[S] 1 point2 points  (0 children)

Honest answer — right now homebutler can only restart containers via the Docker API, so if the daemon itself hangs, it can't fix that.

For that edge case I rely on systemd watchdog (RestartSec=10 on the docker.service) on Linux hosts. A host-level reboot command through SSH would be the nuclear option but I haven't added that yet. Might be worth adding as a tool though.

I manage my entire homelab from Telegram with one skill by Ts-ssh in openclaw

[–]Ts-ssh[S] 1 point2 points  (0 children)

homebutler itself is just a local CLI/MCP tool — it doesn't expose any network endpoints by default. The Telegram interaction happens through an AI orchestration layer (like OpenClaw or Claude Desktop) which handles auth separately.

So homebutler never touches auth directly. It's a stateless tool that only runs locally or over SSH that you configure yourself.

I built an MCP server that lets Chat and Claude manage my homelab multi-servers by Ts-ssh in ClaudeAI

[–]Ts-ssh[S] 1 point2 points  (0 children)

Thanks for the detailed feedback.

On shell access — the MCP server doesn't expose arbitrary shell execution. It has 9 fixed tools: 5 are read-only (system_status, docker_list, docker_logs, open_ports, network_scan, alerts) and 3 are write operations (docker_restart, docker_stop, wake). Container names go through an allowlist validator that only permits [a-zA-Z0-9\-\_\.] to prevent injection. There's no docker rm or any destructive tool exposed.

On npx trust — valid concern. The npm package is just a thin wrapper that downloads the Go binary from GitHub Releases. If you'd rather not trust npm, you can install directly via brew install Higangssh/homebutler/homebutler or grab the binary from GitHub Releases. Same binary either way.

On SSH pooling — you're right, it currently opens a new connection per tool call. For my 2-server setup it's fine, but connection reuse would matter at scale. That's on my list to improve.

On confirmation gates — that's determined by the MCP client, not the server. Claude Desktop does show tool calls before executing. But a --readonly flag on the server side to disable write tools entirely is something I'm planning to add.

Appreciate the thoughtful questions.

I built an MCP server that lets Chat and Claude manage my homelab multi-servers by Ts-ssh in ClaudeAI

[–]Ts-ssh[S] 1 point2 points  (0 children)

Thanks for the interest. That works for sure, but homebutler gives you structured output — CPU/memory/disk as parsed data, docker containers as a list, etc. Raw SSH means the AI has to parse terminal output every time, which gets messy with different OS formats.
It also handles multi-server routing in one place. Instead of managing SSH keys and CLAUDE.md per server, you add servers to one config and the MCP tools work across all of them.

I built a single binary that lets me manage my homelab from a chat app by Ts-ssh in selfhosted

[–]Ts-ssh[S] 0 points1 point  (0 children)

Thanks for the interest. That's really up to how you configure the AI layer on top, not homebutler itself. homebutler is just a tool — it doesn't make decisions on its own.

For what it's worth, the MCP server only exposes a fixed set of commands (status, docker, ports, etc). There's no arbitrary shell execution. The AI can only call what you explicitly make available.

Whether the AI layer has human-in-the-loop confirmation is a matter of which AI tool you use. Some do (like requiring approval before destructive actions), some don't. That's outside homebutler's scope — it's just the sensor and actuator, not the brain.

I built a single binary that lets me manage my homelab from a chat app by Ts-ssh in selfhosted

[–]Ts-ssh[S] -1 points0 points  (0 children)

You're right — the Telegram screenshot in the repo shows it used with an AI assistant, and that does include write operations like reboot.

To be clear about the layers: homebutler itself is the CLI/dashboard tool. The AI integration (via MCP) is a separate, optional layer. The MCP server exposes specific commands — you control which ones. It's not an open shell.

But fair point, I should make that separation clearer in the README. Appreciate the feedback.

I built a single binary that lets me manage my homelab from a chat app by Ts-ssh in selfhosted

[–]Ts-ssh[S] -1 points0 points  (0 children)

Thanks for the interest. To clarify — homebutler itself is just a Go binary that runs on your server. No AI, no cloud dependency. It gives you a web dashboard, TUI, and CLI to monitor and manage your servers.

The MCP server is optional — it exposes read-only tools so you can plug it into whatever AI tool you want (Claude, Cursor, etc). But that's entirely your choice. The core use case is just a lightweight multi-server monitoring tool you run locally.
OpenClaw is one way to wire it up to a chat interface, but it's not required at all.

Small Projects by AutoModerator in golang

[–]Ts-ssh 0 points1 point  (0 children)

homebutler — a single-binary CLI + TUI for managing homelab servers

I run a Mac Mini and Raspberry Pi at home and wanted one tool to monitor everything. Built it in Go with zero external dependencies for the core, Bubble Tea + Lip Gloss for the TUI.

What it does:

- `homebutler watch` — live TUI dashboard (CPU/mem/disk bars, Docker containers)

- `homebutler status/docker/ports/alerts` — CLI commands with human-readable or `--json` output

- Multi-server SSH monitoring in parallel

- Wake-on-LAN, port scanner, network discovery

- Built-in MCP server (JSON-RPC 2.0, no external SDK)

Some design choices I'd love feedback on:

- No cobra — using raw `os.Args[1]` routing to keep deps minimal

- `internal/` package structure: system, docker, wake, ports, network, alerts, config, tui, mcp, remote

- JSON output via `--json` flag, human-readable by default

- Container name validation with allowlist to prevent command injection (using exec.Command directly)

~10MB binary, cross-compiled for linux/darwin (amd64/arm64) via goreleaser. Tests cover all internal packages.

GitHub: https://github.com/Higangssh/homebutler

homebutler — a TUI dashboard for homelab servers, single Go binary with multi-server SSH and Docker control by [deleted] in commandline

[–]Ts-ssh 0 points1 point  (0 children)

I run a couple of servers at home and wanted a single tool to monitor them all from my terminal. btop is great for local, but I needed multi-server support over SSH without spinning up a web UI.

So I built homebutler — a single Go binary with a TUI dashboard and CLI commands.

What it does:

- `homebutler watch` — live TUI dashboard with CPU/memory/disk bars across all your servers

- `homebutler status` — quick system overview

- `homebutler docker list/restart/stop/logs` — manage containers

- Multi-server SSH monitoring (parallel, key + password auth)

- Wake-on-LAN, port scanner, LAN device discovery

- `--json` flag on everything for scripting

- Built-in MCP server for AI assistant integration (Claude, ChatGPT, Cursor)

Tech: Go, Bubble Tea + Lip Gloss for TUI, ~10MB binary, zero dependencies. Works on macOS, Linux, Windows, ARM.

Install:

brew install Higangssh/homebutler/homebutler

# or

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

GitHub: https://github.com/Higangssh/homebutler

Feedback and feature ideas welcome!