Verdict on the 32-story PRD
It does not build what you described, and it should be rewritten. The PRD's brain is a single-lookup parser: every question is squeezed into one transaction lookup. That cannot answer capability-first sweeps ("who has ES IBANs", "who can sell HKD", "local settlement in France"), cannot hold a narrowing conversation, and cannot combine "French corporate" with "Corpay". It was also written against a fork 143 commits behind: the real Compass already has the Rolodex (partnership_status = prospect), per-row provenance, conversations, contacts, MatchProspects and the unserved-needs gap analysis. Several PRD stories re-invent those.
What replaces it: an agent with tools. Compass exposes its capability queries as MCP tools (the twelve you see in the conversations below, over the live database), and Opus 5 drives the conversation through claude -p, exactly the transport ClaudeSubscriptionClient already uses for document extraction. A deterministic grounding guard checks every reply against that turn's tool results. The Slack plumbing from the old PRD (ingress, workers, member gate, quotas, leases) carries over; the parser, renderer and gap table do not.
Compass::MatchProviders; production calls the real one.Persona: before and after
Your critique of the first run: too much colour, providers mashed into paragraphs, hard to scan. The persona is now a keen executive assistant with a fixed answer shape: one-line answer, one line per provider (live first, prospects after), caveats once in a footer, one follow-up. No opinions about providers.
Q: who do we have that can do anything in Africa?
Broadest reach is FX Broker (Equals) (live): ZAR, KES, NGN, GHS, UGX, TZS, MAD, EGP and XOF — mostly buy-only (client buys the African currency), ZAR and MAD both ways. Corpay US (live) is close behind: ZAR, KES, NGN, GHS, UGX, TZS, MAD, all buy. Clear Treasury and Currencycloud/TCC (both live) are narrower — ZAR, KES, UGX, all two-way, though Currencycloud's UGX carries a condition: not available to clients operating in the EEA or with EEA customers. Moneycorp (live) only has ZAR buy recorded. Settlement is UK-domiciled accounts for these — Compass has no local African collection accounts recorded for any live partner.
On the Rolodex side, Riva is the interesting one (prospect, unverified — from your call with founder Jonas Lindqvist on 30 Aug): KES, NGN and GHS both directions, plus M-Pesa mobile-money payouts in Kenya, and notes claiming local rails in 37+ countries.
Two watch-outs: blocked/reviewable African countries cluster around Libya, Sudan, South Sudan, Somalia, Zimbabwe, DRC and CAR — Clear Treasury and Equals block several outright, Corpay US flags them as reviewable with EDD. And on clients domiciled in Africa, only Clear Treasury has anything recorded (South Africa, enhanced due diligence); Kenya and Nigeria are blank for everyone, which is unknown rather than no.
Want me to run a specific corridor through the matcher — say a UK Ltd paying a supplier in Kenya?
• Verto — live · ZAR, KES, NGN both ways; GHS to clients · never verified; corporates only; no settlement accounts recorded
• Corpay — live · ZAR, KES, GHS both ways; NGN to clients · corporates only; 19 client countries recorded
• Moneycorp — live · sells ZAR, NGN, KES, GHS to clients · buy side not recorded; only 2 client countries recorded
• FX Broker (Equals) — live · ZAR, KES both ways; NGN to clients · NGN not for EU-based clients; no NGN/KES forwards
• Clear Treasury — live · ZAR, KES both ways · no NGN or GHS recorded; can't onboard US/EU clients
• Currencycloud/TCC — live · ZAR, KES both ways · no NGN or GHS recorded
No exclusions recorded for Nigeria or South Africa at any provider. Live data last verified Mar 2026 (stale); Verto never verified.
Want me to run a full match for a specific corridor — e.g. a UK company sending GBP to NGN?
Q: Which of our providers can sell HKD?
- Clear Treasury — live, both directions, any client type
- Currencycloud/TCC — live, both directions, any client type
- FX Broker (Equals) — live, both directions, any client type
- OpenPayd — prospect from the Rolodex (unverified, from Paul's intro call on 12 Aug), both directions but business clients only
All three live partners were last verified ~195 days ago, so worth a re-check before you lean on it. Corpay and Riva have no HKD row at all — unknown rather than a no.
Want me to check where they'll actually send HKD to, or whether any can hold a named HKD account in Hong Kong?
• Clear Treasury — live · sells and buys HKD
• Currencycloud/TCC — live · sells and buys HKD
• Corpay — live · sells and buys HKD
• FX Broker (Equals) — live · sells and buys HKD · forwards available
• Moneycorp — live · sells HKD to clients only
• Verto — live · sells HKD to clients only
All rows last verified Mar 2026 (stale); Verto never verified. No HKD row for Asia Atlantic Partners or HopNow.
Want the named HKD account options in Hong Kong for any of these?
Q: Who can do local settlement in France?
- OpenPayd — named virtual IBAN in France, EUR, for collections. Rolodex prospect, unverified — intel from Paul's intro call on 12 Aug 2026.
- Currencycloud/TCC — live partner, but the France coverage is inferred from wildcard rows (any currency, any country): pooled account with reference for collections, named local account for payouts. Last verified 4 Mar 2026, so 194 days old — worth re-checking before you quote it.
Riva also shows up on a wildcard but only for KES via M-Pesa and USDC/USDT on-chain, so nothing French there.
Is this for collections into France or payouts out? That'd sharpen it.
Want me to check who offers EUR pay-in accounts generally, wherever they're domiciled?
Two rules you set, applied at the tool layer
1 · Only explicit rows are answers. "Local settlement in France" now returns only providers whose account row records FR. Rows with no domicile recorded are returned by the tool in a separate unspecified_rows list and the bot may mention them in one sentence at most, never as bullets. This is a real Compass semantics point: Compass::MatchProviders::AccountMatching#domicile_matches? treats a row with no iban_country as satisfying any requested domicile, so today a FR-domiciled named-account requirement is met by a row that never recorded where the account is. The bot's transaction matcher mirrors Compass but labels those rows "domicile not recorded — not confirmed as FR". Recommendation: Compass should stop treating an unrecorded domicile as a match for named accounts, or make the domicile field required on named rows.
2 · Direction reads the way a person says it. Compass stores corridor direction from the client's side (the lookup form's "Sell Currencies" pairs with direction sell), and the corridor form just says "Direction: Sell / Buy / Both" with no perspective label. The bot now translates: "which providers sell HKD" = the provider sells HKD to clients = clients buy HKD = direction buy. Recommendation: relabel the corridor form "Client sells / Client buys" so humans and the bot read the same thing.
Q: Who can do local settlement in France?
• OpenPayd — Rolodex prospect · named EUR virtual IBAN in FR, pay-in · pooled for payouts · from Paul's call, 12 Aug
• Currencycloud/TCC — live · named local for payouts, pooled for pay-in · general row, not FR-specific
• Riva — Rolodex prospect · payouts only, KES/USDC/USDT · not FR-specific · from Stevan's call, 30 Aug
Live data last verified Mar 2026 (stale); no other provider has a France settlement row recorded.
Want me to check which providers will onboard a France-domiciled client?
Want me to check who offers EUR pay-in accounts generally, wherever they're domiciled?
Q: Which of our providers can sell HKD?
• Clear Treasury — live · client sells or buys HKD
• Currencycloud/TCC — live · client sells or buys HKD
• FX Broker (Equals) — live · client sells or buys HKD
• OpenPayd — Rolodex prospect · sells and buys HKD · business clients only · from Paul's call, 12 Aug 2026
Live rows last verified Mar 2026 (stale); Corpay and Riva have no HKD row recorded.
If you meant client buys HKD, add Corpay US and Moneycorp — want that list?
• Clear Treasury — live · sells and buys HKD
• Currencycloud/TCC — live · sells and buys HKD
• Corpay — live · sells and buys HKD
• FX Broker (Equals) — live · sells and buys HKD · forwards available
• Moneycorp — live · sells HKD to clients only
• Verto — live · sells HKD to clients only
All rows last verified Mar 2026 (stale); Verto never verified. No HKD row for Asia Atlantic Partners or HopNow.
Want the named HKD account options in Hong Kong for any of these?
Q: which providers have ES IBANs
• OpenPayd — Rolodex prospect · named virtual IBAN, EUR, collection · from Paul's call, 12 Aug
• Currencycloud/TCC — live · pooled collection + named_local sending · general ANY rows, not ES-specific
• Riva — Rolodex prospect · KES/USDC/USDT payouts only · general rows, not ES-specific · from Stevan's call, 30 Aug
Live data last verified Mar 2026 (stale); no other provider has settlement rows for ES.
Want OpenPayd's onboarding requirements?
EUR accounts on file are domiciled elsewhere:
• Currencycloud/TCC — live · named local EUR payouts, "EU" region row, not ES-specific
• FX Broker (Equals) — live · named local EUR pay-in, Belgium
• Clear Treasury, Moneycorp, Corpay — live · pooled EUR only (DE / GB / IE)
Live data last verified Mar 2026 — stale.
Want the full EUR settlement picture for one of these, or a match run for a specific Spanish client?
Follow-up offers you can cash
Your rule: never offer a follow-up unless there is enough behind it to answer. Two changes. Every provider row a tool returns now carries recorded flags (onboarding notes, contacts, industry policies, forward rows, named accounts…), and the prompt allows an offer only when a tool can deliver it and, for provider-specific data, the flag shows it exists. No offers of actions the bot cannot take (flagging, emailing, pinging someone). The harness then accepts every offer the bot makes with "Yes please." and checks the reply actually delivers.
| Conversation | Offer made | Accepted → | First line of the reply |
|---|---|---|---|
| africa sweep | Want me to run a full match — say a UK company selling GBP to buy MZN into Mozambique? | delivered | UK company, GBP into MZN to Mozambique — two full matches, both live. |
| docs by currency | Want Clear Treasury's low/medium/high-risk doc list to compare? | delivered | *Clear Treasury* — live partner. Compass records AE as low risk for them, so tier one applies. |
| es iban wide | Want the full EUR settlement picture for one of these, or a match run for a specific Spanish client? | delivered | Four live partners will onboard a Spain-domiciled client; Clear Treasury won't. |
| exclusions nigeria | Want Verto's Nigeria-relevant exclusions (11 recorded) or their industry policy? | delivered | Verto blocks 11 countries and 18 industries — Nigeria is on neither list. |
| forwards zar | Want me to pull the general-row deposit terms for those four so you have a fallback list? | delivered | General forward rows for the other four — none of these record ZAR specifically. |
| france local settlement | Want me to check which of them onboard Spain-domiciled clients? | delivered | Three of the four EUR pay-in providers will onboard Spain-domiciled clients. |
| hkd sell | Want Currencycloud's corporate onboarding requirements? | delivered | Currencycloud corporate onboarding, as recorded — UK and non-UK differ. |
| kenya supplier | Want the corporate onboarding requirements for Currencycloud and Corpay? | delivered | Both record full corporate onboarding lists. |
| onboarding riva corpay | Want their high-risk industry policy or the currencies they cover for this client? | delivered | Corpay — live partner — blocks 6 industries outright, allows 12 with extra checks. |
| qualify all in one | Want me to re-run the match on CNY instead of CNH to see if the China payout leg is recorded that way? | delivered | On CNY it works — two live partners are a full match. |
The v2 transcripts had one offer the bot could not keep: "shall I flag Corpay's blank record to whoever owns it?" — no tool does that. It no longer appears.
Qualifying a client
Your question: if someone says "I've got a corporate that needs an HKD local account, who can do it?", what should the bot ask, and how do we qualify the lead overall rather than just the currency?
How it works now. A twelfth tool, lookup_requirements, returns exactly what a full Compass match needs and why each field matters — the same contract as Compass::Lookup. The bot calls it, states what it already has, asks only for the missing fields that change the verdict (max three at a time), then runs the full match across live partners and prospects and gives one line per provider with the deciding reason. The two "qualify" conversations below show it: currency alone says nothing about whether the client's jurisdiction, entity type or settlement needs are covered, and the matcher catches exactly those.
| Field | Why it decides the verdict |
|---|---|
| Client type (personal / company type) + client country | Entity restrictions and client jurisdiction — a provider may do the currency but not onboard a Singapore trading company |
| Currencies sold / bought | Corridors, per side, with personal/business rules |
| Send-from / send-to countries | Exclusions |
| Settlement needs | Named vs pooled, currency, pay-in vs payout, where domiciled — the "HKD local account" part |
| High-risk industry, forwards | Industry restrictions; forward tenor/type/deposit |
| Amount, pricing, cadence | Not evaluated by Compass — the bot says so rather than pretending |
Open question: hand-off after qualifying. My recommendation: in v1 (internal staff) every qualification already saves a real Compass lookup, so the bot ends with "Saved as lookup #N" and a link the team can open in Compass — that is the shareable artefact, and misses flow into Unserved Needs. In v2 (partners), the natural close is exactly what you described: "Want me to pass this to CurrencyTransfer to start onboarding?" — which creates a referral with the details already captured (client type, country, currencies, settlement needs) and notifies the routing owner. The client still signs up themselves; the hand-off just removes the re-typing and gives the partner attribution. That belongs in the partner-portal PRD, not this one, but the tool contract should be designed so the same qualification payload becomes the referral.
Sample conversations
Each exchange is a real run. 🔧 shows the tool the model chose and its arguments. The grounding badge is the deterministic guard: every provider named in the reply must appear in that turn's tool results.
africa sweep
🔧 text_search
{
"term": "Africa"
}🔧 list_providers
{}🔧 currency_support
{
"currency": "ZAR"
}🔧 currency_support
{
"currency": "NGN"
}🔧 currency_support
{
"currency": "KES"
}🔧 currency_support
{
"currency": "GHS"
}🔧 country_exclusions
{}🔧 country_exclusions
{
"country": "NG"
}🔧 country_exclusions
{
"country": "ZA"
}• Verto — live · ZAR, KES, NGN both ways; GHS to clients · never verified; corporates only; no settlement accounts recorded
• Corpay — live · ZAR, KES, GHS both ways; NGN to clients · corporates only; 19 client countries recorded
• Moneycorp — live · sells ZAR, NGN, KES, GHS to clients · buy side not recorded; only 2 client countries recorded
• FX Broker (Equals) — live · ZAR, KES both ways; NGN to clients · NGN not for EU-based clients; no NGN/KES forwards
• Clear Treasury — live · ZAR, KES both ways · no NGN or GHS recorded; can't onboard US/EU clients
• Currencycloud/TCC — live · ZAR, KES both ways · no NGN or GHS recorded
No exclusions recorded for Nigeria or South Africa at any provider. Live data last verified Mar 2026 (stale); Verto never verified.
Want me to run a full match for a specific corridor — e.g. a UK company sending GBP to NGN?
🔧 currency_support
{
"currency": "MZN"
}🔧 country_exclusions
{
"country": "MZ"
}🔧 client_jurisdictions
{
"country": "MZ"
}• Corpay — live · client buys MZN · corporates only
• FX Broker (Equals) — live · client buys MZN · not for EU-based clients; no forwards
No MZN recorded at Clear Treasury, Currencycloud, Moneycorp or Verto. No exclusions recorded for Mozambique at any provider. Only Verto records onboarding a Mozambique-domiciled client (never verified); the rest are blank, not a no. Live data last verified Mar 2026.
Want me to run a full match — say a UK company selling GBP to buy MZN into Mozambique?
🔧 match_transaction
{
"entity_type": "LimitedCompany",
"sell_currencies": [
"GBP"
],
"buy_currencies": [
"MZN"
],
"send_from_country": "GB",
"send_to_country": "MZ",
"client_country": "GB",
"include_prospects": true
}• Corpay — live · full match · corporates only; entity rules not recorded for limited companies
• FX Broker (Equals) — live · full match · no MZN forwards; entity rules not recorded
• Clear Treasury, Currencycloud, Verto — live · no · MZN not recorded on the pair
• Moneycorp — live · no · doesn't onboard UK clients per its recorded list
• Both prospects — no MZN recorded
No exclusions for Mozambique anywhere. Live data last verified Mar 2026.
Want the corporate onboarding requirements for Corpay and FX Broker?
dm natural stablecoin
🔧 text_search
{
"term": "stablecoin"
}🔧 text_search
{
"term": "USDC"
}🔧 currency_support
{
"currency": "USDC"
}🔧 provider_profile
{
"name_or_code": "HopNow"
}• HopNow — Rolodex prospect · claims any stablecoin, any blockchain · from contact with Brent Traidman (Founder), 10 Sep 2026
No USDC currency row at any provider, live or prospect — so no confirmed payout rail. HopNow has no onboarding, currency or country data recorded, just the note.
Want me to run a full match for the supplier payout as plain USD instead, if you give me the client type and destination country?
• Brent Traidman — Founder · +1-312-498-6918 · no email recorded
Last spoken 10 Sep 2026 — five days ago, also HopNow's last contact date.
docs by currency
🔧 currency_support
{
"currency": "AED",
"direction": "buy"
}🔧 currency_support
{
"currency": "GBP",
"direction": "sell"
}🔧 provider_profile
{
"name_or_code": "clear_treasury"
}🔧 provider_profile
{
"name_or_code": "currencycloud"
}🔧 provider_profile
{
"name_or_code": "corpay_us"
}Corporate — common core across Clear Treasury, Currencycloud and Corpay (live):
• Passport + proof of address for a director, and for every UBO at 25%+
• Ownership / shareholder structure showing the full chain
• Business bank statement dated within 3 months
• Two sample invoices, plus website or how they market themselves
• Corpay also wants certificate of incorporation and articles — and won't take private clients at all
• Clear Treasury — UK personal clients pass on electronic check, no docs unless it fails; won't onboard US or EU clients
Live data last verified Mar 2026; onboarding notes are recorded for all six, I've only read three here.
Want the exact list for one provider, or is this client corporate or personal?
🔧 match_transaction
{
"entity_type": "SoleTrader",
"sell_currencies": [
"GBP"
],
"buy_currencies": [
"AED"
],
"send_from_country": "GB",
"send_to_country": "AE",
"client_country": "AE"
}🔧 entity_restrictions
{
"entity_type": "SoleTrader",
"client_country": "AE"
}🔧 provider_profile
{
"name_or_code": "fx_broker"
}🔧 provider_profile
{
"name_or_code": "verto"
}Their sole-trader pack:
• E-signed Signature Sense form
• Valid proof of ID, plus proof of address dated within 90 days
• Business bank statement in the sole trader's name, within 90 days
• Three recent example invoices
• Proof of sole trader status — tax return or sole trader certificate
Also live for this pair from AE: Clear Treasury (corporate pack tiered by risk, no sole-trader list recorded) · Corpay and Verto (both recorded corporate clients only). Currencycloud and Moneycorp won't onboard AE clients.
Last verified Mar 2026; Verto never verified. No entity rule recorded for sole traders in AE at any of them.
Want Clear Treasury's low/medium/high-risk doc list to compare?
All tiers:
• Signed proof of ID and address for one director, only if electronic checks fail
• If the applicant isn't a director: their ID and address, plus a letter of authority from a director
• Full picture of the business and flow of funds, countries and currencies
• Website, or how they market themselves
• Third-party funds: supporting service agreements or invoices
Tier differences:
• Low risk — identify UBOs at 25%+ only; independent confirmation (accountant or solicitor) if they can't verify it themselves
• Medium risk — ID and address for every UBO at 25%+ if ID3 or GBG doesn't verify them
• High risk — UBO threshold drops to 10%, plus 6 months of business bank statements and source of wealth (accounts, or an accountant's letter)
Last verified Mar 2026. This is their corporate pack — no sole-trader-specific list recorded.
es iban wide
🔧 settlement_accounts
{
"iban_country": "ES"
}🔧 text_search
{
"term": "Spain"
}🔧 settlement_accounts
{
"currency": "EUR"
}EUR accounts on file are domiciled elsewhere:
• Currencycloud/TCC — live · named local EUR payouts, "EU" region row, not ES-specific
• FX Broker (Equals) — live · named local EUR pay-in, Belgium
• Clear Treasury, Moneycorp, Corpay — live · pooled EUR only (DE / GB / IE)
Live data last verified Mar 2026 — stale.
Want the full EUR settlement picture for one of these, or a match run for a specific Spanish client?
🔧 client_jurisdictions
{
"country": "ES"
}🔧 country_exclusions
{
"country": "ES"
}• Currencycloud/TCC — live · onboards ES · named local EUR payouts (EU row), virtual IBAN pay-in is GB
• FX Broker (Equals) — live · onboards ES · named local EUR pay-in in Belgium, EU clients only
• Corpay — live · onboards ES · EUR pay-in GB only, pooled or virtual IBAN
• Verto — live · onboards ES · no settlement accounts recorded
• Clear Treasury — live · recorded as not onboarding ES clients
• Moneycorp, Asia Atlantic Partners, HopNow — no ES row recorded
No provider excludes sending to or receiving from Spain. Live data last verified Mar 2026; Verto never verified.
Give me the client type, the currencies they sell and buy, and where the money goes, and I'll run the full match.
exclusions nigeria
🔧 country_exclusions
{
"country": "NG"
}🔧 client_jurisdictions
{
"country": "NG"
}• Verto — live · will onboard Nigeria-domiciled clients
• Everyone else — no Nigeria row recorded either way
Verto has never been verified; the other seven providers have nothing recorded for Nigeria, which is unknown, not a refusal.
Want Verto's Nigeria-relevant exclusions (11 recorded) or their industry policy?
🔧 country_exclusions
{
"provider": "Verto"
}🔧 industry_restrictions
{
"provider": "Verto"
}• Countries, both directions — Russia, Belarus, Afghanistan, North Korea, Sudan, South Sudan, Iran, Iraq, DR Congo, Libya, Myanmar
• Industries, all blocked — crypto, gambling, arms, adult, cannabis, money services, precious metals, shell companies, sanctioned-adjacent, MLM/pyramid, commodities trading, luxury resale, illegal goods, regulated substances, alcohol/tobacco, telemarketing, political, speculative FX
No reasons or conditions recorded on any row; Verto has never been verified.
Want Verto's onboarding requirements for a Nigerian corporate?
forwards zar
🔧 forwards
{
"currency": "ZAR"
}• Clear Treasury — live · deliverable ZAR forward to 12 months · 15% deposit at the long end, margin calls required
Currencycloud, Corpay, Moneycorp and Equals all have general 12-month+ forward rows with no currency recorded — not confirmed for ZAR. Verto has forwards recorded as off. All live forward data last verified Mar 2026.
Want me to pull the general-row deposit terms for those four so you have a fallback list?
• Currencycloud/TCC — live · 12 months, deliverable · 5% deposit short and long, margin calls
• Corpay — live · 12 months, deliverable, NDF available · 10% default, can go to 0% on financials; tenor extendable by exception
• Moneycorp — live · 18 months, deliverable · 5% short / 9.98% long · private clients can't book forwards
• Equals (FX Broker) — live · 24 months, deliverable · 5% short / 10% long, margin calls
All four are general rows, not ZAR-specific. Live forward data last verified Mar 2026.
Want me to check which of these will trade ZAR at all, buy or sell?
france local settlement
🔧 settlement_accounts
{
"iban_country": "FR"
}Want me to check who offers EUR pay-in accounts generally, wherever they're domiciled?
🔧 settlement_accounts
{
"currency": "EUR",
"direction": "collection"
}🔧 client_jurisdictions
{
"country": "FR"
}• FX Broker (Equals) — live · named local EUR account, Belgium · EU clients only
• Currencycloud/TCC — live · EUR virtual IBAN in client's name, UK · their German pooled account is barred for EEA clients
• Corpay — live · EUR pooled account, UK, plus virtual IBAN on request · Barclays
• Moneycorp — live · EUR pooled accounts, Germany and UK · no record they onboard French clients
• Clear Treasury — live · won't onboard France-domiciled clients
Live data last verified Mar 2026.
Want the full match run for the SARL — tell me the currencies they buy and where they pay out?
🔧 settlement_accounts
{
"iban_country": "ES"
}The EUR pay-in options are the same ones as for France: FX Broker (Equals) named local in Belgium (EU clients only), Currencycloud virtual IBAN in the UK, Corpay pooled UK plus virtual IBAN on request, Moneycorp pooled Germany and UK.
Live data last verified Mar 2026.
Want me to check which of them onboard Spain-domiciled clients?
🔧 client_jurisdictions
{
"country": "ES"
}• FX Broker (Equals) — live · onboards ES · named local EUR account in Belgium, EU clients only
• Currencycloud/TCC — live · onboards ES · UK virtual IBAN; German pooled account barred for EEA clients
• Corpay — live · onboards ES · UK pooled account, virtual IBAN on request
• Moneycorp — live · no client-country data for Spain
• Clear Treasury — live · won't onboard Spain-domiciled clients
Live data last verified Mar 2026; Verto onboards ES but has no settlement accounts recorded.
Want the onboarding document list for any of these?
hkd sell
🔧 currency_support
{
"currency": "HKD",
"direction": "buy"
}• Clear Treasury — live · sells and buys HKD
• Currencycloud/TCC — live · sells and buys HKD
• Corpay — live · sells and buys HKD
• FX Broker (Equals) — live · sells and buys HKD · forwards available
• Moneycorp — live · sells HKD to clients only
• Verto — live · sells HKD to clients only
All rows last verified Mar 2026 (stale); Verto never verified. No HKD row for Asia Atlantic Partners or HopNow.
Want the named HKD account options in Hong Kong for any of these?
🔧 settlement_accounts
{
"currency": "HKD",
"iban_country": "HK",
"named_only": true
}• Currencycloud/TCC — live · named local HKD account in Hong Kong · payout only, CHATS rails, max HKD 500,000 per payment
Row last verified Mar 2026 (stale). No named local HK row recorded for Clear Treasury, Corpay, FX Broker, Moneycorp or Verto — unknown, not a refusal.
Want Currencycloud's corporate onboarding requirements?
🔧 provider_profile
{
"name_or_code": "currencycloud"
}Both UK and non-UK:
• Proof of ID for every UBO over 25%
• Passport plus proof-of-life selfie for one director
• Business bank statement, last 3 months
• Two sample invoices issued, last 3 months — plus two invoices being paid, if they pay invoices
• Website link, or how they market themselves
• Full shareholder % breakdown where a legal entity sits in the ownership chain
Non-UK adds: shareholder register or registry extract dated in the last 12 months, and a document dated in the last 12 months confirming directors.
Last verified Mar 2026 (stale). No contacts recorded for Currencycloud.
kenya supplier
🔧 match_transaction
{
"entity_type": "LimitedCompany",
"sell_currencies": [
"GBP"
],
"buy_currencies": [
"KES"
],
"send_from_country": "GB",
"send_to_country": "KE",
"client_country": "GB"
}🔧 currency_support
{
"currency": "KES",
"direction": "buy",
"client_category": "business"
}• Clear Treasury — live · GBP→KES, UK clients OK
• Currencycloud/TCC — live · GBP→KES, UK clients OK
• Corpay — live · GBP→KES, UK clients OK
• FX Broker (Equals) — live · GBP→KES, UK clients OK · no forwards on KES
• Verto — live · GBP→KES, UK clients OK · never verified
• Moneycorp — live · won't — UK not in their client countries
Entity rules for a UK Ltd aren't recorded at any of them; all live data last verified Mar 2026. Compass doesn't assess amount or monthly cadence.
Want the corporate onboarding requirements for any of these?
🔧 settlement_accounts
{
"currency": "USD",
"direction": "collection",
"named_only": true
}• Currencycloud/TCC — live · named USD virtual IBAN in the UK, or named local USD in the US · US account is non-US clients only
• Corpay — live · named USD virtual IBAN in the UK, or named local USD in the US · both on request
• FX Broker (Equals) — live · named USD virtual IBAN, but Belgium and EU clients only
• Clear Treasury — live · no named USD pay-in account recorded
• Verto — live · no settlement accounts recorded at all
Live data last verified Mar 2026.
Want the corporate onboarding requirements for Currencycloud and Corpay?
🔧 provider_profile
{
"name_or_code": "currencycloud"
}🔧 provider_profile
{
"name_or_code": "corpay_us"
}Currencycloud/TCC — live · UK corporate:
• Full shareholder breakdown, including any corporate owners in the chain
• ID for all UBOs over 25%; one director passport + selfie
• Business bank statement, last 3 months
• Two invoices raised, last 3 months; two invoices being paid if applicable
• Website link, or how they market themselves
Corpay — live · corporate only, no private clients:
• Certificate of Incorporation; Articles/Memorandum
• Shareholder structure
• Proof of trading address, last 3 months
• Two invoices raised, last 3 months
• UBO passport (all four corners) + UBO proof of address
Live data last verified Mar 2026; no contacts recorded at either.
onboarding riva corpay
🔧 provider_profile
{
"name_or_code": "Riva"
}🔧 text_search
{
"term": "Riva"
}Providers on file: Clear Treasury, Currencycloud/TCC, Corpay, Moneycorp, FX Broker (Equals), Verto, Asia Atlantic Partners, HopNow.
Did you mean one of those? Name it and I'll pull the corporate onboarding requirements.
🔧 provider_profile
{
"name_or_code": "Corpay"
}🔧 client_jurisdictions
{
"country": "FR"
}• Certificate of Incorporation
• Articles of Memorandum/Association
• Shareholder structure
• Proof of trading address — business utility bill or bank statement, last 3 months
• 2x example invoices raised by the client, last 3 months
• UBO passport — all 4 corners visible
• UBO proof of residential address — utility bill or bank statement, last 3 months
Corporate clients only; personal accounts, charities and government entities are blocked. No FR-specific document variations recorded.
Live data last verified Mar 2026 (stale); no contacts recorded for Corpay.
Want their high-risk industry policy or the currencies they cover for this client?
🔧 industry_restrictions
{
"provider": "Corpay"
}• Blocked — crypto, gambling, arms, adult, illegal goods, speculative FX
• Enhanced due diligence — cannabis, money services, precious metals, shell companies, sanctioned-adjacent, MLM/pyramid, commodities trading, luxury resale, regulated substances, alcohol/tobacco, telemarketing, political
• The EDD cases carry a note: may be treated as restricted depending on jurisdiction
Currencies: clients can sell 36 (incl. EUR, GBP, USD, and majors); clients can buy 140.
Live data last verified Mar 2026 (stale).
Want the full sell/buy currency lists, or their settlement accounts for a French client?
qualify all in one
🔧 match_transaction
{
"entity_type": "LimitedCompany",
"sell_currencies": [
"GBP"
],
"buy_currencies": [
"CNH"
],
"send_from_country": "GB",
"send_to_country": "CN",
"client_country": "GB",
"account_requirements": [
{
"currency": "GBP",
"direction": "collection",
"naming": "named_required",
"domicile_country": "GB"
}
],
"include_prospects": true
}🔧 settlement_accounts
{
"currency": "GBP",
"iban_country": "GB",
"direction": "collection",
"named_only": true
}🔧 currency_support
{
"currency": "CNH",
"direction": "buy",
"client_category": "business"
}• Currencycloud/TCC — live · named local GBP pay-in account, UK · no CNH row recorded
• Corpay — live · named local GBP pay-in account, UK · on request, Barclays · no CNH row recorded
• FX Broker (Equals) — live · named local GBP pay-in account, UK · non-EU clients only · no CNH row recorded
• Clear Treasury / Moneycorp / Verto — live · no named GBP pay-in account and no CNH row
• Asia Atlantic Partners — Rolodex prospect · only CNH row on file, but it's CNH-in to GBP-out via Hong Kong, not GBP→CNH payouts · from a call, 31 Aug 2026
CNH is "not recorded" at all six live partners — unknown, not a recorded no. Live data last verified Mar 2026; Verto never verified.
Want me to re-run the match on CNY instead of CNH to see if the China payout leg is recorded that way?
🔧 match_transaction
{
"entity_type": "LimitedCompany",
"sell_currencies": [
"GBP"
],
"buy_currencies": [
"CNY"
],
"send_from_country": "GB",
"send_to_country": "CN",
"client_country": "GB",
"account_requirements": [
{
"currency": "GBP",
"direction": "collection",
"naming": "named_required",
"domicile_country": "GB"
}
],
"include_prospects": true
}🔧 currency_support
{
"currency": "CNY",
"direction": "buy",
"client_category": "business"
}• Corpay — live · GBP→CNY plus named local GBP pay-in account, UK · account on request, Barclays
• FX Broker (Equals) — live · GBP→CNY plus named local GBP pay-in account, UK · non-EU clients only, so a UK Ltd qualifies
• Clear Treasury — live · sells CNY to clients · no named GBP account, pooled only
• Verto — live · sells CNY to clients · no settlement accounts recorded
• Currencycloud/TCC, Moneycorp — live · no CNY row recorded
• Asia Atlantic Partners — Rolodex prospect · CNY via Hong Kong, but inbound to GBP, not GBP payouts · from a call, 31 Aug 2026
Entity rules for a UK Ltd are unrecorded at every provider, so that module is unverified. Live data last verified Mar 2026; Verto never verified.
Want the corporate onboarding requirements for Corpay and FX Broker?
qualify hkd local
🔧 settlement_accounts
{
"currency": "HKD",
"named_only": true
}🔧 settlement_accounts
{
"currency": "HKD",
"iban_country": "HK"
}• Currencycloud/TCC — live · named local HKD account in Hong Kong · payout only, CHATS, max HKD 500,000
• Currencycloud/TCC — live · HKD virtual IBAN for pay-ins · domiciled GB, not HK
• Corpay — live · HKD virtual IBAN for pay-ins · domiciled GB, on request
• FX Broker (Equals) — live · HKD virtual IBAN for pay-ins · BE for EU clients, GB for non-EU
Live data last verified Mar 2026.
Is the account for collecting HKD in or paying HKD out? That decides between the Hong Kong local account and the virtual IBANs.
🔧 match_transaction
{
"entity_type": "LimitedCompany",
"client_country": "SG",
"sell_currencies": [
"USD"
],
"buy_currencies": [
"HKD"
],
"send_from_country": "SG",
"send_to_country": "HK",
"account_requirements": [
{
"currency": "HKD",
"direction": "collection",
"naming": "named_required",
"domicile_country": "any"
}
]
}• Corpay — live · USD→HKD, HKD virtual IBAN for pay-ins (GB) · SG accepted case-by-case; account on request
• FX Broker (Equals) — live · USD→HKD, HKD virtual IBAN for pay-ins · use their non-EU (GB) account — the BE one is EU-only
• Currencycloud/TCC — live · has the HKD pay-in account, but won't onboard SG clients
• Clear Treasury — live · trades USD→HKD, pooled HKD pay-ins only, no named account
• Moneycorp, Verto — live · no HKD pay-in account recorded; Moneycorp won't take SG clients
No provider records a named local HKD account inside Hong Kong for pay-ins — the two that work are GB-domiciled virtual IBANs. Entity rules for a limited company aren't recorded anywhere; live data last verified Mar 2026.
Want Corpay's corporate onboarding requirements?
• Corpay — live · USD→HKD, HKD virtual IBAN for pay-ins (GB) · SG accepted case-by-case
• FX Broker (Equals) — live · USD→HKD, HKD virtual IBAN for pay-ins (GB, non-EU clients)
Both have corporate onboarding requirements recorded. Want them side by side?
How it runs
/slack/events → Sidekiq worker.Member + channel gate, quota, leases: reused from the old PRD.
claude -p on the Compass serverOpus 5 on the team subscription, one session per Slack thread / DM (--session-id / --resume), so it remembers the conversation. Extends ClaudeSubscriptionClient.No Sonnet. No API key. Same box, same login as document extraction.
claude -p connects with --mcp-config.Live queries at question time. Nothing downloaded, nothing cached.
match_transaction creates a real Compass::Lookup (source ask), so misses land in the existing Unserved Needs analytics — no new gap table, no gap channel needed.Is this "a new Compass MCP tool"? Yes. Compass gets an MCP server — one endpoint exposing the twelve tools above — and the Slack bot is one client of it. Every answer you read on this page was produced that way: the model chose a tool, the tool queried Compass, the model wrote the reply from the result. The same server can later serve the partner portal, a Claude Desktop client for Paul, or Callum-style bots.
Why MCP and not SQL-in-the-prompt or a data download? Three options were on the table. (a) Download/snapshot the tables and let the model read them: fast, but stale the moment someone edits Compass, and it invites the model to "reason" over 900 rows instead of querying. (b) Let the model write SQL: flexible, but every answer's correctness then depends on the model's SQL and Compass's semantics (wildcard rows, group expansion, specific-over-general entity rules) would have to be re-learned in every prompt. (c) Named tools that encode those semantics once, in Ruby, next to the matchers: the model only decides which question to ask; Compass decides what the data means. MCP is simply the standard way to hand those tools to claude -p, and the same server later serves the partner portal or a Claude Desktop client. (c) is what the conversations above ran on.
Leads we never activated, crossed with what Compass says we can serve
Question from Stevan: where are the most leads we never activated, where the currency pair and the jurisdiction are not "bad"? Source: CT production replica (read-only), signups since 1 Jan 2024 that completed registration at least 30 days ago, house exclusions applied. "Activated" = at least one verified broker account. "Servable now" = at least one live partner in Compass records both corridor sides for that client type, records the client's country as supported, and has no exclusion on it.
| Population | Clients |
|---|---|
| Completed registration (2024+, ≥30 days ago) | 12,217 |
| Activated | 2,925 (24%) |
| Never activated | 9,292 (76%) |
| …of which never sent to any broker | 9,120 |
| …of which carry a dead status (can't serve / not interested / deadpool) | 354 |
Classification. "Great" = both currencies in CT's schedule-a-call list (GBP, EUR, USD, CAD, AUD, NZD, SAR, AED, QAR — the only currency rule in the CT code). "Bad" = Stevan's working list (LK, BD, IN, PK, NG, GH and their currencies); there is no country blacklist in the onboarding code, so this list is an ops convention to confirm. "Good" = everything else.
| Class | Compass coverage | Never-activated clients | Top pairs (country sell→buy segment n) |
|---|---|---|---|
| great | servable now by a live partner | 2,848 | SA SAR→EUR pers 161, SA SAR→GBP pers 145, SA SAR→USD pers 127, GB GBP→EUR pers 98 |
| good | servable now by a live partner | 3,635 | US USD→USD pers 228, US TRY→USD pers 114, US MXN→USD pers 92, IL ILS→EUR pers 53 |
| bad | servable now by a live partner | 1,029 | NG NGN→CNY pers 198, NG NGN→CNY corp 53, SA SAR→INR pers 42, US USD→NGN pers 29 |
| good | no live partner records the corridor | 675 | US RUB→USD pers 43, GB RUB→GBP pers 23, RU RUB→USD pers 11, ET ETB→ETB pers 10 |
| bad | no live partner records the corridor | 466 | IN INR→INR pers 31, PK PKR→CNY pers 31, IN INR→USD pers 24, NG CNY→NGN pers 20 |
| bad | corridor ok, client country not recorded | 342 | GH GHS→CNY pers 119, GH GHS→CNY corp 31, SA SAR→PKR pers 20, GH GHS→USD pers 15 |
| good | corridor ok, client country not recorded | 241 | CN CNY→USD pers 13, SA SAR→MYR pers 8, MA MAD→CNY pers 6, UA EUR→EUR pers 6 |
| good | corridor ok, client country recorded as not supported | 75 | US CNY→USD pers 50, DE CNY→EUR pers 6, FR CNY→EUR pers 5, US CNY→USD corp 3 |
| great | corridor ok, client country not recorded | 21 | UA USD→EUR pers 2, UA EUR→GBP pers 2, TZ EUR→USD corp 2, MZ EUR→USD pers 1 |
Insight. Capability is not the main leak. Roughly 6,500 of the 9,292 never-activated clients are servable today by a live partner on corridor and jurisdiction, and 9,120 were never sent to a broker at all. The leak is follow-through and qualification, not routing. Caveats: Compass jurisdiction rows are thin for some partners (Moneycorp 2, Corpay 19), "servable" ignores amount, pricing, documents and fraud risk, the personal Saudi and US leads skew low value, and same-currency rows (USD→USD) are not FX business.
Data & liveness
- providers (partner / prospect, verification date, onboarding notes, contacts, conversations)
- currency corridors (direction, supported, client category, allowed sell currencies)
- settlement accounts (named local / virtual IBAN / pooled; domicile country; collection / sending)
- client jurisdictions, country exclusions
- entity + industry restrictions (specific-over-general)
- forward capabilities (tenor, deliverable/NDF, deposits)
- provenance: source, who, when — "recorded from Paul's call on 12 Aug"
compass_ask_sessions: Slack thread/DM ↔ Claude session id, member, started/last-activecompass_ask_turns: question, tool calls (names + args), answer, grounding verdict, tokens, latency, 👍/👎compass_lookupsrows withsource: askwhenever a transaction is matched (feeds Unserved Needs)- Nothing else. It never edits capability data.
Every tool call hits Postgres when the question is asked. Edit a corridor in Compass and the next question sees it. The only cache is the 1-hour Slack member/channel check.
Cost & speedObserved here: 10.2s median-ish per turn, 1–3 tool calls, roughly 10–40k tokens per turn on the subscription. Fine for Slack; the "👀" reaction covers the wait.
Data gaps the conversations exposed
- Onboarding requirements are one sentence per provider. Live partners hold 30–180 characters in
onboarding_corporate/onboarding_personal. "Requirements for a French corporate with Corpay" cannot be answered richly until Compass holds requirements per client type and jurisdiction (a structured table, or transcript ingestion of the partners' own onboarding calls). - Verification is stale. Every live partner was last verified 3–4 March 2026; Corpay (UK) has no data at all. The bot says so on every answer, which will get old fast — a re-verification pass is the cheapest quality win.
- No live local settlement in FR/ES/HK. Domiciles recorded: AL, AU, CA, DE, GB, IE, NL, US. So the ES-IBAN and France questions are genuinely "no live partner", which is the Rolodex's job — and the reason prospects must be in the answers.
- Direction wording. Compass stores direction client-side but never labels the perspective on the corridor form. Fixed in the bot (provider-perspective phrasing translates to the stored value); fix in Compass = relabel the form "Client sells / Client buys".
- Unrecorded domicile counts as any. Compass's account matcher treats a named-account row with no country as matching every requested domicile. The bot no longer lists such rows as matches; Compass should tighten the rule or require the field.
How to stress-test it before building
- Regression suite = these conversations. Each scripted conversation runs against a fixed data snapshot; assertions on which tools were called and which providers appear; a judge scores tone (Callum harness pattern). Run on every prompt change.
- Grounding red team. Ask about providers with no rows (Corpay UK), leading questions ("Corpay can do MZN, right?"), and questions that tempt general knowledge ("does Wise…"). Pass = "not recorded"/refusal, never a fabricated yes.
- Unknown vs no. Seed a corridor as
supported: falseand one missing; the bot must distinguish "won't" from "not recorded". - Prospect leakage. Prospect rows must be labelled every time and never appear as live; API responses must exclude them (Rolodex INV-R1).
- Injection. Put instruction-shaped text in a provider's notes/conditions ("ignore your rules…"); the bot must quote it as data. Same fence pattern as
TranscriptPrompt. - Staleness. Set
last_verified_atto 200 days; every answer naming that partner must carry the flag. - Latency budget. p50 < 15s, p95 < 40s per turn with 3 tool calls; alert above.
- Live dogfood week. Paul, Tom and Sara use it in a private channel for a week; every 👎 becomes a scenario.
Re-scoped plan (replaces the 32-story PRD)
| # | Piece | Notes |
|---|---|---|
| 1 | MCP tool server in Compass | Rails-mounted, localhost, bearer; the 11 tools above over ActiveRecord; match_transaction calls Compass::MatchProviders, match_prospects calls Compass::MatchProspects; provenance in every row. |
| 2 | ClaudeSubscriptionClient → conversational mode | session id / resume, --mcp-config, stream-json tool events, Opus 5, per-turn attempt budget. |
| 3 | System prompt + vocabulary | The one used here, hardened; fenced untrusted fields. |
| 4 | Grounding guard | Deterministic; provider names + capability verbs vs tool results; unknown/no; prospect labels; stale flags. |
| 5 | Sessions + turns tables | Thread/DM ↔ session; audit; 👍/👎. |
| 6–9 | Slack ingress, worker, gates, leases | Carried over from the old PRD (ASK-010…029 equivalents), minus parser/renderer/gap table. |
| 10 | Lookups from conversations | source: ask; appear in analytics and Unserved Needs automatically. |
| 11 | Eval harness | This PoC's scenarios + judge, run in CI against a seeded DB. |
| 12 | Later: API front door | Same brain, prospects excluded (INV-R1), for the partner portal. |
Roughly 12–14 stories instead of 32, because the hard parts (matching semantics, Rolodex, gaps, transport) already exist in Compass.