Inspiration

We work in Treasury at the World Bank. Last month we watched a single trade settle to the wrong party. Nothing looked wrong at the time: the confirmations matched and every box was ticked. It still took a week of emails and calls to get the money back.

A week sounds small, but stuck money has a cost. That cash is meant to go out as development finance, and when it is frozen, disbursements to countries wait. For a country recovering from a flood or another crisis, a week's delay is not an accounting problem. It is roads, clinics and payrolls on hold.

The worst part was that the error was preventable. The counterparty had changed its bank account weeks earlier. The information existed; nobody connected it before the payment went out.

So we asked: what if every trade was checked against the latest information, every time, before any money moved?

What it does

Concord is an AI agent that runs a pre-settlement check on every trade. It:

  • reads our confirmation and the counterparty's confirmation, including messy emails and free text
  • checks them against the live settlement instructions, not an old copy
  • runs 12 fixed checks: accounts, bank and branch, amounts, dates, both sides agreeing, and the cost if it fails
  • decides Release or Hold
  • says whose fault the break is and how urgent it is (call today, or email)
  • drafts a short, polite note to the counterparty, which a human approves. Nothing is sent automatically.

How we built it

  • A fixed 12-step pipeline in Python. The model reads and writes; plain code makes the decisions, so results are predictable and auditable.
  • Nicrron API (Claude) for reading confirmations, explaining breaks and drafting notes, at temperature 0.
  • PRISM by Block Convey traces every run step by step, with alerts on failures and root-cause clustering.
  • 20 synthetic trades (fictional firm, fictional counterparties) covering real failure types: stale bank accounts, missing confirmations, swapped sides and amount mismatches.
  • Ninoo Builder for the demo site, which walks through one trade as a story.

Challenges we ran into

  • Version 1 looked fine but wasn't. It passed every check and still paid four trades to closed accounts, because it read a snapshot of the instructions instead of the live registry. It also crashed whenever a counterparty hadn't sent a confirmation.
  • PRISM made the failures visible. The failure alert fired, and Root Cause grouped 52 failed runs into one shared bug. We fixed it, re-ran the same 20 trades, and version 2 got 20 out of 20 right (up from 14).
  • Language models don't always return clean data. Some confirmations came back empty, so we added a rule-based fallback that reads the fields directly from the text.
  • Assigning fault is a judgement call. We moved it out of the model and into explicit rules, and it went from frequently "unknown" to correct on every trade.

What we learned

  • The dangerous errors are the quiet ones, where everything agrees and is still wrong.
  • Let the AI read and write, but keep the decision in code you can audit.
  • Observability isn't optional. Without traces, we would have shipped version 1.

What's next

  • Connect to real confirmation feeds and settlement-instruction registries.
  • Add custodian and cut-off-time checks.
  • Pilot it alongside analysts on a live trade queue, with a human approving every hold.

Built With

Share this project:

Updates

Submission history