NOTES.txt that helm install langwatch ... prints, extra depth on
each step plus the kubectl probes self-hosters typically run to
verify the install.
If you haven’t installed yet, start with helm and come back
here once the chart deploys cleanly.
1. Reach the UI as the bootstrap admin
ingress.enabled=true and your DNS is pointing at the
controller, replace the port-forward with the public URL.
2. Add at least one Model Provider credential
Personal keys reference aRoutingPolicy whose modelProviderIds[]
points at one or more ModelProvider rows. Without at least one
provider configured, no key, personal or service, can route traffic.
In the UI: Settings → Model Providers → Add provider.
Behind the scenes the chart materialises the encryption pepper
needed to seal the credential at rest:
3. Publish a default RoutingPolicy
In the UI: Settings → Routing Policies → New policy, scope =organization. Mark it default. Pick the providers from step 2 in
your preferred fallback order. Optionally add a model allowlist —
e.g. claude-3-5-* and gpt-4o*, to keep personal keys out of the
expensive frontier models.
When a member runs langwatch login --device, their personal VK
gets bound to this policy automatically. They never see provider
plumbing.
If you skip this step, the CLI surfaces a clear error
(policy not configured) instead of silently routing to nothing.
4. Verify the AI Gateway is healthy
auth_upstream_unavailable and returns 503 for every VK call. The
fix is almost always gateway.controlPlane.baseUrl, defaults to
http://langwatch-app:5560 on the assumption your release name is
langwatch. Adjust on a different release name or split-domain.
5. Expose the gateway and set its public URL
The gateway needs its own externally-reachable endpoint, separate from the app. Your LLM clients (Claude Code, Codex, Cursor) hit the gateway; the browser hits the app. So you provision two ingresses / load balancers: one forapp.your-corp.com and one for
gateway.your-corp.com.
Then tell the control plane where the gateway lives, so it can hand
that URL to CLI users at login. With the Helm chart, set the gateway’s
own host and the chart derives the rest:
LW_GATEWAY_PUBLIC_URL on the langwatch-app
container. Without it, the control plane returns
http://localhost:5563 to CLI users and every langwatch claude /
langwatch codex call from a developer laptop fails with
Cannot reach AI Gateway ... fetch failed. Do NOT reuse
LW_GATEWAY_BASE_URL for this — that variable is the internal
control-plane URL the Go gateway dials back on, a different direction.
Verify it landed:
What to read next
- Helm chart: chart structure, secrets, upgrade procedure.
- Configuration: env vars and tuning knobs.
- Health checks: readiness, liveness wiring.
- Scaling: HPA, replicas, custom Prometheus metrics.