Docs/Appendix/Environment Variable Reference

Environment Variable Reference

Names, purpose, non-secret defaults and consumers for the variables that configure core, the compose stack, and the Next.js frontends. Secret-bearing variables carry a secret badge and no value — by design, and no .env, .env.local or .env.production* file was opened to write this page.

Sources read
core/.env.example, deploy/compose/.env.example, web/.env.local.example, core/app-config/src/main/resources/application*.yml, web/Dockerfile, web-admin/Dockerfile, deploy/compose/docker-compose.yml, deploy/compose/docker-compose.domain.yml.
Completeness
core's application.yml exposes roughly 200 placeholders. The tables list every operationally relevant group; the exhaustive list is the ${NAME:default} placeholders in that file (see the last section). Compose has additional per-service variables not in .env.example that were not enumerated.
Environment
Docker Compose reads deploy/compose/.env (generated by scripts/vegaduta secrets); Helm reads chart values and Kubernetes Secrets. Localhost defaults below are for local development only.
Secrets and the rules that bite
  • APP_ENCRYPTION_KEY must be identical everywhere core boots (deploy/compose/.env, core/.env.local, your Kubernetes Secret). A different value makes every stored provider key and channel secret undecryptable; rotation needs a decrypt/re-encrypt migration. APP_ENCRYPTION_KEY_PREVIOUS is set only during a deliberate rotation window.
  • The issuer core validates must be exactly the one Keycloak stamps (PUBLIC_AUTH_URL/realms/agentic-ai); any other accepted issuer goes in KEYCLOAK_ADDITIONAL_ISSUERS. A mismatch 401s every token — see ADR-0005.
  • NEXT_PUBLIC_* build args are optional: empty means nothing is baked and the runtime environment decides. Never bake a localhost URL into an image you deploy — see ADR-0007.
  • LLM provider keys, Twilio credentials and MCP credentials are not env vars: they are BYOK, entered in the console and stored encrypted per tenant (core/.env.example header).

Jump to: Core · Compose (deploy/compose/.env) · Web & web-admin

1. core (Spring Boot)

Template: core/.env.example (copy to gitignored core/.env.local). Consumed via ${VAR:default} in core/app-config/src/main/resources/application*.yml. "Default" is the literal in the yml/example when non-secret; blank means unset.

Database, Redis, encryption

NamePurposeDefaultSource / notes
DB_HOST, DB_PORTPostgres host/port.localhost, 5432application.yml. Compose Full points these at pgbouncer:6432.
POSTGRES_DB, POSTGRES_USERApp database and user.agentic_ai, agenticapplication.yml; core/.env.example
POSTGRES_PASSWORD secretDB password (required, no default).—application.yml
DB_HIKARI_MAX_POOL_SIZE, DB_HIKARI_MIN_IDLE, DB_HIKARI_CONNECTION_TIMEOUT_MSConnection pool tuning.15, 5, 20000application.yml
REDIS_HOST, REDIS_PORTRedis for session/cache and signup rate limiting.localhost, 6379core/.env.example; application.yml
REDIS_PASSWORD secretRedis auth.—application.yml; VALKEY_PASSWORD in Compose
APP_ENCRYPTION_KEY secretREQUIRED. AES key for at-rest encryption (generate with openssl rand -base64 32).—See callout above. Core refuses to start without it.
APP_ENCRYPTION_KEY_PREVIOUS secretOld key during a rotation window only.blankcore/.env.example
PLATFORM_MASTER_KEY secretPlatform-admin "delete tenant completely" control (X-Master-Key header).—deploy/compose/.env.example; application.yml

Identity (Keycloak)

NamePurposeDefaultSource / notes
KEYCLOAK_ISSUER_URIPrimary JWT issuer (scheme-sensitive match).http://localhost:8180/realms/agentic-aiapplication-security.yml
KEYCLOAK_ADDITIONAL_ISSUERSComma-separated extra accepted issuers (the public auth URL).blankapplication-security.yml; deploy/compose/.env.example.
KEYCLOAK_ADMIN_BASE_URL, KEYCLOAK_REALM, KEYCLOAK_CLIENT_IDAdmin API base, realm, core's client id.http://localhost:8180, agentic-ai, agentic-ai-coreapplication-security.yml
KEYCLOAK_CLIENT_SECRET secretConfidential-client secret; required for /api/admin/** user management.—core/.env.example
KEYCLOAK_ADMIN, KEYCLOAK_ADMIN_PASSWORD secret, KEYCLOAK_DB_USER, KEYCLOAK_DB_PASSWORD secret, KEYCLOAK_DB_NAMECompose Keycloak container admin login and its dedicated Postgres.user/name onlycore/.env.example; deploy/compose/.env.example (DB password is :?-required)

Storage, LLM defaults, web origins

NamePurposeDefaultSource / notes
STORAGE_ENDPOINT, STORAGE_REGION, STORAGE_BUCKET, STORAGE_PATH_STYLE_ACCESSS3-compatible storage (SeaweedFS in the Full tier; AWS S3, R2, Ceph, Garage elsewhere). Path-style true for SeaweedFS/MinIO-style gateways.http://localhost:9000, us-east-1, agentic-ai, trueapplication.yml; core/.env.example
STORAGE_ACCESS_KEY, STORAGE_SECRET_KEY secretObject storage credentials.— (yml carries a dev default; not reproduced)Required with :? in compose.
DEFAULT_MODELFallback model alias (not a provider key).claude-sonnet-4-5 in application.yml; claude-sonnet-5 in core/.env.exampleExample and yml disagree; the effective default is whichever is set at runtime.
DEFAULT_AGENT_MAX_TOKENS, WORKFLOW_GENERATOR_MAX_TOKENS, APP_BUILDER_MAX_TOKENSToken ceilings.4096, 4096, 8000application.yml
WEB_ALLOWED_ORIGINS / APP_WEB_ALLOWED_ORIGINSConsole CORS origins.localhost list in ymlcore/.env.example says setting WEB_ALLOWED_ORIGINS does nothing (origins are hard-coded in application.yml); set APP_WEB_ALLOWED_ORIGINS for a public domain.
LLM_HTTP_CONNECT_TIMEOUT, LLM_HTTP_READ_TIMEOUT, LLM_HTTP_IDLE_CONNECTION_TIMEOUT, LLM_HTTP_STREAM_IDLE_TIMEOUT, LLM_HTTP_BUFFERED_TURN_TIMEOUT, LLM_HTTP_STREAM_TIMEOUTS_ENABLEDLLM HTTP client timeouts.10s, 10m, 120s, 90s, 240s, trueapplication.yml.
HTTP_CLIENT_CONNECT_TIMEOUT, HTTP_CLIENT_READ_TIMEOUTGeneral outbound HTTP timeouts.10s, 120sapplication.yml
VERTEX_ENABLED, VERTEX_POOL_{0,1,2}_{PROJECT_ID,LOCATION,SA_KEY_PATH,USE_ADC,SUPPORTS_TEXT,SUPPORTS_IMAGE,SUPPORTS_VIDEO}Optional platform-pool Vertex AI slots (operator-supplied credentials).disabled; location us-central1application.yml. SA_KEY_PATH is a path to a key file — treat as sensitive.
HOSTED_POOL_ORDER_BY_COST, HOSTED_POOL_CIRCUIT_{FAILURE_THRESHOLD,FAILURE_WINDOW_SECONDS,COOLDOWN_SECONDS}Platform LLM pool ordering and circuit breaker.true; 3, 120, 180application.yml
APP_JEV_* (ENABLED, BASE_URL, MODEL, API_KEY secret, timeouts, complexity/agent-routing flags)Optional external routing/complexity service integration.enabled flags true; base URL and model literals in ymlapplication.yml; purpose beyond the property names is not documented in the repository docs read here.

Channels, OAuth, optional billing

NamePurposeDefaultSource / notes
OMNICHANNEL_PUBLIC_BASE_URLPublic HTTPS base of this core (webhook/callback reconstruction, Twilio signature validation).blankcore/.env.example
DISCORD_GATEWAY_SERVICE_URL, DISCORD_GATEWAY_SHARED_SECRET secretDiscord gateway bridge.example: http://localhost:4002core/.env.example
META_WEBHOOK_VERIFY_TOKEN secret, META_EMBEDDED_SIGNUP_APP_ID, …_APP_SECRET secret, …_CONFIG_ID, …_REDIRECT_URIMeta WhatsApp Cloud API and Embedded Signup.blankcore/.env.example. Redirect URI must be a real HTTPS URL registered in the Meta app.
TELEGRAM_BOT_TOKEN secret, TELEGRAM_WEBHOOK_BASE_URLPlatform fallback Telegram bot.blankapplication-workflow.yml
DEMO_WHATSAPP_* (access token, app secret, verify token, ID hash key = secrets; business number, phone-number id, per-phone caps)Demo WhatsApp number configuration.caps 3 pairs / 60 turnsapplication.yml
GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET secret, GOOGLE_OAUTH_REDIRECT_URI, GOOGLE_OAUTH_CONSOLE_REDIRECT_URIGoogle Drive/Gmail/Calendar/Sheets OAuth. Redirect must point at core, not the console.console redirect http://localhost:3000/admin/integrationscore/.env.example; application.yml
X_OAUTH_REDIRECT_URI, X_OAUTH_CONSOLE_REDIRECT_URI, ATLASSIAN_OAUTH_REDIRECT_URI, ATLASSIAN_OAUTH_CONSOLE_REDIRECT_URIX and Atlassian OAuth redirects.console: http://localhost:3000/admin/channels, http://localhost:3000/toolsapplication.yml
SIGNUP_RATE_LIMIT_MAX_ATTEMPTS, SIGNUP_RATE_LIMIT_WINDOW_MINUTES, SIGNUP_DISPOSABLE_EMAIL_BLOCK_{ENABLED,ALLOWLIST,EXTRA_DOMAINS}Signup abuse controls.5, 60, block enabled trueapplication.yml
RAZORPAY_KEY_ID, RAZORPAY_KEY_SECRET secret, RAZORPAY_WEBHOOK_SECRET secret, RAZORPAY_TRIAL_DAYSOptional Razorpay gateway for operators who charge for plans. Unused unless set; plan gating in the consoles is off unless NEXT_PUBLIC_BILLING_ENABLED=1.trial 14core/.env.example.
RAZORPAY_PLAN_PREMIUM_{INR,USD}_{MONTHLY,ANNUAL}, RAZORPAY_PLAN_UNLIMITED_{INR,USD}_{MONTHLY,ANNUAL}, RAZORPAY_PLAN_ID_STARTER, RAZORPAY_PLAN_ID_BUSINESSRazorpay plan ids (created manually in the dashboard). Last two are legacy fallbacks.blankapplication.yml
PHONEPE_*, DEFAULT_PAYMENT_GATEWAY, PAYMENTS_LINK_TTL_SECONDS, PAYMENTS_RECONCILE_INTERVAL_MS, BILLING_DUNNING_MAX_FAILED_ATTEMPTSPhonePe gateway, payment-link and dunning settings.gateway razorpay; 86400; 60000; 3application.yml. PhonePe client secret and webhook password are secrets.
CORE_COMP_SERVICE_TOKEN secretShared secret for an optional external comp-grant integration (X-Service-Token). Blank = endpoint fails closed.blankcore/.env.example

Agents, tools, workflows, MCP, sidecars

NamePurposeDefaultSource / notes
GUARDRAILS_IMPLEMENTATION, GUARDRAILS_MAX_TOOL_CALLS_PER_TURNsemantic (regex + LLM classifier) or pattern (regex only); per-turn tool-call cap.semantic, 15core/.env.example
TOOL_AUTO_SELECTION_ENABLED, TOOL_AUTO_SELECTION_MAX_TOOLS, TOOL_HARD_CAP_PER_TURN, TOOL_MCP_DISCOVERY_CACHE_TTL_SECONDSTool selection and caching.true, 12, 150, 300application.yml
TOOL_CIRCUIT_BREAKER_{FAILURE_THRESHOLD,WINDOW_MINUTES,COOLDOWN_MINUTES}Tool circuit breaker.5, 5, 10application.yml
WORKFLOW_EXECUTION_ENGINElegacy (in-process) or temporal (durable).legacycore/.env.example; Compose profile temporal sets it to temporal.
TEMPORAL_TARGET, TEMPORAL_NAMESPACE, TEMPORAL_RUN_TIMEOUT_SECONDSTemporal connection.127.0.0.1:7233, default, 600application.yml
WORKFLOW_EVENTS_ENABLED, WORKFLOW_KAFKA_BOOTSTRAP_SERVERSKafka/Redpanda event bus (opt-in).false, localhost:9092application.yml; application-workflow.yml
WORKFLOW_TRIGGER_RATE_LIMIT_MAX, …_WINDOW_MINUTESWorkflow trigger rate limit.20, 10application.yml
AGENT_JOBS_MAX_CONCURRENT, AGENT_JOB_MAX_ATTEMPTS, AGENT_JOB_APPROVAL_TIMEOUT, AGENT_JOB_TRIGGERS_ENABLED, AGENT_JOB_TRIGGER_*, AGENT_SUPERVISOR_SWEEP_ENABLED, RESOLUTION_SWEEP_ENABLEDAgent-job concurrency, retries, trigger fire caps, sweeps.4, 2, PT24H, true, caps in yml, true, trueapplication.yml
APPROVAL_RETRY_MAX_ATTEMPTS, APPROVAL_RETRY_BASE_DELAY_SECONDS, APPROVAL_RETRY_MAX_DELAY_SECONDSHITL approval delivery retry backoff.5, 30, 3600core/.env.example
SMTP_HOST, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD secret, WORKFLOW_MAIL_FROMWorkflow "email" output node relay. Blank host = unconfigured.port 587; from workflows@agentic-ai.localapplication-workflow.yml
GITHUB_REPO, GITHUB_ACTIONS_TOKEN secret, GITHUB_API_BASE"Run now" trigger for the translation workflow.https://api.github.comcore/.env.example
SIDECAR_BASE_URL, SIDECAR_SHARED_SECRET secret, KNOWLEDGE_RERANK_ENABLEDPython ML sidecar URL, X-Internal-Token secret (same value on the sidecar), rerank toggle.http://localhost:8001; falseapplication-knowledge.yml; core/.env.example. Sidecar auth is required by default; empty secret means it rejects calls unless SIDECAR_AUTH_REQUIRED=false.
CODE_INTEL_ENABLED, CODE_INTEL_BASE_URL, CODE_INTEL_INTERNAL_TOKEN secretBridge to the code-intel service (off by default).false, http://localhost:8090application.yml; token must equal the service's own CODE_INTEL_INTERNAL_TOKEN.
TOOL_SANDBOX_ENABLED, TOOL_SANDBOX_BASE_URL, TOOL_SANDBOX_INTERNAL_TOKEN secret, TOOL_SANDBOX_MAX_TOOLS_PER_TENANT, TOOL_SANDBOX_REQUEST_TIMEOUT_MSTenant custom-code tool sandbox (off by default).false, http://tool-sandbox:8095, 25, 30000application.yml. See ADR-0009.
MCP_STDIO_SIDECAR_ENABLED, MCP_STDIO_SIDECAR_URL, MCP_STDIO_SIDECAR_SHARED_SECRET secretRoute dynamic MCP STDIO spawns through mcp-stdio-runner.false, mcp-stdio-runner:8097application.yml
MCP_FILESYSTEM_COMMAND, MCP_FILESYSTEM_ROOT, MCP_MEMORY_COMMAND, MCP_SEQUENTIAL_THINKING_COMMAND, MCP_PUPPETEER_COMMAND, MCP_PLAYWRIGHT_VISION_COMMANDCommands for built-in stdio MCP servers.npx; root ./mcp-dataapplication-mcp.yml. Windows defaults to npx.cmd automatically.
APP_BUILDER_CORE_SERVICE_TOKEN secretService token shared with app-builder.blankapplication.yml; deploy/compose/.env.example
LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET secret, LIVEKIT_TOKEN_TTL_SECONDSIn-app voice/video (LiveKit).ws://localhost:7880; 3600application.yml. Key/secret required (no dev defaults).
APP_A2A_SIGNING_ENABLED, …_KEY_ID, …_PUBLIC_KEY, …_PRIVATE_KEY secretAgent-to-agent message signing.enabled trueapplication.yml
APP_VISION_ENABLED, APP_VISION_FRAMES_FREE_DAILY, …_PREMIUM_DAILY, APP_VISION_WATCH_MINUTES_PREMIUM_DAILYLive-vision quotas.true, 10, 500, 120application.yml
GRAPH_MEMORY_ARBITRATION_ENABLEDGraph-memory arbitration toggle.falseapplication.yml
PLATFORM_ALERTS_WEBHOOK_SECRET secretAlertmanager to core alert-webhook bearer secret.—deploy/compose/.env.example

Observability and management

NamePurposeDefaultSource / notes
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, LANGFUSE_OTEL_AUTH_HEADER secret, TRACING_SAMPLING_PROBABILITYOTLP traces to Langfuse; auth header; sampling.http://langfuse-web:3000/api/public/otel/v1/traces; 0.1application.yml; deploy/compose/.env.example
ACTUATOR_HEALTH_SHOW_DETAILS, MANAGEMENT_HEALTH_MAIL_ENABLEDActuator health detail exposure; mail health indicator.when-authorized; falseapplication.yml
APP_SECURITY_PERMISSION_CACHE_TTL, APP_TENANT_STATUS_CACHE_TTL, APP_SYSTEM_STATUS_CACHE_TTLCache TTLs.10s eachapplication.yml
APP_CHAT_SSE_STEP_HEARTBEAT_INTERVAL, APP_CHAT_SSE_BUFFERED_KEEPALIVE_INTERVALSSE heartbeats.15s, 20sapplication.yml

2. Compose stack (deploy/compose/.env)

Template: deploy/compose/.env.example, consumed by the files in deploy/compose/. Variables already covered above (Postgres, Keycloak, APP_ENCRYPTION_KEY, CODE_INTEL_INTERNAL_TOKEN) are not repeated. scripts/vegaduta secrets (run by up) generates random secrets and never overwrites existing values.

Name(s)PurposeExample defaultNotes
VEGADUTA_VERSION, VEGADUTA_REGISTRY, VEGADUTA_POSTGRES_IMAGERelease tag and registry of the images to pull.registry ghcr.io/cd-lcPin a version in production; --build builds from source instead.
BASE_DOMAIN, ACME_EMAIL, CADDY_AUTO_HTTPS, CADDY_SITE_SCHEMEDomain overlay: hostnames, Let's Encrypt contact (optional), and, behind your own TLS proxy or tunnel, CADDY_AUTO_HTTPS=off plus CADDY_SITE_SCHEME=http:// so Caddy serves plain HTTP on :80.blankscripts/vegaduta up --domain writes BASE_DOMAIN and the PUBLIC_* URLs only; set the CADDY_* variables and ACME_EMAIL in .env yourself. PUBLIC_BIND_ADDR (default 0.0.0.0) sets the interface Caddy publishes 80/443 on; use 127.0.0.1 in tunnel mode.
PUBLIC_APP_URL, PUBLIC_ADMIN_URL, PUBLIC_API_URL, PUBLIC_AUTH_URL, PUBLIC_CODE_INTEL_URL, PUBLIC_BUILDER_URL, PUBLIC_LIVEKIT_URL, PUBLIC_LANGFUSE_URLBrowser-facing URLs; every other public URL is derived from these.localhost portsNever localhost on a server; doctor checks. PUBLIC_AUTH_URL sets the token issuer.
BIND_ADDR, *_HOST_PORT, *_MEM_LIMITHost interface and ports for published services; container memory limits.127.0.0.1
COMPOSE_PROFILES, CORE_PROFILES_EXTRA, SPRING_PROFILES_ACTIVE, LITE_SPRING_PROFILES, CORE_MCP_PROFILE, CORE_IMAGE_VARIANTWhich Compose profiles and core Spring profiles run.see exampleThe CLI sets the matching values per profile (deploy/README.md).
KEYCLOAK_SMTP_*, KC_VERIFY_EMAIL, GOOGLE_CLIENT_*, GITHUB_CLIENT_*, MICROSOFT_CLIENT_*, THEME_*_URLKeycloak email, social logins and login-theme links, applied by the realm reconcile.blankClient secrets and SMTP password are secrets.
WEB_FREE_MODE, WEB_EDGE_AGENTS, WEB_DEPLOY_ENV, WEB_BILLING_ENABLEDPassed to the consoles as NEXT_PUBLIC_FREE_MODE, _EDGE_AGENTS, _DEPLOY_ENV, _BILLING_ENABLED.blankBilling/plan gating is off unless WEB_BILLING_ENABLED=1.
TEMPORAL_DB_USER, TEMPORAL_DB_PASSWORD secretTemporal's dedicated Postgres.user temporal
LANGFUSE_POSTGRES_{USER,PASSWORD,DB}, LANGFUSE_CLICKHOUSE_{USER,PASSWORD}, LANGFUSE_REDIS_AUTH, LANGFUSE_S3_{ACCESS,SECRET}_KEY, LANGFUSE_SALT, LANGFUSE_ENCRYPTION_KEY, LANGFUSE_NEXTAUTH_SECRETSelf-hosted Langfuse v3 stack. Passwords, salt, encryption key and NextAuth secret are secrets (salt/encryption key generated with openssl rand -hex 32).users langfuse/clickhouse; db langfuseOptional LANGFUSE_NEXTAUTH_URL, LANGFUSE_HOST are commented in the example.
LANGFUSE_INIT_PROJECT_PUBLIC_KEY, …_SECRET_KEY, LANGFUSE_INIT_USER_{EMAIL,NAME,PASSWORD}, LANGFUSE_OTEL_AUTH_HEADERBootstrap org/project/user/key pair on first start; OTLP auth header.blankKeys, password and header are secrets.
GRAFANA_ADMIN_USER, GRAFANA_ADMIN_PASSWORD secretGrafana admin login (separate from Keycloak).user adminLoki/Promtail/Grafana profile.
TOOL_SANDBOX_INTERNAL_TOKEN secret, TOOL_SANDBOX_ENABLED, TOOL_SANDBOX_MAX_TOOLS_PER_TENANT, TOOL_SANDBOX_MAX_TIMEOUT_MS, TOOL_SANDBOX_MAX_MEMORY_MB, TOOL_SANDBOX_MAX_CONCURRENTCustom code tools; same token in core and tool-sandbox. Off by default.false, 25, 15000, 512, 4Read services/tool-sandbox/README.md's threat model first.
MCP_STDIO_SIDECAR_ENABLED, MCP_STDIO_SIDECAR_SHARED_SECRET secretMCP STDIO sandbox runner.falseSame secret in core and runner.
SIDECAR_SHARED_SECRET secret, SIDECAR_AUTH_REQUIREDSidecar internal auth; false only as a bare-local-dev escape hatch (commented out in the example).required by default
ANTHROPIC_API_KEY secret, APP_BUILDER_INTERNAL_TOKEN secret, APP_BUILDER_ADMIN_DATABASE_URL secretOptional app-builder settings; the compose block reuses CODE_INTEL_INTERNAL_TOKEN.blankThe database URL may embed credentials — treat as secret.
LIVEKIT_API_KEY, LIVEKIT_API_SECRET secret, LIVEKIT_URL, VOICE_AGENT_LIVEKIT_URL, VOICE_AGENT_CORE_API_BASE_URLLiveKit credentials and browser-facing WebSocket URL; voice agent wiring.blankRequired.
ALERT_EMAIL_TO, ALERT_SMTP_HOST, ALERT_SMTP_PORT, ALERT_SMTP_FROM, ALERT_SMTP_USER, ALERT_SMTP_PASSWORD secretAlertmanager email notifications (optional).port 587 (commented)Enabled only when both ALERT_EMAIL_TO and ALERT_SMTP_HOST are non-empty.
RENDER_THREADS, RENDER_PRESET, RENDER_CRF, RENDER_WORKSPACE_DIR, RENDER_CALLBACK_ALLOWED_HOSTS, RENDER_ALLOW_PRIVATE_FETCHSidecar video render knobs.1, medium, 23, /app/workspace, core, falseVideo-pipeline section of the example.
KEYCLOAK_HOSTNAME, KEYCLOAK_HOSTNAME_STRICTOverride Keycloak's pinned public hostname (full URL required).commented; default pinned to localhost:8180Domain deployments only (the domain overlay derives it from PUBLIC_AUTH_URL).

3. web and web-admin (build-time)

The Dockerfiles declare the NEXT_PUBLIC_* values as optional build args. Empty (the default) bakes nothing and the runtime environment decides; Compose and the Helm charts supply them at runtime (deploy/helm/README.md). A value you do bake is compiled into the browser bundle and cannot be changed without a rebuild.

NameImageBuild-arg defaultPurpose / notes
NEXT_PUBLIC_API_BASE_URLweb, web-adminemptyCore API origin (PUBLIC_API_URL in Compose).
NEXT_PUBLIC_KEYCLOAK_URLweb, web-adminemptyPublic Keycloak origin (PUBLIC_AUTH_URL). A localhost bake breaks sign-in on a server.
NEXT_PUBLIC_KEYCLOAK_REALMweb, web-adminempty (code default agentic-ai)
NEXT_PUBLIC_KEYCLOAK_CLIENT_IDweb / web-adminempty (code defaults agentic-ai-web / agentic-ai-platform-admin)Public OIDC clients, no client secret.
NEXT_PUBLIC_CODE_INTEL_URLwebemptyPublic origin for the /code-intel page.
NEXT_PUBLIC_ACADEMY_URLwebemptyLink to an optional external learning site; not part of this repository. Leave empty.
NEXT_PUBLIC_APP_BUILDER_URLwebemptyEmpty renders "not available on this deployment". Never bake a localhost value into a deployed build.
NEXT_PUBLIC_EDGE_AGENTSwebemptyEdge UI only when exactly 1.
NEXT_PUBLIC_DEPLOY_ENVwebfull (Compose full stack, Helm); lite / personal in those stacksInstall tier (personal, lite, full: selects install behaviour, no pill) or, for any other value such as production or staging, the console environment pill; WEB_DEPLOY_ENV in Compose.
NEXT_PUBLIC_FREE_MODEwebemptyFree-for-everyone mode (1) swaps pricing UI for open-source copy.
NEXT_PUBLIC_COFFEE_URLwebemptyDonation link; not rendered when empty.
NEXT_PUBLIC_BILLING_ENABLEDweb, web-adminemptyPlan/billing surfaces appear only when exactly 1 (hosted operators); off by default.
CDN_URL, ALLOWED_DEV_ORIGINSweb (build/dev)unsetRead in next.config.js: asset CDN hook; comma-separated hostnames for dev over a tunnel.
E2E_ANTHROPIC_API_KEY, E2E_TWILIO_ACCOUNT_SID, E2E_TWILIO_AUTH_TOKEN, E2E_TWILIO_WHATSAPP_FROM, E2E_TWILIO_WHATSAPP_TOPlaywright e2e—Names in web/.env.local.example. The first three are secrets. Values in the example are placeholders and are not reproduced.
BAKE_EXTRA_MODELS, MODULEsidecar, coretrue, appNon-NEXT_PUBLIC Dockerfile ARGs (services/sidecar/Dockerfile, core/Dockerfile).

Domain overlay: deploy/compose/docker-compose.domain.yml derives the consoles' public URLs and core's issuer settings from the PUBLIC_* values.

Where to look for the rest

Evidence & references