Build and run with Docker

The repo ships a Dockerfile and helper scripts:
yarn docker:run exists as a shortcut, but it does not pass an env file. Use the explicit docker run above so the container receives your configuration.

Required configuration

Speech and telephony are optional and only needed for voice agents: LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET, LIVEKIT_SIP_HOST, VOICE_WEBHOOK_URL, plus an STT provider key such as DEEPGRAM_API_KEY or ASSEMBLYAI_API_KEY. Integration credentials follow a consistent naming pattern — {SERVICE}_CLIENT_ID, {SERVICE}_CLIENT_SECRET, {SERVICE}_REDIRECT_URI. See each integration guide for the exact names.

Database migration

Model schemas are applied with:
This runs a build first. Run it once on a fresh database, and again after upgrading to a release that changes models.

Running behind a load balancer

GoConva runs multi-instance in production behind a load balancer. Socket.IO emits do not cross instances — a real-time event emitted on instance A is not delivered to a client connected to instance B. If you are running more than one replica and relying on live updates, put a shared adapter (such as Redis) in front of Socket.IO, or pin sessions to an instance.
CORS preflight requests bypass the LoopBack sequence entirely — only the cors.origin callback runs. If you are debugging a preflight that fails, instrument that callback rather than the sequence.

The voice agent worker

Voice agents run as a separate Python process:
This invokes uv run python agent_workflow.py dev. It needs the LiveKit variables above and an STT provider key. Deploy it alongside the API, not inside the same container.

Health checks

Point your orchestrator’s liveness probe at: