Skip to content

Environment variables

The single source of truth for what a deployment needs is the settings inventory surfaced by cairn doctor (and cairn deploy doctor for the compose stack). This page lists the variables a deployer actually reaches for. Most engine variables carry the historical OBS_ prefix.

VariableControlsDefault
OBS_STORAGErun + config store backend: postgres://… or sqlite:///pathunset → per-store SQLite / in-memory
OBS_RUNTIMEgraph executor: inprocess / dbos / temporalinprocess
OBS_CHECKPOINTERHITL/thread durability: memory / sqlite / postgresmemory
OBS_CHECKPOINTER_PATH / OBS_CHECKPOINTER_DSNsqlite path / postgres DSN for the checkpointer~/.cairn/checkpoints.sqlite / —
OBS_PROFILEactive profile (name or path)unset = no overrides
OBS_BUSevent bus: inprocess or postgres://… (durable + replay)inprocess
OBS_BACKENDLLM/telemetry backend mode: mock / openai / otelmock
OBS_SQLITE_DBshared SQLite path when no Postgresunder ~/.cairn
VariableControlsDefault
OBS_TRIGGER_PORTserver port9090
OBS_ENVIRONMENTdefault policy environment labelproduction
OBS_JWT_SECRETpresence enables auth (HS256 signing key); unset = open serverunset
OBS_REQUIRE_AUTHrefuse to start without a JWT secretoff
OBS_API_USER / OBS_API_PASSWORD / OBS_API_PASSWORD_HASHthe env-admin login (hash preferred; generate with cairn remote hash-password)admin / — / —
OBS_ACCESS_TOKEN_EXPIRE_MINUTESJWT TTL30
OBS_WORKSPACEdefault workspacedefault
VariableControlsDefault
OPENAI_API_KEYthe one key required for real inference
ANTHROPIC_API_KEY / GEMINI_API_KEYadditional providers (Gemini is the default RAG embedder)
OBS_MODEL_ROLESmodel-roles file (fast/strong/router → provider+model)~/.cairn/model_roles.json
LLM_GATEWAYdirect or proxydirect
LLM_GATEWAY_URL / LLM_GATEWAY_API_KEYthe proxy endpoint + key (e.g. the LiteLLM compose profile)
OBS_GATEWAY + LITELLM_BASE_URL / LITELLM_MASTER_KEYconsole Gateway view’s spend/metrics source (litellm / openrouter)stub
VariableControlsDefault
OBS_TEMPORAL_ADDRESS / OBS_TEMPORAL_NAMESPACEcluster + namespacelocalhost:7233 / default
OBS_TEMPORAL_TASK_QUEUE / OBS_TEMPORAL_REMOTE_TASK_QUEUEworker queues (main / remote-GPU)cairn / derived
OBS_ACTION_HANDLERaction executor kind (durable handler needed for magic-link approvals)in_process
OBS_REMOTE_JOB_DURABLE / OBS_REMOTE_JOB_MAX_ATTEMPTSdurable remote-job control loop / retriesoff / 2
VariableControlsDefault
OTEL_EXPORTER_OTLP_ENDPOINT / OTEL_SERVICE_NAMEOTLP export (presence enables tracing)— / cairn
OBS_TRACE_CONTENTprompt/completion export: off / redacted / rawredacted
OBS_AUDIT_LOGhash-chained audit log path./audit.jsonl
OBS_EVENTS_PATHrequest-telemetry JSONL sink./events.jsonl
LANGFUSE_BASE / GRAFANA_BASEconsole deep-link bases
VariableControlsDefault
CAIRN_APPROVAL_TTL_HOURS / CAIRN_APPROVAL_SWEEP_MINUTESstale-gate expiry TTL / sweep interval168 / 60
OBS_REALTIME_CONCURRENCY / OBS_BACKGROUND_CONCURRENCYper-lane dispatch concurrency4 / 2
OBS_POLICIES_DIRuser policy overlay dir~/.cairn/policies
OBS_TRIGGERS_DIRuser trigger overlay dir~/.cairn/triggers
OBS_TRIGGER_DURABLE / OBS_TRIGGER_INBOXdurable trigger inbox (sqlite or nats://…)off
OBS_PLAYGROUND_ENVenvironments the Playground treats as sandboxesplayground,sandbox
OBS_OPS_MCPmount the reads-first MCP surface at /mcpoff
VariableControlsDefault
OBS_SECRET_BACKEND (+ INFISICAL_HOST/TOKEN/ENV/PROJECT_ID)secret store: local or Infisicallocal
OBS_SECRET_KEYlocal secret encryption key
MLFLOW_TRACKING_URIMLflow registry for model/register (else local JSONL)unset
OBS_MODEL_REGISTRYlocal registry path~/.cairn/model_registry.jsonl
OBS_ARTIFACTS_DIR / OBS_ARTIFACT_S3_BUCKETartifact store roots (local / S3)operator defaults
OBS_REGISTRY_CATALOG / OBS_REGISTRY_ALLOWLISTpack registry catalog + install allowlist
SLACK_WEBHOOK_URL / SLACK_BOT_TOKEN / SLACK_CHANNELSlack notifications + approval channels

CADDY_DOMAIN (TLS domain), POSTGRES_PASSWORD, COMPOSE_PROFILES (which optional services run), OBSAGENT_IMAGE (engine image override, default cairn-engine:prod) — validated together by cairn deploy doctor, which requires CADDY_DOMAIN, POSTGRES_PASSWORD, OBS_JWT_SECRET, and OBS_API_PASSWORD_HASH to be present.