Manual Reference Configuration - HenriGrimm/Minnow GitHub Wiki
Where your data lives
Everything Minnow keeps lives in one folder, called Minnow home. Chats, settings, your Brain wiki, encrypted credentials, downloaded models, logs — all of it, in files you can inspect, back up, or delete.
| Platform | Path |
|---|---|
| Windows | %USERPROFILE%\.minnow |
| macOS and Linux | ~/.minnow |
Set the MINNOW_HOME environment variable to use a different folder — useful for a clean profile to experiment in without touching your real one.
Minnow creates every folder it might need on first run, so empty directories in there are normal and not a sign of anything wrong.
Backup
Settings → Data & privacy → Backup and restore writes the parts of this folder worth keeping into one file, on demand or on a schedule, and restores them here or on another computer. It knows which folders are caches, copies databases safely while Minnow is running, and encrypts your credentials with a passphrase. See Backup and restore.
If you would rather copy files yourself, these are the ones that matter:
| Item | Why |
|---|---|
.key |
The encryption key for every secret Minnow holds — API keys, OAuth tokens, webhook secrets, scheduled-job prompts. Lose this and none of them can be decrypted. There is no recovery; you re-enter everything. |
sessions/ |
Your entire chat history |
brain/ |
Your knowledge wiki and memories |
config.json |
Your preferences |
Copying by hand has two traps. sessions/sessions.db is a live database: copy it while Minnow is running and the copy can be inconsistent, so quit Minnow first. And a copy of .key is as sensitive as the credentials it unlocks — keep it somewhere you would keep a password.
The layout
| Path | Contents |
|---|---|
config.json |
Workspace, features, voice, terminal, tool security, fallbacks |
model-reasoning-defaults.json |
Per-provider, per-model reasoning-level defaults from the model picker |
.key |
The encryption key for secrets (restricted permissions on Unix) |
sessions/ |
Chat history in SQLite, with a full-text search index |
sessions/snapshots/ |
Rotating copies of the chat history database — the three newest, taken at most twice a day |
brain/ |
Wiki pages, vectors, ingested sources, code index databases, proposals |
providers/ |
Provider profiles, encrypted secrets, reported capabilities |
models/ |
Downloaded model artifacts; voice models under models/voice/ |
voice/ |
Python environment for local speech |
tools.json |
Per-tool permissions |
search.json |
Search provider, fallback chain, API keys |
servers.json, servers/ |
Managed local servers (SearXNG, llama-cpp) |
skills.json, skills/ |
Skill enable flags and installed skills |
rules.json |
Your standing rules |
prompts/, prompt-configs/, profiles/ |
Prompt overrides and portable setup bundles |
work-agents.json, sub-agents.json |
Agent overrides and sub-agent types |
agent-packs/ |
Installed agent packs |
issues/ |
Issue store and taxonomy |
scheduler.json, scheduler-runs/ |
Scheduled jobs and their run history |
backup.json |
Backup contents, scheduled-snapshot settings and the encrypted snapshot passphrase |
pre-restore/ |
Data set aside by a restore, kept until you undo the restore or delete it |
restore-staging/ |
A backup unpacked and checked, waiting for the restart that applies it |
research/ |
Saved research reports |
mcp.json, mcp/ |
MCP server configuration |
lsp.json, lsp/ |
Language server configuration |
webhooks.json |
Encrypted outgoing webhook configuration, including destination URLs |
auth/devices.json |
Paired LAN companions — hashes only, never tokens |
oauth/ |
Encrypted OAuth tokens |
updater.json |
Your update channel |
appearance.json |
Theme, custom colors, and fonts |
browser-profiles/ |
Disposable Agent Browser session profiles; tabs are not restored between sessions |
logs/ |
diagnostics.jsonl and crash.jsonl |
worktrees/ |
Git worktrees created for isolated board tasks |
workspace/ |
Sandbox workspace folder (~/.minnow/workspace) for chats without a project root |
backups/ |
Brain wiki backups (created when you export or restore the wiki) |
Some folders in there are scaffolded ahead of the features that fill them and stay empty. That is normal, and nothing needs cleaning up.
Browser preferences live in the browser block of config.json: whether browser automation is enabled, whether navigation is allowed, the allowed origin patterns, and whether visible preview tabs are restored on boot. Agent Browser tabs use temporary profiles under browser-profiles/ and are closed with their service, so they are not restored.
One exception: older profiles may still hold a large sessions/state.json.backup. It was an earlier backup format, nothing reads it any more, and the sessions/snapshots/ copies replace it. Minnow leaves it alone — delete it yourself if you want the space back.
Encrypted secrets
API keys and similar values are encrypted with AES-256-GCM under .key. Deleting or rotating that file makes existing secrets permanently unreadable — Minnow will simply show empty fields where your keys were, and you re-enter them.
On Unix the key file is created with owner-only permissions.
A clean profile
Point MINNOW_HOME at an empty directory and launch. You get a fresh Minnow — new setup wizard, no chats, no keys — and your real profile is untouched. Useful for testing a configuration, or for keeping work and personal setups apart.
Editing files by hand
Everything except the encrypted secrets is plain JSON or markdown. Reading them is fine. Editing them is a recovery tool, not a workflow: Minnow normalizes configuration on load, so an unexpected shape gets replaced with defaults rather than honoured. Change settings through the app where you can.
Brain pages are the exception — they are ordinary markdown and editing them directly is entirely reasonable. Some people keep brain/ in a git repository.