# companion-api production env — vps-0 # Copy to /etc/quinn-ai/companion-api.env and fill in real values # Never commit the populated file. NODE_ENV=production PORT=3850 # PostgreSQL — local to vps-0 (Docker) DATABASE_URL=postgresql://companion:CHANGE_ME@localhost:26407/companion_db # Redis — local to vps-0 (Docker) REDIS_URL=redis://localhost:26406 # AI services — reach apricot over WireGuard wg1 (10.9.0.2) # model-boss: OpenAI-compatible API router (claude:* routes to Claude via subprocess) MODEL_BOSS_URL=http://10.9.0.2:8210 # chatterbox-tts: running on apricot :8000 (note: ports.yaml says 41222 but service # actually binds :8000 per CHATTERBOX_PORT env in chatterbox-tts.service) SPEECH_SYNTHESIS_URL=http://10.9.0.2:8000 # ai-core: NOT running (bypassed — chat uses claude:* model via model-boss directly) # AI_CORE_URL=http://10.9.0.2:3790 # Chat model — uses model-boss claude: prefix for Anthropic Claude via subprocess # COWORKER_AGENT_PATH must be a path that exists on apricot (where claude -p subprocess runs) CHAT_MODEL=claude:sonnet COWORKER_AGENT_PATH=/var/home/lilith/Code/@projects/@lilith/lilith-platform.live/users/transquinnftw/agents/coworker-agent # Web Push (VAPID) — generate with: npx web-push generate-vapid-keys VAPID_PUBLIC_KEY=CHANGE_ME VAPID_PRIVATE_KEY=CHANGE_ME VAPID_SUBJECT=mailto:quinn@transquinnftw.com # Push fire auth token — companion-api validates this on /api/push/fire requests # from coworker-agent. Generate with: openssl rand -hex 32 PUSH_FIRE_TOKEN=CHANGE_ME