Hardware awareness for small infrastructure environments.
Experimental • Home Lab Tool • Quiet Infrastructure
Harry is a lightweight hardware awareness layer for small multi-node home labs.
It exists because a thing happened:
I was no longer managing infrastructure — I was remembering it.
Harry reduces cognitive overload by keeping a small fleet visible, comparable, and contract-validated.
If it runs quietly for years, we’ve won. Boring is good.
Latest release notes: https://github.com/samuelwhite/Harry/releases
Clone and start the Brain:
git clone https://github.com/samuelwhite/Harry.git
cd Harry
./install.sh
The installing host automatically registers itself as a node.
Open:
http://localhost:8787
Install an agent on another node:
export HARRY_BASE_URL="http://<brain-host>:8787"
curl -fsSL "$HARRY_BASE_URL/scripts/install-agent.sh" | sudo -E bash
- What Harry is (and isn’t)
- Philosophy
- Non-Goals
- Architecture
- Useful Endpoints
- Quick Diagnostics
- Install – Brain
- Install – Agent
- Self-updating model
- Security notes
- Status
- collect hardware facts and metrics per node
- validate snapshots against a versioned JSON schema
- store snapshots (SQLite)
- serve a simple fleet overview UI
- distribute a self-updating agent to nodes
- track agent versions across the fleet
- fail loudly on invalid payloads
- orchestrate workloads
- automate infrastructure decisions
- replace observability platforms
- pretend to be enterprise tooling
Harry exists to reduce operator cognitive load in small infrastructure environments.
It assumes:
- you run a handful of machines
- you don’t want to run a full observability stack
- you want quick answers to simple questions like:
“Which machine is about to become a problem?”
Harry intentionally does very little, but tries to do it reliably.
Harry intentionally avoids becoming a full infrastructure platform.
It will not:
- orchestrate workloads
- replace monitoring stacks
- manage deployments
- automate infrastructure decisions
If you need those things, excellent tools already exist.
flowchart LR
A[Nodes] --> B[Harry Agent]
B --> C[Harry Brain]
C --> D[Snapshot Store<br>SQLite]
C --> E[Advice Engine]
C --> F[Schema Distribution]
C --> G[Fleet Dashboard UI]
FastAPI + SQLite service.
Responsibilities:
- ingest validated snapshots
- compute node health signals
- store historical data
- expose fleet UI
- expose simple operational APIs
Single-file bash script with embedded Python.
Responsibilities:
- collect system metrics
- produce JSON snapshot
- validate payload structure
- send snapshot to Brain
- self-update automatically
Agents run every 5 minutes by default.
Harry intentionally exposes a small, stable API surface.
/
Fleet overview dashboard.
/health
Minimal service health check.
Used by container healthchecks and monitoring tools.
/version
Returns version compatibility information:
brain_version
agent_expected
schema_current
Useful for tooling and debugging.
/nodes
Returns a fleet summary including:
- node name
- last_seen timestamp
- agent_version
- schema_version
- health state
- CPU load
- RAM usage
- disk utilisation
- hardware model
This endpoint is designed for future automation and integrations.
/doctor
Human-readable diagnostic report.
Example output:
Doctor Harry
===========
ok: True
brain_version: 2026.03.08
agent_version: 0.2.3
fleet_nodes: 1
fleet_worst_state: healthy
/doctor.json
Machine-readable diagnostics endpoint.
Useful for scripts, monitoring systems, or external tools.
/dist/harry_agent.sh
Serves the current agent version.
Agents automatically check this and self-update when necessary.
/scripts/install-agent.sh
Convenience installer used by:
export HARRY_BASE_URL="http://<brain-host>:8787"
curl -fsSL "$HARRY_BASE_URL/scripts/install-agent.sh" | sudo -E bash
Once the Brain is running:
Human-readable:
curl http://<brain-host>:8787/doctor
Structured output:
curl http://<brain-host>:8787/doctor.json
Fleet summary:
curl http://<brain-host>:8787/nodes
- Docker
- Docker Compose plugin
Run:
./install.sh
Optional parameters:
./install.sh --listen 127.0.0.1
./install.sh --port 8788
./install.sh --dir ~/harry
./install.sh --project harrytest
After install:
UI: http://<host>:8787
Health: http://<host>:8787/health
On each node:
export HARRY_BASE_URL="http://<brain-host>:8787"
curl -fsSL "$HARRY_BASE_URL/scripts/install-agent.sh" | sudo -E bash
This installs:
/opt/harry/agent/harry_agent.sh
harry-agent.service
harry-agent.timer
The agent runs every 5 minutes.
On each execution the agent:
- downloads
/dist/harry_agent.sh - compares SHA256
- replaces itself if changed
- re-executes
Updating the Brain agent file updates the entire fleet.
Agents only push data.
The Brain never SSHs into nodes.
If exposed beyond your LAN, run behind an HTTPS reverse proxy.
Authentication is intentionally not implemented yet.
This project is intended for trusted networks / home labs.
Harry is an experimental home-lab tool.
If it runs quietly for years without attention, the design succeeded.
