Every verdict is already an audit record.
Input signals → tier → reasoning → probe transcript → the pattern shown to the user. Timestamped, structured, exportable. That isn't a by-product of the design — it is the design.
A behavioral control that reads timing, not content.
What we process
Idle time, tab switches, how an address was entered, deposit history, account age. All interaction timing — nothing about content.
What we deliberately don't capture
Keystroke content, screen contents, chat messages, contact lists. None of it is collected, so none of it can be requested, leaked, or subpoenaed from us.
Automated decisions, human control
The system delays and explains — it never blocks outright. Every flagged transfer can proceed after a 24-hour hold, and every decision is contestable.
Data minimization by design
The model receives the signal vector and nothing else — never identity, never account history beyond what that one decision needs.
Why this matters to your compliance team.
Four arguments, in the order they tend to land with a compliance officer who has already bought address screening.
Direct SAR support — above all in money-mule cases, where the user commits an offence without knowing it, and where a regulator most wants to see the reasoning written down.
A defensible reason for every intervention — demonstrable to a regulator as "we ran a behavioral control, not just address screening."
Under MiCA, FinCEN and FCA pressure, "we have a control beyond the blocklist" sells into the compliance budget — typically larger and less price-sensitive than the product budget.
Duty of care after the fact, not only before it — a support surface for people who have already sent money, which speaks directly to vulnerable-customer obligations.
What your auditor actually gets.
One record per decision, appended — never rewritten. A later probe or outcome extends the same decision_id rather than replacing what was written at the time.
{
"decision_id": "d_a619893f",
"created_at": "2026-09-12T09:41:22.104Z",
"tier": "INTERVENE",
"signals": { /* the full fifteen-field vector */ },
"key_signals": ["idle_gaps + pasted address"],
"reasoning": "Coached-session pattern: repeated idle gaps...",
"probe_transcript": [...], // if any
"pattern_summary": "...", // what the user was shown
"user_outcome": "held",
"model": "claude-opus-5",
"prompt_fingerprint": "pf_3c1e" // which prompt version decided
}prompt_fingerprint is there for the question an auditor eventually asks: not just what the system decided, but which version of the system decided it.