Postgres connection string for the API (apps/api).
export DATABASE_URL=postgresql://user:pass@host:5432/elsaiobserveAppearance
This page covers environment variables for ARMS instances you already run. Public self-host install steps are not published here — for on-premises or private deployments, contact dev@elsaifoundry.com.
There are two namespaces. Do not mix them.
| Namespace | Process | Examples |
|---|---|---|
| SDK / your app | Application instrumented with elsai-arms | ELSAI_ARMS_*, OTEL_EXPORTER_OTLP_* |
| ARMS server | apps/web and apps/api (repo-root Compose) | DATABASE_URL, ELSAI_CRON_SECRET, ELSAI_VAULT_ENCRYPTION_KEY |
| Use | URL | Authentication |
|---|---|---|
| Telemetry | https://<arms-host>/api/ingest | otlp_headers / OTEL_EXPORTER_OTLP_HEADERS (x-api-key) |
| Vault / evals | ELSAI_ARMS_URL (base URL) | ELSAI_ARMS_API_KEY as Authorization: Bearer |
ELSAI_ARMS_API_KEY does not authenticate OTLP. See SDK configuration and ARMS destination.
ARMS stores users, organisations, projects, sessions, and API keys in PostgreSQL, not SQLite.
DATABASE_URLrequiredPostgres connection string for the API (apps/api).
export DATABASE_URL=postgresql://user:pass@host:5432/elsaiobserveDB_SSLSet to true to enable TLS for the Postgres pool (rejectUnauthorized: false).
export DB_SSL=trueSQLITE_DATABASE_URL is not the application database.
INIT_DB_*) INIT_DB_HOST, INIT_DB_PORT, INIT_DB_DATABASE, INIT_DB_USERNAME, and INIT_DB_PASSWORD configure ClickHouse for the OpenTelemetry collector write path and API telemetry reads. They are not SQLite and not DATABASE_URL.
The collector’s OTLP ports 4317/4318 stay internal. SDKs send to /api/ingest.
ARMS uses email and password (see Authentication). NEXTAUTH_SECRET must be identical on apps/web and apps/api.
NEXTAUTH_URLCanonical URL of the UI.
export NEXTAUTH_URL=http://localhost:3000NEXTAUTH_SECRETEncrypts NextAuth session tokens. Also used as a Vault encryption fallback when ELSAI_VAULT_ENCRYPTION_KEY is unset.
export NEXTAUTH_SECRET=your-secret-hereGenerate with: openssl rand -base64 32
SESSION_MAX_AGE_SECONDSSession lifetime in seconds. Compose default is 604800 (7 days).
LOGIN_RATELIMIT_MAX_ATTEMPTSMax failed login attempts per window. Default 5.
LOGIN_RATELIMIT_WINDOW_MSLogin rate-limit window in milliseconds. Default 900000 (15 minutes).
PORTHost port for Docker Compose. The container listens on DOCKER_PORT (default 3000).
API_URLBase URL the API uses for cron jobs (Auto Evaluation, Auto Pricing, Agents materialization). Defaults to http://localhost:$PORT. Set this behind a reverse proxy.
export API_URL=https://observe-api.example.comELSAI_CRON_SECRETrequiredSecret sent as header X-CRON-JOB. Required. If unset, cron routes fail closed (Auto Evaluation, Auto Pricing, Agents materialize are refused). There is no shared default.
export ELSAI_CRON_SECRET=your-cron-secretELSAI_VAULT_ENCRYPTION_KEYAES-256-GCM key for Vault values. Falls back to NEXTAUTH_SECRET. Changing it after secrets exist prevents decrypt.
export ELSAI_VAULT_ENCRYPTION_KEY=your-vault-encryption-keyELSAI_ALLOWED_CORS_ORIGINSComma-separated browser origins allowed to call POST /api/vault/get-secrets. Do not use *.
export ELSAI_ALLOWED_CORS_ORIGINS=https://app.example.com,https://admin.example.comELSAI_ALLOWED_ORIGINSAlias for ELSAI_ALLOWED_CORS_ORIGINS. NEXTAUTH_URL is also treated as an allowed origin.
ELSAI_REQUIRE_ORG_FILTERSet true or 1 to enforce organisation-scoped isolation on telemetry queries.
AGENTS_MATERIALIZE_SCHEDULECron for the Agents materialization job. Default * * * * *.
AGENTS_MATERIALIZE_MAX_PER_TICKMax agents per run. Default 100.
AGENTS_MATERIALIZE_PARALLELMax concurrent materializations. Default 4.
See Anonymous Telemetry. Set TELEMETRY_ENABLED=false to opt out.
apps/web/.env and apps/api/.env.env next to the repository-root docker-compose.yml (or docker-compose.split.yml).env (server) DATABASE_URL=postgresql://user:pass@host:5432/elsaiobserve
DB_SSL=false
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your-secret-here
API_URL=http://localhost:3000
ELSAI_CRON_SECRET=your-cron-secret
ELSAI_VAULT_ENCRYPTION_KEY=your-vault-encryption-key
INIT_DB_HOST=clickhouse
INIT_DB_PORT=8123
INIT_DB_DATABASE=elsai_arms
INIT_DB_USERNAME=default
INIT_DB_PASSWORD=change-me
TELEMETRY_ENABLED=trueHi — ask anything about elsai docs. Mention the product name: elsai ARMS, Prompt Manager, Agent Framework, Core, or elsai Guardrails.