Data & storage
Data & storage controls how Exolvra handles the durable things agents produce — files they write, sessions they leave behind. Quotas stop runaway writes; retention keeps the database from growing forever; cleanup runs on a schedule so old state doesn't accumulate.
What this page is for
Two cards: File Store and Sessions. Each has a short list of primary fields and an Advanced disclosure for the less-used knobs.
Every field lives in live-reloading configuration — save once, it takes effect immediately.
File store
The file store is where agents save files they produce (documents, images, spreadsheets, binaries). It’s also where users upload files they want agents to work with. The quotas here keep it bounded.
| Field | What it controls | Default |
|---|---|---|
| Max File Size (MB) | Largest single file accepted | 100 MB |
| Max Total Storage (GB) | Total across all projects (0 = unlimited) | 5 GB |
| Enable file versioning | When on, prior versions are kept when a file is overwritten or appended | On |
Max file size keeps a single bad upload from swallowing the disk. 100 MB is generous; drop it to 10–25 MB if you’re running a small instance. A size above the limit is rejected at upload time with a clear error.
Total storage caps the file store globally. 5 GB is the default for typical self-hosted use; raise to 50+ GB for a team deployment. When the cap is hit, new uploads fail; old files have to be deleted or expired before more can be written.
Versioning is on by default so rollback works. Turning it off saves disk but loses the ability to restore a prior version.
Advanced storage
The disclosure exposes three more fields:
| Field | What it controls | Default |
|---|---|---|
| Default Max Versions | How many prior versions to keep per file | 50 |
| Default File Expiry (days) | Auto-delete files after N days (0 = never) | 0 |
| Blocked Extensions | Uploads matching any listed extension are rejected | empty |
Max versions caps the version history per file. 50 is the default; drop to 10 if storage is tight. When the cap is hit, the oldest version is pruned to make room.
File expiry auto-deletes files after the given number of days since last modification. 0 means “never expire” — files live forever unless manually deleted. Set a value (30, 90, 180 days) if you want automatic cleanup of stale files.
Blocked extensions is the per-extension denylist. One extension per line, include the dot (.exe, .dll, .bat). Any upload matching any entry is rejected. Default list is empty — populate for a public-facing instance where untrusted users upload.
Sessions
Session retention controls how long agent conversation transcripts stick around. Sessions don’t consume as much space as files, but a multi-user instance running for months will grow a lot of them.
| Field | What it controls | Default |
|---|---|---|
| Terminated Session Retention (days) | How long to keep sessions after they end | 7 |
| Stale Inactivity Threshold (days) | Days of no activity before an active session is considered stale | 30 |
| Auto-terminate stale sessions | When on, stale sessions close automatically | On |
After termination, a session lingers for retention days to give users time to look back at the transcript. After that, it’s pruned: the row is deleted, the conversation is gone. 7 days is the default — long enough for a weekly retrospective, short enough that the database doesn’t bloat.
Stale inactivity is the other half: active sessions that haven’t seen a message in 30 days are marked stale, and if auto-terminate is on, closed automatically. Without this, long-forgotten sessions stay “open” forever and skew counts.
Advanced cleanup
| Field | What it controls | Default |
|---|---|---|
| Max Prune Per Cycle | Upper bound on deletions in one cleanup pass | 100 |
| Cleanup Hour (UTC) | When the daily cleanup runs | 3 |
The daily cleanup pass runs once a day at the configured UTC hour. It deletes up to Max Prune Per Cycle expired sessions. On a heavily-loaded instance, a larger number (500–1000) clears backlog faster; on a small instance, 100 is plenty.
Pick the cleanup hour to be quiet time for your user base. 3 UTC is the default — 10pm ET / 7pm PT, deep sleep for most of the US and Europe.
Common pitfalls
Setting storage limit to 0 “just in case.” Unlimited storage is the best way to find out your disk filled up at 4am. Pick a real cap based on disk size; adjust up later if needed.
File expiry set too aggressive. 7-day expiry on knowledge-base documents means users rebuild their collections every week. Set 0 (no expiry) on knowledge files; apply expiry only to scratch/work files.
Turning versioning off to save space. Versioning is usually cheaper than you think — most files change incrementally. The real cost comes from Default Max Versions * file size. Tune the cap rather than killing versioning entirely.
Low retention plus long runs. A 1-day retention on terminated sessions is too tight — the user loses yesterday’s transcripts before the next morning. 7 days is the reasonable floor.
Missing file extensions in the blocked list. If you list .exe but not .com or .bat, the gap is exploitable. For executable types, list them all or use allowlist-based content type restrictions (via the underlying configuration — not currently surfaced in the UI).
Where to go next
- Files dashboard — where the file store lives for users
- Budget — storage doesn’t consume API budget, but bandwidth might
- Admin overview — the broader operator surface