Environment Variables Reference

April 22, 2026 · View on GitHub

All environment variables are defined in .env (generated by make setup). See .env.example for the template.

AI Provider Configuration

EvoNexus uses the claude CLI by default (Anthropic native auth). To switch to any other backend, the active provider is read from config/providers.jsonnot from .env directly. The dashboard's Providers page and make setup both write to that file.

The env vars below are the ones EvoNexus injects into the spawned CLI process based on the active provider. You don't set them in .env yourself — they live inside config/providers.json under each provider's env_vars key, and the terminal-server / ADW runner merge them into the subprocess environment at spawn time. Only the variable names in this allowlist are accepted (both the Python runner and the JS bridge enforce the same list):

VariableUsed byDescription
CLAUDE_CODE_USE_OPENAIOpenRouter, OpenAI, Codex AuthFlag telling OpenClaude to dispatch to the OpenAI-compatible protocol
CLAUDE_CODE_USE_GEMINIGeminiFlag telling OpenClaude to dispatch to Gemini
CLAUDE_CODE_USE_BEDROCKAWS BedrockFlag telling OpenClaude to dispatch to Bedrock
CLAUDE_CODE_USE_VERTEXGoogle Vertex AIFlag telling OpenClaude to dispatch to Vertex
OPENAI_BASE_URLOpenRouterOverride the API base URL (e.g. https://openrouter.ai/api/v1)
OPENAI_API_KEYOpenRouter, OpenAI, Codex AuthAPI key for the OpenAI-compatible provider
OPENAI_MODELOpenRouter, OpenAIModel identifier (e.g. anthropic/claude-sonnet-4, gpt-4.1)
GEMINI_API_KEYGeminiGoogle AI API key
GEMINI_MODELGeminiModel identifier (e.g. gemini-2.5-pro)
AWS_REGIONBedrockAWS region (e.g. us-east-1)
AWS_BEARER_TOKEN_BEDROCKBedrockBedrock bearer token (not the standard IAM access key)
ANTHROPIC_VERTEX_PROJECT_IDVertex AIGCP project ID
CLOUD_ML_REGIONVertex AIGCP region (e.g. us-east5)

How to configure: use the Providers page in the dashboard — it reads/writes config/providers.json for you, masks secrets in API responses, and has a "Test connection" button that runs <provider-cli> --version with the merged env. Alternatively, edit config/providers.json directly (it starts as a copy of config/providers.example.json on first run).

Anthropic is the default — when the active provider is anthropic, no env vars are injected and the spawned CLI is the native claude binary with its own auth. You don't need any of the variables above for the default path.

See docs/dashboard/providers.md for the full provider setup flow.

Omie ERP

VariableRequiredDescription
OMIE_APP_KEYFor finance routinesOmie API app key
OMIE_APP_SECRETFor finance routinesOmie API app secret

How to get: Omie dashboard > Settings > Integrations > API. Create an app to get the key and secret.

Stripe

VariableRequiredDescription
STRIPE_SECRET_KEYFor finance routinesStripe secret API key (starts with sk_live_ or sk_test_)

How to get: dashboard.stripe.com > Developers > API Keys. Use the secret key (not the publishable key).

Todoist

VariableRequiredDescription
TODOIST_API_TOKENFor task managementTodoist personal API token

How to get: app.todoist.com > Settings > Integrations > Developer > API Token.

Fathom (Meetings)

VariableRequiredDescription
FATHOM_API_KEYFor meeting syncFathom API key

How to get: fathom.video > Settings > API. Generate an API key.

Discord

VariableRequiredDescription
DISCORD_BOT_TOKENFor community routinesDiscord bot token
DISCORD_GUILD_IDFor community routinesServer (guild) ID

How to get:

  • Bot token: discord.com/developers > New Application > Bot > Token
  • Guild ID: Enable Developer Mode in Discord settings, then right-click your server > Copy Server ID

Telegram

VariableRequiredDescription
TELEGRAM_BOT_TOKENFor notificationsBot token from @BotFather
TELEGRAM_CHAT_IDFor notificationsChat ID to send messages to

How to get:

  • Bot token: Message @BotFather on Telegram, use /newbot
  • Chat ID: Send /start to your bot, then call https://api.telegram.org/bot<TOKEN>/getUpdates to find the chat ID

YouTube OAuth

VariableRequiredDescription
YOUTUBE_OAUTH_CLIENT_IDFor YouTube analyticsGoogle OAuth client ID
YOUTUBE_OAUTH_CLIENT_SECRETFor YouTube analyticsGoogle OAuth client secret

How to get: Google Cloud Console > APIs & Services > Credentials > Create OAuth Client ID. Enable the YouTube Data API v3.

Meta / Instagram OAuth

VariableRequiredDescription
META_APP_IDFor Instagram analyticsFacebook/Meta app ID
META_APP_SECRETFor Instagram analyticsFacebook/Meta app secret

How to get: developers.facebook.com > My Apps > Create App > Settings > Basic. Enable the Instagram Graph API.

LinkedIn OAuth

VariableRequiredDescription
LINKEDIN_CLIENT_IDFor LinkedIn analyticsLinkedIn app client ID
LINKEDIN_CLIENT_SECRETFor LinkedIn analyticsLinkedIn app client secret

How to get: linkedin.com/developers > My Apps > Create App > Auth tab. Request the r_organization_social and r_liteprofile scopes.

Backup (S3-compatible)

VariableRequiredDescription
BACKUP_S3_BUCKETFor S3 backupsS3 bucket name (any S3-compatible: AWS, MinIO, R2)
BACKUP_S3_PREFIXNoFolder inside the bucket (default: evonexus-backups/)
AWS_ACCESS_KEY_IDFor S3 backupsAWS credentials (or S3-compatible)
AWS_SECRET_ACCESS_KEYFor S3 backupsAWS credentials (or S3-compatible)
AWS_ENDPOINT_URLFor non-AWSCustom endpoint for MinIO, Cloudflare R2, etc.

How to get: Create an S3 bucket (or use any S3-compatible service). Set the bucket name and credentials. Install boto3 with uv add boto3.

Note: Local backups (make backup) work without any env vars. S3 is optional for cloud replication.

Social Accounts

Social media accounts are managed via the dashboard Integrations page after OAuth setup. The tokens are stored with this pattern:

SOCIAL_{PLATFORM}_{N}_{FIELD}

Examples:

SOCIAL_YOUTUBE_1_LABEL=My Channel
SOCIAL_YOUTUBE_1_ACCESS_TOKEN=ya29...
SOCIAL_YOUTUBE_1_CHANNEL_ID=UC...

SOCIAL_INSTAGRAM_1_LABEL=Main Profile
SOCIAL_INSTAGRAM_1_ACCESS_TOKEN=EAA...
SOCIAL_INSTAGRAM_1_USER_ID=17841...

SOCIAL_LINKEDIN_1_LABEL=Company Page
SOCIAL_LINKEDIN_1_ACCESS_TOKEN=AQ...
SOCIAL_LINKEDIN_1_ORG_ID=12345

These are populated automatically when you connect accounts through the dashboard.

Required vs Optional

No variable is strictly required -- EvoNexus works with whatever integrations you enable. But specific routines need their corresponding keys:

RoutineRequired Variables
Morning briefingNone (uses Google MCP for calendar/email)
Financial pulseSTRIPE_SECRET_KEY, OMIE_APP_KEY, OMIE_APP_SECRET
Community pulseDISCORD_BOT_TOKEN, DISCORD_GUILD_ID
Social analyticsSocial account tokens (via dashboard)
Meeting syncFATHOM_API_KEY
Telegram notificationsTELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID
Task managementTODOIST_API_TOKEN
LicensingNo env vars (uses the licensing API directly)
Daily backup (local)None
Daily backup (S3)BACKUP_S3_BUCKET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

Google Calendar and Gmail are connected via MCP servers configured in Claude Code settings, not through .env variables.

Knowledge Base (pgvector)

VariableRequired ForDescription
KNOWLEDGE_MASTER_KEYKnowledge BaseFernet key used to encrypt connection credentials. Auto-generated on first setup / Docker first boot (v0.26.0+) — you don't set it manually. Back up your .env, losing this key loses access to all connections.
KNOWLEDGE_EMBEDDER_PROVIDEROptionallocal (default), openai, or gemini
KNOWLEDGE_DEFAULT_PARSEROptionalmarker (default) or llamaparse
OPENAI_API_KEYopenai embedderOpenAI key (starts with sk-...)
KNOWLEDGE_OPENAI_MODELOptionaltext-embedding-3-small (default) / -3-large / ada-002
GEMINI_API_KEYgemini embedderGoogle AI Studio key (starts with AIzaSy...)
KNOWLEDGE_GEMINI_MODELOptionalgemini-embedding-001 (default) or gemini-embedding-2-preview
KNOWLEDGE_GEMINI_DIMOptionalMRL output dim: 768 (default, aligns with local), 1536, or 3072
LLAMAPARSE_API_KEYllamaparse parserLlamaParse cloud API key

How to get:

Configure via the dashboard at /knowledge/settings — the provider is locked once the first connection is created (changing it after ingestion requires removing and recreating all connections).

AI Image Creator

VariableRequired ForDescription
AI_IMG_CREATOR_CF_ACCOUNT_IDGateway modeCloudflare account ID (from dashboard URL or Overview page)
AI_IMG_CREATOR_CF_GATEWAY_IDGateway modeAI Gateway name (set when creating the gateway)
AI_IMG_CREATOR_CF_TOKENGateway modeGateway auth token (from gateway Settings > Authentication)
AI_IMG_CREATOR_OPENROUTER_KEYDirect OpenRouterOpenRouter API key (starts with sk-or-...)
AI_IMG_CREATOR_GEMINI_KEYDirect GoogleGoogle AI Studio API key (starts with AI...)

Gateway mode activates when all three AI_IMG_CREATOR_CF_* vars are set. Falls back to direct mode if gateway fails. You only need one provider configured (either Cloudflare or at least one direct key).

How to get: