xdg portal here is not gnome or gtk, it’s kde it the screenshot are
- waybar
- alacritty
- btop
- zed
- dolphin
also installed are
- mako
- fuzzel
- and kde apps
True… But you get the point!
xdg portal here is not gnome or gtk, it’s kde it the screenshot are
also installed are

Welcome! if you have questions on ik build parameters for optimizations feel free to ask, I will try my best to answer
The article below is written by the Agent, the backend for the agent is:
If you have questions or want me to elaborate please ask
I do not use this setup for anything other than what my Agent says below, everything this point onwards is my Agents view
---------------------------- xx ------------------------- xx ------------------------
My homelab consists of four servers connected via Tailscale:
| Server | Location | Purpose |
|---|---|---|
| nasbox | Home (192.168.150.2) | Primary hub — Caddy reverse proxy, DNS, monitoring, Signal API, Git server |
| mediabox | Home (192.168.150.3) | Media services — Jellyfin, Immich, Arr stack, downloaders |
| llmbox | Home (192.168.150.4) | AI inference — ik-llama.cpp backend |
| dms | Remote (192.168.15.30) | Remote services — Jellyfin, Immich, Arr stack, accessed via Tailscale |
The router (GL-MT3000) is the Tailscale gateway — if it’s down, dms is unreachable, so it’s always checked first.
At /mnt/data/pi-space/ lives the workspace where the Pi agent operates. It’s a git repo that holds everything the agent needs:
pi-space/
├── homelab-index.yml # Topology — servers, IPs, services
├── AGENTS.md # Agent instructions — operational modes, rules
├── .pi/
│ ├── extensions/
│ │ └── uptime-monitor.ts # Alert polling extension
│ ├── skills/
│ │ ├── daily-maintenance/ # Health check runbook
│ │ ├── os-update/ # OS package updates
│ │ ├── nasbox-docker-update/
│ │ ├── mediabox-docker-update/
│ │ ├── dms-docker-update/
│ │ ├── ik-llama-upgrade/ # LLM backend upgrade
│ │ ├── backup/ # Backup + disk health
│ │ ├── signal-notify/ # Signal group messaging
│ │ ├── git-push/ # Push workspace changes
│ │ └── uptime-kuma-webhook/ # Webhook receiver
│ └── alerts/
│ ├── current-alert.txt # Active alert (overwritten each event)
│ └── alert-2026-06-14-*.txt # Timestamped history
├── incidents/
│ └── 2026-06-22-seerr-dms.md # Incident reports
└── maintenance-log/
├── incident-2026-06-14.md # Incident reports
└── incident-2026-06-21.md
The agent operates in two modes, switching between them based on alerts:
When no alerts are active, the agent runs the daily-maintenance skill, which checks every server:
docker ps --filter "health=unhealthy"docker ps --filter "status=exited"openssl x509The report is saved to /mnt/myfiles/notes/notes/ranjan/PI-Notes/daily/YYYY-MM-DD.md and kept for 7 days.
When an alert arrives, the agent immediately pauses routine tasks and follows a five-step process:
current-alert.txthomelab-index.yml to map dependenciesThis is the most interesting part of the setup. It’s a bidirectional alert system — the agent sees both DOWN and UP events:
uptime-kuma-webhook.py) parses the JSON payload, formats it, and writes it to current-alert.txtuptime-monitor.ts) polls the file every 10 seconds, compares the MD5 hash, and when it changes, injects the alert into the agentpi.sendUserMessage() with deliverAs: "steer"clear_alerts to clear the fileOn June 14 alone, there were 8 DOWN events and 5 UP events. The current-alert.txt is overwritten each time (not appended), so the agent must determine
whether each event is a new incident or a recovery. This is crucial — a DOWN alert means investigate, but an UP alert means verify the recovery.
The agent also suppresses group monitor alerts from Uptime Kuma, since child services are tracked individually.
The workspace has a collection of skills — reusable procedures the agent can execute:
The system has handled several incidents:
restart: always policy, agent started it via docker compose up -dThe agent logs each incident in incidents/ or maintenance-log/ with date, service, cause, action, and result.
The agent operates under strict rules:
homelab-index.ymlThe key insight is that the workspace is a single source of truth — topology, procedures, and history are all in one place. The agent doesn’t need to guess; it
consults homelab-index.yml for the map, AGENTS.md for the rules, and the skills for the procedures. The alert system provides real-time awareness, and the maintenance
logs provide historical context.
It’s a system where an AI agent can reliably maintain a complex infrastructure — not because it’s magical, but because the workspace is designed to give it the
information and procedures it needs, and the constraints keep it from doing anything dangerous.
No I am happy with my lightweight alternatives. Try to follow the principle “do one thing well” as much as I can. So having smaller different apps is why I will never use DMS or noctalia