# Copy to .env.local and fill in values — never commit .env.local # API SESSION_SECRET=change-me-to-a-random-32-char-string PORT=3078 NODE_ENV=development DATABASE_PATH=./data/oo.db # API_BASE_URL = public origin only, no path suffix (used to build OAuth redirect URIs) API_BASE_URL=http://localhost:3078 WEB_BASE_URL=http://localhost:3000 ML_SERVING_URL=http://localhost:8000 # AI stack — shared Agap services (ollama + litellm + langfuse). Not run from oO. # Prod: https://llm.alogins.net | Dev: http://host.docker.internal:4000 from containers, # http://localhost:4000 from host. Ollama: http://host.docker.internal:11434 / :11434. LITELLM_URL=https://llm.alogins.net LITELLM_MASTER_KEY=sk-oo-dev OLLAMA_URL=http://host.docker.internal:11434 # Google OAuth — https://console.cloud.google.com/ GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= # VAPID (Web Push) — generate: node -e "const wp=require('web-push');console.log(JSON.stringify(wp.generateVAPIDKeys()))" VAPID_PUBLIC_KEY= VAPID_PRIVATE_KEY= VAPID_SUBJECT=mailto:you@example.com # Todoist OAuth — https://developer.todoist.com/appconsole.html TODOIST_CLIENT_ID= TODOIST_CLIENT_SECRET= # Event bus — leave NATS_URL empty for in-process bus only (no JetStream bridge). # Set to nats://nats:4222 (compose service name) or nats://localhost:4222 (host) # to mirror every publish to durable JetStream streams (signals.>, feedback.>). # Start the broker with: docker compose --profile events up nats NATS_URL= # How often the background scheduler refreshes Todoist tasks per active user (ms). TODOIST_SYNC_INTERVAL_MS=900000 # Tip prompt selection — empty = use ml/serving default (v1). # Pin a single variant: "v2-mentor" # Rotate uniformly across variants: "v1,v2-mentor,v3-few-shot" # Buckets show up in the admin reward-analytics dashboard (#92). TIP_PROMPT_VERSION= # Default version on the Python side when the API doesn't specify one. DEFAULT_PROMPT_VERSION=v1