helm install deploys it.
What it needs
The chart handles the deployment: the agent pod, the secret the app and the agent use to authenticate to each other, and the in-cluster addresses they use to reach the LangWatch AI Gateway and to send answers back. The one thing Langy needs from you is a model to talk to. Configure a model provider for the project, then open the assistant from any page.Langy is single-tenant by nature here: every person with access to your
LangWatch install can use it, and it runs with the permissions of whoever is
asking. To roll it out gradually instead, see Staged rollout.
How Langy is isolated
Langy’s workers run shell written by a language model, and each one holds the credentials of the person who asked. Two controls bound that, both on by default on every cluster:- Per-worker identity. Each conversation’s worker runs under its own UID with its own credentials and its own opencode password. Workers cannot read each other’s keys or reach each other’s control ports.
- Network. A default-deny NetworkPolicy. Workers reach the control plane and the gateway, and nothing else. Egress to the internet is off until you turn it on, and private ranges plus the cloud metadata endpoint stay blocked even then.
Hardening: a sandboxed runtime
Pin the agent pod to a sandboxed RuntimeClass:acceptUnsandboxedRuntime: false alongside it means the chart refuses to
render if the class is ever blanked, so a cluster that has hardened cannot
silently lose its sandbox.
Your cluster has to define that class first, and if it does not, the pod is
rejected at admission: no pod is created at all, kubectl get pods -l app.kubernetes.io/name=langyagent lists nothing, and the reason sits on the
Deployment.
EKS: install gVisor on a node group
AWS offers no managed gVisor, so the RuntimeClass takes one platform step. This is the setup LangWatch runs its own hosted Langy on.-
A dedicated, tainted node group for the agent pod. Installing
runscreconfigures and restarts containerd on the node, so isolating Langy onto its own nodes keeps that restart, and gVisor’s syscall-interception overhead, away from the rest of the cluster. Onem8g.xlargehandles roughly 5 to 15 concurrent sessions. Label and taint it (for exampleworkload=langy-gvisor), and set the matchingnodeSelectorandtolerationsonlangyagent: -
A
gvisor-installerDaemonSet, nodeSelector-scoped to that node group only, that downloads a pinnedrunscandcontainerd-shim-runsc-v1release, verifies the published SHA-512 digests, registers the runtime in the containerd config, and restarts containerd. Pin the release; do not tracklatestfor the binary that sandboxes a root, LLM-driven workload.gvisor-installer DaemonSet
BumpGVISOR_RELEASEto a release you have reviewed; the digest check fails the install if a download does not match what upstream published for it. The containerd plugin path differs between containerd 1.x and 2.x, so the script detects it rather than assuming: writing the wrong one fails silently, leaving containerd healthy and the runtime unregistered. The AL2023 image matches the EKS-optimized AMI; swap it and thednfline for a different node distribution. -
The RuntimeClass:
Letting Langy reach the internet
Langy’s tools shell out togit, gh, and package managers. Egress to the
internet is off by default, because these workers hold the requesting user’s API
key and GitHub token:
Watching Langy work
Langy’s own turns can be traced into one of your own LangWatch projects, so you can see the model calls it made, the tools it ran, and what each one cost. Create an API key in the project you want to mirror into, then:langyagent.mirror.traceEndpoint only to mirror into a different LangWatch
deployment.
Staged rollout
To open Langy to a few projects before everyone, keep the rollout flag authoritative:release_langy_enabled, or add targeting
rules for specific projects and organizations, from /ops/feature-flags in your
install.
Bringing your own secrets
Withautogen.enabled: false you supply the app Secret yourself. Add a
LANGY_INTERNAL_SECRET key to it, which the app, the workers, and the agent all
read to authenticate to each other:
CreateContainerConfigError.