# Database Configuration # PostgreSQL is recommended (required for OIDC features) DATABASE_URL=postgres://raggr:changeme@postgres:5432/raggr # PostgreSQL credentials (if using docker-compose postgres service) POSTGRES_USER=raggr POSTGRES_PASSWORD=changeme POSTGRES_DB=raggr # JWT Configuration JWT_SECRET_KEY=your-secret-key-here # Metrics Configuration # Bearer token for the /metrics endpoint (Prometheus scrape + app token gate). # Generate with: openssl rand -hex 32 # Leave empty to keep /metrics returning 403 (fail-closed). METRICS_TOKEN= # Paperless Configuration PAPERLESS_TOKEN=your-paperless-token BASE_URL=192.168.1.5:8000 # llama-server Configuration (OpenAI-compatible API) # If set, uses llama-server as the primary LLM backend with OpenAI as fallback LLAMA_SERVER_URL=http://192.168.1.213:8080/v1 LLAMA_MODEL_NAME=llama-3.1-8b-instruct TTFT_TIMEOUT_SECONDS=30 # Embedding Server Configuration # If set, uses a custom OpenAI-compatible embedding server (e.g. llama-server) # Falls back to OpenAI embeddings if not set EMBEDDING_SERVER_URL=http://192.168.1.7:8086/v1 EMBEDDING_MODEL_NAME=all-minilm # OpenAI Configuration OPENAI_API_KEY=your-openai-api-key # Tavily Configuration (for web search) TAVILY_API_KEY=your-tavily-api-key # Immich Configuration IMMICH_URL=http://192.168.1.5:2283 IMMICH_API_KEY=your-immich-api-key SEARCH_QUERY=simba cat DOWNLOAD_DIR=./simba_photos # OIDC Configuration (Authelia) OIDC_ISSUER=https://auth.example.com OIDC_CLIENT_ID=simbarag OIDC_CLIENT_SECRET=your-client-secret-here OIDC_REDIRECT_URI=http://localhost:8080/ OIDC_USE_DISCOVERY=true # Optional: Manual OIDC endpoints (if discovery is disabled) # OIDC_AUTHORIZATION_ENDPOINT=https://auth.example.com/api/oidc/authorization # OIDC_TOKEN_ENDPOINT=https://auth.example.com/api/oidc/token # OIDC_USERINFO_ENDPOINT=https://auth.example.com/api/oidc/userinfo # OIDC_JWKS_URI=https://auth.example.com/api/oidc/jwks # YNAB Configuration # Get your Personal Access Token from https://app.ynab.com/settings/developer YNAB_ACCESS_TOKEN=your-ynab-personal-access-token # Optional: Specify a budget ID, or leave empty to use the default/first budget YNAB_BUDGET_ID= # Seconds between background YNAB delta syncs (agent tools also sync on demand) YNAB_SYNC_INTERVAL=900 # Mealie Configuration # Base URL for your Mealie instance (e.g., http://192.168.1.5:9000 or https://mealie.example.com) MEALIE_BASE_URL=http://192.168.1.5:9000 # Get your API token from Mealie's user settings page MEALIE_API_TOKEN=your-mealie-api-token # Email Integration # Email Encryption Key (32-byte URL-safe base64) # Generate with: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" FERNET_KEY=your-fernet-key-here # Twilio Configuration (WhatsApp) TWILIO_ACCOUNT_SID=your-twilio-account-sid TWILIO_AUTH_TOKEN=your-twilio-auth-token TWILIO_WHATSAPP_NUMBER=whatsapp:+14155238886 # Comma-separated list of WhatsApp numbers allowed to use the service (e.g., whatsapp:+1234567890) # Use * to allow any number ALLOWED_WHATSAPP_NUMBERS= # Set to false to disable Twilio signature validation in development TWILIO_SIGNATURE_VALIDATION=true # If behind a reverse proxy, set this to your public webhook URL so signature validation works # TWILIO_WEBHOOK_URL=https://your-domain.com/api/whatsapp/webhook # Rate limiting: max messages per window (default: 10 messages per 60 seconds) # WHATSAPP_RATE_LIMIT_MAX=10 # WHATSAPP_RATE_LIMIT_WINDOW=60 # Mailgun Configuration (Email channel) MAILGUN_API_KEY= MAILGUN_DOMAIN= MAILGUN_WEBHOOK_SIGNING_KEY= EMAIL_HMAC_SECRET= # Rate limiting: max emails per window (default: 5 per 300 seconds) # EMAIL_RATE_LIMIT_MAX=5 # EMAIL_RATE_LIMIT_WINDOW=300 # Set to false to disable Mailgun signature validation in development MAILGUN_SIGNATURE_VALIDATION=true # SendBlue Configuration (iMessage) SENDBLUE_API_KEY=your-sendblue-api-key SENDBLUE_API_SECRET=your-sendblue-api-secret SENDBLUE_FROM_NUMBER=+1XXXXXXXXXX SENDBLUE_WEBHOOK_SECRET=your-sendblue-webhook-secret # Set to false to disable SendBlue signature validation in development SENDBLUE_SIGNATURE_VALIDATION=true # Comma-separated list of iMessage numbers allowed to use the service (E.164 format) # Use * to allow any number ALLOWED_IMESSAGE_NUMBERS= # Rate limiting: max messages per window (default: 10 messages per 60 seconds) # IMESSAGE_RATE_LIMIT_MAX=10 # IMESSAGE_RATE_LIMIT_WINDOW=60 # Google Calendar + Gmail Configuration (Python SDK) # Run scripts/google_auth.py to generate token.json from your OAuth2 credentials: # python scripts/google_auth.py --credentials credentials.json --token token.json # Then mount token.json into the container (see docker-compose.yml). # If GOOGLE_TOKEN_FILE points to a valid token, both Calendar and Gmail are enabled. GOOGLE_TOKEN_FILE=/app/config/google-token.json # Cronicle Integration # Shared secret for Cronicle to authenticate cron job trigger requests. # Generate with: openssl rand -hex 32 CRON_SECRET= # Cronicle server URL and API key (from Cronicle Admin → API Keys) # Used to auto-register scheduled jobs on startup. CRONICLE_URL=http://cronicle:3012 CRONICLE_API_KEY= # SimbaKit / PetKit Configuration # PetKit account credentials (used by SimbaKit to poll device data) PETKIT_USERNAME=your-petkit-email PETKIT_PASSWORD=your-petkit-password PETKIT_REGION=US PETKIT_TIMEZONE=America/New_York # Internal URL for SimbaKit service (Docker network) SIMBAKIT_URL=http://simbakit:8585 # Homebox inventory (admin-only agent tools via homebox-mcp, needs Homebox >= 0.26) # API key from Homebox Profile -> API Keys (starts with hb_). Leave empty to disable. HOMEBOX_URL=https://homebox.example.com HOMEBOX_TOKEN= # BookStack wiki (admin-only agent tools via bookstack-mcp: read, create, update; no deletes) # API token from BookStack Profile -> API Tokens (user needs the "Access System API" permission). # Leave empty to disable. BOOKSTACK_BASE_URL=https://bookstack.example.com BOOKSTACK_TOKEN_ID= BOOKSTACK_TOKEN_SECRET= # Obsidian Configuration (headless sync) # Obsidian account credentials (used for `ob login` on container startup) OBSIDIAN_EMAIL=your-obsidian-email OBSIDIAN_PASSWORD=your-obsidian-password # Vault ID to sync (found in Obsidian sync settings) OBSIDIAN_VAULT_ID=your-vault-id # End-to-end encryption password (if vault uses E2E encryption) OBSIDIAN_E2E_PASSWORD= # Device name shown in Obsidian sync activity OBSIDIAN_DEVICE_NAME=simbarag # Set to true to run continuous sync in the background OBSIDIAN_CONTINUOUS_SYNC=false # Local path to Obsidian vault (where files are synced) OBSIDIAN_VAULT_PATH=/app/data/obsidian # LangGraph checkpoint store (SQLite). Must be on a persistent volume. # Both blue and green containers share this volume via docker-compose. CHECKPOINT_DB_PATH=/app/checkpoints/checkpoints.db # Beli restaurant recommendations # Beli account credentials for each profile are stored encrypted in the database. # No additional env vars needed — auth is done via the Beli API at login time.