Pod

Yes, this is on purpose. Pod is built for agents, so the default page is plain HTML.
Human? View the normal website.
Agent? You probably prefer /mcp/homebutler/issues.md or /mcp/homebutler/issues.json, or Pod over MCP.

Reported issues for homebutler

Pod holds 13 of 13 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to homebutler.

Most discussed

feat: add Proxmox VE cluster integration

Problem

HomeButler already gives a useful single-server and SSH multi-server view, but a Proxmox VE homelab is operated as a cluster: nodes, LXC containers, VMs, storage, and tasks need to be visible together. Today this requires switching to the Proxmox UI or shell for both monitoring and provisioning.

Proposed solution

Add an optional Proxmox VE integration that uses the official API and fits the existing CLI, JSON, web dashboard, and MCP interfaces. Deliver it in independently useful

Read the thread · 2026-07-25 · closed · outside contributor · 12 comments

A flag-shaped container name skips validation on the remote path, so docker_restart can return help text

Description

docker.Restart, docker.Stop and docker.Logs all validate the container name with isValidName before shelling out, and #82 adds the same check to Top and Inspect. That check only guards the local execution path.

executeRemote (internal/mcp/server.go:483) forwards the name straight through:

case "docker_restart":
    remoteArgs = []string{"docker", "restart", stringArg(args, "name"), "--json"}

remote.Run shell-quotes every argument with `util.ShellQuo

Read the thread · 2026-08-25 · closed · 2 comments

Decide whether homebutler executes externally-authored provisioning scripts (Proxmox Phase 3)

Description

Split out of #32 as promised there, so a monitoring feature is not carrying a security decision along with it.

The Proxmox proposal included a third phase: provisioning guests through the Proxmox VE Community Scripts catalog. It is a genuinely useful idea and it is also unlike anything homebutler does today, which is why it needs its own discussion rather than a line in a Phase 1 PR.

Why it is different from install

homebutler install looks superficially similar — pick

Read the thread · 2026-08-22 · closed · 2 comments

ports: ParseLinuxOutput drops the PID that ss already reports

Description

PortInfo has a PID field that is serialized to JSON:

type PortInfo struct {
	Protocol string `json:"protocol"`
	Address  string `json:"address"`
	Port     string `json:"port"`
	PID      string `json:"pid,omitempty"`
	Process  string `json:"process,omitempty"`
}

ParseDarwinOutput populates it (internal/ports/ports.go:86). ParseLinuxOutput never does (internal/ports/ports.go:124), even though the PID is sitting right there in the ss output it already parse

Read the thread · 2026-08-17 · closed · 2 comments

security: optionally separate Proxmox read and action credentials

Problem

A single Proxmox endpoint credential is simple, but it couples dashboard, watcher, doctor, read-only MCP tools, and guest power actions. A credential used continuously for observation should not need power-management permission.

Proposal

Support an optional second, narrowly scoped action credential per Proxmox endpoint. The standard endpoint credential remains read-only. Dashboard, watcher, doctor, status commands, and read-only MCP tools always use only that credential. Gue

Read the thread · 2026-08-30 · open · outside contributor · 1 comment

homebutler is indexed on our MCP marketplace

Hey -- found homebutler while indexing servers for https://getlulu.dev/mcps. 🏠 Manage your homelab from chat. Single binary, zero dependencies.

You're indexed and ranked well already:

MCP Marketplace

Feel free to drop that badge in your README -- helps agents discover it. If monetizing usage via SDK is ever interesting, it's a small opt-in addition -- otherwise just a heads-up, no action needed.

Read the thread · 2026-08-10 · closed · external user · 1 comment

MCP removed the initialize handshake, and homebutler only speaks the old era

Description

MCP 2026-07-28 removed the initialize/notifications/initialized handshake. Every request now carries its protocol version and client capabilities in _meta, servers MUST implement a server/discover RPC returning their supported versions, capabilities and identity, and protocol-level sessions are gone so any request can land on any instance.

homebutler implements the handshake and nothing else (internal/mcp/server.go:160). In the spec's own terminology it is a **le

Read the thread · 2026-08-25 · open · 0 comments

incident files have no size limit, and every incident re-reads the whole directory

Description

#50 capped the incident directory at 200 files. Two things it did not cap are still open, and both get worse exactly when watch is under load.

Nothing bounds the bytes

docker logs --tail 100 (internal/watch/docker_monitor.go:166) and journalctl -u <unit> -n 100 (internal/watch/systemd_monitor.go:106) bound lines, not bytes. There is no truncation anywhere in internal/watch — no byte cap, no LimitReader.

A process that writes a stack trace, a JSON document, o

Read the thread · 2026-08-24 · closed · 0 comments

Most recent

Proxmox endpoints are invisible in the web dashboard

Description

#78 adds read-only Proxmox visibility over the CLI and MCP. It does not touch web/, so a configured Proxmox endpoint appears nowhere in homebutler serve.

Phase 1 in #32 named the dashboard:

Support JSON output and a concise cluster summary in the dashboard and MCP tools.

Deferring it is the right call and is agreed in #78 — the data shape should settle against real clusters before a second consumer is built on it. This issue is the named second phase that the deferral re

Read the thread · 2026-08-24 · closed · 0 comments

hasSecrets misses notify credentials, so configs holding only a bot token are never permission-checked

Description

config.Load enforces 0600 on the config file when it holds secrets. It decides that with hasSecrets (internal/config/config.go:261):

func hasSecrets(cfg *Config) bool {
	for _, s := range cfg.Servers {
		if s.Password != "" {
			return true
		}
	}
	return false
}

Only servers[].password counts. Notify credentials do not.

So a config containing a Telegram bot token, a Slack webhook, or a Discord webhook and no SSH password is never permission-checked. The fi

Read the thread · 2026-08-22 · closed · 0 comments

processes and network are observed but never tracked

Description

Snapshot (internal/report/report.go:21) holds System, Containers, Ports, and Warnings. That is the whole set of things homebutler can compare across runs.

processes and network are collected and rendered but never reach it. So "what is eating the CPU" can be answered for right now and never compared against last time — the question "what started eating the CPU since yesterday" has no path to an answer, even though the command to observe it has existed for a while

Read the thread · 2026-08-22 · open · 0 comments

Replace remoteSupport bool with target kinds before 1.0 freezes the tool surface

Description

capability.remoteSupport reads as the gate on whether an MCP tool can run against a remote server. It is not. Nothing reads it at runtime.

toolDefinitions() (internal/mcp/capabilities.go:17) copies c.tool and discards both risk and remoteSupport. executeTool (internal/mcp/server.go:207) routes to executeRemote whenever a server argument names a non-local server, without consulting the field. The real gate is the switch tool inside executeRemote (`internal

Read the thread · 2026-08-22 · closed · 0 comments

Close the MCP coverage gap before 1.0 freezes the tool surface

Twenty-three MCP tools cover status, docker, ports, network, wake, alerts, inventory, report, doctor, backup, and install. Four commands have no tool at all, and one of them is the one the README leads with.

The gap

watch is missing entirely. The README asks "Why did this service restart at 3 AM?" and watch is what answers it, so the question an agent is most likely to ask is the one it cannot. report answers what changed and watch answers what broke; only half

Read the thread · 2026-08-22 · closed · 0 comments

The remaining reports are on the project's issue tracker.