A new regulation lands. Thousands of signed contracts are suddenly non-compliant.
RegProof finds them, groups them, drafts the fix — and refuses to act without a human.
Regulatory-change remediation copilot for financial services — demoed on DORA.
When a regulation like DORA (Regulation (EU) 2022/2554) enters into force, a bank has to re-audit thousands of already-signed supplier contracts, work out which are missing the newly mandatory clauses, group the work sensibly, draft amendments, write to every counterparty and track thousands of negotiations. Today that's months of work and dozens of lawyers — and the volume of it crowds out the actual legal judgement.
An LLM can read a contract in seconds. But you cannot bet a regulatory filing on an LLM's opinion, and you cannot let an agent quietly send thousands of amendment letters on the bank's behalf.
RegProof industrialises the execution volume around legal judgement — without ever replacing it.
- The agent scans the portfolio, detects clause gaps, groups contracts into remediation cohorts, drafts amendment language and tracks status.
- The human approves every cohort and resolves every escalated case. Nothing leaves the building without a named sign-off.
The trust doesn't come from a well-behaved prompt. It comes from guardrails enforced in code.
| Guarantee | How it's enforced (in code, not in a prompt) | Where |
|---|---|---|
| Gap detection is deterministic — clause present/absent is a checked fact, not an LLM guess | pure set comparison, re-runnable, identical every time | engine.ts missingClauses |
| Cohorts are an exact group-by on missing-clauses × criticality × cross-border — no embeddings, fully explainable | deterministic Map group-by over a seeded portfolio |
engine.ts buildCohorts |
Nothing is approved without a named human (approvedBy null ⇒ nothing leaves) |
approval gate rejects an empty approver | store.ts approveCohort |
| The agent may never approve its own work | approver "agent" is rejected |
store.ts approveCohort |
| Cross-border contracts are force-escalated — genuine legal judgement, no auto path | cross-border is a grouping dimension → its own escalated cohort | engine.ts buildCohorts |
| Every action is an immutable, justified audit event | audit log is append-only; the store exposes no update/delete | store.ts getAudit |
- Scan — 240 synthetic supplier contracts vs DORA's 4 mandatory clauses. Headline: ~£288M of contract value under non-compliant critical & important functions — found automatically, nobody flagged it by hand.
- Cohorts — 193 problems collapse into 15 actionable cohorts, biggest exposure first. 8 are domestic (templatable); 7 are cross-border and force-escalated to legal.
- Approve — type your name, approve a domestic cohort → it moves to outreach. Try approving
as
agent, or with no name → blocked. Try an escalated cohort → it demands legal sign-off. - Audit — every scan, approval and escalation is on an append-only, timestamped trail.
- Next.js 16 (App Router) + TypeScript + Tailwind 4
- Deterministic domain core in
src/lib— no database, in-memory singleton store - LLM-optional: amendment drafting ships as deterministic templates so the demo runs with
zero API keys.
draftAmendmentis the single seam to swap in Claude (claude-opus-4-8) for richer, contract-specific language later.
npm install
npm run dev
# open http://localhost:3000