Skip to content

Configuration

Every configurable option in Olympus, grouped by what it controls. There are two layers:

  • Runtime — environment variables read by the dashboard / orchestrator process (set on the pod, via the Helm chart values or Ansible extra-vars).
  • Deploy-time — Terraform / Ansible variables for the sandbox AWS deploy (set in the gitignored inf/env.sh).

Almost everything is optional with a safe default — a bare process runs with an in-memory bus, no auth, manual routing, and the intelligence-layer stores disabled.

Routing & models

VariableLayerValues / defaultWhat
OLYMPUS_ROUTERbothmanual (default) · llmmanual = deterministic keyword routing, no LLM key needed. llm = an LLM picks the agent / drives the coordinator (needs a provider key).
OPENAI_API_KEYruntimeOpenAI provider key. Required for llm routing + embeddings unless you use Anthropic.
ANTHROPIC_API_KEYruntimeAnthropic provider key (alternative to OpenAI).

Models are chosen per-agent in code (libs/agentlib/models.py); the default is the current GPT-5-class model, with one-liners for Claude, local ollama, and vllm backends.

Memory & feedback

VariableValues / defaultWhat
OLYMPUS_MEMORYjsonl (default) · embeddings · disabledMemory backend. jsonl = lexical Jaccard over append-only JSONL (dep-free). embeddings = OpenAI text-embedding-3-small + cosine (needs OPENAI_API_KEY; falls back to lexical if unreachable). disabled = no retrieval.
OLYMPUS_MEMORY_PATHa writable pathWhere the memory store persists.

Feedback (👍/👎/correction) is applied through the dashboard (POST /memory/{task_id}/feedback) — no env needed.

Rollback

VariableValues / defaultWhat
OLYMPUS_ROLLBACKoff by default · a store selector (jsonl) + pathEnables capturing the inverse of a destructive op before it fires, so it can be undone (re-prompting approval). Off (Null store) unless wired.

MCP servers

VariableWhat
OLYMPUS_MCP_SERVERSA JSON array of MCP servers to wire at startup. Each entry grafts a server's tools onto a named agent.

Each descriptor:

json
[
  {"name": "netdb", "target_agent": "sysadmin", "transport": "http",
   "url": "http://<host>:8080/mcp",
   "destructive": ["create_host", "delete_host", "create_zone", "delete_dns_record"]},
  {"name": "demo", "target_agent": "programmer", "transport": "stdio",
   "command": "python3", "args": ["infra/demo-mcp-server/server.py"]}
]
  • transport: stdio (command/args/env) or http (url/headers — the latter commonly carries Authorization: Bearer …).
  • destructive: integrator-supplied verb allowlist (the server can't declare its own). These route through the approval queue; everything else is ungated read-only.
  • Servers can also be added at runtime via POST /mcp/servers. MCP tools are still subject to self-protection.

Self-protection

Hard-denies any tool call (native or MCP) that targets the cluster / hosts Olympus runs on — before approval, so no one can escalate by managing the system that gates them.

VariableWhat
OLYMPUS_SELF_NAMESPACEThe Kubernetes namespace Olympus runs in (usually injected via the downward API). Operations against it are denied.
OLYMPUS_SELF_NODESComma-separated node names / hosts Olympus runs on (Helm: hardening.selfNodes). Keep in sync with the fleet — a node not listed isn't protected.

Authentication & sessions

Login is enforced on the dashboard when configured (Google OAuth and/or email OTP). The Helm chart maps these onto the pod env.

VariableDefaultWhat
OLYMPUS_AUTH_BYPASSfalsetrue = no login (local dev only).
OLYMPUS_AUTH_ALLOWED_DOMAINSComma-separated email domains allowed to log in, or * for any authenticated email. Empty = nobody passes.
OLYMPUS_AUTH_ADMIN_EMAILSEmails (or domains) granted the admin role (the Admin accounting page).
OLYMPUS_AUTH_DEV_EMAILIdentity assumed when AUTH_BYPASS=true.
OLYMPUS_AUTH_SESSION_SECRETephemeral32+ random bytes signing the session cookie. Set it in prod (else sessions reset on restart).
OLYMPUS_AUTH_SESSION_TTL_SECONDS604800 (7d)Session lifetime.
OLYMPUS_AUTH_COOKIE_SECUREtrueSecure-flag the session cookie (requires HTTPS).
OLYMPUS_AUTH_REDIRECT_BASE_URLPublic base URL OAuth redirects back to (e.g. https://your.host).
OLYMPUS_AUTH_GOOGLE_CLIENT_ID / _SECRETGoogle OAuth web client. Empty disables Google login.
OLYMPUS_AUTH_OTP_TTL_SECONDS600Email-OTP code lifetime.
OLYMPUS_AUTH_OTP_RATE_LIMIT_SECONDS60Min seconds between OTP requests per address.
OLYMPUS_AUTH_SMTP_HOSTSMTP server for email-OTP. Empty disables email login.
OLYMPUS_AUTH_SMTP_PORT587SMTP port.
OLYMPUS_AUTH_SMTP_USERNAME / _PASSWORDSMTP auth.
OLYMPUS_AUTH_SMTP_FROMFrom address for OTP mail (e.g. noreply@your.host).
OLYMPUS_AUTH_SMTP_STARTTLStrueUse STARTTLS.

Cost caps & demo mode

VariableDefaultWhat
OLYMPUS_DEMO_MODEfalseWhen true, the approval gate auto-rejects every destructive verb (a read-only public demo). The inline approval card still shows.
OLYMPUS_DAILY_COST_CAP_USD5.0Daily LLM-spend cap.
OLYMPUS_DEFAULT_USER_DAILY_LIMIT_USDDefault per-user daily spend limit (the Admin page can override per user).

Inventory & HPC

VariableWhat
OLYMPUS_INVENTORY_PATHPath to the user-managed inventory (hosts + SSH keys) the ansible/sysadmin ssh_run tools resolve against.
OLYMPUS_PROXY_SLURM_URLUpstream URL of the Slurm sub-dashboard the HPC page proxies.
OLYMPUS_PROXY_GPU_URLUpstream URL of the GPU sub-dashboard.
OLYMPUS_DASHBOARD_URLThe dashboard's own public URL (used for self-referential links / redirects).

Deploy-time (sandbox AWS)

Set in the gitignored inf/env.sh; deploy.sh threads them into Terraform and Ansible. The committed defaults are example.com placeholders.

VariableRequired?What
TF_VAR_dns_hostnameHostname to serve at (DNS A-record + TLS CN), e.g. olympus.example.com.
DEPLOY_CERTBOT_EMAILLet's Encrypt registration email.
TF_VAR_cloudflare_api_tokenfor managed DNSCloudflare token, Zone:DNS:Edit. Empty = point DNS by hand.
TF_VAR_cloudflare_zone_idfor managed DNSZone id of your domain.
TF_VAR_aws_regiondefault us-west-2.
TF_VAR_customer_nameresource name/tag slug (default sandbox).
TF_VAR_ssh_ingress_cidrlock SSH to your IP.
OLYMPUS_ROUTERmanual (default) or llm.
OPENAI_API_KEY / ANTHROPIC_API_KEYfor llmprovider key.
DEPLOY_AUTH_ALLOWED_DOMAINSfor loginwho may log in (or *).
OLYMPUS_SESSION_SECRET, OLYMPUS_GOOGLE_CLIENT_ID/_SECRET, OLYMPUS_SMTP_*for loginauth secrets, passed as a sealed k8s Secret.
DNS_SERVER_ADMIN_PASSWORD, NETDB_CLOUDFLARE_TOKENfor netdb-upNetDB/Technitium server creds.

Ansible group_vars (deploy knobs)

Defaults live in inf/ansible/group_vars/all.yml; override at deploy time.

VarDefaultWhat
k8s_version1.30kubeadm version.
dashboard_node_port30093NodePort the TLS front proxies.
olympus_repo_refmainOlympus git ref the image is built from.
image_tagllmdashboard image tag.
certbot_staging01 for Let's Encrypt staging while iterating.
netdb_mcp_hostemptyEIP of the NetDB server; empty = NetDB not wired.
demo_modefalsesee OLYMPUS_DEMO_MODE.
daily_cost_cap_usd5.0see OLYMPUS_DAILY_COST_CAP_USD.

Test / dev flags

Opt-in flags used only by the test suites (not for production): OLYMPUS_LIVE_E2E, OLYMPUS_LIVE_LLM, OLYMPUS_LIVE_KUBECTL, OLYMPUS_LIVE_TF, OLYMPUS_LIVE_ANSIBLE (+ _TASK), OLYMPUS_E2E_NAMESPACE. Each gates a suite of tests that hit real backends so CI stays hermetic by default.