Layer 4 — Agentic AI: AI Assistant
Six specialised agents and a conversational AI Assistant — all operating within hard compliance boundaries.
Table of Contents
- 7.1 Agent Architecture Overview
- 7.2 AI Assistant
- 7.3 Document Review Agent
- 7.4 AML/BSA Pre-Fill Agent
- 7.5 Model Context Protocol (MCP) Integration Layer
LLM provider locked; orchestration framework still deferred. The service language (Python), runtime (FastAPI on EKS), agent capability design, and LLM provider — Anthropic Claude — are fixed. What remains deferred is the orchestration framework, now narrowed to Claude-compatible options: Anthropic’s SDK with native tool use (and the Model Context Protocol — see §7.5), optionally wrapped by LangGraph or LangChain. The agent structure and tool catalogue below are framework-agnostic.
7.1 Agent Architecture Overview
The agentic layer runs as a Python service (agent-service) on EKS. It exposes:
- A REST API consumed by the
workflow-servicefor automated pre-fill triggers - A WebSocket endpoint consumed by the React workspace for real-time AI Assistant conversation
Agent Service (Python, FastAPI)
├── AI Assistant Conversational Agent — operator-facing AI assistant
├── DocumentReviewAgent — automated document completeness check
├── CompliancePreFillAgent — questionnaire pre-fill from documents
├── CustomerLookupAgent — CRM + Core Banking data retrieval
├── EntitlementMappingAgent — user role → entitlement suggestions
└── WireAccountAgent — wire account setup reference generator
7.2 AI Assistant
The AI Assistant is a role-aware conversational AI embedded in the React workspace and React Native mobile app. It has access to case context, workflow state, and can trigger actions via the GraphQL API.
Capabilities by Role
| Role | What the AI Assistant Can Do |
|---|---|
| Banker / RM | Pre-fill intake form from CRM data; suggest products based on client profile; answer “what does product X require?”; draft client communication |
| Document Review Analyst | Summarise document completeness status; flag missing/expired documents; auto-classify uploaded documents |
| Compliance Officer | Pre-fill AML/BSA (Anti-Money Laundering / Bank Secrecy Act) questionnaire from uploaded documents via OCR + NLP; flag high-risk indicators; explain regulatory requirements |
| Operations Team | Answer “what credentials have been sent?”; guide through credential delivery steps; draft password notification email |
| Product Operations | Generate wire account setup references; surface provisioning rules and product requirements; flag conflicts |
| Error Recovery Handler | Explain what the integration error means; suggest retry vs. skip based on error type and downstream impact |
| Manager | Summarise team queue bottlenecks; explain SLA at-risk cases; generate exception reports |
Tool Catalogue (Framework-Agnostic)
# Tool catalogue — same regardless of orchestration framework chosen.
# Wiring to Anthropic tool_use / MCP (optionally via LangGraph or LangChain)
# will be implemented at build time.
tools = [
CaseLookupTool(), # reads Aurora case records
WorkflowStateTool(), # queries Temporal workflow state
CoreBankingReadTool(), # reads customer/account data
DocumentMetadataTool(), # reads S3 document metadata
ProductCatalogTool(), # reads product rules
CRMReadTool(), # reads CRM opportunity data
RegulationReferenceTool(), # vector search over regulation corpus
DraftTextTool(), # LLM text generation for comms/emails
]
3-State Confidence Framework
HIGH CONFIDENCE (≥ 0.95): Pre-fill field silently; mark as AI-suggested (blue highlight)
MEDIUM (0.70 – 0.94): Pre-fill + surface to operator for review; yellow highlight
LOW (< 0.70): Do not pre-fill; suggest only via AI Assistant chat panel
All suggestions are logged to the ai_suggestions table with confidence score and source. The operator always has the ability to override — and their override is captured in the audit trail.
7.3 Document Review Agent
The Document Review Agent replaces the manual completeness check that currently causes a 1–3 business day bottleneck:
Trigger: Document uploaded to S3
→ S3 event → SQS → DocumentReviewAgent
Agent chain:
1. Retrieve document from S3 (pre-signed URL)
2. OCR tool → extract text
3. Document classifier → identify type (AML form / signature card / ID / agreement)
4. Completeness checker → compare against required document checklist for this case type
5. Signature detector → verify signatures present
6. Date validator → check document freshness (not older than 90 days)
7. Write assessment to Aurora: { doc_id, status, confidence, missing_items[], flags[] }
8. If all documents complete and confidence > 0.85:
→ Send Temporal signal: submitDocumentReview(APPROVED, auto_approved=true)
Else:
→ Create human task for Document Review Analyst with pre-populated assessment
Target: 70–80% of cases auto-approved. Remaining 20–30% surface to the analyst with a pre-populated checklist — reducing analyst time from 30–60 min to 5–10 min.
7.4 AML/BSA Pre-Fill Agent
Trigger: Temporal workflow reaches BSA/AML review phase
→ workflow-service calls CompliancePreFillAgent REST API
Agent chain:
1. Retrieve all case documents from S3
2. OCR + NLP extraction: entity names, beneficial owners, business description,
transaction volumes, geographic footprint
3. Map extracted data to AML questionnaire fields
4. Sanctions screening: compare entity names against sanctions list tool
5. Risk indicator detection: PEP flags, high-risk jurisdiction flags
6. Write pre-filled questionnaire to Aurora with confidence scores per field
7. Return pre-filled form to React UI → Compliance Officer reviews and attests
Compliance boundary:
BSA Officer attestation is always required — 31 USC 5318(g). The CompliancePreFillAgent pre-fills and assists, but the
submitBSAAttestationsignal requires a human actor. Theai_auto_approvedflag is blocked for this task type in the workflow implementation. This is not configurable.
Target: ~50% of fields pre-filled at ≥ 0.70 confidence; saves 20–40 min per case. The Compliance Officer reviews a pre-populated form rather than filling it from scratch, but the attestation decision remains entirely theirs.
7.5 Model Context Protocol (MCP) Integration Layer
The agent layer reaches the deterministic backend through a dedicated MCP server rather than wiring each agent directly to the database or domain services. MCP (Model Context Protocol) is Anthropic’s open standard for exposing tools, resources, and prompts to a model; using it keeps the boundary between probabilistic reasoning and deterministic banking state explicit and testable — a natural fit now that the provider is locked to Anthropic Claude (see Technology Stack).
Why a protocol boundary matters here. An LLM is non-deterministic; the ledger is not permitted to be. The MCP server is the membrane between them: the model may read and simulate freely, but it can never issue a state-mutating call that a human has not approved. This is the 3-state confidence model (§7.2 above) and the BSA attestation rule enforced at the transport layer, not merely in prompt instructions.
Tools Exposed — Read / Simulate Only
| MCP tool | Returns | Guarantee |
|---|---|---|
get_account_balance(accountId) |
Balance derived from the append-only journal (Data) | Read-only; never a mutable column |
query_reconciliation_breaks(date) |
Unmatched end-of-day clearing exceptions (Reconciliation) | Read-only over the exception queue |
simulate_transfer(from, to, amount) |
Pre-flight validation against limits, account status, and KYC — no funds committed | Pure function; writes nothing |
The write path is different by design. When an agent proposes an action that moves money or changes state, it does not call a write tool. It drafts a command that surfaces to a human operator; only the operator’s approval emits the Temporal Signal that starts the workflow (Temporal). The LLM never holds a credential that can write to PostgreSQL. Operational agents are co-pilots that draft; humans commit.
MCP invariant: the model’s tools are read-and-simulate; every state mutation is an approval-gated Temporal Signal raised by a human. The protocol boundary makes “the AI changed the ledger” structurally impossible, not merely discouraged.