Voice Concierge pod: architecture and releases
Where the client-specific code lives, which shared headless services do the heavy lifting, and how a new agent flow version reaches callers.
Where the code goes
Custom, per clientHeadless, sharedOutside the platform
Why this is easier to build, more custom and more responsive
| Area | How it works for a client pod |
|---|---|
| Faster builds | The next pod reuses all seven services. Only the orange box is new work, built from a tested template. |
| Custom per client | Each client gets its own flows, prompts, tools, metrics and portal screens, in its own repo. Nothing is forced into a generic builder. |
| Agent flow | JSON in git: reviewed, compared step by step, rebuilt from the last shipped version |
| Safe releases | EvalOS gate on 140 golden calls and 204 route replays; a worse version cannot ship |
| Responsive changes | Knowledge, promotions, opening messages, voices and routing change from the portal and are live on the next call |
| Knowledge | RagOS: capture dates, a promotions record that always wins, shared across pods |
| Tools and secrets | toolOS: timeouts, failure results, approvals; keys never enter the pod or its exports |
| Models | pod-gateway: per-pod budget, card and ID numbers blocked before any model call, models swapped without code changes |
| Tracing | Langfuse: one trace per call across speech, model, knowledge and tools |
| Voice | pod-sdk voice runtime built for turn latency: filler lines, warm tool connections, silence rule |
| Client portal | Pod Hub screens built for this pod: history, voices, promotions, impact |
Where it runs, where data lives, how long it is kept
| Option | What runs where | Best for |
|---|---|---|
| Shared (default) | The client's pod runs in its own container; the seven services are shared, with every record scoped to that client | Most clients: fastest to start, lowest cost |
| Single-tenant | The pod and a dedicated copy of every service, used by this client only, run and patched by SectorFlow | Clients who need no shared infrastructure |
| Client-hosted | The same containers deployed in the client's own cloud account; SectorFlow ships releases through the same gate | Regulated clients, or data that cannot leave their account |
| Data | Residency | Default retention | Client control |
|---|---|---|---|
| Call records and transcripts | Region chosen per client: Canada, US or EU | 13 months | 30 days to 7 years, per agent; card and ID numbers never stored |
| Recordings | Same region | 90 days | Off, or up to 7 years |
| Traces | Same region | 30 days | Shorter or longer per client |
| Knowledge and promotions | Same region | Until removed; every version kept | Delete any topic or version |
| Backups | Same region | 14 days | Fixed |
| A member's data | – | – | Deleted on request across records, recordings and traces |
How an agent flow version is updated
Release steps in detail
| Step | Who | What happens |
|---|---|---|
| 1 Change | SectorFlow engineer | Branch from the live version. Edit flows/work-hours.json and its After-Hours pair, prompts or tools.yaml. Write release notes. |
| 2 Build checks | CI | Every edge and tool exists, every step is reachable, every variable is set, no logic in spoken text, a failure edge on every tool step. Diff by node, edge and tool for the reviewer. |
| 3 Quality gate | CI calls EvalOS | Simulated callers replay 140 golden calls; 204 logged production routes must still exist. All 50 must-pass cases pass, at least 90% overall, no regressions against live. |
| 4 Client review | Client in Pod Hub | The candidate appears under Releases with notes, scores and failed cases. Make live is disabled for client users. |
| 5 Make live | SectorFlow in pod-control | The image and flow hash are registered as an immutable version. The live pointer for the number moves to the new pair. Traces and alerts are watched on the first calls. |
| Rollback | SectorFlow | Move the pointer back. The previous pair is still deployed, so it takes effect on the next call. |