Environment Variables
Configure your Myrm instance with environment variables. Copy.env.example to .env and customize.
LLM Providers (WebUI, not environment variables)
Provider credentials are not environment variables. Add them in the WebUI under Settings > Model Service: every provider keeps its own key, and Myrm stores it encrypted in the local data directory (MYRM_DATA_DIR,
~/.myrm by default). .env carries process and ops settings only.
The.env.exampleshipped with the server states the same policy: only[P]process and[O]ops variables belong in.env; business capabilities (LLM, embedding, search, providers) live in WebUI Settings.
Application
Move the data directory: on the desktop app, open Settings → System → Storage and click Change (guided move with space preflight, progress, verification and automatic rollback). For standalone WebUI/server, set MYRM_DATA_DIR to the new location and restart. Cloud hosting data lives on the managed persistent volume.
Docker Compose
Security
Observability & Telemetry
Check that export works
Settings → Developer → OpenTelemetry export shows what each pipeline actually delivered, not what is configured. Traces readReady until the first batch has been delivered or refused, then Active or Failing by the latest outcome. Metrics have their own state (Off, Ready, Active, Failing), because a backend can accept traces and refuse metrics. GET /api/v1/system/telemetry-posture returns the same measured fields (status, metrics_status, exported_spans, failed_batches, last_success_at, last_failure_at), and otlp_connected in the gatewayRuntime block of GET /api/v1/health/liveness is derived from them: it is true only while the latest export was accepted.
On a platform-managed (cloud-hosted) instance the collector belongs to the operator, so the card is hidden and the API withholds the collector address.
How a request’s trace lines up
For one HTTP request the same 32-hex id is theX-Trace-Id response header, the error.trace_id of an error response, the id in the server log lines and the trace id of the exported spans, so an id quoted from an error message finds its trace directly. A caller that sends a valid X-Trace-Id (32 hex characters, not all zero) or W3C traceparent keeps its own id (X-Trace-Id wins); any other value is replaced by a fresh one.
The spans are agent runs, model calls, tool calls and, for chat channels, one stream_reply trace per streamed reply. HTTP requests produce no spans of their own, since health probes would only add noise. The OTEL_* variables are read by the server only: programs the agent runs (terminal commands, scripts, background processes, the browser) do not inherit them, and one that needs OpenTelemetry sets its own on its command line.