Skip to main content

Where config lives

Created by memloom init, dotenv-style, read at startup. Restart after editing. Real environment variables win over the file, so a shell or MCP key overrides what is written there. MEMLOOM_HOME relocates the whole directory, config and data together.

The settings that matter

The full annotated list, including transcription and diarization, lives in config.env.example in the repo and in the file memloom init writes. MEMLOOM_OWNER_ID is the one exception to everything above: it is read from a process’s own environment and never from config.env. That file configures the daemon, which serves every owner, while this names which owner one client process is, so it belongs to the shell profile or MCP registration that launched it. Unset means the daemon’s default owner, which is what a single-owner install has always used. See memory per person.
MEMLOOM_AUTO_INDEX covers the indexing that runs a few seconds after a save or ingest, one model call per new item, debounced. Set it off to make every call explicit. memloom index still works. Offline never auto-indexes.RECONCILE_ENABLED=0 is a kill switch, not the switch. Reconciliation is on by default with its two free passes, and which passes run is a viewer setting that needs no restart. Setting 0 makes an applying run fail with a 403 and stops automatic runs acting. Previews keep working.OPENROUTER_EMBED_PROVIDER exists because embedding latency varies wildly between hosts of the same model: the same call has been seen taking 16 seconds on one and under a second on another. memloom pins the fast host for the default model, so set this only if you change models.

The two modes

Offline is for trying memloom, tests, and air-gapped keyword search. For real use, set the key.

The embedding fingerprint

Vectors are only comparable to vectors from the same provider, model and dims, so the store is stamped on first init, for example openrouter:qwen/qwen3-embedding-8b@1024. A later startup with a different fingerprint is refused.
This is deliberate. Mixed embedding spaces do not fail with an error, they silently return garbage recall.
Changing model is a migration, not a dead end: stop the daemon and run memloom reembed, which recomputes every vector and stamps the new fingerprint. The LLM model can be changed freely, since it never touches the vector space.

Daemon endpoints

Both bind to 127.0.0.1, and CORS admits only localhost origins, so a public web page cannot drive your daemon.
Hyper-V, WSL and Docker reserve random 100-port blocks inside the ephemeral range at every boot, and one can land on 54329. The daemon then starts without the wire and prints why, so the API and viewer keep working.Set MEMLOOM_PG_PORT to a free port below 49152 and restart. netsh interface ipv4 show excludedportrange protocol=tcp lists the blocked ranges.