Configuration Reference
This document covers every configurable knob in the Enterprise Agentic AI Platform: environment variables per service, Docker Compose service topology, Kubernetes Helm values, monorepo tooling, and feature flags.
Table of Contents
- Environment Variables
- Docker Compose
- Kubernetes / Helm
- Monorepo Configuration
- Feature Flags
Environment Variables
All backend services read configuration from environment variables. In local development, the API Gateway loads a .env file from the monorepo root via dotenv. In Docker Compose, variables are set in the environment: block of each service or loaded from an env_file.
API Gateway
The API Gateway (services/api-gateway) is the central backend process. It connects to every data store, orchestration system, and external service.
Core
| Variable | Description | Default | Required |
|---|
PORT | HTTP listen port | 4000 | No |
NODE_ENV | Runtime environment (development / production) | development | No |
CORS_ORIGINS | Comma-separated allowed CORS origins | http://localhost:3000,http://localhost:3001,http://localhost:3002 | No |
API_PUBLIC_URL | Publicly reachable base URL (used in upload links) | http://localhost:4000 | No |
NEXTAUTH_SECRET | Secret for signing session tokens | dev-secret | Yes (prod) |
SECURE_COOKIES | Force secure (HTTPS-only) cookies outside production | false | No |
Data Stores
| Variable | Description | Default | Required |
|---|
DATABASE_URL | PostgreSQL connection string | None (mock fallback) | No |
REDIS_URL | Redis connection string (rate limiting, caching) | None (rate limiting disabled) | No |
QDRANT_URL | Qdrant vector database URL | None (keyword fallback) | No |
NEO4J_URI | Neo4j Bolt protocol URI | None (PostgreSQL fallback) | No |
NEO4J_USER | Neo4j username | neo4j | No |
NEO4J_PASSWORD | Neo4j password | neo4j_password | No |
KAFKA_BROKERS | Comma-separated Kafka broker addresses | localhost:9092 | No |
Orchestration
| Variable | Description | Default | Required |
|---|
TEMPORAL_ADDRESS | Temporal gRPC endpoint | None (sync fallback) | No |
TEMPORAL_NAMESPACE | Temporal namespace | default | No |
N8N_API_URL | n8n API base URL | http://localhost:5678 | No |
N8N_API_KEY | n8n API key for authenticated calls | "" | No |
N8N_EDITOR_URL | Public n8n editor URL (shown in UI) | Same as N8N_API_URL | No |
WS_INTERNAL_URL | WebSocket server internal push endpoint | http://localhost:4101 | No |
LLM Provider (T-Systems AIFS)
| Variable | Description | Default | Required |
|---|
TSYSTEMS_AIFS_API_KEY | API key for T-Systems AI Foundation Services | None (mock mode) | Yes (prod) |
TSYSTEMS_AIFS_BASE_URL | AIFS base URL | https://llm-server.llmhub.t-systems.net/v2 | No |
DEFAULT_CHAT_MODEL | Default chat/completion model | claude-sonnet-4 | No |
DEFAULT_EMBEDDING_MODEL | Default embedding model | jina-embeddings-v2-base-code | No |
DEFAULT_LLM_MODEL | Default model for external agents | gpt-4.1-mini | No |
MOCK_MODE | Force mock LLM responses even when API key is set | false | No |
Identity & Auth (Keycloak OIDC)
| Variable | Description | Default | Required |
|---|
KEYCLOAK_URL | Internal Keycloak base URL | None | Yes (prod) |
KEYCLOAK_REALM | Keycloak realm name | agentic-platform | No |
KEYCLOAK_JWKS_URL | JWKS endpoint for RS256 JWT validation | None | Yes (prod) |
KEYCLOAK_ISSUER | Internal JWT issuer (used for token validation) | None | Yes (prod) |
KEYCLOAK_EXTERNAL_ISSUER | Browser-facing issuer (may differ from internal) | None | No |
KEYCLOAK_PORTAL_CLIENT_SECRET | Portal OAuth client secret | portal-dev-secret | No |
KEYCLOAK_STUDIO_CLIENT_SECRET | Studio OAuth client secret | studio-dev-secret | No |
KEYCLOAK_ADMIN_CLIENT_SECRET | Admin Console OAuth client secret | admin-console-dev-secret | No |
AZURE_AD_CLIENT_ID | Azure AD client ID (optional federated IdP) | None | No |
AZURE_AD_ISSUER | Azure AD issuer URL | None | No |
Token Lifetimes
| Variable | Description | Default | Required |
|---|
TOKEN_TTL_CONSUMER | Session TTL for consumer role (seconds) | 28800 (8h) | No |
TOKEN_TTL_BUILDER | Session TTL for builder role (seconds) | 14400 (4h) | No |
TOKEN_TTL_ADMIN | Session TTL for admin role (seconds) | 3600 (1h) | No |
Object Storage (S3 / MinIO)
| Variable | Description | Default | Required |
|---|
S3_ENDPOINT | S3-compatible endpoint URL | None (local fallback) | No |
S3_ACCESS_KEY | S3 access key | minioadmin | No |
S3_SECRET_KEY | S3 secret key | minioadmin | No |
S3_BUCKET | S3 bucket name | agentic-uploads | No |
S3_REGION | S3 region | us-east-1 | No |
Secrets Management (Vault)
| Variable | Description | Default | Required |
|---|
VAULT_ADDR | HashiCorp Vault URL | None (env fallback) | No |
VAULT_TOKEN | Vault root/dev token | None | No |
VAULT_ROLE_ID | Vault AppRole role ID (production) | None | No |
VAULT_SECRET_ID | Vault AppRole secret ID (production) | None | No |
CREDENTIAL_ENCRYPTION_KEY | Hex-encoded AES key for credential encryption | None | No |
Observability
| Variable | Description | Default | Required |
|---|
OTEL_ENABLED | Enable OpenTelemetry tracing | false | No |
OTEL_EXPORTER_OTLP_ENDPOINT | OTLP HTTP endpoint | http://localhost:4318 | No |
OTEL_SERVICE_NAME | Service name in traces | agentic-api-gateway | No |
LANGFUSE_ENABLED | Enable Langfuse LLM observability | false | No |
LANGFUSE_SECRET_KEY | Langfuse server-side secret key | None | When Langfuse enabled |
LANGFUSE_PUBLIC_KEY | Langfuse client-side public key | None | When Langfuse enabled |
LANGFUSE_HOST | Langfuse server URL | http://localhost:3200 | No |
Security & Signing
| Variable | Description | Default | Required |
|---|
USER_CONTEXT_HMAC_SECRET | HMAC secret for X-User-Context header integrity | platform-hmac-secret-change-in-prod | Yes (prod) |
TOOL_SIGNATURE_ENFORCEMENT | Tool signature mode: disabled, warn, enforce | warn | No |
TOOL_SIGNING_KEY | HMAC key for tool signing | dev-signing-key | Yes (prod) |
SIGSTORE_FULCIO_URL | Fulcio CA URL for Sigstore signing | None | No |
SIGSTORE_REKOR_URL | Rekor transparency log URL | None | No |
WEBHOOK_SECRET | Secret for validating inbound webhooks | None | No |
SPIFFE / SPIRE
| Variable | Description | Default | Required |
|---|
SPIRE_AGENT_SOCKET | SPIRE agent workload API socket path | None | No |
SPIFFE_TRUST_DOMAIN | SPIFFE trust domain | agentic-platform | No |
TRUST_AGENT_HEADERS | Trust X-Agent-Id headers without SPIFFE proof | false | No |
Code Execution
| Variable | Description | Default | Required |
|---|
CODE_EXEC_MODE | Execution backend: local (child_process) or k8s | local | No |
CODE_EXEC_MAX_OUTPUT | Max stdout bytes from code execution | 65536 (64KB) | No |
CODE_EXEC_K8S_NAMESPACE | Kubernetes namespace for execution pods | agents-procode | No |
CODE_EXEC_PYTHON_IMAGE | Container image for Python execution | agentic-platform/python-sandbox:latest | No |
CODE_EXEC_NODE_IMAGE | Container image for Node.js/TypeScript execution | node:22-slim | No |
CODE_EXEC_BASH_IMAGE | Container image for Bash execution | bash:5-alpine3.20 | No |
K8S_NAMESPACE | General K8s namespace for agent pods | agents-procode | No |
K8S_API_HOST | K8s API server host (used from Docker) | host.docker.internal | No |
External Agent URLs
| Variable | Description | Default | Required |
|---|
RESEARCH_AGENT_URL | Research agent base URL | http://localhost:8210 | No |
RAW_PYTHON_AGENT_URL | Raw Python agent base URL | http://localhost:8300 | No |
PYDANTIC_AI_AGENT_URL | Pydantic AI agent base URL | http://localhost:8301 | No |
CREWAI_AGENT_URL | CrewAI agent base URL | http://localhost:8302 | No |
AUTOGEN_AGENT_URL | AutoGen agent base URL | http://localhost:8303 | No |
DOCKER_HOST_OVERRIDE | Replace localhost in URLs when running in Docker | None | No |
Frontend Applications (Portal, Studio, Admin)
All three Next.js apps share the same set of environment variables. Values differ only by OIDC client identity.
| Variable | Description | Default | Required |
|---|
NEXT_PUBLIC_API_URL | API Gateway URL visible to the browser | http://localhost:4000 | No |
NEXT_PUBLIC_N8N_EDITOR_URL | n8n editor URL (Studio only) | http://localhost:5678 | No |
NEXT_PUBLIC_KEYCLOAK_URL | Keycloak URL visible to the browser | None | Yes (prod) |
NEXT_PUBLIC_KEYCLOAK_REALM | Keycloak realm | None | Yes (prod) |
NEXT_PUBLIC_KEYCLOAK_CLIENT_ID | OIDC client ID (app-specific) | None | Yes (prod) |
API_URL | Server-side API Gateway URL (SSR) | http://api-gateway:4000 | No |
WS_URL | WebSocket server URL | ws://ws-server:4100 | No |
NEXTAUTH_URL | NextAuth.js canonical URL | http://localhost:300x | Yes |
KEYCLOAK_URL | Keycloak internal URL (server-side) | None | Yes (prod) |
KEYCLOAK_REALM | Keycloak realm (server-side) | agentic-platform | No |
KEYCLOAK_CLIENT_ID | OIDC client ID (server-side) | App-specific | Yes (prod) |
KEYCLOAK_CLIENT_SECRET | OIDC client secret (server-side) | App-specific dev secret | Yes (prod) |
OIDC Client IDs per app: Portal = portal, Studio = studio, Admin = admin-console.
WebSocket Server
The WebSocket server (services/ws-server) handles real-time push events.
| Variable | Description | Default | Required |
|---|
WS_PORT | Public WebSocket port | 4100 | No |
WS_INTERNAL_PORT | Internal HTTP push port (API Gateway pushes here) | 4101 | No |
WS_MOCK_EVENTS | Emit synthetic demo events | true | No |
n8n Bridge Sidecars
Four sidecar services form the n8n bridge layer, providing governance, memory, observability, and identity for n8n workflows.
Guardrails Proxy (port 8081)
| Variable | Description | Default | Required |
|---|
PORT | Listen port | 8081 | No |
UPSTREAM_LLM_URL | Upstream LLM endpoint to proxy through | AIFS base URL or https://api.openai.com/v1 | No |
UPSTREAM_LLM_API_KEY | API key for upstream LLM | From TSYSTEMS_AIFS_API_KEY | Yes |
Memory Bridge (port 8082)
| Variable | Description | Default | Required |
|---|
PORT | Listen port | 8082 | No |
REDIS_URL | Redis for short-term memory | None | No |
QDRANT_URL | Qdrant for vector memory | None | No |
NEO4J_URI | Neo4j for graph memory | None | No |
NEO4J_USER | Neo4j username | neo4j | No |
NEO4J_PASSWORD | Neo4j password | neo4j_password | No |
OTel Exporter (port 8083)
| Variable | Description | Default | Required |
|---|
PORT | Listen port | 8083 | No |
N8N_API_URL | n8n API to poll execution data from | http://n8n:5678 | No |
N8N_API_KEY | n8n API key | "" | No |
OTEL_EXPORTER_OTLP_ENDPOINT | OTLP endpoint for traces | http://jaeger:4318 | No |
POLL_INTERVAL_MS | Polling interval in milliseconds | 30000 | No |
Identity Injector (ports 8084 / 8085)
| Variable | Description | Default | Required |
|---|
PORT | HTTP API port | 8084 | No |
MCP_PROXY_PORT | MCP proxy port (n8n MCP Client connects here) | 8085 | No |
SPIRE_AGENT_SOCKET | SPIRE agent socket path | None | No |
SPIFFE_TRUST_DOMAIN | SPIFFE trust domain | agentic-platform | No |
MCP_GATEWAY_URL | Upstream MCP Gateway URL | http://api-gateway:4000/mcp | No |
USER_CONTEXT_HMAC_SECRET | HMAC secret (must match API Gateway) | platform-hmac-secret-change-in-prod | Yes (prod) |
DEV_MODE | Enable dev mode bypass for SPIFFE | true | No |
Example External Agents
All example agents (Research, Raw Python, Pydantic AI, CrewAI, AutoGen) share the same LLM configuration pattern.
| Variable | Description | Default | Required |
|---|
PORT | Agent HTTP listen port | Agent-specific (8210-8303) | No |
LLM_API_KEY | LLM provider API key | From TSYSTEMS_AIFS_API_KEY | Yes |
LLM_BASE_URL | LLM provider base URL | From TSYSTEMS_AIFS_BASE_URL | No |
LLM_MODEL | Model name | From DEFAULT_LLM_MODEL or gpt-4.1-mini | No |
MAX_ITERATIONS | Max reasoning iterations (Research agent only) | 5 | No |
Docker Compose
The docker-compose.yml at the repository root defines all services for local development. No Docker profiles are used; all services start together.
Service Map
| Service | Image | Purpose |
|---|
postgres | postgres:16-alpine | Primary relational store (shared by platform, n8n, Keycloak, Temporal) |
redis | redis:7-alpine | Short-term memory, rate limiting, caching |
qdrant | qdrant/qdrant:latest | Vector database for embeddings and semantic search |
neo4j | neo4j:5-community | Graph database for entity relationships and graph memory |
kafka | apache/kafka:latest | Durable event bus (KRaft mode, no Zookeeper) |
temporal | temporalio/auto-setup:latest | Workflow orchestration engine |
temporal-ui | temporalio/ui:latest | Temporal web dashboard |
n8n | docker.n8n.io/n8nio/n8n:latest | Low-code workflow runtime |
keycloak | quay.io/keycloak/keycloak:26.0 | Bundled OIDC Identity Provider |
jaeger | jaegertracing/all-in-one:latest | Distributed tracing (OTLP receiver) |
vault | hashicorp/vault:1.18 | Secret management and transit encryption |
langfuse-server | langfuse/langfuse:2 | LLM observability and cost tracking |
minio | minio/minio:latest | S3-compatible object storage |
prometheus | prom/prometheus:latest | Metrics scraping and storage |
alertmanager | prom/alertmanager:latest | Alert routing from Prometheus rules |
grafana | grafana/grafana:latest | Dashboard visualization |
spire-server | ghcr.io/spiffe/spire-server:1.9.6 | SPIFFE identity management |
spire-agent | Custom (Alpine + SPIRE) | Workload attestation agent |
api-gateway | Custom (Dockerfile) | Platform backend API |
ws-server | Custom (Dockerfile) | Real-time WebSocket server |
portal | Custom (Dockerfile) | Agent Portal frontend |
studio | Custom (Dockerfile) | Agent Studio frontend |
admin | Custom (Dockerfile) | Admin Console frontend |
docs | Custom (Dockerfile) | Documentation site |
guardrails-proxy | Custom (Dockerfile) | n8n LLM guardrails sidecar |
memory-bridge | Custom (Dockerfile) | n8n memory sidecar |
otel-exporter | Custom (Dockerfile) | n8n observability sidecar |
identity-injector | Custom (Dockerfile) | n8n identity sidecar |
python-sandbox | Custom (Dockerfile) | Pre-built sandbox image for code execution |
research-agent | Custom (Dockerfile) | Example LangGraph research agent |
raw-python-agent | Custom (Dockerfile) | Example raw Python agent |
pydantic-ai-agent | Custom (Dockerfile) | Example Pydantic AI agent |
crewai-agent | Custom (Dockerfile) | Example CrewAI agent |
autogen-agent | Custom (Dockerfile) | Example AutoGen agent |
Port Mappings
| Host Port | Container Port | Service | Notes |
|---|
| 3000 | 3000 | Portal | Agent Portal UI |
| 3001 | 3001 | Studio | Agent Studio UI |
| 3002 | 3002 | Admin | Admin Console UI |
| 3003 | 3003 | Docs | Documentation site |
| 3100 | 3000 | Grafana | Remapped to avoid conflict with Portal |
| 3200 | 3000 | Langfuse | Remapped to avoid conflict with Portal/Grafana |
| 4000 | 4000 | API Gateway | Backend HTTP API |
| 4100 | 4100 | WS Server | Public WebSocket |
| 5432 | 5432 | PostgreSQL | Database |
| 5678 | 5678 | n8n | Workflow editor and API |
| 6333 | 6333 | Qdrant | HTTP API |
| 6334 | 6334 | Qdrant | gRPC API |
| 6379 | 6379 | Redis | |
| 7233 | 7233 | Temporal | gRPC API |
| 7474 | 7474 | Neo4j | Browser UI |
| 7687 | 7687 | Neo4j | Bolt protocol |
| 8080 | 8080 | Temporal UI | Web dashboard |
| 8081 | 8081 | Guardrails Proxy | n8n LLM sidecar |
| 8082 | 8082 | Memory Bridge | n8n memory sidecar |
| 8083 | 8083 | OTel Exporter | n8n observability sidecar |
| 8084 | 8084 | Identity Injector | n8n identity HTTP |
| 8085 | 8085 | Identity Injector | MCP proxy port |
| 8180 | 8080 | Keycloak | Remapped to avoid conflict with Temporal UI |
| 8181 | 8081 | SPIRE Server | Remapped to avoid conflict with guardrails-proxy |
| 8200 | 8200 | Vault | API and UI |
| 8210 | 8210 | Research Agent | Example agent |
| 8300 | 8300 | Raw Python Agent | Example agent |
| 8301 | 8301 | Pydantic AI Agent | Example agent |
| 8302 | 8302 | CrewAI Agent | Example agent |
| 8303 | 8303 | AutoGen Agent | Example agent |
| 9010 | 9000 | MinIO | S3 API (remapped) |
| 9011 | 9001 | MinIO | Console UI (remapped) |
| 9090 | 9090 | Prometheus | Query UI |
| 9093 | 9093 | Alertmanager | |
| 16686 | 16686 | Jaeger | Tracing UI |
| 4318 | 4318 | Jaeger | OTLP HTTP receiver |
| 29092 | 29092 | Kafka | Host access via HOST listener |
Volume Mounts
Named volumes persist data across container restarts:
| Volume | Mount Point | Service |
|---|
postgres_data | /var/lib/postgresql/data | PostgreSQL |
qdrant_data | /qdrant/storage | Qdrant |
neo4j_data | /data | Neo4j |
kafka_data | /var/kafka-data | Kafka |
n8n_data | /home/node/.n8n | n8n |
keycloak_data | /opt/keycloak/data | Keycloak |
spire_data | /opt/spire/data | SPIRE Server |
spire_agent_socket | /run/spire/sockets | SPIRE Agent (shared with API Gateway) |
spire_server_socket | /tmp/spire-server/private | SPIRE Server (shared with Agent) |
minio_data | /data | MinIO |
prometheus_data | /prometheus | Prometheus |
grafana_data | /var/lib/grafana | Grafana |
vault_data | /vault/data | Vault |
Host bind mounts (read-only):
./infra/keycloak/agentic-platform-realm.json into Keycloak for realm import
./infra/prometheus/prometheus.yml and alert-rules.yml into Prometheus
./infra/grafana/provisioning and dashboards into Grafana
./infra/spire/server.conf and agent.conf into SPIRE
/var/run/docker.sock into API Gateway (infrastructure metrics)
$HOME/.kube into API Gateway (Kubernetes API access for code execution)
Kubernetes / Helm
The Helm chart lives at infra/helm/agentic-platform/. The values.yaml file provides all defaults for a development deployment.
Namespace Layout
The platform uses four Kubernetes namespaces for isolation:
| Namespace | Purpose |
|---|
platform-core | API Gateway, WS Server, Temporal, Keycloak, frontends |
agents-procode | Pro-Code agent execution pods, sandbox containers |
agents-n8n | n8n runtime and its four sidecars |
data | PostgreSQL, Redis, Qdrant, Neo4j, Kafka, MinIO |
Resource Limits
Platform Services
| Service | CPU Request | CPU Limit | Memory Request | Memory Limit | HPA |
|---|
| API Gateway | 250m | 1 | 512Mi | 1Gi | 1-10 replicas, 70% CPU |
| WS Server | 100m | 500m | 256Mi | 512Mi | 1-5 replicas, 70% CPU |
| Portal | 100m | 500m | 256Mi | 512Mi | -- |
| Studio | 100m | 500m | 256Mi | 512Mi | -- |
| Admin | 100m | 500m | 256Mi | 512Mi | -- |
| Temporal | 250m | 1 | 512Mi | 1Gi | -- |
| Keycloak | 250m | 1 | 512Mi | 1Gi | -- |
| n8n | 250m | 1 | 512Mi | 1Gi | -- |
n8n Sidecars
All four sidecars share the same resource profile: CPU 100m-500m, Memory 128Mi-256Mi.
Data Services
| Service | Storage |
|---|
| PostgreSQL | 10Gi |
| Redis | 2Gi |
| Qdrant | 10Gi |
| Neo4j | 5Gi |
| Kafka | 5Gi |
| Prometheus | 10Gi |
| Grafana | 2Gi |
Ingress
| Setting | Default |
|---|
ingress.enabled | true |
ingress.className | nginx |
ingress.host | agentic.local |
ingress.tls.enabled | false |
ingress.tls.secretName | agentic-tls |
networkPolicies.enabled | true |
Sandbox Isolation
The platform supports gVisor-based container isolation for agent workloads. Resource limits are tiered by agent autonomy level:
| Autonomy Level | CPU Request | CPU Limit | Memory Request | Memory Limit |
|---|
| Assistive | 0.25 | 0.5 | 256Mi | 512Mi |
| Semi-Autonomous | 0.5 | 1 | 512Mi | 1Gi |
| Autonomous | 1 | 2 | 1Gi | 2Gi |
gVisor settings:
sandbox.gvisor.enabled: true
sandbox.gvisor.runtimeClassName: gvisor
sandbox.gvisor.handler: runsc
sandbox.gvisor.overhead: memory 64Mi, CPU 50m
sandbox.gvisor.nodeSelector: sandbox.gvisor.io/enabled: "true"
Code execution settings:
sandbox.codeExecution.defaultTimeoutSeconds: 30
sandbox.codeExecution.maxTimeoutSeconds: 120
sandbox.codeExecution.maxCodeSizeBytes: 102400 (100KB)
sandbox.codeExecution.maxOutputSizeBytes: 65536 (64KB)
sandbox.codeExecution.localMode: true (child_process in dev, K8s pods in production)
Monorepo Configuration
Workspace Structure
Defined in pnpm-workspace.yaml:
packages:
- 'apps/*' # portal, studio, admin, docs
- 'packages/*' # ui, api-client, auth, types, config
- 'services/*' # api-gateway, ws-server
Package manager: pnpm with workspaces. All dependencies are hoisted to the root node_modules where possible, with per-package overrides managed by pnpm.
Turborepo Tasks
Defined in turbo.json:
| Task | Dependencies | Caching | Outputs | Persistent |
|---|
build | Depends on upstream ^build | Yes | .next/**, dist/** | No |
dev | None | No | -- | Yes |
lint | None | Yes | -- | No |
test | None | Yes | -- | No |
test:unit | None | No | -- | No |
test:e2e | Depends on build | No | -- | No |
Global dependencies: **/.env.*local (any change to local env files invalidates all caches).
Common commands:
pnpm install # Install all dependencies
pnpm dev # Start all apps in dev mode
pnpm dev --filter=portal # Start only the Portal
pnpm dev --filter=studio # Start only the Studio
pnpm dev --filter=admin # Start only the Admin Console
pnpm build # Build all apps
pnpm lint # Lint all packages
pnpm test # Run all tests
Feature Flags
The platform uses environment variables as feature flags. No external feature flag service is required.
| Flag | Values | Default | Effect |
|---|
MOCK_MODE | true / false | false (auto-enabled when TSYSTEMS_AIFS_API_KEY is unset) | Forces mock LLM responses. Useful for frontend development without an LLM provider. |
OTEL_ENABLED | true / false | false | Enables OpenTelemetry distributed tracing to the configured OTLP endpoint. |
LANGFUSE_ENABLED | true / false | false | Enables Langfuse LLM observability (requires LANGFUSE_SECRET_KEY and LANGFUSE_PUBLIC_KEY). |
WS_MOCK_EVENTS | true / false | true | WebSocket server emits synthetic demo events for UI development. |
TOOL_SIGNATURE_ENFORCEMENT | disabled / warn / enforce | warn | Controls tool supply-chain verification. disabled skips all checks, warn logs violations, enforce rejects unsigned tools. |
CODE_EXEC_MODE | local / k8s | local | Code execution backend. local uses child_process (dev only). k8s provisions Kubernetes pods with gVisor isolation. |
TRUST_AGENT_HEADERS | true / false | false | Trusts X-Agent-Id headers without SPIFFE proof. Only enable in development. |
SECURE_COOKIES | true / false | false (auto-enabled when NODE_ENV=production) | Forces HTTPS-only cookies for session tokens. |
DEV_MODE | true / false | true (identity-injector sidecar) | Bypasses SPIFFE validation in the n8n identity injector. |
Implicit Feature Detection
Several features are automatically enabled when their backing service is reachable:
| Feature | Enabled When | Fallback |
|---|
| PostgreSQL persistence | DATABASE_URL is set and connectable | In-memory mock store |
| Redis rate limiting | REDIS_URL is set and connectable | Rate limiting disabled |
| Vector search | QDRANT_URL is set and connectable | Keyword-based search |
| Graph memory | NEO4J_URI is set and connectable | PostgreSQL-based fallback |
| Kafka event bus | KAFKA_BROKERS is set and connectable | Direct WebSocket push |
| Temporal workflows | TEMPORAL_ADDRESS is set and connectable | Synchronous execution |
| n8n integration | N8N_API_URL is set and connectable | Database-only mode |
| Vault secrets | VAULT_ADDR is set and connectable | Environment variable fallback |
| S3 storage | S3_ENDPOINT is set and connectable | Local filesystem fallback |
| LLM calls | TSYSTEMS_AIFS_API_KEY is set | Mock LLM responses |