NOVA
AI Customer Operations Platform
AI-powered customer operations.
Resolve more customer issues without hiring more people — and keep a human in control of every answer that goes out.
- RAG
- Tool calling
- Agents
- CRM integration
- Human-in-the-loop
- Automation
A support workspace where an AI assistant reads the customer's history, retrieves the right policy, calls the systems it needs, and drafts a response an agent approves.

What the product is built around.
The goal is not to remove agents. It is to make the routine 70% near-instant so the team's attention goes to the 30% that needs judgement — while every automated step remains inspectable.
Assist before automate
The assistant drafts and a human approves. Full automation is enabled per intent only once the evidence supports it.
Facts from systems, not guesses
Billing, order and account claims come from typed tool calls against real systems, with the result shown to the agent.
Grounded in your policy
Responses cite the specific policy passage. When the corpus does not support an answer, the assistant says so.
What makes this hard.
Support teams grow linearly with customers, and the cost lands in the wrong place. Most tickets are not hard — they are repetitive lookups across three systems. Agents spend their day copying data between a helpdesk, a CRM and a payments dashboard, and the genuinely difficult cases get the least attention.
- 01
The same twenty questions arrive every day and each one is answered from scratch
- 02
Answering a billing question means opening three tools and reconciling them by hand
- 03
Generic AI chatbots answer confidently from the wrong policy and erode trust fast
- 04
Escalation loses context, so the next agent starts the investigation again
- 05
Nobody can tell which answers the AI got right, so nobody trusts it with more
What the system does.
NOVA puts the assistant inside the agent's workspace rather than in front of the customer. It reads the conversation, retrieves the relevant policy with citations, calls the systems needed to establish the facts, and drafts a reply with a confidence score. The agent sends, edits or escalates. Every action is logged, so the automation earns trust incrementally instead of being switched on and hoped for.
Assistant drafts, human approves — the customer never receives an unreviewed answer
Answers are grounded in your policies and cite the passage they came from
The assistant calls CRM, billing and order systems to establish facts, not guess them
Confidence below threshold routes to a human instead of producing a plausible answer
Resolution outcomes feed back so automation expands where it has been proven
NOVA, as working interface.
Rendered UI, not a mockup. Switch between screens, and try ⌘K for the command palette.
The assistant works beside the agent: it establishes facts with tool calls, then drafts a reply for approval.
Open conversations
128
AI assisted
74%
Escalations
31
Avg response
42s
c-48120 · billing enquiry
- Customer09:41:02
I was charged twice.
- System09:41:04
Assistant engaged. Customer identity verified from the sending address.
- crm.customer.get
- auth.verify_email
- AI assistant09:41:09
I found two payment attempts on 18 September for £48.00. The first attempt was authorised and then reversed by the processor 40 seconds later; the second settled successfully. Only one charge will appear on the statement, but the reversal can take 3–5 business days to clear on a card. The relevant policy is the duplicate-authorisation section of the billing guide, which says we confirm the reversal reference to the customer rather than issuing a second refund.
- payments.attempts.list
- payments.reversal.get
- knowledge.search
Thanks for flagging this, and sorry for the concern. I've checked your account: there were two payment attempts on 18 September, but only one charge stands. The first authorisation was reversed by your bank 40 seconds later (reference RV-8841-0192). Reversals can take 3–5 business days to disappear from a card statement, so you may still see it as pending. No second refund is needed — if it hasn't cleared by 25 September, reply here and I'll escalate to our payments team with that reference.
Customer context
- Customer
- Ellis Warren
- Plan
- Pro · monthly
- Lifetime value
- £1,824
- Tenure
- 2y 4m
- Prior tickets
- 3 · all resolved
- Sentiment trend
- Positive → frustrated
- Churn risk
- Low (0.18)
- SLA remaining
- 3h 12m
Retrieved knowledge
- Billing guide — duplicate authorisations§3.4 · current · matched on 'charged twice'0.96
- Processor reversal timelinesCard 3–5 days · bank transfer 1–2 days0.91
- Refund authority matrixTier 2 may refund up to £2500.84
- Macro — duplicate charge responseUsed 412 times · 96% resolution0.88
- Superseded: refund policy v2Excluded — replaced by v3 in Marchexcluded
Assistant trace
- Awaiting approval09:41:16
Confidence 0.94 above 0.85 threshold · reply drafted, not sent
- Generated recommendation09:41:15
Grounded in 2 policy passages · reversal reference included
- Called payments API09:41:14
2 attempts found · 1 reversal RV-8841-0192 · read-only scope
- Retrieved customer data09:41:13
CRM record + 3 prior tickets · permission-scoped to tier 2
- Received request09:41:12
Email channel · intent classified as billing.duplicate_charge (0.97)
Automation by intent
| Intent | Volume (30D) | Accuracy | Edit rate | Deflected | Mode | Trend | Status |
|---|---|---|---|---|---|---|---|
| order.status | 4,812 | 99.1% | 2.1% | 94% | Automated | Stable | |
| billing.duplicate_charge | 1,284 | 96.4% | 8.4% | 61% | Assisted | Promoting | |
| subscription.change | 984 | 94.8% | 12.2% | 48% | Assisted | Stable | |
| refund.request | 642 | 91.2% | 22.8% | 18% | Assisted | Under review | |
| account.cancel | 218 | — | — | 0% | Human only | Policy | |
| technical.integration | 412 | 78.4% | 41.2% | 6% | Assisted | Held back |
Intents are promoted to full automation only after sustained accuracy above 98% and edit rate below 5%
Resolution flow
billing.duplicate_charge- Conversation receivedTrigger
Email, chat or social · intent classified
- Retrieve knowledgeAction
Policies, macros, prior resolutions
- Establish factsAction
CRM, billing and order lookups
CRMBillingOrders - AI drafts responseAI
Grounded, cited, confidence scored
- Human decisionHuman
Below 0.85 confidence always routes here
SendEditEscalate - Write back to CRMOutput
Outcome, tags and fields with confidence
Quality signals
30D- Groundedness96.4%
- Agent approval rate91.6%
- Customer satisfaction4.4 / 5
- Escalation accuracy94.2%
- Policy leakage0 / 3,200
Handling time
secondsAction log
append-only- 09:41:22agent:s.moraapprovedc-48120 draft · sent unedited
- 09:41:16assistantdraftedc-48120 · confidence 0.94
- 09:41:14assistanttool_callpayments.attempts.list · read · 200
- 09:38:04agent:d.iqbaleditedc-48102 draft · tone adjusted
- 09:31:48assistantrefusedc-48098 · groundedness 0.42 below threshold
- 09:22:11admin:r.vancepromotedorder.status → fully automated
Volume by intent / hour
Interface states
UI statesInbox clear
No open conversations. The assistant is monitoring for new arrivals.
View resolvedEmpty stateAssistant cannot answer from available policy
Retrieved passages scored 0.42 groundedness, below the 0.70 threshold. The conversation was routed to a human instead of drafting a guess.
How it is put together.
The assistant never talks to the customer directly. It produces a draft plus its evidence, and a human decides — which is what makes the automation safe to expand.
- 01
Agent Workspace
Unified inbox, conversation view, draft approval and customer context.
- Next.js
- React
- Streaming
- 02
Orchestration
Intent classification, retrieval, tool selection and confidence gating.
- LLM
- Structured output
- Classifier
- 03
Knowledge Layer
Hybrid retrieval over policies, macros and prior resolutions with citations.
- Embeddings
- pgvector
- Reranking
- 04
Tool Layer
Typed, permissioned read and write calls into CRM, billing and order systems.
- Zod
- Capability scopes
- Idempotency keys
- 05
Approval Gate
Confidence thresholds per intent with edit tracking and escalation routing.
- Policy engine
- RBAC
- Audit log
- 06
Systems of Record
CRM, helpdesk, billing and subscription platforms synced bi-directionally.
- Connectors
- OAuth
- Webhooks
What the product does.
The capability set the demonstration is built around.
Unified inbox
Email, chat and social conversations in one queue with routing and SLA tracking.
AI drafting
Grounded reply suggestions with citations, tone matching and a confidence score.
Knowledge retrieval
Hybrid search over policies, macros and past resolutions with recency weighting.
Tool calling
Typed, permissioned calls into CRM, billing, orders and subscription systems.
Human-in-the-loop
Approve, edit or escalate. Nothing leaves without a decision above the threshold.
CRM sync
Conversation outcomes, tags and fields written back with field-level confidence.
Automation rules
Per-intent automation enabled gradually as measured accuracy supports it.
Quality analytics
Deflection, edit rate, escalation reasons and accuracy per intent.
Challenges, and the MaatX approach.
The problems that actually decide whether a system like this survives production — and how we address each one.
A wrong AI answer to a customer costs more than a slow one
The assistant drafts; a human sends. Automation is enabled per intent only after sustained measured accuracy, so the blast radius of a mistake stays inside the team until the evidence justifies widening it.
The assistant needs real account data without becoming a data-leak path
Tool calls are typed and scoped to the agent's own permissions. The assistant cannot read a record the handling agent could not open, and every call is logged with its arguments.
Policies change and superseded versions read almost identically
Retrieval applies recency weighting and supersession edges, so the current policy outranks the old one. Excluded passages are shown to the agent as excluded rather than silently dropped.
Confidence scores are meaningless unless calibrated
Thresholds are set per intent from a labelled evaluation set and recalibrated against agent edit and approval rates, so 0.85 means the same thing in billing as it does in orders.
Writing to the CRM automatically destroys trust the first time it is wrong
Sync is field-level with a per-field confidence threshold. Below it the update queues for review, and a human override is never overwritten on a later run.
Nobody can tell whether the automation is actually helping
Deflection, edit rate, escalation reason and satisfaction are tracked per intent, so expansion decisions are made on measured outcomes rather than on the demo that went well.
The stack behind it.
Inbox & routing
- Node.js
- PostgreSQL
- Redis
- Multi-channel intake
- Intent classification
- Queue routing
- SLA timers
Assistant orchestration
- LLMs
- Structured output
- Tool calling
- Classifier models
- Confidence calibration
- Tone matching
Policy retrieval
- Embeddings
- pgvector
- Hybrid search
- Reranking
- Recency weighting
- Supersession edges
- Span-level citations
Systems-of-record tools
- Zod schemas
- Capability scopes
- Idempotency keys
- CRM APIs
- Billing APIs
- Order and subscription APIs
- Helpdesk APIs
Human-in-the-loop
- Confidence thresholds
- Approve, edit or escalate gates
- Policy engine
- RBAC
- Edit-rate tracking
- Escalation routing
Automation & write-back
- Per-intent automation rules
- Field-level CRM sync
- Per-field confidence gates
- Human-override protection
- OAuth connectors
- Webhooks
Workspace & analytics
- Next.js
- React
- TypeScript
- Tailwind CSS
- Streaming responses
- Audit log
- Per-intent accuracy reporting
How it grows with the business.
The same system at three stages. Most products should not start at the third — but the architecture should not have to be thrown away to get there.
Assist a single team on their highest-volume intent, proving accuracy before widening scope.
- One channel, one intent, drafts only
- Knowledge base connected read-only
- Two tool integrations for fact lookup
- Accuracy and edit rate measured from day one
Expand across intents and channels, and let proven intents run without a human in the path.
- Multi-channel unified inbox with routing
- Per-intent automation thresholds
- Bi-directional CRM sync with confidence gating
- Calibrated confidence and regression eval suite
Multi-team, multi-region deployment with the governance a support organisation needs.
- Role-based access and regional data residency
- Full audit trail of every automated action
- Multi-language handling with per-language calibration
- SLA forecasting and capacity planning
Where it could go next.
Directions this system would extend into.
- 01
Voice channel with real-time agent assist during live calls
- 02
Proactive outreach when a known issue affects a customer's account
- 03
Self-service resolution for intents proven above the automation bar
- 04
Knowledge gap detection from questions the corpus could not answer
- 05
Quality scoring on every conversation rather than a sampled review
Scaling customer operations without adding headcount, and keeping a human on the answers that matter?
We built NOVA to work through exactly this. Tell us where you are and we will tell you what we would do differently for your constraints.
