Using Demi
Demi is a conversational agent that manages your homelab. You can interact with her through a TUI (terminal user interface) over SSH, or through a web UI accessible from any device on your network.
The Basics
Just describe what you want. Demi figures out which tools to use and handles the details.
You: what services are running?
Demi: ★ container (action=list)
PostgreSQL is running on port 5432.
You: restart my postgres
Demi: ★ container (action=restart, name=postgres)
Postgres restarted. Was running since Sun 2026-03-22 02:24:39 UTC.
You: show me the postgres logs
Demi: ★ container (action=logs, name=postgres)
PostgreSQL started successfully, listening on 5432. Ready to accept connections.
Plan-Confirm-Execute
For anything that changes the system (deploying, removing, rebuilding), Demi follows a strict workflow:
- Gather information about the current state
- Plan and show you exactly what will change
- Wait for your confirmation
- Execute the changes and confirm the result
Demi will never modify your system without asking first.
Slash Commands
Type / to see available commands with autocomplete. The dropdown appears as you type and filters to matching commands.
| Command | Description |
|---|---|
/clear |
Clear conversation history (persistent memories are kept) |
/reset |
Same as /clear |
/memory |
List Demi's recent memories |
/quit |
Exit Nurvus |
/exit |
Same as /quit |
Example Prompts
Deploying services:
- "deploy pi-hole on port 8053"
- "set up a minecraft server"
- "I need a postgres database for my app"
- "deploy nextcloud with its own database"
Managing services:
- "what services are running?"
- "restart my postgres"
- "show me the nginx logs"
- "stop the minecraft server"
Running commands inside containers:
- "how many players are on the minecraft server?"
- "run a query on postgres to list all databases"
Editing files:
- "create a dark-themed index page for nginx"
- "show me what's in /srv/postgres/"
System administration:
- "what's using the most CPU?"
- "how much disk space do I have?"
- "set my hostname to homelab"
- "change the timezone to America/New_York"
Network diagnostics:
- "can you reach google.com?"
- "is port 8096 open?"
- "check if nginx is responding on port 9000"
Reverse proxy and HTTPS:
- "set up caddy as a reverse proxy"
- "I want to access jellyfin at media.home.local"
- "put nextcloud behind caddy with HTTPS"
- "add grafana to caddy at graphs.home.local"
Network shares and drives:
- "scan my NAS at 192.168.1.50 for shares"
- "mount the media share from my NAS for jellyfin"
- "mount //nas.local/photos with username erik"
- "what mounts do I have?"
- "remove the photos mount"
Scheduled tasks:
- "back up my postgres every night at 2am"
- "restart the minecraft server weekly on Sundays"
- "run the postgres backup now"
- "clean up old backups in an hour"
- "what timers are running?"
- "disable the nightly backup"
Memory:
- "remember that I prefer Caddy over Traefik"
- "what do you remember about my homelab?"
- "what services have we deployed before?"
- "forget the note about using port 9000 for nginx"
Researching services:
- "search docker hub for a password manager"
- "what tags are available for postgres?"
- "read the README for https://github.com/dani-garcia/vaultwarden"
Updating services:
- "update jellyfin to the latest version"
- "update all my containers"
- "what version of postgres am I running?"
Firewall:
- "what ports are open?"
- "open port 8080"
- "close port 3001"
Disk cleanup:
- "how much disk space do I have?"
- "clean up old container images"
- "garbage collect the nix store"
- "free up disk space"
Troubleshooting:
- "why is the server slow?"
- "the minecraft server isn't starting, check the logs"
- "rollback to the previous configuration"