# ── LLM provider API keys ─────────────────────────────────────────── # CANONICAL STORE = the encrypted vault (~/.waggle/vault.json), set via the UI # (Settings → API Keys). The server hydrates process.env FROM the vault at boot, # so you normally do NOT set provider keys here. # # Full provider set the app can use (all vault-managed, keyed by provider id): # anthropic · openai · google (gemini) · xai · deepseek · openrouter · mistral # · moonshot (kimi) · alibaba (dashscope/qwen) · minimax · zhipu (glm) # · perplexity · genspark + tavily (web search) # # Only the following are ALSO read directly from env (for CI / headless runs # where the vault UI isn't available): # ANTHROPIC_API_KEY= # OPENAI_API_KEY= # VOYAGE_API_KEY= # embeddings only (EMBEDDING_PROVIDER=voyage) # LiteLLM proxy master key LITELLM_MASTER_KEY=sk-waggle-dev # LiteLLM proxy URL (for multi-model routing) LITELLM_BASE_URL=http://localhost:4000 # ── Embedding Provider (M2-1) ─────────────────────────────────────── # Default: auto (tries InProcess → Ollama → API → mock) # Options: auto, inprocess, ollama, voyage, openai, mock # EMBEDDING_PROVIDER=auto # In-process (default — zero config, works offline) # Model downloads ~23MB on first launch, cached in ~/.waggle/models/ # EMBEDDING_MODEL=Xenova/all-MiniLM-L6-v2 # Ollama (power user — needs Ollama installed: https://ollama.com) # OLLAMA_HOST=http://localhost:11434 # OLLAMA_EMBED_MODEL=nomic-embed-text # API Providers (set keys in the app: Vault → Secrets → Embedding Providers) # Or set here for CI/headless only: # VOYAGE_API_KEY= # M3 Server Configuration DATABASE_URL=postgres://waggle:waggle_dev@localhost:5434/waggle REDIS_URL=redis://localhost:6381 CLERK_SECRET_KEY=sk_test_... CLERK_PUBLISHABLE_KEY=pk_test_... PORT=3100 CORS_ORIGIN=http://localhost:8080 # ── Stripe (M2-2 Billing) ────────────────────────────────────────── # Required for paid tier checkout and subscription management. # Get keys from https://dashboard.stripe.com/apikeys # STRIPE_SECRET_KEY= # STRIPE_WEBHOOK_SECRET= # Price IDs. Since the Solo-vs-Team collapse (2026-07-05) TEAMS is the ONLY active # checkout price. The PRO vars are legacy — still recognized on inbound webhooks # (a legacy PRO subscriber resolves to Solo/FREE, never a removed tier), but no new # PRO checkout is offered. # STRIPE_PRICE_TEAMS_MONTHLY= # active — the only new-checkout price # STRIPE_PRICE_TEAMS_ANNUAL= # active # STRIPE_PRICE_PRO_MONTHLY= # legacy — webhook-recognized, resolves to Solo/FREE # STRIPE_PRICE_PRO_ANNUAL= # legacy — webhook-recognized, resolves to Solo/FREE # Legacy single-price vars (still resolved as a fallback): # STRIPE_PRICE_BASIC= # legacy — webhook-recognized, resolves to Solo/FREE # STRIPE_PRICE_PRO= # legacy — webhook-recognized, resolves to Solo/FREE # STRIPE_PRICE_TEAMS= # legacy single-var fallback for TEAMS # ── MinIO (Team File Storage) ────────────────────────────────────── # S3-compatible object storage for shared team workspace files. # docker compose up starts MinIO + auto-creates waggle-files bucket. MINIO_ENDPOINT=localhost:9000 MINIO_BUCKET=waggle-files MINIO_ACCESS_KEY=waggle MINIO_SECRET_KEY=waggle_s3_dev # ── Teams Server (M3 PostgreSQL) ────────────────────────────────── # When DATABASE_URL is set, the Teams server starts alongside the local server. # TEAMS_SERVER_PORT=3101