Voice AI banking assistant prototype (LiveKit + Claude) with a structural identity-verification gate, tools-only account access, and PII redaction — serving Meridian Bank customers in South Africa & Botswana.
# Meridian Bank — AI Voice Agent (Proof of Concept)
A voice AI agent for retail-bank call centres, built on LiveKit Agents.
A customer speaks to the agent in the browser (production: over the phone via SIP); the agent
verifies their identity, answers balance/transaction questions, blocks lost cards, files
disputes, and hands off to a human with a full summary when it should. A two-panel demo
console shows the call **and** a live feed of every system call the agent makes — proof the
answers are grounded, not hallucinated. A **Supervisor view** shows the contact-centre
manager's side: containment rate, average handle time, escalations, and a per-call
PII-masked audit trail.
> **POC status:** the "core banking system" is a mock FastAPI service with fixture data.
> No real customer data, no real money movement, free-tier infrastructure only.
> Path to production covers what changes for a real deployment.
## Architecture
```mermaid
flowchart LR
subgraph Browser["Demo console (React + Vite)"]
UI["Call panel transcript + visualizer"]
ACT["Agent activity panel live tool feed"]
end
subgraph Cloud["LiveKit Cloud (free Build plan)"]
RTC["WebRTC room"]
INF["LiveKit Inference STT · LLM · TTS"]
end
subgraph Worker["Agent worker (Python, livekit-agents)"]
IA["IdentityAgent (no account tools)"]
BA["BankingAgent (account tools)"]
EVT["Tool-event emitter PII-masked"]
TR["Transcript recorder masked JSONL"]
end
subgraph Bank["Mock core banking (FastAPI)"]
API["/verify · /customers · /transactions /card/report-lost · /disputes /faq · /escalations · /calls"]
FIX["fixtures.py 5 demo customers"]
end
UI |audio| RTC
RTC Worker
Worker |STT/LLM/TTS| INF
IA -->|verify_identity succeeds = agent handoff| BA
BA -->|HTTP + retries| API
IA -->|HTTP + retries| API
API --- FIX
EVT -->|text stream 'tool-events'| ACT
Browser -->|POST /livekit/token| API
```
**The seam a bank's engineers care about:** the agent only ever touches banking data through
`backend/`'s HTTP API. Replace the fixture …