Settings
Applies to OML v0.6.x · Status: Generated · Last verified 2026-11-06
A server reads one TOML file, oml.toml by default (--config <path>), and the environment. The environment wins over the file, and the file wins over the defaults. An environment name is OML_, then the dotted key in capitals with __ between the parts: search.rerank.depth becomes OML_SEARCH__RERANK__DEPTH.
Generated by scripts/gen_settings_reference.py; edit the source, not this page. Keys come from crates/bins/oml-server-lead/src/lib.rs; words from scripts/settings_notes.yaml.
A value that does not parse stops the server at start and names the key. Per-tenant policy, such as a workarea's review rules, is not a setting: an administrator changes it with the CLI.
Server settings
| Key | Environment variable | Default | What it does |
|---|---|---|---|
postgres.url |
OML_POSTGRES__URL |
none (required) | The connection string of the serving role, a Postgres role that owns nothing and holds only the privileges the server's statements need. |
postgres.owner_url |
OML_POSTGRES__OWNER_URL |
none (required) | The connection string of the owner role. The server runs its migrations under it at start and serves under postgres.url. A start without it is refused as postgres.role_split. |
server.listen |
OML_SERVER__LISTEN |
127.0.0.1:8080 |
The address of the API listener. |
kms.adapter |
OML_KMS__ADAPTER |
the file keyring | Which key store wraps each memory's encryption key. This build has one, file, the keyring file; any other value stops the server at start. |
kms.keyring_path |
OML_KMS__KEYRING_PATH |
oml-keyring |
The keyring file, for the file adapter. Back it up with the database; a database restored without it cannot be read. |
oauth.issuer |
OML_OAUTH__ISSUER |
unset (connections off) | The public origin of the server, https with no path and no trailing slash, such as https://memory.example.com. It turns on OAuth connections for claude.ai and the web pages. Set it to the address people reach, not the address the process binds behind its proxy. |
server.trusted_proxies |
OML_SERVER__TRUSTED_PROXIES |
empty (no proxy trusted) | Addresses and CIDR ranges of reverse proxies, a TOML array in the file and comma-separated in the environment. Only a request from a listed peer has its client address read from X-Forwarded-For. Behind a proxy on the same host, set loopback. |
server.metrics_listen |
OML_SERVER__METRICS_LISTEN |
unset (no metrics listener) | The address of a second listener that serves GET /metrics and nothing else, unauthenticated. Bind it where only the scraper reaches. The API listener never serves /metrics. |
server.otlp_endpoint |
OML_SERVER__OTLP_ENDPOINT |
unset (no trace export) | The http or https base URL of an OpenTelemetry collector. The server posts spans to <endpoint>/v1/traces over OTLP with protobuf and sends no authentication header. |
web.google.client_id |
OML_WEB__GOOGLE__CLIENT_ID |
unset (Google sign-in off) | The OAuth client ID of your Google application. Register the redirect URI <oauth.issuer>/web/callback/google. |
web.google.client_secret |
OML_WEB__GOOGLE__CLIENT_SECRET |
unset | The matching secret. The server never logs it. Set both or neither. |
web.github.client_id |
OML_WEB__GITHUB__CLIENT_ID |
unset (GitHub sign-in off) | The client ID of your GitHub OAuth app. Its callback is <oauth.issuer>/web/callback/github. |
web.github.client_secret |
OML_WEB__GITHUB__CLIENT_SECRET |
unset | The matching secret. Set both or neither. The web pages need oauth.issuer and at least one provider. |
brief.max_tokens |
OML_BRIEF__MAX_TOKENS |
400 |
The token budget a workarea's brief is cut to when an agent reads the workarea. The first member that does not fit ends the brief. |
signup.mode |
OML_SIGNUP__MODE |
allowlist: the sign-in allowlist, unchanged |
open lets a person whose provider-verified email no entry holds create an account after accepting the terms: a drawn user, a private root, <user>-web and <user>-review (ADR-0068 d1). open requires oauth.issuer, a sign-in provider (web.google.* or web.github.*) and every signup.* setting except per_ip_per_hour. A missing one, a tenant id that does not parse, or an issuer that is not a live admin key of that tenant stops the process at start, naming the setting. |
signup.tenant |
OML_SIGNUP__TENANT |
unset | The tenant id sign-ups land in. Every person of that tenant is under the quota.* limits. |
signup.issuer |
OML_SIGNUP__ISSUER |
unset | The name of an admin key of the sign-up tenant that adds each entry and issues its session keys. |
signup.terms_version |
OML_SIGNUP__TERMS_VERSION |
unset | The terms version a person accepts, recorded on their entry and in web.signed_up. Changing it makes an open terms page refuse with terms_version. |
signup.terms_url |
OML_SIGNUP__TERMS_URL |
unset | The terms page the terms checkbox links. |
signup.privacy_url |
OML_SIGNUP__PRIVACY_URL |
unset | The privacy page the terms checkbox links. |
signup.per_ip_per_hour |
OML_SIGNUP__PER_IP_PER_HOUR |
5, the operator's choice, unmeasured (#164) |
New accounts from one client address in a rolling hour, counted per process; an IPv6 address counts by its /64 and an IPv4 address by itself. The address is the request line's, so behind a proxy set server.trusted_proxies, or every sign-up shares one bucket (oml doctor warns). |
quota.memories |
OML_QUOTA__MEMORIES |
1000, the operator's choice, unmeasured (#164) |
Live memories in a person's root, counted as chains, so a new version of a memory is not a new memory. Past it, limit.quota. An admin overrides one person's limit on /web/admin/users, journaled as web.quota_set. A value above 1,000,000 stops the start. |
quota.keys |
OML_QUOTA__KEYS |
5, the operator's choice, unmeasured (#164) |
Live agent keys of a person. Past it, limit.quota. |
quota.connections |
OML_QUOTA__CONNECTIONS |
5, the operator's choice, unmeasured (#164) |
Open connections of a person. Past it, limit.quota. |
quota.requests_per_minute |
OML_QUOTA__REQUESTS_PER_MINUTE |
120, the operator's choice, unmeasured (#164) |
Requests per key per UTC minute, counted per process. Past it, limit.rate. |
search.enabled |
OML_SEARCH__ENABLED |
keyword-any, bm25, bm25-postings |
The search pipelines the server offers, a TOML array in the file and comma-separated in the environment. A pipeline that is not listed answers search.unavailable. |
search.default |
OML_SEARCH__DEFAULT |
bm25-postings |
The pipeline a recall uses when neither the request nor the tenant names one. It must be in search.enabled. |
search.rerank.model |
OML_SEARCH__RERANK__MODEL |
ms-marco-MiniLM-L6-v2 |
The cross-encoder the reranking pipeline loads. This build pins ms-marco-MiniLM-L6-v2 and ms-marco-MiniLM-L4-v2, both Apache-2.0. |
search.rerank.model_dir |
OML_SEARCH__RERANK__MODEL_DIR |
<state>/models/<model> |
An absolute directory holding config.json, tokenizer.json and model.safetensors. The server checks each file against a pinned SHA-256 and stops at start on a mismatch. |
search.rerank.fetch |
OML_SEARCH__RERANK__FETCH |
false |
true lets the server download missing model files at start from the pinned revision on Hugging Face and check each digest. false never uses the network. |
search.timings |
OML_SEARCH__TIMINGS |
false |
true lets a recall ask for each stage's milliseconds. Off by default because stage times over rows a key cannot read reveal how many there are. |
search.rerank.depth |
OML_SEARCH__RERANK__DEPTH |
10 |
How many of the best candidates the cross-encoder reorders, 1 to 100. |
search.rerank.floor |
OML_SEARCH__RERANK__FLOOR |
off |
A relevance between 0 and 1 below which a reranked hit is withheld. A recall whose candidates all fall below it answers no hit and reports how many it withheld. |
search.rerank.max_concurrent |
OML_SEARCH__RERANK__MAX_CONCURRENT |
2 |
Reranks that run at once. A recall that waits past its deadline for a slot serves the unreranked order and says why. |
search.rerank.timeout_ms |
OML_SEARCH__RERANK__TIMEOUT_MS |
1000 |
The deadline of one rerank in milliseconds, waiting for a slot included. Past it the recall serves the unreranked order. |
search.rerank.threads |
OML_SEARCH__RERANK__THREADS |
2 |
The threads of the reranker's own pool, shared by every rerank. |
search.rerank.max_tokens |
OML_SEARCH__RERANK__MAX_TOKENS |
256 |
The longest query-and-passage pair the model reads, 64 to 512 tokens. |
search.sparse.model_dir |
OML_SEARCH__SPARSE__MODEL_DIR |
<state>/models/opensearch-neural-sparse-encoding-doc-v3-distill |
An absolute directory holding the sparse model's config.json, tokenizer.json, model.safetensors and idf.json. Read only when search.enabled names a sparse pipeline. |
search.sparse.fetch |
OML_SEARCH__SPARSE__FETCH |
false |
true lets the server download missing sparse-model files at start and check each digest. |
search.sparse.threads |
OML_SEARCH__SPARSE__THREADS |
2 |
The threads of the sparse encoder's own pool. It writes each version's postings after the write commits, off the commit path. |
Lake writer
The oml-lakewriter binary takes these as flags or environment variables. See run the lake writer.
| Variable | Default | What it does |
|---|---|---|
OML_LAKE_URL |
none | The root of the lake, such as file:///var/lib/oml/lake or an object-store URL. Also the --lake flag. |
OML_LAKE_DATABASE_URL |
none | The connection string of the reader role the lake writer drains the outbox through. |
OML_LAKE_OWNER_URL |
none | The owner-role connection string, for the command that prepares the lake roles. |
OML_LAKE_KEK_FILE |
none | The key-encryption key file. The writer checks its permissions and age and warns when it is not given. |
OML_LAKE_METRICS_ADDR |
127.0.0.1:9466 |
The address of the lake writer's metrics listener. |
Client and plugin
The CLI, the SDKs, the hooks and the agent kit read these. The Claude Code plugin reads its url and api_key options instead.
| Variable | What it does |
|---|---|
OML_URL |
The server's URL, without /mcp. Set with OML_API_KEY or not at all; a source that sets one alone is refused. |
OML_API_KEY |
The API key. Prefer it, or the credentials file oml login writes, to the --api-key flag, because argv is visible to other processes. |
OML_CLI_CREDENTIALS |
The path of the credentials file, for tests and for keeping several servers apart. |
OML_SESSION_CONTEXT |
off stops the session-start hook from loading the workarea's memory into a session. It takes on or off. |
OML_SESSION_CONTEXT_MAX_TOKENS |
The token budget of the session-start recall, an integer from 1 up. |
OML_FAILURE_RECALL |
1 makes the plugin recall memories matching the error words after a failed command. Off by default. |
OML_TURN_RECALL |
1 makes the plugin recall on every prompt, within its budget. Off by default. |
OML_METRICS_URL |
The lead's metrics listener, so that oml doctor can read rerank skips, scan findings and recall telemetry. |