Nurvus
AI-powered homelab management. Deploy, configure, and monitor self-hosted services through a conversational agent running entirely on your own hardware.
The goal of Nurvus is to make running a homelab accessible to everyone. You shouldn't need to be a system administrator or network engineer to self-host your own services. Just tell the agent what you want in plain English and it handles the rest: installing services, configuring networking, managing updates, and troubleshooting problems.

Nurvus
The System

Demi
The Agent
Demi is the AI agent you interact with to manage your homelab. She's named after the android from Phantasy Star IV: End of the Millennium who merges herself with a failing climate control system called Nurvus to bring it back under control.
In the same spirit, Demi is the agent and Nurvus is the central system that keeps everything running.
Why NixOS?
Nurvus is built around NixOS because it's the only Linux distribution where an AI agent can safely manage an entire system. Here's why:
Declarative configuration. The entire system state lives in a single file (configuration.nix). Every package, service, firewall rule, and container is declared there. Demi reads and writes this file, then runs nixos-rebuild switch to apply changes. There's no hidden state, no manual edits to remember, no drift between what's configured and what's running.
Atomic rollbacks. Every rebuild creates a new system generation. If something breaks, rolling back is instant and guaranteed to restore the previous working state. This makes it safe for an AI agent to make changes, because mistakes are always reversible. You can't brick your system.
Reproducibility. The same configuration always produces the same system. If Demi deploys postgres with specific settings on your machine, that exact configuration can be rebuilt from scratch on another machine. Your homelab becomes portable.
No imperative state. On traditional distros, an AI agent would need to manage config files scattered across /etc/, track which packages are installed, handle service dependencies manually, and hope nothing was changed out of band. On NixOS, there's one source of truth. If it's not in configuration.nix, it doesn't exist.
This is what makes agentic system management practical. Without NixOS's guarantees, letting an AI modify your system would be risky. With them, it's just another tool.
How It Works
You: deploy jellyfin on port 8096
Demi: Here's the plan:
- Container: jellyfin
- Image: docker.io/jellyfin/jellyfin:latest
- Port: 8096 -> 8096
- Volume: /srv/jellyfin/config:/config, /srv/jellyfin/cache:/cache
- Firewall: open 8096
Ready to proceed, or want to change anything?
You: yes
★ nixos_deploy_container (...)
★ nixos_rebuild (action=switch)
★ container (action=list)
Demi: Jellyfin is live on port 8096.
Runs entirely on your hardware. The LLM, the agent, the services. No cloud. No telemetry.
Demi remembers. She learns your homelab over time: what services you've deployed, your preferences, and what she's researched. Follow-up conversations are smarter because she builds on prior work. All memory is stored locally in SQLite, never sent anywhere. See Memory for details.
Demi's Toolbox
| Tool | Actions | Description |
|---|---|---|
system_info |
overview, processes, memory, cpu, io, network | System info, live stats, resource usage |
network |
ping, dns, port_check, http_check | Network diagnostics and connectivity testing |
container |
list, inspect, logs, restart, stop, start, exec, update | Manage containers, run commands inside them |
files |
read, write, list | Read, write, and list files under /srv/ |
nixos_info |
config, generations | Read NixOS configuration or list generations |
nixos_deploy_container |
- | Add a container to configuration.nix |
nixos_remove_container |
- | Remove a container from configuration.nix |
nixos_set_option |
- | Set a NixOS option (hostname, timezone, etc.) |
nixos_rebuild |
switch, test, dry-run, rollback | Apply NixOS changes or rollback |
system_reboot |
- | Reboot the system |
timer |
list, status, add, remove, enable, disable, run, run_at | Scheduled tasks via systemd timers |
mount |
scan, add, remove, list, status | Network shares (NFS/SMB) and drive mounts |
firewall |
list, open, close | Manage firewall ports |
cleanup |
status, containers, nix, all | Free disk space (prune images, nix garbage collect) |
service_templates |
list, get | Browse pre-built service templates |
registry |
search, tags, info, readme | Search Docker Hub, look up images, fetch READMEs |
memory |
save, search, list, delete, update | Persistent memory across sessions |
Quick Start
Then run demi to start chatting. See Getting Started for details.