Architecture
One layer every agent inherits.
Build agents one at a time and you get five sets of credentials, five logging schemes and no way to answer "what did it do?". We build the shared layer first.
ChannelsWhere people meet it
Web appSlack / TeamsEmailVoiceEmbedded in your CRMAPI
↓
OrchestrationThe VAVITA layer
Intent routerPlannerAgent registryTool registryHuman-in-the-loop gatesRetry & fallback
↓
CapabilitiesWhat it can do
MCP serversREST / GraphQL adaptersWebhooksScheduled jobsBrowser automation (last resort)
↓
Data & memoryWhat it knows
Vector indexMySQLDocument storeConversation memoryImmutable audit log
↓
GovernanceWraps everything
Auth & scopesPII detection & redactionEval suitesCost ceilingsRate limitsTracingData residency
Why a shared layer
Add the fifth agent and it inherits auth, logging, evals and cost controls for free. Without it, agent five is a fifth security review.
Why MCP
A tool written once is available to every agent and every model you might switch to later. It's the difference between an integration and a dependency.
Why human gates
Placed at irreversible actions — money out, contracts sent, records deleted. Everywhere else the agent proceeds and logs.
Trace
Every run is reconstructable.
A sample of what your audit log records for a single agent run.
14:02:11 trigger webhook · accounting.invoice.exception #INV-40912
14:02:11 route agent=finance.reconciliation · confidence 0.94
14:02:13 tool erp.purchase_orders.search(supplier:"Northbay") → 3 results
14:02:15 tool docs.retrieve("Northbay supply agreement") → 2 citations
14:02:19 reason matched PO-8871 · variance £412 · within tolerance
14:02:19 gate value > £250 → approval requested · j.okafor@
14:07:44 approve j.okafor@ · "matches contract clause 4.2"
14:07:45 tool erp.invoices.match(INV-40912, PO-8871) → ok
14:07:45 done 4.2s model time · $0.031 · 2 writes · reversible
Want this walked through properly?
We'll go through the architecture against your systems and tell you which parts you already have.