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. In production the same tools read the live tables and call the real matchers.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?
• FX Broker (Equals) — live · widest: ZAR, KES, NGN, GHS, MAD, EGP · NGN, GHS, EGP are client-buy only
• Corpay US — live · ZAR, KES, NGN, GHS, MAD · all client-buy only
• Clear Treasury — live · ZAR and KES, buy and sell
• Currencycloud/TCC — live · ZAR and KES, buy and sell
• Riva — Rolodex prospect · NGN, KES, GHS both ways; local rails and mobile money payouts · from Stevan's founder call, 30 Aug 2026
No exclusions recorded for Nigeria or South Africa at any provider. Live data last verified Mar 2026 (stale); Moneycorp, Corpay and OpenPayd have no African currency rows.
Want me to run a full match for a specific corridor — say a UK company paying ZAR into South Africa?
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 US — live · sells HKD to clients
• Moneycorp — live · sells HKD to clients
• FX Broker (Equals) — live · sells and buys HKD
• OpenPayd — Rolodex prospect · sells and buys HKD, business clients only · from Paul's call, 12 Aug
Live data last verified Mar 2026 (stale); no HKD row for Corpay or Riva.
Want me to check who has a named HKD account in Hong Kong?
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.
• OpenPayd — Rolodex prospect · EUR virtual IBAN in France, pay-in · from Paul's call, 12 Aug
Currencycloud has general settlement rows with no domicile recorded — not confirmed for FR.
Want OpenPayd's corporate onboarding requirements or their contact?
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?
• OpenPayd — Rolodex prospect · EUR virtual IBAN in France, pay-in · from Paul's call, 12 Aug
Currencycloud has general settlement rows with no domicile recorded — not confirmed for FR.
Want OpenPayd's corporate onboarding requirements or their contact?
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 US — live · sells HKD to clients
• Moneycorp — live · sells HKD to clients
• FX Broker (Equals) — live · sells and buys HKD
• OpenPayd — Rolodex prospect · sells and buys HKD, business clients only · from Paul's call, 12 Aug
Live data last verified Mar 2026 (stale); no HKD row for Corpay or Riva.
Want me to check who has a named HKD account in Hong Kong?
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?
• OpenPayd — Rolodex prospect · EUR virtual IBAN in the client's name, Spain, for pay-ins · from Paul's call, 12 Aug 2026
No live partner has an ES-domiciled account recorded; Currencycloud has general pay-in and named-account rows with no domicile recorded — not confirmed for ES.
Want OpenPayd's onboarding requirements or contact?
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 for a concrete corridor, e.g. a UK company selling GBP and buying MZN into Mozambique? | delivered | GB limited company selling GBP, buying MZN into Mozambique — one full match. |
| dm natural stablecoin | Want the full note from that call, or Riva's onboarding requirements for a corporate? | delivered | Both, from the 30 Aug call: |
| docs by currency | Want Corpay US's named AED account setup for the payout side? | delivered | Corpay US holds AED named accounts in the client's own name, domiciled in the UK, both directions. |
| es iban wide | Want OpenPayd's onboarding requirements or contact? | delivered | OpenPayd — Rolodex prospect, from Paul's call, 12 Aug 2026. |
| forwards zar | Want me to run a full match for a specific client so we can confirm who'd take the ZAR trade end to end? | delivered | I have the forward leg: ZAR, 12 months, deliverable. |
| france local settlement | Want me to run the full match for a Spanish SL collecting EUR, to see who else could onboard them? | delivered | Four can onboard a Spanish SL for EUR pay-ins; only OpenPayd has the Spanish IBAN. |
| hkd sell | Want OpenPayd's contact and onboarding notes? | delivered | OpenPayd — Rolodex prospect, last contact 20 Aug. |
| kenya supplier | Want Currencycloud's corporate onboarding requirements? | delivered | Currencycloud/TCC — live partner — corporate onboarding is API-based. |
| onboarding riva corpay | Want the providers that will onboard a French corporate instead? | delivered | Four providers will onboard a French-domiciled client; two live, two prospects. |
| qualify all in one | Want the corporate onboarding requirements for FX Broker (Equals)? | delivered | FX Broker (Equals) corporate onboarding — five items recorded. |
| qualify hkd local | Want the corporate onboarding requirements for both? | delivered | Corporate onboarding documents for both: |
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"
}🔧 currency_support
{
"currency": "MAD"
}🔧 currency_support
{
"currency": "EGP"
}🔧 country_exclusions
{
"country": "NG"
}🔧 country_exclusions
{
"country": "ZA"
}• FX Broker (Equals) — live · widest: ZAR, KES, NGN, GHS, MAD, EGP · NGN, GHS, EGP are client-buy only
• Corpay US — live · ZAR, KES, NGN, GHS, MAD · all client-buy only
• Clear Treasury — live · ZAR and KES, buy and sell
• Currencycloud/TCC — live · ZAR and KES, buy and sell
• Riva — Rolodex prospect · NGN, KES, GHS both ways; local rails and mobile money payouts · from Stevan's founder call, 30 Aug 2026
No exclusions recorded for Nigeria or South Africa at any provider. Live data last verified Mar 2026 (stale); Moneycorp, Corpay and OpenPayd have no African currency rows.
Want me to run a full match for a specific corridor — say a UK company paying ZAR into South Africa?
🔧 currency_support
{
"currency": "MZN"
}🔧 country_exclusions
{
"country": "MZ"
}🔧 client_jurisdictions
{
"country": "MZ"
}🔧 text_search
{
"term": "Mozambique"
}• FX Broker (Equals) — live · client buys MZN only · no recorded row for clients selling MZN
No exclusions recorded for Mozambique at any provider, and no provider records whether they'd onboard an MZ-domiciled client. MZN is not recorded for the other seven — unknown, not a no. Live data last verified Mar 2026 (stale).
Want me to run a full match for a concrete corridor, e.g. a UK company selling GBP and buying 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
}• FX Broker (Equals) — live · full match on currency, jurisdiction and exclusions · limited-company rule not recorded
• Clear Treasury — live · no · GBP→MZN not supported
• Currencycloud/TCC — live · no · GBP→MZN not supported
• Corpay US — live · no · GBP→MZN not supported, and GB not in their client countries
• Moneycorp — live · no · same two reasons
• OpenPayd and Riva — Rolodex prospects · no · GBP→MZN not supported
Corpay has no data recorded at all. Live data last verified Mar 2026 (stale).
Want the onboarding requirements for FX Broker (Equals)?
dm natural stablecoin
🔧 text_search
{
"term": "stablecoin"
}🔧 text_search
{
"term": "USDC"
}🔧 provider_profile
{
"name_or_code": "Riva"
}• Riva — Rolodex prospect · USDC/USDT both ways, on-chain payouts via pooled account with reference · onboards clients in AE, DE, ES, FR, GB, SE only · from your call with Jonas Lindqvist, 30 Aug 2026
No live partner has any stablecoin row recorded — that's silence, not a refusal.
Want Riva's crypto/high-risk industry policy, or their onboarding requirements for a corporate?
No email or phone recorded in Compass for him.
Want the full note from that call, or Riva's onboarding requirements for a corporate?
Call note — Riva can settle USDC/USDT on-chain and pay out to M-Pesa in Kenya; EUR virtual IBANs in Sweden; onboards corporates in 2–4 days. Participants: you and Jonas Lindqvist.
Corporate onboarding — KYB under their EU payment institution licence (Swedish FSA); corporate docs plus UBO; 2–4 working days.
All of it is prospect intel from that one call — not verified.
Want their high-risk industry policy, or the countries they'll onboard clients from?
docs by currency
🔧 lookup_requirements
{}🔧 currency_support
{
"currency": "AED",
"direction": "buy"
}🔧 currency_support
{
"currency": "GBP",
"direction": "sell"
}• Clear Treasury — live · corporate and personal doc lists recorded
• Currencycloud/TCC — live · corporate and personal doc lists recorded
• Corpay US — live · corporate and personal doc lists recorded
• Moneycorp — live · corporate and personal doc lists recorded
• FX Broker (Equals) — live · corporate and personal doc lists recorded
• OpenPayd — Rolodex prospect · corporate docs only, business clients only · from Paul's call, 12 Aug
Live data last verified Mar 2026 (stale); Corpay and Riva have no AED row recorded.
Tell me the provider and whether the client is a company or an individual, and I'll pull the exact doc list.
🔧 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": "clear_treasury"
}🔧 provider_profile
{
"name_or_code": "corpay_us"
}• Clear Treasury — live · non-EU onboarding: signed passport + proof of address
• Clear Treasury — live · business file: signed director passport + proof of address, shareholder structure letter from solicitor/accountant, UBO 25%+ verification, 6 months bank statements if high-risk
• Corpay US — live · business file: EIN, articles of incorporation, beneficial ownership disclosure
• Corpay US — live · personal route is US SSN + photo ID, so it won't fit a UAE individual
Out: FX Broker blocks sole traders outright; Currencycloud, Moneycorp, OpenPayd and Riva don't onboard UAE clients. Neither provider has a sole-trader rule recorded, so which file applies is unconfirmed. Live data last verified Mar 2026.
Want Corpay US's named AED account setup for the payout side?
🔧 settlement_accounts
{
"currency": "AED",
"named_only": true
}• Corpay US — live · named local AED account, UK-domiciled, payout
• Corpay US — live · named local AED account, UK-domiciled, pay-in
• No AED account domiciled in the UAE recorded for Corpay US
Live data last verified Mar 2026.
Want the same for the GBP pay-in side?
es iban wide
🔧 settlement_accounts
{
"iban_country": "ES"
}• OpenPayd — Rolodex prospect · EUR virtual IBAN in the client's name, Spain, for pay-ins · from Paul's call, 12 Aug 2026
No live partner has an ES-domiciled account recorded; Currencycloud has general pay-in and named-account rows with no domicile recorded — not confirmed for ES.
Want OpenPayd's onboarding requirements or contact?
🔧 provider_profile
{
"name_or_code": "openpayd"
}• Onboarding (corporate) — certificate of incorporation, UBO 25%+, director ID, 3 months statements · 3–5 working days
• Contact — Dana Whitfield, Partnerships lead · no email or phone recorded · prefers email
• Limits — business clients only, personal accounts blocked · won't touch Russia
No personal onboarding notes recorded. All of the above is unverified call intel, not a live integration.
Want their full currency and client-country list?
exclusions nigeria
🔧 country_exclusions
{
"country": "NG"
}🔧 client_jurisdictions
{
"country": "NG"
}🔧 text_search
{
"term": "Nigeria"
}• No exclusion rows for NG across any of the 8 providers, live or prospect.
• No provider has recorded whether they'd onboard a Nigeria-domiciled client either — that's unknown, not a no.
Want me to run a full match for a specific Nigeria payment (currencies, direction, entity type)? That surfaces anything blocking at the corridor level.
forwards zar
🔧 forwards
{
"currency": "ZAR"
}• Clear Treasury — live · ZAR forward to 12 months, deliverable · deposit 10% short-dated, 15% long-dated, margin calls apply
• Currencycloud/TCC — live · general 12-month forward row, not ZAR-specific · 5% deposit
• FX Broker (Equals) — live · general 12-month forward row, not ZAR-specific · 5–10% deposit
• Corpay US — live · general 24-month forward row, not ZAR-specific · 3–5% deposit
Moneycorp has forwards on but no ZAR row; Corpay has no data recorded. All live data last verified Mar 2026.
Want me to run a full match for a specific client so we can confirm who'd take the ZAR trade end to end?
🔧 lookup_requirements
{}To run it I need three things:
1. Client type and country of registration (e.g. UK limited company)?
2. Which currency do they sell, and are they buying ZAR?
3. Where is the money going — ZA, or somewhere else?
france local settlement
🔧 settlement_accounts
{
"iban_country": "FR"
}• OpenPayd — Rolodex prospect · EUR virtual IBAN in France, pay-in · from Paul's call, 12 Aug
Currencycloud has general settlement rows with no domicile recorded — not confirmed for FR.
Want OpenPayd's corporate onboarding requirements or their contact?
🔧 match_transaction
{
"entity_type": "LimitedCompany",
"sell_currencies": [
"EUR"
],
"buy_currencies": [
"EUR"
],
"send_from_country": "FR",
"send_to_country": "FR",
"client_country": "FR",
"account_requirements": [
{
"currency": "EUR",
"direction": "collection",
"naming": "named_required",
"domicile_country": "FR"
}
]
}🔧 client_jurisdictions
{
"country": "FR"
}• Currencycloud/TCC — live · onboards FR, EUR pay-in · named account is Dutch, not French
• FX Broker (Equals) — live · onboards FR, EUR pay-in · named account is UK, not French
• OpenPayd — Rolodex prospect · named EUR virtual IBAN in France, pay-in · from Paul's call, 12 Aug
• Riva — Rolodex prospect · onboards FR · named account is Swedish, not French
Clear Treasury, Corpay US and Moneycorp don't onboard French clients. Live data last verified Mar 2026; entity rules for SARL aren't recorded anywhere, so that's unconfirmed.
Want OpenPayd's corporate onboarding requirements and contact?
🔧 settlement_accounts
{
"iban_country": "ES"
}• OpenPayd — Rolodex prospect · named EUR virtual IBAN in Spain, pay-in · from Paul's call, 12 Aug
Currencycloud's named account rows record no domicile — not confirmed for ES.
Want me to run the full match for a Spanish SL collecting EUR, to see who else could onboard them?
🔧 match_transaction
{
"entity_type": "LimitedCompany",
"sell_currencies": [
"EUR"
],
"buy_currencies": [
"EUR"
],
"send_from_country": "ES",
"send_to_country": "ES",
"client_country": "ES",
"account_requirements": [
{
"currency": "EUR",
"direction": "collection",
"naming": "named_required",
"domicile_country": "ES"
}
]
}• Currencycloud/TCC — live · onboards ES, EUR pay-in · named account is Dutch
• FX Broker (Equals) — live · onboards ES, EUR pay-in · named account is UK
• OpenPayd — Rolodex prospect · named EUR virtual IBAN in Spain · from Paul's call, 12 Aug
• Riva — Rolodex prospect · onboards ES, EUR pay-in · named account is Swedish
Clear Treasury, Corpay US and Moneycorp don't onboard Spanish clients. Live data last verified Mar 2026; no entity rules recorded for an SL, so that part is unconfirmed.
Want OpenPayd's corporate onboarding requirements?
hkd sell
🔧 currency_support
{
"currency": "HKD",
"direction": "buy"
}• Clear Treasury — live · sells and buys HKD
• Currencycloud/TCC — live · sells and buys HKD
• Corpay US — live · sells HKD to clients
• Moneycorp — live · sells HKD to clients
• FX Broker (Equals) — live · sells and buys HKD
• OpenPayd — Rolodex prospect · sells and buys HKD, business clients only · from Paul's call, 12 Aug
Live data last verified Mar 2026 (stale); no HKD row for Corpay or Riva.
Want me to check who has a named HKD account in Hong Kong?
🔧 settlement_accounts
{
"currency": "HKD",
"iban_country": "HK",
"named_only": true
}• OpenPayd — Rolodex prospect · named local HKD account in HK, pay-in · said to be in pilot, unconfirmed · from Paul's call, 12 Aug
Currencycloud has a general named local account row with no currency or domicile recorded — not confirmed for HK.
Want OpenPayd's contact and onboarding notes?
🔧 provider_profile
{
"name_or_code": "openpayd"
}• Contact — Dana Whitfield, Partnerships lead · prefers email · no email or phone recorded
• Onboarding (corporate) — certificate of incorporation, UBO 25%+, director ID, 3 months statements · 3–5 working days
• Caveat — business clients only; personal accounts blocked
• Client countries — GB, IE and 8 EU markets only
• HKD account — "in pilot", to confirm
All from Paul's call with Dana, 12 Aug; no personal onboarding notes recorded.
Want the client countries and named account list side by side for a specific client?
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 · full match, GBP sell / KES buy
• Currencycloud/TCC — live · full match, GBP sell / KES buy
• FX Broker (Equals) — live · full match, GBP sell / KES buy
• Riva — Rolodex prospect · full match on currency and UK client · from Stevan's founder call, 30 Aug
• Corpay US — live · won't, UK clients not in their jurisdiction list
Live data last verified Mar 2026 (stale); entity rules for a UK Ltd aren't recorded at any of them; Compass doesn't assess amounts or monthly cadence.
Want the corporate onboarding requirements for Clear Treasury, Currencycloud or FX Broker?
🔧 match_transaction
{
"entity_type": "LimitedCompany",
"sell_currencies": [
"GBP"
],
"buy_currencies": [
"KES"
],
"send_from_country": "GB",
"send_to_country": "KE",
"client_country": "GB",
"account_requirements": [
{
"currency": "USD",
"direction": "collection",
"naming": "named_required",
"domicile_country": "any"
}
]
}🔧 settlement_accounts
{
"currency": "USD",
"direction": "collection",
"named_only": true
}• Currencycloud/TCC — live · full match; named USD virtual IBAN in the US for pay-in
• Clear Treasury — live · won't; USD pay-in is pooled only
• FX Broker (Equals) — live · only a general named pay-in row, GB-domiciled, no currency recorded — not confirmed for USD
• Riva — Rolodex prospect · no USD pay-in account recorded; from Stevan's call, 30 Aug
• Corpay US — live · has a named USD account, but won't onboard UK clients
Live data last verified Mar 2026 (stale); entity rules for a UK Ltd aren't recorded anywhere.
Want Currencycloud's corporate onboarding requirements?
🔧 provider_profile
{
"name_or_code": "currencycloud"
}• KYB via API — company registration number plus director details
• UK clients — GB is on their supported client list
• Named USD pay-in — virtual IBAN domiciled in the US
• Entity rules — only one recorded (charities in Algeria blocked); nothing against a UK Ltd
Last verified Mar 2026 (stale); no contacts recorded for them.
Want their industry policy checked against the client's sector?
onboarding riva corpay
🔧 provider_profile
{
"name_or_code": "Riva"
}• KYB under their EU payment institution licence (Swedish FSA)
• Corporate documents plus UBO details
• Turnaround 2–4 working days
Unverified intel from one call, not a live integration — nothing else recorded on documents required.
Want their industry policy (one restriction recorded) or the currency and country list?
🔧 provider_profile
{
"name_or_code": "Corpay"
}• Corpay — live partner · no onboarding notes recorded, corporate or personal · no currencies, countries or contacts either
Corpay has never been verified in Compass, so this is a blank record, not a "no".
Want the providers that will onboard a French corporate instead?
🔧 client_jurisdictions
{
"country": "FR"
}🔧 entity_restrictions
{
"client_country": "FR",
"entity_type": "LimitedCompany"
}• Currencycloud/TCC — live · onboards FR clients · corporate onboarding notes recorded
• FX Broker (Equals) — live · onboards FR clients · corporate onboarding notes recorded
• OpenPayd — Rolodex prospect · onboards FR clients · from Paul's capability matrix PDF, 20 Aug
• Riva — Rolodex prospect · onboards FR clients · from Stevan's founder call, 30 Aug
No entity-type restriction recorded for a French limited company at any of them. Live data last verified Mar 2026 (stale); Clear Treasury, Corpay US, Moneycorp and Corpay have no FR row recorded.
Want the corporate onboarding requirements for Currencycloud and FX Broker side by side?
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"
}🔧 currency_support
{
"currency": "CNY",
"direction": "buy",
"client_category": "business"
}🔧 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
}• FX Broker (Equals) — live · GBP→CNY plus named local GBP pay-in account in UK · entity rules for a Ltd not recorded
• Clear Treasury — live · does GBP→CNY, UK clients fine · pooled GBP only, no named account
• Currencycloud/TCC — live · named GBP virtual IBAN in UK · no CNY or CNH recorded
• Corpay US — live · GBP→CNY and named UK GBP account · won't onboard UK-domiciled clients
• Moneycorp, Corpay, OpenPayd, Riva — no CNY route recorded
CNH is not recorded anywhere in Compass — that's unknown, not a refusal; confirm whether the client needs offshore CNH or onshore CNY. Live data last verified Mar 2026; Corpay has nothing recorded.
Want the corporate onboarding requirements for FX Broker (Equals)?
🔧 provider_profile
{
"name_or_code": "fx_broker"
}• Incorporation certificate + articles of association
• Shareholding structure down to UBO
• ID and proof of address for 25%+ shareholders
• Latest annual return or bank statement
• Client/supplier invoices
Two notes for this client: China is not on their excluded list, and their named UK pay-in account row records no currency — GBP isn't confirmed on it. No entity rule recorded for a Ltd; only sole traders are covered, and UK ones are allowed.
Last verified Mar 2026; no contacts recorded for them.
qualify hkd local
🔧 settlement_accounts
{
"currency": "HKD",
"named_only": true
}🔧 settlement_accounts
{
"currency": "HKD"
}• Corpay US — live · named local HKD, pay-in and payout · account domiciled in GB, not Hong Kong
• OpenPayd — Rolodex prospect · named local HKD in Hong Kong, pay-in · "in pilot", unconfirmed · from Paul's call, 12 Aug 2026
Live data last verified Mar 2026.
If the account must sit in Hong Kong itself, no live partner records that. Want me to run a full match for the corporate — entity type, client country, and the currencies they sell and buy?
🔧 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"
}
]
}🔧 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": "HK"
}
]
}• FX Broker (Equals) — live · takes SG clients, USD→HKD, named HKD pay-in account · account sits in GB, not Hong Kong
• Corpay US — live · same, named HKD pay-in account in GB · SG onboarding marked conditional
• OpenPayd — Rolodex prospect · named HKD pay-in account in Hong Kong · won't onboard SG clients; "in pilot" · from Paul's call, 12 Aug 2026
• Clear Treasury, Currencycloud, Moneycorp — live · won't take SG clients
• Riva — prospect · no USD→HKD, no SG
Live data last verified Mar 2026; company-type rules not recorded for any of them.
Want the corporate onboarding requirements for FX Broker (Equals) and Corpay US?
• FX Broker (Equals) — live · full match for SG corporate, USD→HKD, named HKD pay-in · account in GB
• Corpay US — live · full match on the same terms · SG onboarding marked conditional
Live data last verified Mar 2026; company-type rules not recorded for either.
Want the corporate onboarding requirements for both?
🔧 provider_profile
{
"name_or_code": "fx_broker"
}🔧 provider_profile
{
"name_or_code": "corpay_us"
}• FX Broker (Equals) — live · incorporation certificate, articles, shareholding to UBO · ID and address proof for 25%+ shareholders · latest annual return or bank statement · client/supplier invoices
• Corpay US — live · EIN, articles of incorporation, beneficial ownership disclosure · EIN wording reads US-shaped for an SG entity
Live data last verified Mar 2026; no contacts recorded at either provider.
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.
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: 8.6s 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.