Case study · AML compliance · 2026

Investigating suspicious payments with an AI that admits what it doesn't know

Banks have to look into every transaction that might be money laundering. Most turn out to be nothing, but each one takes a lot of digging. In Alert Desk, an AI agent does the digging and writes up what it found. A person still makes the call.

by Birthright Ntuk · Synthetic data

Most of the work is fetching, not deciding

An alert shows up with almost nothing: an amount, a time, the rule it tripped. Everything that explains it lives somewhere else. So the analyst goes and collects it, writes a note, and moves on to the next one. Industry estimates say only 1 to 5% of alerts ever become a report.

Fetching is a good job for an agent. Deciding isn't. Someone signs their name to that decision, so it stays with a person.

Here's the catch. When an AI hands you a neat answer, agreeing feels free and disagreeing feels like work. Get that wrong and you end up with a tidy record of decisions nobody really made. So a lot of this design is friction, on purpose.

It tells you what it couldn't check

Every sentence the agent writes points to a source. If it can't find one, the claim doesn't go in. It goes into "What the agent couldn't confirm" instead, a section that never collapses and looks just as important as the summary. The agent writes it in the first person ("I couldn't find this vessel"), because a gap with a name on it is harder to skim past.

Departure from baseline

This instruction gives its purpose as “charter hire, vessel MV Celestine” 4. No vessel of that name is on the customer’s 14-vessel register or in the two commercial registries I searched 5.

What the agent couldn't confirm

  • I could not confirm or exclude the match to list entry ENT-30417. The payment message carries no registration number or address.
  • I could not find MV Celestine in the two registries available to me. A specialist maritime registry was not searched.
Every claim links to its evidenceGaps are always listed

Saying no is as easy as saying yes

Most approval screens make "Approve" the big button. Here, that would be the bug. All three choices look the same, nothing is picked for you, and the agent's suggestion is just a small label. The bold button only shows up once you've chosen, when you confirm.

The effort goes into the reasoning instead. Every decision needs a short note, at least 40 characters, because one-word closures are what auditors flag. Go against the agent and a note asks what it missed. That's logged as feedback on the agent, not on you.

✓ Agent's pick
Try it: pick against the agentSame size, same effortKeys 1, 2, 3

Three ways to show the agent's opinion

If you see the AI's answer before you've looked yourself, it's hard not to lean on it. I tried three versions.

A. PreselectedThe agent's answer is already chosen

One click to agree, two to disagree. Fast, but reviewing turns into rubber-stamping.

B. Marked, not chosenEqual buttons, pick labelled

Agreeing and disagreeing cost the same, but the suggestion is always staring at you.

C. Marked on intentHover the row to see itShipped
✓ Agent's pick

The suggestion only shows up when you move to decide. The summary still says what the agent thinks, so nothing's hidden. The buttons just stay neutral until you need them.

I went with CNot yet tested with analysts

The clock starts when a person suspects, not when the alert fires

A suspicious activity report (SAR) is due 30 days after someone decides the activity might be suspicious. Not 30 days after the alert. Teams mix these up, and examiners notice. So until a person records suspicion, the screen just says No deadline yet. Once they do, it shows both dates and who started the clock.

  1. 21 Sep, 14:23Alert raisedPayee may be on a sanctions list (rule SAN-PAY-02). No deadline yet.
  2. 24 Sep, 10:15Suspicion recorded by J. Whitfield (L1)The 30-day clock starts here, with the reason quoted in the record.
  3. 24 OctSAR dueThe queue ranks this first: 2 days left, payment on hold.
30 days to file, 60 if there's no suspectBoth dates always shown

Flagging a case isn't filing a report

These are two decisions, made by two different people. The investigator decides whether a case is worth escalating. A senior compliance officer, the BSA Officer, decides whether to file a report with the government. Their screen opens with why it was escalated, whether the investigator disagreed with the agent, and how long they have. Filing opens a draft built from the agent's write-up, and it flags any line that guesses what the customer intended. Nothing gets filed until they file it.

L2 · What happens to this alert?
Escalated
Main reason
Structuring
Agent
Agreed · high confidence
BSA Officer · Should we file a SAR?
Due 18 Nov 27 days left
Time allowed
30 days (suspect known)
Minimum
$5,000 · $131,400 involved
File, send back, or closeClosing needs a written reason

The customer can never find out

This is the strictest rule in the product. You can't tell someone they're being investigated, or even hint at it. So the tool never contacts the customer. If the investigator needs more information, the request goes to the customer's relationship manager inside the bank, with wording that sounds like routine paperwork and a list of things they must not say. That warning can't be dismissed.

Don't tell the customer about this review. Nobody may tell them the request is linked to a review. Even the fact that a review exists is confidential.
Suggested wording for RM to use

As part of routine account maintenance, we are refreshing the information we hold for Priya Raman. Could you ask them for an updated source-of-wealth declaration, with supporting documents?

RM must not mention
  • A review, alert, investigation or report.
  • Which transactions led to the request.
  • Any change to the account while the request is open.
Wording updates as you tick itemsThe warning is logged

Every decision leaves a trail anyone can follow

Each decision is written down the moment it's made: who decided, why in their own words, and a snapshot of what the case looked like right then. Two years later, someone who wasn't there can see what the analyst saw, not what the case looks like today. Nobody can edit it.

19 Oct, 15:14AgentGathered the evidence and wrote the case summary.
Medium confidence · suggested Clear · 4 of 5 items used
22 Oct, 09:41AnalystDecision: Escalate. Main reason: Purpose of payment unverified.
Two earlier alerts on this pair were closed alike, and the money went to a personal account, not the declared settlement account.
22 Oct, 09:41AnalystDisagreed with agent Adaeze M. chose Escalate; the agent suggested Clear. Added to QA's review sample.
Each decision saves a snapshotKept for 5 years

You can tell what's official by the font

Anything that becomes part of the official record is set in a serif. Everything else is just the interface. You don't have to read a word to know which is which.

The recordFourteen cash deposits totalling $131,400 were made across four branches.
InterfaceEscalate to BSA Officer
Data & labelsALT-2026-04468 · 19 Oct 2026, 11:40 ET
IBM Plex SerifGeistGeist Mono

Details

How I'd know it works

Nothing here has shipped, so I can't claim results. If it did, I'd watch four things: how often QA finds mistakes in closed cases, whether a stranger reading a closure note would reach the same decision, how often analysts disagree with the agent over time, and how much of their day moves from digging to deciding. I wouldn't chase speed. A tool tuned for alerts per hour would make the real problem worse.

Open questions

Let's talk

If you work alerts for a living, or you're building tools like this, I'd love to hear what I got wrong.

Birthright Ntuk on LinkedIn