# 🛰️ HomeLab Monitor

v…
connecting…

One small container for your home lab — GPU & local-AI, Docker containers, systemd services and host health, all on one page. Everything is discovered automatically; nothing is hardcoded.

auto-refresh

## 🩺 Setup & requirements

What the monitor can see on this hub, and how to enable anything that's missing. The dashboard keeps running even when optional pieces aren't mounted — no GPU required.

Requirement | Status | Detail
--- | --- | ---

## AI agent (MCP)

A read-only MCP server is built in, so Claude — or any MCP client — can connect and explore this homelab with full dashboard parity.
Connect with the Claude CLI (then ask it about your fleet):

    claude mcp add --transport http homelab …

MCP docs →

## 🛰️ All hosts

Every registered host at a glance. Click a row to focus that host in the other tabs.

Host | Status | OS / Arch | Updates | CPU | RAM | GPU | Load 1m | Uptime | Temp | Disks
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
Loading fleet…

## 🎮 GPU right now

VRAM allocation

## 📋 Services on the GPU (selected range)

Service | Peak | Avg | % time
--- | --- | --- | ---

## 📊 VRAM by service over time

Stacked = VRAM each service holds. Dashed = capacity. Red bands = VRAM pressure; ▼ markers = out-of-memory events.

## ⚡ GPU utilization, power & temperature

One panel per model server: its VRAM timeline (shared by the models it hosts) plus each model's own peak & average. A server is shown even while Idle (model unloaded / between requests), so nothing vanishes when VRAM is released. Recognised: Ollama, vLLM, SGLang, llama.cpp, LocalAI, HF TGI/TEI, LoRAX, mistral.rs, Aphrodite, koboldcpp, tabbyAPI, text-generation-webui, LM Studio, xinference, OpenLLM, LiteLLM, GPUStack, Cortex/Jan, Ramalama, Nexa, Triton, Infinity, faster-whisper/Speaches, Whisper ASR webservice/WhisperX, Wyoming (HA voice), OpenedAI-Speech, Stable Diffusion (A1111/Forge/SD.Next), InvokeAI, ComfyUI.

## 📦 Docker containers

Container | State | Image | Ports | Uptime | RAM | VRAM | Disk | Status
--- | --- | --- | --- | --- | --- | --- | --- | ---

## 🧩 systemd services

## 🔔 Alerts

Push notifications when something noteworthy happens. Configured here — no env vars, no config files. Either channel (Discord or ntfy) can be used; both are optional. Alerts are edge-triggered (one ping per state change) so they don't spam.

Alerts enabled — turn the notifier on once a channel below is filled in.
Discord webhook URL
ntfy.sh topic
Topic is required; server defaults to `https://ntfy.sh`. Self-hosted ntfy works too.
Minimum severity
Disk alert threshold (%)

Triggers: container unhealthy/exited non-zero/dead, systemd unit failed, GPU VRAM pressure (free < `PRESSURE_FREE_MB`), GPU OOM events, and disks crossing the threshold above.

## 🌐 Hosts

Monitor your other machines from this hub — agentless, read-only, over SSH. Three quick steps: authorize the hub's key on a machine, add it here, then Test.

1
Authorize this hub on the machine
Run this on the machine you want to monitor so the hub can log in (read-only). Pick its operating system:

    loading…

    loading…

2
Add the host
A short name and its SSH target. Don't know the address? Scan your LAN for candidates.
3
Test & monitor
Hit Test on a host below — the checklist shows exactly what to fix for anything not yet working, with copy-paste commands for that machine's OS. Typo in a target? Click ✎ to edit it inline.

## 🖥️ System

## 🧠 Memory map — containers & services

## 🖥️ CPU, RAM & load

## 🌐 Network

## 🛡️ Security

Read-only, agentless — no changes are made to any host. Items shown in grey (⚪) couldn't be read without elevated privileges on that machine.

Self-hosted & open source • single container • no Prometheus/Grafana required • history downsampled on read. GPU services attributed via `/proc/<pid>/cgroup` + the Docker API.
Ideas welcome — see CONTRIBUTING.md · issues & PRs always open.

Update available
To update, run this on the host that's running the container:

    cd <your-clone-dir> && git pull && docker compose up -d --build

View on GitHub →
OS updates available

Counts come from each host's own package manager (cached — no refresh is triggered). Click a host's row in the All-hosts table for its full Security tab.