Memory
Demi has persistent memory that survives across sessions. She can remember facts about your homelab, your preferences, research findings, and significant events. This means follow-up conversations get smarter over time, and you don't have to repeat yourself.
How It Works
Memory is stored locally in a SQLite database at ~/.local/share/nurvus/memory.db. Demi decides when to save and recall memories based on the conversation. Nothing is sent to external services.
You can override the storage location with the NURVUS_DATA_DIR environment variable:
What Demi Remembers
Memories are organized into five categories:
| Category | What it stores | Example |
|---|---|---|
| fact | Homelab state and hardware | "The server has 32GB RAM and runs NixOS 24.11" |
| preference | Your choices and opinions | "Erik prefers Caddy over Traefik" |
| procedure | Learned workflows | "To update Jellyfin: pull image, restart, check logs" |
| research | Service research findings | "Immich requires a Redis container and PostgreSQL" |
| event | Significant past actions | "Deployed Nextcloud on 2026-03-20" |
Saving Memories
Demi saves memories automatically when something worth remembering happens. She'll save after deploying or removing services, when you mention preferences, and when troubleshooting reveals something useful.
You can also ask her directly:
You: remember that I want all databases on port 5432
Demi: ★ memory (action=save, content="User wants all databases on port 5432",
category=preference, tags=database,port)
Got it. I'll remember that for future deployments.
Recalling Memories
Demi searches her memory when it's relevant. For example, before deploying a service, she might check if you have preferences about ports or reverse proxies. You can also ask directly:
You: what do you know about my homelab?
Demi: ★ memory (action=search, query=homelab)
Your server runs NixOS 24.11 with 32GB RAM. You have Jellyfin on port 8096,
Pi-hole on port 8053, and Caddy as your reverse proxy.
You: what services have we deployed?
Demi: ★ memory (action=list, category=event)
Deployed Nextcloud with PostgreSQL on 2026-03-20.
Deployed Jellyfin on port 8096 on 2026-03-18.
Set up Caddy as reverse proxy on 2026-03-15.
Managing Memories
You can ask Demi to update or remove memories:
You: update the note about Jellyfin, it's on port 9096 now
Demi: ★ memory (action=search, query=jellyfin port)
★ memory (action=update, id=a1b2c3d4, content="Jellyfin runs on port 9096")
Updated.
You: forget the note about using port 9000 for nginx
Demi: ★ memory (action=search, query=nginx port 9000)
★ memory (action=delete, id=e5f6g7h8)
Done, that memory is removed.
Inspecting the Database
The memory database is a standard SQLite file. You can inspect it directly if you want:
sqlite3 ~/.local/share/nurvus/memory.db "SELECT id, category, content FROM memories ORDER BY updated_at DESC"
Backing Up
The database is a single file. Copy it to back up all of Demi's memories:
Search
Memory search uses SQLite FTS5 (full-text search), so Demi can find memories by any word or phrase in the content, category, or tags. Results are ranked by relevance, not just recency.