Runtime targets¶
Status: Current | Last reviewed: 2026-07-08
The same code runs in three places. The differences are operational, not architectural.
The three targets¶
| Vanguard (dev) | Sentinel (prod) | Cloud customer | |
|---|---|---|---|
| Where | Devcontainer on Codespaces or EC2 | GKE sentinel-dev cluster, trueserve namespace |
EKS / AKS / on-prem cluster, trueserve namespace |
| Who runs it | Each engineer | TrueServe ops | Customer ops |
| Custom services | Host processes under Overmind, reading source from apps/ |
Helm-deployed pods | Helm-deployed pods |
| Infra | Docker Compose containers | In-cluster or managed (Cloud SQL, Memorystore, GCS) | Helm conditions toggle managed equivalents (RDS, ElastiCache, S3) |
| Media | Docker Compose containers | hostNetwork pods on a dedicated media pool | Same |
| Helm chart | Not used | charts/trueserve-stack + values-cloud-gcp.yaml |
Same chart + values-aws.yaml / values-azure.yaml / etc. |
| Hot reload | Yes — edit a file, the process restarts | No — image rebuild + Helm upgrade | No |
| DNS | *.vanguard.dev.trueserve.deloitte.com → devcontainer nginx |
*.sentinel.trueserve.deloitte.com → GKE ingress |
Customer-controlled |
Why one chart for two prod targets¶
Sentinel and customer clusters use the same umbrella chart (charts/trueserve-stack). The values file is the only thing that differs. Per-cloud subcharts and conditions handle:
- Toggling in-cluster databases vs. external ones (
postgres.enabled: false+externalPostgres.host). - Toggling pgbouncer (AWS only, in front of RDS).
- Storage backend (MinIO vs. S3-compatible S3/GCS endpoint; Azure Blob requires a gateway or future native adapter).
- Network ingress (Cloud Load Balancer vs. ALB vs. Application Gateway).
- Media node selectors (
cloud.google.com/gke-nodepool: media-poolvs. taints on EKS).
See helm-chart-anatomy.md and cloud-managed-swap.md.
Why Vanguard does not use Helm¶
Vanguard runs on a single host. Kubernetes adds latency, complexity, and friction without buying anything: there is no scaling, no scheduling, no rolling deploys. Overmind + Compose gives faster boot, native hot reload, and direct container logs.
The cost is that Vanguard does not catch chart-shape regressions. That is what Kind is for; see scripts/kind-optional/README.md.
What is identical across all three¶
- The application code in
apps/. - The schema in
deploy/init-scripts/. - The proto definitions in
proto/. - The Pipecat pipeline graph for any given agent (it comes from
agent_versions.config, which is just JSON). - Service-to-service protocols (gRPC, HTTP, WebSocket).
What changes is wiring: hostnames, secrets, log destinations, scaling.
What runs where¶
A short reference of the moving parts:
| Component | Vanguard | Sentinel / customer |
|---|---|---|
| ai-orchestrator | Overmind process, :50051 |
Deployment, replicas via HPA |
| ai-manager | Overmind process (Next.js dev server), :3001 |
Deployment behind ingress |
| agent-host | Overmind MCP process, :8003 |
Deployment / StatefulSet depending on environment |
| async-agent | Overmind process | Deployment + RabbitMQ consumer |
| media-proxy | Overmind process | Deployment on media pool |
| asterisk | Compose container, hostNetwork via host | hostNetwork pod, dedicated node |
| kamailio | Compose container | hostNetwork pod, dedicated node |
| janus | Compose container | hostNetwork pod, dedicated node |
| rtpengine | Compose container | hostNetwork pod, kernel module unavailable → userspace |
| postgres | Compose container | Cloud SQL / RDS / Azure DB |
| redis | Compose container | Memorystore / ElastiCache / Azure Cache |
| minio | Compose container | Disabled — uses S3-compatible object storage |
| neo4j | Compose container | Neo4j Aura |
| rabbitmq | Compose container | Amazon MQ (AWS) / in-cluster (others) |