Configuration
Environment variables for the server and the clients.
The server is configured with environment variables (or the matching m3m0s serve flags). With Docker Compose, put them in .env.
Server
| Variable | Default | Purpose |
|---|---|---|
OPENAI_API_KEY |
none (keyword-only) | Key for embeddings (text-embedding-3-small). Without it the server runs keyword-only: full-text search and exact-match dedup. |
M3M0S_OPENAI_BASE_URL |
OpenAI | Alternative OpenAI-compatible embeddings endpoint. |
M3M0S_PORT |
19234 |
HTTP port. |
M3M0S_DATA_DIR |
~/.m3m0s/data (/data in the image) |
Where the SQLite database lives. |
M3M0S_HOST_PORT |
19234 |
Host port published by compose.yaml. |
M3M0S_ADD_SYNC_TIMEOUT |
300ms |
How long add waits before answering 202 and finishing in the background. |
GOGC |
50 |
Go GC target. Lower values trade CPU for a lower memory peak. |
GOMEMLIMIT |
not set | Optional soft memory limit, for example 600MiB. |
Fact extraction and chat (optional)
Extraction turns one input into several short atomic facts. It stays off until you set a key.
| Variable | Default | Purpose |
|---|---|---|
M3M0S_EXTRACT_API_KEY |
none (off) | Enables LLM fact extraction. |
M3M0S_EXTRACT_BASE_URL |
https://openrouter.ai/api/v1 |
OpenAI-compatible endpoint for extraction. |
M3M0S_EXTRACT_MODEL |
deepseek/deepseek-v4-flash |
Extraction model. |
M3M0S_CHAT_API_KEY |
extraction key | Enables the WebUI chat. |
M3M0S_CHAT_BASE_URL, M3M0S_CHAT_MODEL |
OpenRouter, deepseek/deepseek-v4-flash |
Chat provider and model. |
Background jobs
| Variable | Default | Purpose |
|---|---|---|
M3M0S_RETRO_EXTRACT_INTERVAL |
2h |
Retroactive extraction job interval. |
M3M0S_FORGET_SWEEP_INTERVAL |
12h |
Forgetting sweep interval. |
M3M0S_RETENTION_MODEL |
legacy |
Score the sweep uses: legacy (one 30-day half-life) or per-kind (half-life by nature of fact, opt-in). |
M3M0S_REEMBED_BATCH, M3M0S_REEMBED_RPS |
64, 5 |
Batch size and request rate of the re-embedding job. |
M3M0S_JOBS_TICK |
30s |
Scheduler heartbeat. |
M3M0S_INSIGHTS_CPU_PERCENT |
60 |
CPU duty cycle of the memory-health analysis. |
M3M0S_INSIGHTS_MAX_MINUTES |
30 |
Wall-clock limit of that analysis. |
Ingestion filter
Automatic capture drops or tags tooling boilerplate before storing it.
| Variable | Default | Purpose |
|---|---|---|
M3M0S_FILTER_MODE |
default |
Global mode: default, off, tag or drop. |
M3M0S_FILTER_MODES |
none | Per-rule modes that win over the global one, for example diff-trivia-fact=drop. |
M3M0S_FILTER_RULES |
none | JSON file of rules that replace, add or disable built-in ones. |
Clients
These are read by the CLI, the MCP bridge, the watcher and the hooks.
| Variable | Default | Purpose |
|---|---|---|
M3M0S_URL |
http://localhost:19234 |
Server URL. |
M3M0S_API_KEY |
none | API key. |
M3M0S_HOOK_DOMAIN |
derived from the working directory | Domain captured memories are filed under. |
Recall tuning variables are on the Recall and tuning page.
Embedding provider at runtime
The embedding model, endpoint, dimensions and key can also be changed without a restart, from the WebUI (Embedding page) or the CLI:
m3m0s embedding show
m3m0s embedding estimate --model text-embedding-3-large --dimensions 1024
echo "$NEW_KEY" | m3m0s embedding set --model text-embedding-3-large --api-key-stdin
m3m0s embedding reembed start --watch
The key is never accepted as an argument and never printed. If a change leaves stored vectors in another model or size, set shows how many and an approximate cost, and asks you to confirm.