Environment variables
Every environment variable the control plane, schedulers, runtime manager, in-VM harness and dashboard read, grouped by service, with its default and what it does. Required in prod means the process refuses to start (or, for the harness, refuses to run the workload) when LANTERN_ENV is prod, production or staging and the value is missing. Flag values accept 1, true or on unless a row says otherwise.
How to use this page
Section titled “How to use this page”Local development needs none of these: make run-api sets the database, Redis and S3 values, and every security variable has a dev default or is skipped with a warning. For production, start from the checklist below, then see Operations for how the Helm chart supplies them. A production process that is missing a required value logs it by name and exits at startup.
Production checklist
Section titled “Production checklist”| Service | Must be set |
|---|---|
| Control plane | JWT_SECRET, LANTERN_RECEIPT_SECRET, LANTERN_CREDENTIAL_KEY, LANTERN_GRPC_SERVICE_TOKEN, LANTERN_RLS_ENFORCE=1 with LANTERN_APP_DB_PASSWORD, LANTERN_CONTROL_PLANE_TLS_CERT/_KEY, LANTERN_SCHEDULER_GRPC_ADDR, LANTERN_RUNTIME_MANAGER_TLS_CA/_CERT/_KEY |
| Runtime scheduler | LANTERN_GRPC_SERVICE_TOKEN, SCHEDULER_NODE_TOKEN, LANTERN_DEFAULT_MANAGER_ADDR, manager TLS CA and client cert |
| Runtime manager | LANTERN_GRPC_SERVICE_TOKEN, LANTERN_MANAGER_TLS_CA/_CERT/_KEY |
| Harness | LANTERN_WORKLOAD_UID, LANTERN_HARNESS_EXEC_TOKEN |
The control plane also refuses to start in prod with LANTERN_TWILIO_WEBHOOK_AUTH=off or LANTERN_USE_CLAUDE_CODE=1, and the scheduler refuses LANTERN_DIALER=stub.
Control plane: listeners, stores, process
Section titled “Control plane: listeners, stores, process”Binary: services/control-plane/cmd/server. HTTP REST is on :8080, gRPC on :50051.
| Variable | Default | Meaning |
|---|---|---|
HTTP_ADDR |
:8080 |
REST listen address. |
LISTEN_ADDR |
:50051 |
gRPC listen address (the tenant-trust boundary). |
LANTERN_METRICS_ADDR |
:9464 |
Separate Prometheus /metrics listener. Unauthenticated and labelled with agent names, so scrape it from Prometheus only, never through ingress. |
LOG_LEVEL |
info |
Log level. |
LANTERN_DRAIN_TIMEOUT |
30s |
Graceful-shutdown drain window (Go duration). |
LANTERN_ENV |
unset (dev) | prod, production or staging turns on every production startup guard in this table. The Helm chart defaults it to production. |
DATABASE_URL |
postgres://localhost:5432/lantern?sslmode=disable |
Postgres DSN (pgvector image). Also read by cmd/migrate and the cron scheduler. |
REDIS_URL |
redis://localhost:6379/0 |
Redis for rate limits, pub/sub and queues. |
LANTERN_PG_MAX_CONNS |
20 |
Postgres pool size. |
LANTERN_PG_MAX_CONN_LIFETIME |
1h |
Max connection lifetime. |
LANTERN_PG_MAX_CONN_IDLE_TIME |
30m |
Max connection idle time. |
LANTERN_REDIS_POOL_SIZE |
20 |
Redis pool size. |
S3_ENDPOINT |
unset | S3-compatible endpoint for agent bundles and attachments. |
S3_BUCKET |
lantern-bundles-dev |
Bucket name. |
S3_REGION |
unset | Signing region. |
S3_ACCESS_KEY |
falls back to AWS_ACCESS_KEY_ID, then lantern |
Object-store access key. |
S3_SECRET |
falls back to AWS_SECRET_ACCESS_KEY, then lanternsecret |
Object-store secret. Set real values outside dev. |
SEED_DEV |
unset | 1/true: cmd/migrate seeds the dev tenant and admin user. |
Control plane: auth, secrets, trust boundaries
Section titled “Control plane: auth, secrets, trust boundaries”These are the production-required ones. With LANTERN_ENV=production the control plane refuses to start when a required value is missing.
| Variable | Default | Meaning |
|---|---|---|
JWT_SECRET |
dev default (public) | Signs dashboard JWTs. Unset or the dev default is fatal in prod. Required in prod. |
LANTERN_RECEIPT_SECRET |
dev default | HMAC secret for run receipts and marketplace invocation signatures. Fatal in prod when unset. Required in prod. |
LANTERN_RECEIPT_ED25519_SEED |
unset | Seed for the Ed25519 receipt key. Unset: receipts fall back to HMAC and cannot be verified offline by third parties. |
LANTERN_CREDENTIAL_KEY |
unset (plaintext in dev) | 32-byte AES-256-GCM key that encrypts provider keys and connector tokens at rest. Fatal in prod when unset or malformed. Required in prod. |
LANTERN_GRPC_SERVICE_TOKEN |
unset | Shared service token for the gRPC trust boundaries. Set the same value on the control plane, gateway, workflow engine, runtime scheduler, model router and runtime manager. Fatal in prod when unset; dev warns and allows unauthenticated calls. Required in prod. |
LANTERN_CONTROL_PLANE_TLS_CERT |
unset | PEM path for the gRPC server certificate. Both cert and key, or neither; one alone is always fatal. Prod requires them. Required in prod. |
LANTERN_CONTROL_PLANE_TLS_KEY |
unset | PEM path for the matching key. Required in prod. |
LANTERN_RLS_ENFORCE |
unset (off) | 1 enforces Postgres row-level security through the lantern_app pool. Prod refuses to start without it. Required in prod. |
LANTERN_APP_DB_PASSWORD |
unset | Password of the non-superuser lantern_app role used when RLS is enforced. Prod refuses to start without it. Required in prod. |
LANTERN_AUTHZ_ENFORCE |
off | 1/true/on: a key missing the endpoint’s scope gets 403. Off: the miss is logged and the request proceeds. |
LANTERN_CORS_ORIGINS |
http://localhost:3001 |
Comma-separated allowed browser origins. Public endpoints (receipt verify, /.well-known/*) stay open. |
LANTERN_TRUSTED_PROXIES |
empty | CIDRs whose X-Forwarded-For is trusted for rate-limit keys. |
LANTERN_RUNTIME_SECRET_TOKEN |
unset | Pre-shared token for the manager-to-control-plane secret relay. Unset: POST /v1/runtime/secrets/resolve returns 403. |
LANTERN_AGENT_IDENTITY_SECRET |
unset | HMAC secret for per-instance agent identity tokens. |
LANTERN_AGENT_IDENTITY_ED25519_SEED |
unset | Seed for Ed25519 agent identity tokens (preferred over the HMAC secret). |
LANTERN_AGENT_IDENTITY_TTL |
1h |
Identity token lifetime (Go duration). |
LANTERN_DL_SIGNING_SECRET |
unset | Signing secret for short-lived document download links. |
LANTERN_SIGNAL_TOKEN |
unset | Shared secret for /v1/signals (header x-lantern-signal-token). Unset: the endpoint is 401. |
SLACK_SIGNING_SECRET |
unset | Verifies Slack slash commands. Unset in prod: unsigned commands are refused. |
LANTERN_TWILIO_WEBHOOK_AUTH |
on | off skips Twilio signature checks. Fatal in prod. |
LANTERN_USE_CLAUDE_CODE |
unset | 1 routes through a local claude binary. Fatal in prod. |
LANTERN_CLAUDE_BINARY |
found on PATH | Explicit path to that binary. |
Control plane: sign-up, mail, OAuth
Section titled “Control plane: sign-up, mail, OAuth”Behaviour and rationale are on Accounts & sign-up.
| Variable | Default | Meaning |
|---|---|---|
LANTERN_SIGNUP_MODE |
closed in prod, open in dev |
open, invite or closed. Any other value stops startup. |
LANTERN_SIGNUP_INVITE_SECRET |
unset | HMAC key for invite codes. Required for invite mode. |
LANTERN_TURNSTILE_SECRET |
unset | Cloudflare Turnstile secret. Setting it requires a captcha on every sign-up. |
LANTERN_MAILER |
log |
log, smtp or http. |
LANTERN_MAIL_FROM |
Lantern |
From address for smtp and http. |
LANTERN_SMTP_ADDR |
unset | host:port; required for smtp. |
LANTERN_SMTP_USER |
unset | SMTP user (PLAIN auth). |
LANTERN_SMTP_PASSWORD |
unset | SMTP password. |
LANTERN_MAIL_HTTP_URL |
unset | Endpoint for the http driver. |
LANTERN_MAIL_HTTP_TOKEN |
unset | Bearer token for the http driver. |
OAUTH_DASHBOARD_URL |
http://localhost:3001 |
Dashboard base URL used in emailed verify/reset links and OAuth redirects. |
OAUTH_REDIRECT_BASE |
http://localhost:8080 |
Base URL for the Google sign-in redirect URI. Set it to the public API URL. |
OAUTH_BASE_URL |
http://localhost:8080 |
Public base URL for connector OAuth redirect URIs. |
GOOGLE_CLIENT_ID |
unset | Enables “Sign in with Google” (with the secret). |
GOOGLE_CLIENT_SECRET |
unset | Google OAuth client secret. |
OAUTH_CLIENT_ID_ |
unset | Per-connector OAuth client id; connector id upper-cased, - as _ (for example OAUTH_CLIENT_ID_GITHUB). |
OAUTH_CLIENT_SECRET_ |
unset | The matching client secret. |
Control plane: runtime, recovery, limits
Section titled “Control plane: runtime, recovery, limits”How the control plane reaches the scheduler and manager, plus the loops and caps it runs.
| Variable | Default | Meaning |
|---|---|---|
LANTERN_SCHEDULER_GRPC_ADDR |
unset (stub scheduler) | Runtime scheduler, for example localhost:50055. Unset uses a stub that fabricates VM ids and spawns nothing, so prod refuses to start. Required in prod. |
LANTERN_RUNTIME_MANAGER_ADDR |
unset | Runtime manager, for exec, pause and fork calls. Unset: those routes are unavailable. |
LANTERN_RUNTIME_MANAGER_TLS_CA |
unset | CA used to verify the manager. Prod requires mTLS to the manager; dev allows plaintext. Required in prod. |
LANTERN_RUNTIME_MANAGER_TLS_CERT |
unset | Client certificate (both cert and key, or neither). Prod requires it. Required in prod. |
LANTERN_RUNTIME_MANAGER_TLS_KEY |
unset | Client key. Required in prod. |
LANTERN_DEFAULT_MANAGER_ADDR |
unset | Manager address for the log-stream proxy and the health sweep. |
LANTERN_MODEL_ROUTER_ADDR |
unset | Model router address; also a health-sweep target. |
LANTERN_WORKFLOW_ENGINE_ADDR |
unset | Workflow engine address, a health-sweep target. |
LANTERN_HEALTH_SWEEP_INTERVAL |
60s |
Peer-service health sweep period. 0 or off disables it. |
LANTERN_NODE_ADDR_ |
unset | Explicit host:port for a named scheduler node whose address is not resolvable by DNS (node name upper-cased, . and - as _). |
LANTERN_RECOVERY_INTERVAL |
30s |
Crash-recovery sweep period. |
LANTERN_RUN_LEASE_TTL |
60s |
Run lease length; renewed every third of it while a run executes. |
LANTERN_MAX_FORK_COUNT |
100 (ceiling 1000) |
Per-call cap on POST /v1/runtime/vms/{id}/fork. |
LANTERN_SESSION_VM_IDLE_TTL |
30m |
Idle time before a session’s sandbox VM is reaped. |
LANTERN_RUNTIME_TERMINAL_GRACE |
10m |
How long after a VM turns terminal the control plane still accepts its late log and audit reports. 0 disables the window. |
LANTERN_SPAWN_RATE_PER_MIN |
120 |
Per-tenant VM spawn rate limit. |
LANTERN_SPAWN_BURST |
20 |
Per-tenant spawn burst. |
LANTERN_HOOK_RATE_PER_MIN |
60 |
Per-trigger rate limit on POST /v1/hooks/{id}. |
LANTERN_HOOK_BURST |
10 |
Per-trigger burst. |
LANTERN_DP_MAX_STREAMS_PER_TENANT |
10 |
Concurrent data-plane run streams per tenant. |
LANTERN_RUNTIME_LOG_RETENTION_DAYS |
14 |
Retention for runtime_vm_logs. |
LANTERN_JOURNAL_RETENTION_DAYS |
90 |
Retention for journal_events. |
LANTERN_AUDIT_RETENTION_DAYS |
365 |
Retention for audit events. |
LANTERN_USAGE_DAILY_RETENTION_DAYS |
400 |
Retention for agent_usage_daily. |
LANTERN_SIDE_EFFECT_RETENTION_DAYS |
30 |
Retention for side_effect_receipts. |
LANTERN_DEFAULT_TIMEZONE |
UTC | IANA zone for cron matching and the budget day boundary when a schedule sets none. |
Control plane: models, knowledge, flags
Section titled “Control plane: models, knowledge, flags”Flags marked on are on unless set to a disabling value.
| Variable | Default | Meaning |
|---|---|---|
OPENAI_API_KEY |
unset | Platform-level fallback provider key, used when a tenant has none configured. |
ANTHROPIC_API_KEY |
unset | Same, for Anthropic. |
LANTERN_USE_MODEL_ROUTER |
off | 1/true/on sends plain completions through the model router; any router error falls back to the direct provider. |
LANTERN_ROUTE_STRATEGY |
balanced |
balanced, cheap, quality or fast for model: auto. |
LANTERN_LLM_MAX_TURNS |
12 (cap 40) |
Tool-loop turn limit per completion. |
LANTERN_HAIKU_MODEL |
claude-haiku-4-5-20251001 |
Concrete model behind the small tier. |
LANTERN_SONNET_MODEL |
claude-sonnet-4-6 |
Concrete model behind the mid tier. |
LANTERN_OPUS_MODEL |
claude-opus-4-8 |
Concrete model behind the large tier. |
LANTERN_WEBSEARCH_MODEL |
claude-sonnet-4-6 |
Anthropic model for the built-in web_search tool. |
LANTERN_WEBSEARCH_OPENAI_MODEL |
gpt-4o-mini-search-preview |
OpenAI fallback model for web_search. |
LANTERN_EMBED_MODEL |
text-embedding-3-small |
Embedding model for knowledge and memory. |
LANTERN_EMBED_CONCURRENCY |
4 (1 to 32) |
Parallel embedding calls. |
LANTERN_KB_MIN_SCORE |
0.2 |
Cosine floor for a knowledge-base vector hit; below it the full-text fallback runs. |
LANTERN_LLM_BASEURL_OPENAI |
unset | Points OpenAI calls at a fixture or proxy base URL (used by demo mode and the replay server). |
LANTERN_LLM_BASEURL_ANTHROPIC |
unset | Same, for Anthropic. |
LANTERN_CONNECTOR_BASEURL_ |
unset | Overrides a connector’s API host, for example LANTERN_CONNECTOR_BASEURL_GITHUB; used by the recorded-server example tests. |
LANTERN_COMPLEXITY_ROUTING |
on | Complexity-based model routing. 0/off/false disables. |
LANTERN_MULTI_STEP_PLANNER |
on | Multi-step planner. 0/off/false disables. |
LANTERN_CLAIM_VERIFY |
on | Claim-verify guard on completed-action claims. 0/off/false disables; read on every call. |
LANTERN_BROWSER_SKILL |
off | on/1/true enables browser-as-skill. |
LANTERN_CROSS_APP |
off | on/1/true enables cross-app workflows. |
LANTERN_CONFIDENCE_GATE |
off | 1/true/on diverts low-confidence tool and connector steps to approval. See Human-in-the-loop. |
LANTERN_CONFIDENCE_GATE_THRESHOLD |
0.75 |
Minimum score in [0,1] for auto-execution. |
LANTERN_CONFIDENCE_ESTIMATOR |
verbalization |
self-consistency (also self_consistency, sampling) polls the model; anything else uses the heuristic. |
LANTERN_CONFIDENCE_SAMPLES |
5 (1 to 9) |
Independent judgments per self-consistency estimate; each is one LLM call. |
LANTERN_CONFIDENCE_CALIBRATE |
off | Lowers the score by the step type’s realized regret rate. |
LANTERN_FREE_TIER_COST_USD_PER_DAY |
2.00 |
Tenant-wide LLM spend cap applied to new tenants. |
LANTERN_FREE_TIER_MAX_VMS |
2 |
Concurrent sandbox VMs for new tenants. |
LANTERN_FREE_TIER_RUNTIME_COST_USD_PER_DAY |
1.00 |
Sandbox spend cap for new tenants. |
LANTERN_KIOSK |
off | Demo mode: anonymous throwaway workspaces. Refuses to start unless RLS and authz enforcement are on and JWT_SECRET is non-default. |
LANTERN_KIOSK_ALLOW_PROD |
off | Required to run kiosk mode under a production-like LANTERN_ENV. |
LANTERN_KIOSK_TTL_MIN |
30 |
Workspace lifetime in minutes. |
LANTERN_KIOSK_MAX_SESSIONS |
20 |
Concurrent kiosk workspaces. |
LANTERN_KIOSK_IP_PER_HOUR |
3 |
New workspaces per client IP per hour. |
LANTERN_KIOSK_SWEEP_SEC |
60 |
Expiry sweep period in seconds. |
LANTERN_OTEL_ENABLED |
unset | 1 enables tracing (with an OTLP endpoint). |
OTEL_EXPORTER_OTLP_ENDPOINT |
unset | Standard OTLP endpoint; setting it also enables tracing. |
Control plane: personal-assistant and bridge integration
Section titled “Control plane: personal-assistant and bridge integration”Only relevant if you run the iMessage or WhatsApp bridges. All default to off or unset.
| Variable | Default | Meaning |
|---|---|---|
LANTERN_BRIDGE_URL |
unset | WhatsApp bridge base URL. |
LANTERN_BRIDGE_TOKEN |
unset | Token the WhatsApp bridge validates. |
LANTERN_BRIDGE_HEARTBEAT_TOKEN |
unset | Shared token for POST /v1/surfaces/whatsapp/heartbeat. |
LANTERN_IMESSAGE_BRIDGE_URL |
unset | iMessage bridge base URL. |
LANTERN_IMESSAGE_BRIDGE_TOKEN |
unset | Token the iMessage bridge validates (a different variable from the WhatsApp one). |
LANTERN_PERSONAL_DOCS_BRIDGE_URL |
unset | Overrides the bridge URL for the personal-docs tool. |
LANTERN_WHATSAPP_BRIDGE_URL |
unset | WhatsApp bridge URL for the personal-docs tool. |
LANTERN_DEFAULT_TENANT_ID |
00000000-0000-0000-0000-000000000001 |
Tenant that single-owner background jobs act for. |
LANTERN_OWNER_NAME |
unset | Owner first name for briefs and calls. |
LANTERN_OWNER_EMAIL |
unset | Owner email: brief fallback and memory-ingest identity. |
LANTERN_OWNER_PHONE |
unset | Owner number for the morning brief by SMS. |
LANTERN_OWNER_VERIFY_PIN |
unset | PIN for the owner’s Twilio line; unset authorizes on caller ID alone (spoofable). |
LANTERN_OWNER_VERIFY_TTL |
12h |
How long a PIN verification lasts. |
LANTERN_TWILIO_NUMBER |
from the Twilio connector | SMS sending number override. |
LANTERN_PUBLIC_BASE_URL |
unset | Public URL override for Twilio callbacks. |
LANTERN_CONTROL_PLANE_URL |
unset | Control plane’s own public URL (errand callbacks); also what the manager uses for the secret relay. |
LANTERN_RCS_INBOUND |
off | on accepts inbound RCS. |
LANTERN_JARVIS_BRIEF_HOUR |
unset (brief off) | Hour 0 to 23 for the morning brief push. |
LANTERN_JARVIS_BRIEF_CHANNEL |
unset | Channel for the brief. |
LANTERN_ERRAND |
off | Enables outbound errand calls. |
LANTERN_ERRAND_PUBLIC_URL |
unset | Public URL for errand webhooks. |
LANTERN_MEMORY_INGEST |
on | Background memory ingest. off disables. |
LANTERN_MEMORY_INGEST_INTERVAL |
15m (min 1m) |
Ingest period. |
LANTERN_MEMORY_DISTILL |
off | 1/true/on enables LLM memory distillation. |
LANTERN_MEMORY_DISTILL_INTERVAL |
6h (min 1m) |
Distillation period. |
Cron scheduler
Section titled “Cron scheduler”Binary: services/scheduler/cmd/server.
| Variable | Default | Meaning |
|---|---|---|
DATABASE_URL |
postgres://localhost:5432/lantern?sslmode=disable |
Postgres DSN. |
REDIS_URL |
redis://localhost:6379/0 |
Redis. |
LISTEN_ADDR |
:50058 |
gRPC listen address. |
LOG_LEVEL |
info |
Log level. |
LANTERN_GRPC_SERVICE_TOKEN |
unset | Shared service token. |
Runtime scheduler (placement)
Section titled “Runtime scheduler (placement)”Binary: services/runtime-scheduler/cmd/scheduler; gRPC :50055, REST and /metrics on :8085.
| Variable | Default | Meaning |
|---|---|---|
LISTEN_ADDR |
:50055 |
gRPC listen address. |
LOG_LEVEL |
info |
Log level. |
DATABASE_URL |
unset | Optional Postgres for write-through cluster state. |
JWT_SECRET |
dev default | Verifies caller JWTs on the REST surface. |
LANTERN_ENV |
unset (dev) | Production-like values arm the guards below. |
LANTERN_GRPC_SERVICE_TOKEN |
unset | Shared service token for the gRPC port. Required in prod. |
SCHEDULER_NODE_TOKEN |
unset | Token that node heartbeats must present. Fatal in prod when unset; dev warns. Required in prod. |
LANTERN_DEFAULT_MANAGER_ADDR |
unset (log-only dialer) | Manager address for placements on node-local, node-stub or an empty node. Prod refuses to start without it. Required in prod. |
LANTERN_DIALER |
unset | stub forces the stub dialer. Fatal in prod. |
LANTERN_NODE_ADDR_ |
unset | Explicit address for a named node. |
LANTERN_RUNTIME_MANAGER_TLS_CA |
unset | CA for dialing managers. Prod requires the CA and a client cert. Required in prod. |
LANTERN_RUNTIME_MANAGER_TLS_CERT |
unset | Client certificate. Required in prod. |
LANTERN_RUNTIME_MANAGER_TLS_KEY |
unset | Client key. Required in prod. |
SCHEDULER_TENANT_MAX_VMS |
20 |
Default per-tenant concurrent VM cap. |
SCHEDULER_WEIGHT_WARM_POOL |
0.40 |
Placement score weight. |
SCHEDULER_WEIGHT_REGION |
0.25 |
Placement score weight. |
SCHEDULER_WEIGHT_FAIR_SHARE |
0.15 |
Placement score weight. |
SCHEDULER_WEIGHT_COST |
0.10 |
Placement score weight. |
SCHEDULER_WEIGHT_HEALTH |
0.10 |
Placement score weight. |
LANTERN_MAX_FORK_COUNT |
100 |
Upper bound on one Fork call. |
LANTERN_FORK_CONCURRENCY |
16 |
Concurrent fork spawns. |
LANTERN_AGENT_INSTANCE_ID |
set by the control plane | Injected into spawned workloads, not an operator setting. |
LANTERN_AGENT_INSTANCE_TOKEN |
set by the control plane | Injected into spawned workloads, not an operator setting. |
Runtime manager
Section titled “Runtime manager”Binary: services/runtime-manager (Rust). Spawns workloads and owns the exec channel.
| Variable | Default | Meaning |
|---|---|---|
LISTEN_ADDR |
0.0.0.0:50054 |
gRPC listen address. |
LOG_LEVEL |
info |
Log level. |
LANTERN_ENV |
unset (dev) | Production-like values make the guards below fatal. |
RUNTIME_BACKEND |
k8s |
Backend: k8s, docker, firecracker, kata or wasm. |
LANTERN_GRPC_SERVICE_TOKEN |
unset | Callers must present it as x-lantern-service-token. Refuses to start in prod without it; per-VM certs are always refused on manager methods. Required in prod. |
LANTERN_MANAGER_TLS_CA |
unset | CA that harness and caller client certs must chain to. Fail-closed in prod, plaintext with a warning in dev. Required in prod. |
LANTERN_MANAGER_TLS_CERT |
unset | Manager server certificate (PEM). Required in prod. |
LANTERN_MANAGER_TLS_KEY |
unset | Manager server key (PEM). Required in prod. |
LANTERN_VM_SIGNING_CA_CERT |
falls back to the manager CA | CA that signs per-VM certificates. |
LANTERN_VM_SIGNING_CA_KEY |
falls back to the manager key | Its key. |
LANTERN_CONTROL_PLANE_URL |
unset | Base URL for the secret relay and report forwarding. Set with the token below. |
LANTERN_RUNTIME_SECRET_TOKEN |
unset | Sent as X-Lantern-Runtime-Token to the control plane. With the URL, activates the relay resolver; otherwise a dev env resolver is used. |
LANTERN_RUNTIME_RELAY_ALLOW_INSECURE |
unset | 1 allows a non-TLS relay URL (dev only). |
NODE_NAME |
HOSTNAME-derived |
Node name reported to the scheduler. |
NODE_ADVERTISE_ADDR |
LISTEN_ADDR with 0.0.0.0 as localhost |
Address the scheduler dials back; set it on multi-host. |
NODE_REGION |
local |
Region label for placement. |
NODE_ZONE |
local-a |
Zone label. |
SCHEDULER_URL |
unset | Runtime scheduler address for node heartbeats. |
SCHEDULER_TOKEN |
unset | Heartbeat token (the scheduler’s SCHEDULER_NODE_TOKEN). |
LANTERN_NODE_VCPU_MILLIS |
detected | Override the advertised CPU capacity in millicores. Default: detected parallelism x 1000. |
LANTERN_NODE_MEMORY_BYTES |
detected | Override the advertised memory in bytes. Default: detected, else 8 GiB with a warning. |
LANTERN_REAPER_INTERVAL_SECS |
15 |
Orphan-VM reaper period (minimum 1). |
AGENT_IMAGE |
ghcr.io/lantern/agent-runner:latest |
Default workload image (docker, kata). |
DOCKER_SOCKET |
/var/run/docker.sock |
Docker socket path. |
BUNDLE_S3_ENDPOINT |
http://localhost:9000 |
Where agent bundles are fetched from. |
BUNDLE_S3_BUCKET |
lantern-bundles |
Bundle bucket. |
SNAPSHOT_DIR |
/var/lib/lantern/snapshots |
Local snapshot store root. |
S3_ENDPOINT |
unset | With S3_BUCKET and the AWS keys, enables the S3 snapshot tier. |
S3_BUCKET |
unset | Snapshot bucket. |
AWS_ACCESS_KEY_ID |
unset | Snapshot-tier credentials. |
AWS_SECRET_ACCESS_KEY |
unset | Snapshot-tier credentials. |
FC_BINARY_PATH |
found on PATH | Firecracker binary. |
FC_KERNEL_PATH |
/opt/lantern/vmlinux |
Guest kernel. |
FC_ROOTFS_PATH |
/opt/lantern/rootfs.ext4 |
Base rootfs image. |
FC_BRIDGE |
unset | Host bridge for VM taps. |
FIRECRACKER_JAILER_PATH |
unset (no jailer) | Run Firecracker under this jailer binary. |
FIRECRACKER_JAILER_UID |
123 |
Uid the jailer drops to. |
FIRECRACKER_JAILER_GID |
100 |
Gid the jailer drops to. |
FIRECRACKER_CHROOT_BASE |
/srv/jailer |
Jailer chroot base. |
LANTERN_WORKLOAD_UID_DEFAULT |
1000 |
Workload uid written to spawn.json; a caller-supplied LANTERN_WORKLOAD_UID is dropped. |
LANTERN_WORKLOAD_GID_DEFAULT |
same as the uid | Workload gid. |
LANTERN_EGRESS_MODE |
guest |
broker (Firecracker only) gives VMs no NIC and enforces egress on the host over vsock. See Egress and credentials. |
LANTERN_EGRESS_ALLOWED_PORTS |
443 |
Comma list of ports the broker will dial. |
LANTERN_EGRESS_PLAIN_INJECT |
unset | 1 permits credential injection over plain HTTP on port 80. Off by default. |
LANTERN_HARNESS_EXEC_PORT |
50056 |
Port of the harness exec channel. |
LANTERN_HARNESS_READY_TIMEOUT_MS |
5000 |
How long resume and fork wait for the harness. |
KATA_RUNTIME_NAME |
kata-runtime |
Docker runtime name registered for Kata. |
LANTERN_RUNTIMECLASS_GVISOR |
unset | Kubernetes RuntimeClass for gVisor. Unset: that class is refused (fail-closed). |
LANTERN_RUNTIMECLASS_KATA |
unset | RuntimeClass for Kata. |
LANTERN_RUNTIMECLASS_KATA_CC |
unset | RuntimeClass for confidential Kata. |
LANTERN_RUNTIMECLASS_WASM |
unset | RuntimeClass for Wasm pods. |
LANTERN_NODE_LABEL_GVISOR |
unset | Node label that marks gVisor-capable nodes. |
LANTERN_NODE_LABEL_KATA |
unset | Node label that marks Kata-capable nodes. |
LANTERN_ALLOW_RUNC_STANDARD |
off | 1/true/yes/on lets the standard class run on plain runc (admin override). |
LANTERN_CC_TECH |
unset | Confidential-computing technology to report. |
LANTERN_OTEL_ENABLED |
unset | 1 enables traces (with the OTLP endpoint). |
OTEL_EXPORTER_OTLP_ENDPOINT |
unset | Standard OTLP endpoint. |
In-VM harness
Section titled “In-VM harness”Binary: services/harness (Rust, PID 1 in the VM). Almost everything here is written into spawn.json or the kernel command line by the manager; set these through the agent spec, not by hand. The exceptions are called out.
| Variable | Default | Meaning |
|---|---|---|
LANTERN_ENV |
unset (dev) | Production-like values arm the guards below. |
LANTERN_WORKLOAD_UID |
unset | Uid the workload, exec and shell children run as; also the only uid admitted to the secrets socket. In prod the harness refuses to start without it. Required in prod. |
LANTERN_WORKLOAD_GID |
uid | Workload gid. |
LANTERN_HARNESS_EXEC_TOKEN |
unset | Token the Exec RPC requires. Must be set in prod and staging. Required in prod. |
LANTERN_HARNESS_EXEC_ADDR |
0.0.0.0:50056 |
Listen address of the one-shot exec server. |
LANTERN_WORKLOAD_CMD |
from spawn.json | Workload command line. |
LANTERN_WORKLOAD_ARGV |
from spawn.json | Workload arguments. |
LANTERN_MAX_RESTARTS |
5 |
Workload restart limit. |
LANTERN_DRAIN_GRACE_SECS |
25 |
Grace period on SIGTERM drain. |
LANTERN_RUN_DIR |
/run/lantern |
Directory for sockets (secrets.sock). |
LANTERN_RLIMIT_AS_BYTES |
unset (no cap) | Address-space limit applied to the workload. |
LANTERN_EGRESS_RULES |
[] |
JSON [{pattern, http_methods, rate_bps}] declared egress. |
LANTERN_EGRESS_FAIL_CLOSED |
off in dev | 1 refuses to boot without the iptables REDIRECT rule. Always on in prod; 0 is ignored there with a warning. |
LANTERN_EGRESS_BIND |
127.0.0.1:3128 |
Listen address of the in-guest egress proxy. |
LANTERN_EGRESS_ALLOWED_PORTS |
443 |
Comma list of ports the proxy may CONNECT to; empty re-applies the default. |
LANTERN_NO_PROXY |
127.0.0.1,localhost,::1,169.254.169.254 |
Overrides the injected NO_PROXY. |
LANTERN_EGRESS_MODE |
guest |
broker swaps the proxy for a vsock forwarder. |
LANTERN_EGRESS_VSOCK_PORT |
3128 |
Broker-mode vsock port to the host broker. |
LANTERN_EGRESS_CA_PEM |
unset | Per-VM CA the broker uses to terminate TLS for injecting hosts. |
LANTERN_MANAGER_ADDR |
from spawn.json | Manager address; in broker mode the manager’s name, dialed over vsock. |
LANTERN_MANAGER_VSOCK_PORT |
unset | Broker mode: vsock port of the control channel. |
LANTERN_MANAGER_SERVER_NAME |
manager.lantern.internal |
TLS server name used to verify the manager. |
LANTERN_VM_TLS_CERT |
set at spawn | Per-VM client certificate path. |
LANTERN_VM_TLS_KEY |
set at spawn | Per-VM client key path. |
LANTERN_MANAGER_TLS_CA |
set at spawn | CA used to verify the manager. |
LANTERN_ALLOW_SECRET_STUB |
off | 1: read secrets from the harness’s own env instead of the manager. Dev only; never in production. |
LANTERN_DECLARED_SECRETS |
set at spawn | Secret refs the spec declared. |
LANTERN_VM_ID |
set at spawn | This VM’s id. |
LANTERN_AGENT_INSTANCE_TOKEN |
set at spawn | Per-instance identity token. |
LANTERN_TRACE_PARENT |
set at spawn | W3C trace parent for the spawn. |
LANTERN_OTLP_SOCKET |
set at spawn | Unix socket for workload OTLP. |
LANTERN_CONFIDENTIAL |
unset | Marks a confidential-computing VM for attestation. |
LANTERN_CC_TECH |
unset | Confidential-computing technology. |
LANTERN_CC_MEASUREMENT_PATH |
unset | File holding the launch measurement. |
LANTERN_RUNTIME_CLASS |
unset | RuntimeClass the pod runs under (attestation). |
RUST_LOG |
unset | Standard Rust log filter. |
Dashboard (Next.js)
Section titled “Dashboard (Next.js)”App: apps/web. NEXT_PUBLIC_* values are baked in at build time.
| Variable | Default | Meaning |
|---|---|---|
LANTERN_API_URL |
http://localhost:8080 |
Control-plane URL for server-side calls (checked before NEXT_PUBLIC_API_URL). |
NEXT_PUBLIC_API_URL |
http://localhost:8080 |
Control-plane URL for the browser and the kiosk page. |
NEXT_PUBLIC_DEMO_MODE |
unset | 1 shows the demo affordances on the login page. |
NEXT_PUBLIC_TURNSTILE_SITE_KEY |
unset | Turnstile site key; renders the captcha widget. |
LANTERN_API_KEY |
unset | Appears only in the generated “view code” samples; the dashboard itself does not read it. |
LANTERN_BRIDGE_URL |
unset | WhatsApp bridge URL for the dashboard’s bridge proxy route. |
NEXT_PUBLIC_LANTERN_BRIDGE_URL |
unset | Public fallback for the same URL, and the Surfaces page probe. |
LANTERN_BRIDGE_TOKEN |
unset | Token the proxy sends to the WhatsApp bridge. |
LANTERN_IMESSAGE_BRIDGE_URL |
unset | iMessage bridge URL for the proxy route. |
NEXT_PUBLIC_LANTERN_IMESSAGE_BRIDGE_URL |
unset | Public fallback, and the Surfaces page probe. |
LANTERN_IMESSAGE_BRIDGE_TOKEN |
unset | Token the proxy sends to the iMessage bridge. |
LANTERN_SIGNAL_TOKEN |
unset | Gates the dashboard’s /api/signals route (header x-lantern-signal-token). |
NODE_ENV |
set by Next.js | production marks the session cookie Secure. |
How this list was built
Section titled “How this list was built”Names and defaults come from the reads in code, not from other docs: Go os.Getenv and the local envOrDefault/envInt helpers in services/control-plane, services/scheduler and services/runtime-scheduler; Rust std::env::var in services/runtime-manager/src and services/harness/src; process.env in apps/web. Prod requirements come from the startup guards (runStartupGuards in the control plane, authz.rs/tls.rs in the manager).
Limits
Section titled “Limits”- Not covered yet: the workflow engine, model router, gateway, surface gateway and the two chat bridges. The service token above applies to the first three.
- Rows whose default says set at spawn or from spawn.json are written by the manager. Setting them yourself on the harness is overridden or ignored.
- Duration values are Go durations (
30s,1h) unless the name ends in_SECS,_MS,_MINor_DAYS. - Defaults for the model-tier variables change with releases; check
services/control-plane/internal/handlers/llm_proxy.go.