Environment Variables
Every auxilia deployment is configured through environment variables. This page is the complete reference — start here to understand what to set, then follow the Cloud Run or VM / Docker host guide for the deployment-specific wiring.
A full example lives in .env.example at the repo root.
Required variables
These must be set for auxilia to start. Missing any of them will fail backend boot.
| Variable | Notes |
|---|---|
DATABASE_URL | postgresql+psycopg://user:pass@host:5432/dbname connection string |
REDIS_HOST / REDIS_PORT | Reachable from the backend (OAuth tokens are cached here) |
JWT_SECRET_KEY | 32+ random characters — used to sign session cookies |
SALT | Salt for AES-GCM encryption of stored MCP API keys |
FRONTEND_URL | Public URL of the web app (used as OAuth redirect base) |
BACKEND_URL | Internal URL the Next.js proxy uses to reach the backend (web only) |
| One LLM key | See LLM providers — at least one is required |
In production, also set:
| Variable | Value | Why |
|---|---|---|
COOKIE_SECURE | true | Forces session cookies to be HTTPS-only (recommended) |
LLM providers
At least one provider key is required. Configuring a provider makes its models eligible for the picker — configure multiple to give agent authors a choice. Which models actually appear (and which one is preselected) is managed by workspace admins under Settings → Models; see Available models.
| Provider | Environment variable | Models |
|---|---|---|
| Anthropic | ANTHROPIC_API_KEY | claude-haiku-4-5, claude-sonnet-4-6, claude-sonnet-5 |
| OpenAI | OPENAI_API_KEY | gpt-4o-mini |
GOOGLE_API_KEY | gemini-3-flash-preview, gemini-3-pro-preview | |
| DeepSeek | DEEPSEEK_API_KEY | deepseek-v4-flash, deepseek-v4-pro |
| Xiaomi | XIAOMI_API_KEY | mimo-v2.5-pro, mimo-v2.5 |
| OpenRouter | OPENROUTER_API_KEY | glm-5.2-max, glm-5.2-high |
| Meta | METAAI_API_KEY | muse-spark-1.2 |
Anthropic models run with thinking enabled by default; Google models run with include_thoughts=True. Defaults live in app/model_providers/catalog.py.
Google via Application Default Credentials
GOOGLE_API_KEY is not the only way to enable Gemini. If it is unset but Application Default Credentials are available — a GCP service account on Cloud Run/GKE/Compute, gcloud auth application-default login, or GOOGLE_APPLICATION_CREDENTIALS — the backend serves Gemini models through Vertex AI using those credentials instead of the Gemini Developer API. The identity needs permission to call Vertex AI (e.g. the Vertex AI User role). When GOOGLE_API_KEY is set, it always wins.
Authentication
| Variable | Notes |
|---|---|
GOOGLE_CLIENT_ID | OAuth client ID for Google sign-in |
GOOGLE_CLIENT_SECRET | OAuth client secret |
GOOGLE_REDIRECT_URI | e.g. https://your-host/auth/google/callback |
AUTH_GOOGLE_EXCLUSIVE | true disables email/password signup — Google OAuth only |
Leaving these unset keeps email/password signup as the only path. See User Management for the full flow.
Sandbox (optional)
Agent code execution supports two providers, selected with:
| Variable | Notes |
|---|---|
SANDBOX_PROVIDER | opensandbox (default) or cloudrun |
OpenSandbox
If you’re running OpenSandbox :
| Variable | Notes |
|---|---|
OPEN_SANDBOX_DOMAIN | e.g. localhost:8083 or a private DNS name |
OPEN_SANDBOX_API_KEY | If your OpenSandbox controller requires one |
OPEN_SANDBOX_USE_SERVER_PROXY | true routes file ops through the OpenSandbox server (recommended) |
OPEN_SANDBOX_DEFAULT_IMAGE | Base image, e.g. python:3.12-slim |
OPEN_SANDBOX_DEFAULT_PACKAGES | Pre-installed packages, e.g. ["pandas","matplotlib"] |
OPEN_SANDBOX_TIMEOUT | Per-command timeout (seconds). Default 1800 |
OPEN_SANDBOX_VOLUME_MOUNTS | Host mounts, comma-separated host:sandbox[:ro] |
If OPEN_SANDBOX_DOMAIN is missing, the sandbox toggle on agents is silently disabled. Details: Sandbox.
Cloud Run sandboxes
If SANDBOX_PROVIDER=cloudrun, the backend drives Google Cloud Run sandboxes through the dedicated sandbox gateway service:
| Variable | Notes |
|---|---|
CLOUD_RUN_SANDBOX_GATEWAY_URL | URL of the deployed sandbox-gateway Cloud Run service |
CLOUD_RUN_SANDBOX_GATEWAY_SECRET | Shared secret, sent as a bearer token — the gateway fails closed without it |
CLOUD_RUN_SANDBOX_GCS_BUCKET | GCS bucket for turn-end snapshots (optional, enables cross-instance restore) |
CLOUD_RUN_SANDBOX_SNAPSHOT_PREFIX | Object prefix inside the bucket. Default sandbox-snapshots/ |
CLOUD_RUN_SANDBOX_ALLOW_EGRESS | true requests outbound network per sandbox (gateway must also allow egress) |
CLOUD_RUN_SANDBOX_DEFAULT_PACKAGES | Extra packages pip-installed into each fresh sandbox |
CLOUD_RUN_SANDBOX_TIMEOUT | Per-command timeout (seconds). Default 1800 |
Both CLOUD_RUN_SANDBOX_GATEWAY_URL and CLOUD_RUN_SANDBOX_GATEWAY_SECRET must be set for the sandbox toggle to be active. Details: Cloud Run Sandboxes.
Observability (optional)
| Variable | Notes |
|---|---|
LANGFUSE_PUBLIC_KEY | Langfuse project public key |
LANGFUSE_SECRET_KEY | Langfuse project secret key |
LANGFUSE_BASE_URL | https://cloud.langfuse.com or your self-hosted URL |
LANGFUSE_TIMEOUT | API request timeout in seconds (positive integer; default 15) |
The public key, secret key, and base URL are required to enable Langfuse; missing any of them disables the integration silently. The timeout is optional. Details: Observability (Langfuse).
Slack (optional)
| Variable | Notes |
|---|---|
SLACK_SIGNING_SECRET | From Basic Information in your Slack app config |
SLACK_BOT_TOKEN | xoxb-… Bot User OAuth Token |
Missing values make the Slack endpoints reject all incoming requests. Details: Slack Integration.
Tuning & debugging
| Variable | Default | Notes |
|---|---|---|
LOG_LEVEL | INFO | Set to DEBUG for verbose logs (MCP traces, etc.) |
RECURSION_LIMIT | 100 | Max LangGraph steps per agent invocation |
INVOKE_PROFILING | false | Emit per-step timing on each agent invocation |