Skip to main content

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.example shipped 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 read Ready 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 the X-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.