Author: Manu

  • Why the Risk Engine Does Not Classify A Client As High Risk And Stop There

    Why the Risk Engine Does Not Classify A Client As High Risk And Stop There

    In this series, we are building an agentic KYC workflow for high-net-worth onboarding piece by piece.

    I also built a working prototype in Python to demonstrate this architecture. You can find the link to the prototype here.

    Agentic AI Workflow for KYC


    In the previous post, we saw how the Signal Aggregator collects the findings from the individual agents and packages them into a clear case view for the Risk Engine.

    For James, a simplified version of that case view may look like this:

    IDENTITY VERIFICATION:
    - Verification status: COMPLETED
    
    SCREENING:
    - Possible PEP status: IDENTIFIED
    - Sanctions: NO_MATCH
    - Adverse media: NO_MATCH
    - Internal watchlist: NO_MATCH
    
    BUSINESS STRUCTURE:
    - Software company sale: SUPPORTED
    - Planned $4 million business-sale funding: SUPPORTED
    
    WEALTH AND FUNDS:
    - Planned $1 million crypto funding: SUPPORTED
    - Crypto exchange account ownership: SUPPORTED
    - Crypto funding capacity: SUPPORTED
    - Source of crypto funds: NOT_ESTABLISHED
    - Crypto transaction screening: NO_CONCERN_IDENTIFIED
    
    CLIENT PROFILE:
    - Cross-border transactions expected: YES

    This is the information the Risk Engine needs to apply the bank’s risk rules.

    But before we look at how the Risk Engine does that, we need to answer a simple question.

    What makes a client like James risky for the bank?

    If James uses the bank for illegal activity, the bank can face serious penalties from regulators. 

    So the bank cannot take on James as a client only because he is wealthy.

    Before the bank takes James as a client, it needs to look at his full profile.

    That includes who he is, where his money came from, and how he plans to use the account.

    To do that, banks use internal risk rules to decide how deeply a client’s profile should be reviewed.

    A high-net-worth client with a clear salary history, domestic transactions, and no political links may be onboarded quickly.

    But James is different because he has a possible PEP status, expects cross-border transactions, and plans to bring in $1 million from crypto funds.

    That means the bank’s internal rules would treat his case as one that needs deeper review.

    In a real bank, the Risk Engine would apply those rules using the inputs from the Signal Aggregator.

    It does not simply classify James as high risk and stop there.

    It identifies which parts of James’s case need closer review and shows the compliance officer where to focus.

    Let’s see how the Risk Engine does that.

    Assume the bank has an internal rule like this: 

    IF:
    - Possible PEP status is identified
    - Source of crypto funds is NOT_ESTABLISHED
    - Cross-border transactions are expected
    
    THEN:
    - Classify the case as HIGH_RISK
    - Send the case for ENHANCED_REVIEW
    - Ask the compliance officer to review the possible PEP status
    - Ask the compliance officer to review the source of crypto funds

    The Risk Engine takes this rule and applies it to the case view prepared by the Signal Aggregator. 

    For James, it separates the case into two parts. 

    First, it identifies the parts that have been successfully reviewed: 

    Identity verification: COMPLETED
    Business-sale funding: SUPPORTED
    Sanctions: NO_MATCH
    Adverse media: NO_MATCH
    Internal watchlist: NO_MATCH
    Crypto transaction screening: NO_CONCERN_IDENTIFIED

    Then it identifies the parts that need attention:

    Possible PEP status: IDENTIFIED
    Source of crypto funds: NOT_ESTABLISHED
    Cross-border transactions expected: YES

    The Risk Engine does not say every part of James’s case is a problem. It clearly separates what has been successfully reviewed from what still needs attention, and uses that combination to classify the case as high risk.

    So the Risk Engine may return an output like this: 

    RISK LEVEL:
    HIGH
    
    REVIEW ROUTE:
    ENHANCED_REVIEW
    
    SUCCESSFULLY REVIEWED:
    - Identity verification is complete.
    - No sanctions match was found.
    - No adverse media concern was found.
    - No internal watchlist match was found.
    - The planned $4 million business-sale funding is supported.
    - Crypto transaction screening did not identify a separate concern.
    
    NEEDS REVIEW:
    - Possible PEP status was identified.
    - The source of James's crypto funds was not established.
    - Cross-border transactions are expected.
    
    REVIEWER FOCUS:
    - Review the possible PEP status.
    - Ask for or review records showing how James acquired the crypto funds.
    - Confirm whether the expected cross-border transactions fit James's profile.
    - Decide whether the case can proceed after enhanced review.

    This output has been shortened for the article.

    In a real bank, the Risk Engine output would usually be longer. It may show what was checked, what was cleared, and what still needs review. It may also explain why the case was sent for enhanced review and where the compliance officer should focus.

    This detailed output is not the easiest format for a compliance officer to review quickly. 

    That is where the LLM comes in.

    The LLM (Large language model) takes that structured output and turns it into plain language that the compliance officer can read and act on quickly.

    For example, the LLM may rewrite the Risk Engine output like this:

    For James, identity verification is complete. No sanctions, adverse media, or internal watchlist match was found. The planned $4 million from business sale proceeds is also supported.
    
    The review should focus on three areas.
    
    First, possible PEP status was identified.
    
    Second, the source of James's crypto funds was not established from the available evidence.
    
    Third, James expects cross-border transactions, which adds to the need for enhanced review.
    
    The compliance officer should review the possible PEP status, decide whether James needs to provide more records showing how he acquired the crypto funds, and consider the expected cross-border transactions as part of the enhanced review.

    As you can see, the LLM has made the output easier for the compliance officer to understand quickly.

    In the next post, we will look at the final step in the workflow: the case record.

    This is where the bank records what happened in James’s case and why the final onboarding decision was made.

  • How the Signal Aggregator Turns Separate Agent Findings Into One Clear Case View

    How the Signal Aggregator Turns Separate Agent Findings Into One Clear Case View

    In this series, we are building an agentic KYC workflow for high-net-worth onboarding piece by piece.

    I also built a working prototype in Python to demonstrate this architecture. You can find the link to the prototype here.

    Agentic AI Workflow for KYC


    The four specialist agents have now returned their findings for James’s case. 

    • The Identity Verification Agent checked who James is.
    • The Screening Agent checked for possible PEP status, sanctions, adverse media, and internal watchlist concerns.
    • The Business Structure Review Agent checked his software company sale and the $4 million he plans to bring in from those sale proceeds.
    • The Wealth and Funds Review Agent checked the $1 million he plans to bring in from crypto funds.

    Each agent answered a different question about James’s case and returned its own finding. 

    But the Risk Engine does not need every detail returned by all four agents.

    Let’s use the Wealth and Funds Review Agent’s finding to see why.

    James plans to bring $1 million into the new account from crypto funds held through his crypto exchange account.

    The Wealth and Funds Review Agent checked those crypto funds and returned this finding:

    STATUS: COMPLETED_WITH_SIGNAL
    
    WHAT THE Available Evidence SHOW:
    - James's crypto exchange account belongs to him.
    - The account holds enough funds for the planned $1 million transfer.
    - The available crypto transaction history was reviewed.
    
    SIGNAL IDENTIFIED: 
    - The source of James’s crypto funds was not established from the available evidence.
    
    EVIDENCE STILL NEEDED:
    - Other records showing how James acquired the crypto funds
    
    SOURCES CHECKED:
    - Crypto exchange account statement
    - Crypto transaction history
    
    NEXT STEP:
    Send the finding and identified signal to the Signal Aggregator.

    This detailed finding is useful. It shows what the agent checked and why it identified an issue. 

    The Workflow Controller records this detailed finding and the sources checked in James’s case file. 

    But the Risk Engine does not need this full explanation before it applies the bank’s risk rules. 

    It only needs the key results:

    • James plans to bring in $1 million from crypto funds.
    • His crypto exchange account belongs to him.
    • The account holds enough funds for the planned transfer.
    • The source of the crypto funds was not established.
    • The crypto transaction screening did not identify a separate concern.

    Now imagine the Risk Engine doing this for the findings from all four specialist agents. It would have to extract the key result from each finding before it could apply any rules. 

    And only then could the Risk Engine apply the bank’s rules.

    That would give the Risk Engine two tasks: 

    • prepare a clean case view from the specialist-agent findings; and 
    • decide what should happen next in James’s case.

    The Risk Engine should not have to do both. 

    That is why an agentic KYC workflow needs a Signal Aggregator.

    The Signal Aggregator receives the findings from the Workflow Controller. It takes the key results from each finding and brings them together into one clear case view for the Risk Engine.

    How the Signal Aggregator packages a finding 

    Let’s use the Wealth and Funds Review Agent’s finding again.

    The table below shows how the Signal Aggregator extracts the key results from that finding and formats them for the Risk Engine.

    Detailed Wealth and Funds finding Packaged result for the Risk Engine
    James plans to transfer $1 million from his crypto exchange account. planned_crypto_funding_amount = CAD 1000000
    The crypto exchange account belongs to James. crypto_exchange_account_ownership_status = SUPPORTED
    The account holds enough funds for the planned transfer. crypto_funding_capacity_status = SUPPORTED
    The source of James’s crypto funds was not established. crypto_source_of_funds_status = NOT_ESTABLISHED
    Crypto transaction screening did not identify a concern. crypto_transaction_screening_status = NO_CONCERN_IDENTIFIED

    Here, the Wealth and Funds Review Agent found that James did not provide enough evidence to show where his crypto funds came from.  

    The Signal Aggregator packages that result as: crypto_source_of_funds_status = NOT_ESTABLISHED

    This does not mean the Signal Aggregator has decided how risky James is.

    It has only taken the useful information from the agent’s finding and placed it into a format the Risk Engine can use.

    The Signal Aggregator does the same thing for the findings from the other specialist agents.

    It brings the key results together and returns one clean output for the Risk Engine. 

    What the Signal Aggregator returns

    The final output may look like this:

    {
      "case_view_status": "READY_FOR_RISK_ENGINE",
    
      "identity": {
        "verification_status": "COMPLETED",
        "verification_method": "DUAL_PROCESS"
      },
    
      "screening": {
        "possible_pep_status": "IDENTIFIED",
        "sanctions_status": "NO_MATCH",
        "adverse_media_status": "NO_MATCH",
        "internal_watchlist_status": "NO_MATCH"
      },
    
      "business_structure": {
        "software_company_sale_status": "SUPPORTED",
        "planned_business_sale_funding_amount": 4000000,
        "planned_business_sale_funding_source_status": "SUPPORTED"
      },
    
      "wealth_and_funds": {
        "planned_crypto_funding_amount": 1000000,
        "crypto_exchange_account_ownership_status": "SUPPORTED",
        "crypto_funding_capacity_status": "SUPPORTED",
        "crypto_source_of_funds_status": "NOT_ESTABLISHED",
        "crypto_transaction_screening_status": "NO_CONCERN_IDENTIFIED"
      },
    
      "client_profile": {
        "expected_cross_border_transactions": true
      }
    }

    This output gives the Risk Engine one clear view of James’s case. 

    It shows that:

    • His identity verification was completed.
    • A possible PEP status was identified.
    • No sanctions, adverse media, or internal watchlist match was found.
    • The business sale and the source of the planned $4 million were supported.
    • The crypto exchange account belongs to James and holds enough funds for the planned $1 million transfer.
    • The source of those crypto funds was not established, and
    •  James expects cross-border transactions.

    The Risk Engine can now apply the bank’s rules to this case view and decide what should happen next in James’s case.

    Let’s quickly recap

    The specialist agents returned separate findings about James’s identity, screening, business sale, and crypto funds.

    The Signal Aggregator takes the key results from those findings and formats them for the Risk Engine.

    The Risk Engine takes that structured information and applies the bank’s rules.

    In the next post, we will look at how the Risk Engine uses this output to decide what should happen next in James’s case.

     

  • How The Wealth And Funds Review Agent Checks Where A Client’s Money Actually Came From

    How The Wealth And Funds Review Agent Checks Where A Client’s Money Actually Came From

    In this series, we are building an agentic KYC workflow for high-net-worth onboarding piece by piece.

    I also built a working prototype in Python to demonstrate this architecture. You can find the link to the prototype here.

    Agentic AI Workflow for KYC


    James sold his software company last year for $18 million.

    He now wants to open a new bank account with a Canadian bank and transfer $5 million into that account. 

    Of that $5 million, $4 million comes from the business sale proceeds he currently holds in his existing bank account. The remaining $1 million comes from crypto funds held through a crypto exchange.

    The bank cannot open the account based only on what James has declared. It needs to understand where the $5 million will come from.

    The $5 million James wants to transfer raises two different questions. 

    1. Can the bank confirm the business sale and the source of the $4 million James plans to transfer?
    2. Can James show where the remaining $1 million in crypto funds came from?

    Two separate agents need to answer these questions. 

    The Business Structure Review Agent answers the first question. It checks whether James owned the software company and whether he plans to transfer the $4 million from those sale proceeds.

    The Wealth and Funds Review Agent answers the second question. It checks the $1 million James plans to bring in from crypto funds.

    This separation becomes important when the client’s business structure is more complex.

    Imagine a client with several businesses.

    One business may be owned through a holding company. Another may be connected to a trust. Funds may pass through several companies before they reach the client’s personal account.

    Now imagine one agent trying to understand structures like these across thousands of clients.

    It would need to examine the companies, the ownership links, and the funds connected to the business. At the same time, it would need to check the client’s personal wealth and funds.

    That would give one agent two very different responsibilities.

    So the workflow separates them.

    The Business Structure Review Agent focuses on the companies, the ownership links, and the funds connected to the business.

    The Wealth and Funds Review Agent focuses on the client’s personal wealth and funds.

    This makes each review easier to understand, test, and explain.

    In this article, I will explain James’s business sale briefly so that the $5 million he wants to transfer is easy to follow. But the Business Structure Review Agent handles that review.

    I will break down the Business Structure Review Agent in more detail in a future post.

    For now, we only need to see how the $4 million James plans to transfer came from his business sale.

    James says he received $18 million from selling shares in his software company.

    To check that declaration, the Business Structure Review Agent uses the business sale agreement James provided. The agreement may show:

    • James’s name as the seller;
    • the shares he agreed to sell;
    • the name of his software company;
    • the buyer’s name;
    • the $18 million sale amount; and
    • the closing date or closing terms.

    But the agent does not rely only on the document James provided.

    It may also check an official corporate registry. In Canada, this could be Corporations Canada if the company was federally incorporated, or a provincial registry if the company was incorporated provincially.

    The registry helps the agent check whether the software company exists and whether James was connected to it.

    But the registry does not show that James sold his shares for $18 million or that he received the sale proceeds.

    To check that, the agent uses the sale documents and James’s existing bank account statement to see whether money from the sale came into his account.

    In James’s case, the statement shows that he received the $18 million from the software company sale in his existing bank account. 

    He plans to transfer $4 million from that account into his new bank account.

    James has not sent the money yet. So the bank cannot confirm that the $4 million came from his existing account during onboarding.

    For now, the bank can establish that James plans to fund the new account with $4 million from the account where he received the business sale proceeds.

    Once James makes the transfer, the bank can confirm whether the $4 million came from that account.

    Now let’s turn to the part handled by the Wealth and Funds Review Agent.

    Can James show where the remaining $1 million will come from?

    James has not transferred the remaining $1 million into the new bank account yet. So the Wealth and Funds Review Agent first checks whether he can show where that money will come from.

    To do that, the agent uses the crypto exchange account statement James provided. 

    The statement may show:

    • his name as the account holder;
    • the name of the crypto exchange;
    • the value of the crypto funds held in the account; and
    • the amount available for withdrawal or transfer.

    This helps the agent check whether the account belongs to James and whether it has enough funds for the planned $1 million transfer.

    But the statement only shows that James holds crypto funds in his exchange account. It does not show how he acquired those funds.

    If the bank needs more evidence, the agent can request James’s crypto transaction history or other records showing how he acquired the funds.

    The agent may also use an approved crypto transaction screening tool, such as Chainalysis or TRM Labs. The tool checks whether the available crypto transactions show links to sanctions, stolen funds, or scams.

    These checks answer three different questions.

    What the agent checks Evidence or source the agent may use
    Does the crypto exchange account belong to James, and does it hold enough funds for the planned $1 million transfer? Crypto exchange account statement
    Can James show how he acquired the crypto funds? Crypto transaction history or other records that James provides
    Do the available crypto transactions show anything the bank needs to review further? Approved crypto transaction screening tool

    If the agent can answer these questions, it can support James’s declaration that he plans to fund $1 million of the new account from his crypto exchange account.

    The agent now needs to return what it found to the Workflow Controller. 

    What does the Wealth and Funds Review Agent return to the Workflow Controller? 

    The Wealth and Funds Review Agent has now checked the crypto funds James plans to bring into the new account.

    It has checked:

    • whether the crypto exchange account belongs to James;
    • whether the account holds enough funds for the planned $1 million transfer;
    • whether James can show how he acquired the crypto funds; and
    • whether the available crypto transactions identify anything the bank needs to review.

    After these checks, the agent returns one of three findings to the Workflow Controller.

    1. The documents and sources support what James declared

    If the documents and other sources support James’s declaration, the agent returns:

    Status: COMPLETED
    
    Source of funds reviewed:
    James plans to transfer $1 million from his crypto exchange account.
    
    Finding:
    The documents and other sources support James's declared crypto funds.
    
    Sources checked:
    - Crypto exchange account statement
    - Crypto transaction history
    - Approved crypto transaction screening tool
    
    Next step: 
    Confirm the actual incoming transfer once James funds the new account.

    The Workflow Controller can then send this finding to the Signal Aggregator.

    2. The agent completes its review and identifies missing evidence or a clear issue

    Sometimes the agent can complete its review and identify a specific issue.

    For example, James may show that his crypto exchange account belongs to him and holds enough funds for the $1 million he plans to transfer. But he may not provide enough records to show how he acquired those crypto funds.

    He may also provide his crypto transaction history.

    But those records may still not explain how he originally acquired the crypto funds.

    In that case, the agent can clearly state what the available evidence shows and what remains unverified.

    STATUS: COMPLETED_WITH_SIGNAL
    
    WHAT THE Available Evidence SHOW:
    - James's crypto exchange account belongs to him.
    - The account holds enough funds for the planned $1 million transfer.
    - The available crypto transaction history was reviewed.
    
    SIGNAL IDENTIFIED: 
    - The source of James’s crypto funds was not established from the available evidence.
    
    EVIDENCE STILL NEEDED:
    - Other records showing how James acquired the crypto funds
    
    SOURCES CHECKED:
    - Crypto exchange account statement
    - Crypto transaction history
    
    NEXT STEP:
    Send the finding and identified signal to the Signal Aggregator.

    The same approach applies if the crypto transaction screening clearly identifies a concern connected to James’s crypto funds. The agent can include that issue in its finding, and the Workflow Controller can then send the finding to the Signal Aggregator.

    3. The agent needs human input before it can complete its finding

    Sometimes the agent cannot complete its review without human input.

    For example, the bank may use two approved crypto transaction screening tools to check James’s crypto funds and receive different results.

    CRYPTO SCREENING TOOL A: No concern identified.
    
    CRYPTO SCREENING TOOL B: Possible concern identified.
    
    STATUS: HUMAN_REVIEW_REQUIRED
    
    WHAT THE Available Evidence SHOW:
    - James's crypto exchange account belongs to him.
    - The account holds enough funds for the planned $1 million transfer.
    
    ISSUE REQUIRING REVIEW:
    Two crypto transaction screening tools returned different results for James's crypto funds.
    
    SOURCES CHECKED:
    - Crypto exchange account statement
    - Crypto transaction screening tool A
    - Crypto transaction screening tool B
    
    REVIEWER FOCUS:
    Review the conflicting crypto screening results and decide how the bank should treat the planned $1 million transfer.

    The Workflow Controller pauses this part of the review and sends the specific issue to a compliance officer.

    Once the compliance officer decides how the bank should treat the issue, the agent can complete its finding. The Workflow Controller can then send it to the Signal Aggregator.

    This gives the Wealth and Funds Review Agent three possible outcomes:

    Agent outcome What it means What happens next
    COMPLETED The available evidence supports James’s planned $1 million transfer from crypto funds. The Workflow Controller sends the finding to the Signal Aggregator.
    COMPLETED_WITH_SIGNAL The agent completes its review and identifies missing evidence or a clear issue. The Workflow Controller sends the finding and identified issue to the Signal Aggregator.
    HUMAN_REVIEW_REQUIRED The agent cannot complete its finding without human input. The Workflow Controller pauses this part of the review and routes the specific issue to a compliance officer.

    These outcomes need to be built into the Wealth and Funds Review Agent. 

    The agent should know when to complete its finding, send a clear issue to the Signal Aggregator, or request human input. 

    The agent must also adapt to different sources of personal wealth and funds

    The agent must do more than return a finding. It must also check the client’s personal wealth and funds based on where the client says the money came from. 

    For example, a client may say their wealth came from selling real estate. The Wealth and Funds Review Agent would need to check the property sale evidence and the money the client received.

    Another client may say their wealth came from an inheritance. The agent would need to check the inheritance documents and the money transferred to the client.

    So the Wealth and Funds Review Agent cannot follow one fixed path. It runs the checks that apply to the client’s declared personal wealth and source of funds. 

    Let’s quickly recap

    The Wealth and Funds Review Agent checks what the client declared about their personal wealth and source of funds against documents, bank records, and reliable external sources.

    It then returns a clear finding to the Workflow Controller. That finding may show that the available evidence supports what the client declared. It may identify missing evidence. Or it may explain an issue that needs human review before the workflow can continue.

    That is how the Wealth and Funds Review Agent turns a client’s declaration into a finding that the rest of the workflow can use.

    In the next post, we will look at the Signal Aggregator and how it brings the agents’ findings together.

     

  • How The Screening Agent Checks A Client’s Profile

    How The Screening Agent Checks A Client’s Profile

    In this series, we are building an agentic KYC workflow for high-net-worth onboarding piece by piece.

    I also built a working prototype in Python to demonstrate this architecture. You can find the link to the prototype here.

    Agentic AI Workflow for KYC


     

    The word “screening” instantly takes you to an airport.

    You place your bag on the belt and walk through the scanner. The security team checks for things you should not carry on the flight.

    Screening a banking client works in a similar way.

    The bank is not checking the client physically. It is checking whether the client appears in sanctions lists, possible PEP records, adverse media sources, or internal watchlists. 

    To understand how this works, let’s see how the Screening Agent helps the bank screen a client like James.

    After the Orchestrator decides that the Screening Agent should run, the Workflow Controller sends the agent the details it needs.

    {
      "agent_name": "screening_agent",
    
      "inputs": {
        "client_identity": {
          "full_name": "James Whitmore",
          "date_of_birth": "1964-04-12",
          "nationality": "Canadian",
          "country_of_residence": "Canada"
        },
    
        "client_profile": {
          "pep_declared": true,
          "expected_cross_border_transactions": true
        },
    
        "tax_profile": {
          "tax_residency": "Canada"
        }
      }
    }

    The Screening Agent uses these details to check multiple screening sources. For example, it may check sanctions lists, possible PEP status, adverse media, and the bank’s internal watchlist.

    Adverse media means negative news or public information that may raise a concern about the client.

    Banks may use screening providers such as World-Check, Dow Jones Risk & Compliance, or ComplyAdvantage. These providers help banks check many screening sources in one place, including sanctions records, possible PEP status, adverse media, and other watchlists.

    Some banks may also use their own internal watchlist database.

    Here is how that works for James.

    The Screening Agent sends James’s details to a screening provider:

    {
      "full_name": "James Whitmore",
      "date_of_birth": "1964-04-12",
      "nationality": "Canadian",
      "country_of_residence": "Canada"
    }

    The screening provider checks this information against its database.

    That database may include PEP records, sanctions lists, adverse media sources, and internal watchlists.

    The provider may return a result like this:

    Possible PEP match found
    
    Matched fields:
    - name
    - date of birth
    - nationality
    
    No sanctions match
    No adverse media match
    No internal watchlist match

    This is only one provider’s result.

    In a real bank, the Screening Agent may receive results from more than one screening provider or internal database.

    For example:

    Screening provider A:
    - Possible PEP match
    - Name, date of birth, and nationality matched
    - Vendor score: 0.94
    - No sanctions match
    - No adverse media match
    
    Screening provider B:
    - Possible PEP match
    - Name and date of birth matched
    - Vendor score: 0.87
    - No sanctions match
    - No adverse media match
    
    Internal bank watchlist:
    - No match

    The Screening Agent then consolidates the providers’ results. It compares the matched fields, checks whether the providers agree, and applies the bank’s screening rules.

    Those rules tell the agent how to treat each result.

    For example:

    If two providers return a possible PEP match, the agent treats it as a stronger signal.

    If the name, date of birth, and nationality match, the agent marks the match strength as STRONG.

    If only the name matches, the agent marks the match strength as WEAK.

    If one provider shows a possible match and another shows no match, the agent returns HUMAN_REVIEW_REQUIRED.

    These conditions should be built into the Screening Agent so it does not guess. It should know when to mark a match as strong, when to mark it as weak, and when to send the issue for human review.

    The final output from the Screening Agent may look like this:

    {
      "screening_status": "POTENTIAL_MATCH",
      "hit_type": "POSSIBLE_PEP_STATUS",
      "match_strength": "STRONG",
    
      "providers_checked": [
        "screening_provider_a",
        "screening_provider_b",
        "internal_bank_watchlist"
      ],
    
      "sanctions_match": false,
      "adverse_media_match": false,
      "internal_watchlist_match": false,
    
      "requires_human_review": true,
    
      "summary": "Two screening providers returned a possible PEP match for James. No sanctions, adverse media, or internal watchlist match was found."
    }

    As you can see, the output clearly explains the issue. Two providers returned a possible PEP match for James, but there was no sanctions match, no adverse media match, and no internal watchlist match.

    The Workflow Controller then takes this output and sends it to the Signal Aggregator.

    Screening does not always return a clear result.

    When that happens, the agent should return the issue for human review instead of deciding on its own.

    Here are three common scenarios.

    The first scenario is a partial match. James’s name may match a possible PEP record, but the date of birth may not match. In that case, the Screening Agent should not treat it as a confirmed match. It should return the issue to the Workflow Controller so a compliance officer can decide whether it is the same person or a false positive.

    The second scenario is disagreement between providers. One screening provider may return a possible PEP match, while another provider may return no match. The Screening Agent should not blindly choose one provider over the other. It should flag the disagreement and ask for human review.

    The third scenario is adverse media that needs interpretation. A screening provider may return a possible adverse media hit, but the article may be old, unclear, or about a different person with a similar name. The Screening Agent can flag the result, but a human reviewer may need to decide whether the article is relevant to James’s case.

    These conditions must be built into the Screening Agent. The agent should know when the result is clear enough to send back to the Workflow Controller and when it needs human review.

    In these situations, the Screening Agent returns a status such as:

    HUMAN_REVIEW_REQUIRED

    Or

    NEEDS_MORE_INFORMATION

    For example:

    {
      "screening_status": "HUMAN_REVIEW_REQUIRED",
    
      "reason": "One provider returned a possible PEP match, but another provider returned no match.",
    
      "review_focus": [
        "Compare provider results",
        "Review matched fields",
        "Determine whether the hit is a true match or false positive"
      ]
    }

    The Workflow Controller then pauses the screening step and decides what should happen next. It may route the issue to a compliance officer, send it to a screening operations team, or request more information from the relationship manager.

    Once the human reviewer resolves the issue, the workflow can continue working on the case.

    That is how the Screening Agent handles unclear screening results.

    Let’s quickly recap what we saw.

    The Screening Agent checks James’s profile against relevant screening sources by sending his details to screening providers and internal systems. It consolidates the results, applies the bank’s screening rules, and returns a clear screening result to the Workflow Controller.

    Sometimes that result is clear enough for the workflow to continue. But when the result is unclear, the agent does not guess and returns the issue for human review. That includes a partial match, disagreement between providers, or adverse media that needs interpretation.

    That is how the Screening Agent screens James’s profile inside the agentic KYC workflow.

    Just like airport screening, the goal is not to stop every person from moving forward. The goal is to find the cases that need closer attention before they pass through.

    In the next post, we will look at the Wealth and Funds Review Agent and how it reviews James’s source of wealth, source of funds, and crypto funds.

  • How The Identity Verification Agent Confirms A Client’s Identity

    How The Identity Verification Agent Confirms A Client’s Identity

    In this series, we are building an agentic KYC workflow for high-net-worth onboarding piece by piece.

    I also built a working prototype in Python to demonstrate this architecture. You can find the link to the prototype here.

    Agentic AI Workflow for KYC


    Verifying a client’s identity sounds simple.

    The client gives the bank a government ID. The bank checks the name, address, and date of birth against the details the client provided.

    And that may be enough in some cases.

    But identity verification is not always that simple. 

    The name may be slightly different, or the address may not line up. In more complex cases, the bank may need to check the client’s details against another reliable source. 

    But before we get into that, let’s start with the basics.

    What is identity verification?

    Identity verification is the step where the bank confirms that the client is who they say they are.

    This is usually one of the first things that happens when someone opens a bank account.

    The bank may ask for a government ID, such as a passport or driver’s licence, but a government ID is only one way to verify a client’s identity.

    In Canada, FINTRAC describes five methods to verify the identity of a person:

    • government-issued photo identification method
    • credit file method
    • dual-process method
    • affiliate or member method
    • reliance method

    The bank does not use all five verification methods for every client. It chooses the method based on the client’s risk profile and how complex the case is. Let’s look at two examples.

    For a client with a simple profile, such as a high-income employee, one government-issued photo ID may be enough. The bank checks the name, address, and date of birth against the ID and moves forward.

    For a client like James, the bank may need to verify his identity using more than one source. That is because he has declared possible PEP status, business sale wealth, crypto funds, and expected cross-border transactions. So the bank may use dual-process verification, which checks the client’s identity using two or more reliable sources. 

    Now, let’s see how the Identity Verification Agent works for James.

    The Orchestrator has already decided that James should go through dual-process verification. The Workflow Controller passes that instruction to the Identity Verification Agent. It also sends James’s identity details, document references, proof of address, and consent records. 

    {
      "agent_name": "identity_verification_agent",
    
      "method": "DUAL_PROCESS",
    
      "inputs": {
    
        "client_identity": {
          "full_name": "James Whitmore",
          "date_of_birth": "1964-04-12",
          "address": "Toronto, Canada"
        },
    
        "documents": {
          "government_id": "cloud://kyc-documents/KYC-123/government_id.pdf",
          "proof_of_address": "cloud://kyc-documents/KYC-123/proof_of_address.pdf"
        },
    
        "consent_records": {
          "credit_bureau_consent": true
        }
      }
    }

    Because the method is dual-process, the agent checks James’s declared identity details against two reliable sources. One source may be a credit bureau check through Equifax or TransUnion. Another may be an identity verification tool, such as Trulioo, Onfido, or Jumio.

    The agent then compares those results with the identity details James provided. If there is a mismatch, it returns the issue to the Workflow Controller. 

    If everything matches, the agent returns a clear output showing the method it used, the sources it checked, and the tools it called. For example, the output may look like this: 

    {
      "identity_status": "PASS",
    
      "method_used": "DUAL_PROCESS",
    
      "sources_checked": [
        "credit_bureau_check",
        "identity_verification_tool"
      ],
    
      "tools_used": [
        "Equifax or TransUnion",
        "Trulioo"
      ],
    
      "match_result": "MATCH",
    
      "summary": "James's government ID was verified, and his name, date of birth, and address matched across two reliable sources."
    }

    This does not mean the agent verified James on its own. It followed the selected method, checked the approved sources, and returned a finding to the Workflow Controller.

    The Workflow Controller records this output and moves the workflow to the next step.

    Sometimes, the evidence the agent receives is not enough to complete the identity step.

    For example, James may provide one address during onboarding, but the credit bureau check may return a different address. Or the name or date of birth on the government ID may not match the identity details James provided.

    When that happens, the agent should return a status such as:

    HUMAN_REVIEW_REQUIRED
    or

    NEEDS_MORE_INFORMATION
    The Workflow Controller then pauses the identity step and decides what should happen next.

    It may request updated information from the relationship manager or route the issue to a compliance officer.

    These conditions must be coded into the Identity Verification Agent. For example, the agent may return an output like this:

    {
      "agent_name": "identity_verification_agent",
    
      "identity_status": "HUMAN_REVIEW_REQUIRED",
    
      "reason": "Address mismatch between the identity details James provided and the credit bureau result.",
    
      "review_focus": [
        "Confirm current residential address",
        "Review proof of address"
      ]
    }

    With these conditions in place, the agent knows when it can complete the identity step and when it needs to return an issue to the Workflow Controller.

    That is the role of the Identity Verification Agent. 

    It follows the method selected by the Orchestrator, checks the client’s identity details against the right sources, and returns a clear identity finding.

    For a client with a simple profile, the agent checks a government-issued photo ID. For a client like James, it checks whether his details line up across two reliable sources using the dual-process method.

    If the details match across the sources, the agent returns a completed identity finding. If something does not line up, it returns the issue to the workflow for human review.

    In the next post, we will look at the Screening Agent and how it checks James’s profile against sanctions lists, possible PEP status, and adverse media sources.

  • How The KYC Orchestrator Chooses The Right Agents For Each Case

    How The KYC Orchestrator Chooses The Right Agents For Each Case

    In this series, we are building an agentic KYC workflow for high-net-worth onboarding piece by piece.

    • The KYC Orchestrator (this post)

    I also built a working prototype in Python to demonstrate this architecture. You can find the link to the prototype here.

    Agentic AI Workflow for KYC


    Imagine a conductor standing in front of a full orchestra.

    Every musician is ready, but the music does not start until the conductor gives the signal.

    The conductor decides who starts, who joins next, and how the entire piece comes together.

    That is what the Orchestrator does in a KYC workflow.

    The Workflow Controller runs the agents. But the Orchestrator decides the agent plan: which agents should run, how they should run, and what information each agent should receive.

    To do that, the Orchestrator first receives a structured case package from the Workflow Controller.

    For James, that package may look like this:

    {
      "case_id": "KYC-123",
    
      "declared_profile": {
        "full_name": "James Whitmore",
        "source_of_wealth": "Sale of private business",
        "source_of_funds": "Crypto exchange transfer",
        "pep_declared": true
      },
    
      "document_refs": [
        {
          "document_id": "doc_003",
          "document_type": "bank_statement",
          "document_url": "cloud://kyc-documents/KYC-123/doc_003.pdf",
          "extracted_facts_url": "cloud://kyc-extracted-facts/KYC-123/doc_003_facts.json"
        }
      ]
    }

    The case package gives the workflow one structured view of the client’s declared details and supporting document references.

    Once the Orchestrator has that view, it can build the agent plan.

    The Orchestrator’s plan answers three simple questions:

    • Which agents should run?
    • How should each agent run?
    • What information should each agent receive?

    Those three answers decide how the rest of the workflow runs.

    To see how this works in practice, let’s compare a simple client with James.

    Imagine a client with a high salary, no business ownership, no crypto funds, and no cross-border transactions.

    For this client, the Orchestrator creates a simple plan:

    {
      "agents_to_run": [
        "identity_verification_agent",
        "screening_agent",
        "wealth_and_funds_review_agent"
      ],
    
      "agents_not_required": [
        "business_structure_review_agent"
      ],
    
      "agent_methods": {
        "identity_verification_agent": "government_issued_photo_id_method",
        "wealth_and_funds_review_agent": "standard_salary_income_review"
      },
    
      "agent_inputs": {
        "identity_verification_agent": [
          "client identity details",
          "government ID",
          "proof of address"
        ],
    
        "screening_agent": [
          "client identity details",
          "PEP declaration",
          "tax residency"
        ],
    
        "wealth_and_funds_review_agent": [
          "declared salary income",
          "recent bank statements",
          "employment or income details"
        ]
      }
    }

    The Business Structure Review Agent does not run because this client has no business context.

    That is the point of the plan. The workflow does not run an agent just because the agent exists.

    The agent_methods section tells each agent how to run.

    For a client with a simple profile, the Orchestrator tells the Identity Verification Agent to use government-issued photo ID verification.

    In Canada, FINTRAC allows different ways to verify a client’s identity. These include photo ID verification, credit file verification, and the dual-process method.

    For a simple client, the Orchestrator chooses the government-issued photo ID method because the client’s identity can be verified with standard documents.

    The agent_inputs section tells each agent what information and documents it needs to run.

    Now compare that with James. 

    James has declared possible PEP status, sold a private business, has crypto funds, and expects cross-border transactions.

    For James, the Orchestrator creates a more detailed plan:

    {
      "agents_to_run": [
        "identity_verification_agent",
        "screening_agent",
        "wealth_and_funds_review_agent",
        "business_structure_review_agent"
      ],
    
      "agent_methods": {
        "identity_verification_agent": "dual_process_method",
        "wealth_and_funds_review_agent": "enhanced_wealth_and_funds_review",
        "business_structure_review_agent": "business_sale_context_review"
      },
    
      "agent_inputs": {
    
        "identity_verification_agent": [
          "client identity details",
          "government ID",
          "proof of address",
          "consent records"
        ],
    
        "screening_agent": [
          "client identity details",
          "PEP declaration",
          "tax residency",
          "country exposure"
        ],
    
        "wealth_and_funds_review_agent": [
          "source of wealth declaration",
          "source of funds declaration",
          "bank statement",
          "business sale agreement",
          "crypto-related information"
        ],
    
        "business_structure_review_agent": [
          "business sale context",
          "business ownership information",
          "sale-related records"
        ]
      }
    }

    The Orchestrator includes the Business Structure Review Agent because James’s wealth came from a business sale.

    It tells the Identity Verification Agent to use the dual-process method because James’s profile is more complex and the bank needs stronger identity evidence.

    It asks the Wealth and Funds Review Agent to run an enhanced review because James’s case includes business sale proceeds and crypto funds. 

    Why does the Orchestrator create two different plans for two different clients?

    Because not every client needs the same agents, methods, or evidence.

    For a client with a simple profile, the Orchestrator keeps the plan straightforward. It runs only the agents that are relevant, chooses standard methods, and avoids steps that do not apply to the case. That client can be onboarded faster because the system is not running unnecessary agents.

    For a client like James, the Orchestrator builds a more detailed plan. It runs more agents, sends them more information, and asks them to use stronger methods because the case is more complex.

    That is the value of the Orchestrator. It helps the workflow treat simple cases simply and complex cases carefully.

    Why do we need both a Workflow Controller and an Orchestrator?

    Why not let the Workflow Controller decide everything?

    Because then the whole workflow becomes harder to manage. The Workflow Controller would have to decide which agents should run, run those agents, handle pauses, call the downstream steps, and record what happened.

    And when that happens, the workflow becomes difficult to understand, test, and explain.

    In banking, that matters. 

    If a regulator asks why a case followed a certain path, the bank needs a clear answer. It needs to show the rules it applied, the steps it ran, and why the case moved in that direction.

    That becomes much harder when one part of the workflow does everything.

    The cleaner design is to separate the two tasks.

    The Orchestrator decides the plan. 

    The Workflow Controller runs it.

    And because they are separate, the bank can improve one without changing the other.

    For example, if the bank decides that every high-net-worth client with crypto funds now needs enhanced wealth review, the team can update the Orchestrator. The Orchestrator builds a different plan for those clients, but the Workflow Controller still runs the plan the same way.

    If the bank changes how cases pause and resume, the team updates the Workflow Controller. A missing source-of-funds document may create a task for the relationship manager, while a possible PEP match may go to a compliance officer. The Orchestrator stays the same.

    That is the benefit of keeping them separate. 

    The workflow becomes easier to update, test, and explain to a regulator later.

    That is how the agentic KYC workflow gets direction. 

    The Orchestrator decides which agents should run, how they should run, and what information they should receive.

    Like the conductor, it does not play every instrument. It keeps the workflow moving in the right order.

    In the next post, we look at the first specialist agent in the workflow: the Identity Verification Agent.

  • Why Agentic KYC Workflows Need A Workflow Controller

    Why Agentic KYC Workflows Need A Workflow Controller

    I also built a working prototype in Python to demonstrate this architecture. You can find the link to the prototype here.

    In the first post, we looked at the full agentic KYC workflow for high-net-worth onboarding.

    In the second post, we zoomed into the CRM and Case Package piece. That is where the relationship manager captures the client information, uploads the documents, and creates the structured case package that starts the workflow.

    Now we are looking at the next piece: the Workflow Controller.

    Agentic AI Workflow for KYC

    The Workflow Controller is the engine that drives the entire workflow. It starts with the case package and coordinates everything that follows. The Orchestrator, the specialist agents, the Signal Aggregator, and the Risk Engine all run under its watch until the final output reaches the compliance officer.

    But coordinating the agents is only part of what it does. 

    The Workflow Controller also decides whether the case should continue, pause, request more information, or go to a compliance officer for review.

    Let’s see how it does that.

    It works with the Orchestrator to decide which agents to run. 

    The first thing the Workflow Controller does is send the case package to the Orchestrator.

    The Orchestrator looks at the case and creates a plan. In James’s case, the plan calls for running four specialist agents: the Identity Verification Agent, the Screening Agent, the Wealth and Funds Review Agent, and the Business Structure Review Agent.

    The plan also specifies which information each agent should use. For example, the Identity Verification Agent receives James’s identity details, government ID, and proof of address. The Wealth and Funds Review Agent receives his wealth profile, source of funds, bank statement, and business sale agreement.

    The Workflow Controller then takes that plan and runs each agent with the right inputs.

    Workflow Controller
    ├── Identity Verification Agent
    ├── Screening Agent
    ├── Wealth & Funds Review Agent
    └── Business Structure Review Agent

    But the Orchestrator does not always run just once

    Sometimes new details appear after the workflow has already started.

    For example, James may first declare that his source of funds came from a business sale. But later, the bank statement may show that the incoming funds came from a crypto exchange.

    Or the relationship manager may first onboard James as an individual. But later, a document may show that the funds are connected to a trust or holding company.

    In situations like this, the Workflow Controller sends the updated case back to the Orchestrator. The Orchestrator looks at the new details, updates the plan, and runs the right agents again.

    From separate agent findings to one case view

    Each agent completes its review and returns a finding like this: 

    ├── Identity Verification Agent: identity evidence is ready for verification
    ├── Screening Agent: PEP match flagged
    ├── Wealth And Funds Review Agent: source of funds issue highlighted
    └── Business Structure Review Agent: business sale context confirmed

    The Workflow Controller collects these findings and sends them to the Signal Aggregator. The Signal Aggregator combines the separate findings into one unified case view.

    The Workflow Controller then sends that unified view to the Risk Engine.

    The Risk Engine applies rules to decide how the case should be handled.

    For James, it classifies the case as high risk because of his PEP exposure, business sale wealth context, crypto-related source of funds, and cross-border activity. It also identifies what the compliance officer should focus on during review.

    The Workflow Controller collects the Risk Engine output and prepares the final workflow result.

    That result tells the compliance officer the risk tier, the review route, the recommended action, and a summary of what the agents reviewed.

    What happens when an agent needs more information?

    So far, we have looked at the path where everything moves smoothly.

    But real KYC workflows do not always move in a straight line.

    Sometimes an agent cannot complete its review because it needs more information or human input.

    Let’s go back to James. He declares that his source of funds came from a business sale. But his bank statement shows that the incoming funds came from a crypto exchange. That is an evidence mismatch. 

    In that situation, the Wealth and Funds Review Agent cannot complete its review. It returns a finding that says the source of funds evidence is incomplete. The declared source is a business sale, but the bank statement shows money coming from a crypto exchange. The agent requests additional evidence: a crypto exchange statement, proof of exchange account ownership, and an explanation of the original source of the crypto funds. 

    The Workflow Controller reads that output and decides what should happen next. It may pause the workflow, request more information from the relationship manager, route the issue to a compliance officer, and wait for the new information before resuming the case.

    Agent Result

    Is the evidence complete?
    ├── Yes → Continue Workflow
    ├── Needs More Info → Pause + Request Documents
    └── Human Review Required → Compliance Officer

    How does the Workflow Controller know when to pause?

    The pause conditions have to be designed into the workflow from the start. 

    These conditions live in two places.

    The first is inside the specialist agents. Each agent is designed to return a specific status when it cannot complete its review.

    For example, the Wealth and Funds Review Agent returns a needs more information status when the source of funds evidence does not support the client’s declaration.

    The Screening Agent returns a human review required status when there is a possible PEP match that a compliance officer needs to verify.

    The second is inside the Workflow Controller. 

    It is coded to decide what to do when an agent returns a specific status, something like this: 

    If the agent says it is complete → the case moves forward

    If the agent says it needs more information → the controller pauses and requests the missing information

    If the agent says human review is required → the controller routes the issue to a compliance officer

    What the Workflow Controller records? 

    The Workflow Controller also records what happened. And there are two kinds of records.

    The first is the case record. This is what the bank may need to explain the case to a regulator later.

    It captures which agents ran, which inputs were reviewed, what the risk tier was, what review route was selected, and what action was recommended. It also records whether human review was required, who reviewed the case, and when key steps happened.

    This matters because the bank needs to be able to explain what was reviewed and why the case moved in a certain direction.

    The second is the workflow execution trace. This is the technical record of how the workflow ran.

    It captures which steps started and completed, where the workflow paused, and which agent returned an issue. It also records where the workflow resumed and where an error happened.

    This helps engineering teams debug the workflow. If something goes wrong, they can see exactly where the issue happened and why.

    That covers everything the Workflow Controller does.

    The Workflow Controller is the engine that drives the entire workflow 

    It coordinates the agents, handles the pauses, and manages the human review touchpoints. And it makes sure the compliance officer receives everything they need to make a decision.

    It also records what each agent did, what inputs were reviewed, and what decisions were made. So the bank can explain the case later to a regulator.

    In the next post, we will zoom into the Orchestrator and look at how it reads the case package and decides which specialist agents should run.

  • Before The Agents Run: How CRM Data Becomes A Clean Case Package

    Before The Agents Run: How CRM Data Becomes A Clean Case Package

    I also built a working prototype in Python to demonstrate this architecture. You can find the link to the prototype here.

    In the previous post, we looked at the full agentic KYC workflow for high-net-worth onboarding.

    Agentic AI Workflow for KYC

    In this post, we are zooming into the first piece of the workflow: CRM / Case Package. 

    This is where the workflow begins. And it matters more than it looks.

    If the case package is messy, everything downstream breaks down. The Orchestrator gets poor inputs. The specialist agents receive incomplete information. The Signal Aggregator has less to work with. The Risk Engine may make a decision based on an incomplete picture.

    So before we talk about agents, orchestration, or AI summaries, we need to answer a simple question: 

    How does a high-net-worth client’s information get into the workflow in a clean format?

    To answer that, we start with the relationship manager.

    The relationship manager captures three types of client information from James in a CRM.

    First, declared information. This is what the client tells the bank: their name, address, occupation, source of wealth, source of funds, and more.

    Second, documentary evidence. These are documents that support the declared information: government ID, bank statements, business sale agreement, and more.

    Third, consent records. This allows the bank to run third-party checks. For example, credit bureau consent allows the bank to verify the client’s credit history.

    The bank collects all this information because regulations demand it.

    In Canada, the Proceeds of Crime (Money Laundering) and Terrorist Financing Act (PCMLTFA) and FINTRAC guidance set the rules. Banks must verify client identity, understand the purpose of the relationship, and determine the source of funds.

    How the client information gets to the Workflow Controller

    The CRM does not send raw notes and uploaded files directly to the Workflow Controller.

    First, the information has to be captured, stored, classified, extracted, and packaged.

    Let’s use Google Cloud as an example:

    The relationship manager captures client information in the CRM

    Uploaded documents and client information are sent to Google Cloud Storage

    Google Document AI classifies each document

    Google Document AI extracts useful facts from each document

    Extracted facts are saved as JSON files in Google Cloud Storage

    Google Cloud Workflows packages the CRM data, document links, extracted facts, and consent records

    The Workflow Controller receives the structured case package

    Let’s walk through each step.

    First, the relationship manager captures the client information in the CRM.

    Second, the uploaded documents are sent to Google Cloud Storage.

    Third, Google Document AI classifies each document.

    This means it identifies what type of file was uploaded.

    For example:

    • This document is a government ID.
    • This document is a bank statement.
    • This document is a business sale agreement.

    Fourth, Google Document AI extracts key information from each document.

    For example, from a government ID, it may extract: name, date of birth, issuing country, and expiry date.

    Fifth, the extracted facts are saved as JSON files in Google Cloud Storage.

    For example, the original bank statement may be stored here: cloud://kyc-documents/KYC-123/doc_003.pdf

    And the extracted facts may be stored here: cloud://kyc-extracted-facts/KYC-123/doc_003_facts.json

    So the raw document and the extracted facts are both stored in the cloud, but as separate files.

    Sixth, Google Cloud Workflows packages the information.

    This is the step that brings everything together: client information from the CRM, document links from Google Cloud Storage, extracted facts from the JSON files, consent records, and case information.

    Google Cloud Workflows acts as the coordinator in this example. It pulls the pieces together and prepares the structured case package.

    Finally, the Workflow Controller receives the structured case package.

    For example:

    {
      "case_id": "KYC-123",
      "declared_profile": {
        "full_name": "James Whitmore",
        "source_of_wealth": "Sale of private business",
        "source_of_funds": "Crypto exchange transfer",
        "pep_declared": true
      },
      "document_refs": [
        {
          "document_id": "doc_003",
          "document_type": "bank_statement",
          "document_url": "cloud://kyc-documents/KYC-123/doc_003.pdf",
          "extracted_facts_url": "cloud://kyc-extracted-facts/KYC-123/doc_003_facts.json"
        }
      ]
    }

    As you can see, the Workflow Controller does not receive raw PDFs or scattered notes. It receives a clean, structured case package it can immediately start working with.

    So let’s quickly recap what we covered.

    The relationship manager captures three types of client information: what the client declares, the documents that support that declaration, and the consent records that allow the bank to run third-party checks. All of that information goes into the CRM.

    From there, the documents are stored, classified, and extracted. The extracted facts and document references are packaged together. And the Workflow Controller receives one clean starting point.

    That is the CRM and Case Package piece. It is not the most visible part of the workflow, but it is the part that every downstream agent depends on.

    In the next post, I will show how the Workflow Controller uses that case package to start the workflow, call the Orchestrator, run the required agents, and return the final output.

  • How To Reduce High-Net-Worth Client Onboarding Time With An Agentic KYC Workflow

    How To Reduce High-Net-Worth Client Onboarding Time With An Agentic KYC Workflow

    Note: This is the first in a series of posts on building agentic AI workflows for high-net-worth banking. This post walks through the high-level architecture. The upcoming posts will break down each agent in detail.

    I also built a working prototype in Python to demonstrate this architecture. You can find the link to the prototype here.

    Now let’s get into it.

    James is a retired business owner.

    He sold his software company last year for $18 million.

    He now wants to open a new bank account with a Canadian bank and transfer $5 million into that account.

    Of that $5 million, $4 million comes from the business sale proceeds. James currently holds this money in his existing bank account. The remaining $1 million comes from crypto funds held through a crypto exchange.

    He expects premium service because he is bringing millions of dollars to the bank.

    So James walks into the bank branch, sits down with the relationship manager, and tells her he wants to open an account.

    The relationship manager nods, takes notes, and then delivers the news.

    It could take more than 40 days to open his account.

    James is baffled. 

    More than 40 days for a bank account?

    He expected a few days at most. Maybe a week if they needed to verify some documents. But more than 40 days feels ridiculous.

    Something is clearly broken here.

    Why does opening a bank account take so long

    Banks call this process KYC, which stands for Know Your Customer.

    KYC is how the bank verifies who you are, where your money came from, and whether the funds are legitimate.

    For a client with a few hundred thousand dollars, the process is relatively simple. But for a client like James, who is bringing $18 million into the bank, the money laundering risk is much higher. The bank needs to dig deeper into his background and financial profile.

    For James, the bank has to verify his identity, understand where the $18 million came from, confirm the business sale was real, check for crypto involvement, and screen him for PEP, sanctions, and adverse media.

    The relationship manager collects this information and passes it to the compliance team for review. If something is missing, the compliance team goes back to the relationship manager, the relationship manager goes back to James, and the case returns to the queue.

    That back-and-forth is where much of the time goes. 

    That is why the bank takes 40+ days.

    This is where an agentic workflow helps

    Agentic AI can automate most of the review work so that the compliance officer can make a decision much faster.

    One thing to understand up front. The AI does not onboard the client or make the final decision. A compliance officer still reviews the case and decides whether to onboard the client. The AI just makes that review faster. 

    Agentic AI does that by breaking down a complex workflow into smaller, independent tasks. Each task gets handled by a specialized agent that focuses on one specific job. Think of an agent as a focused worker with just one clear responsibility.

    But before you build an agentic workflow, you need to understand the manual process first.

    Start by mapping how a client is onboarded today. What information does the relationship manager collect? Which teams touch the case? Where does it get stuck? Which decisions are rules-based and which need human judgment?

    Once you map the manual process, the design becomes clear. Some steps should be rules-based. Some should use existing bank systems. Some should use AI to organize messy documents. Some should remain with compliance officers who make the final judgment calls.

    Here’s how the agentic workflow is structured

     

    Agentic AI Workflow for KYC

    Here’s what each step does. 

    For simplicity, I’ll use ‘agent’ for each focused step in the workflow. When a step uses a large language model, I’ll call it an ‘AI agent.’ 

    1. The CRM is where the relationship manager enters James’s information and uploads his documents. This creates a case package, which bundles all the client information and supporting documents together.
    2. The Workflow Controller keeps the case moving. It starts the workflow, pauses when information is missing, resumes when the issue is resolved, and records key updates.
    3. The Orchestrator looks at the case and decides which agents are needed. For James’s case, it sees a business sale, crypto holdings, and high-net-worth status, so it triggers four specialist agents to run in parallel.
    4. The Identity Verification Agent verifies James’s identity using the bank’s approved identity verification systems.
    5. The Screening Agent checks James’s profile against sanctions lists, PEP databases, adverse media sources, and internal watchlists.
    6. The Wealth and Funds Review Agent looks at James’s source of wealth and source of funds. It reviews the business sale documents, bank statements, and crypto-related records to see whether the source of funds explanation is supported by the documents.
    7. The Business Structure Review Agent checks whether James was connected to the business that was sold. It may look at business registration records, ownership records, or sale documents to check whether James’s business sale supports what he declared.

      The business sale review is done by the Business Structure Review Agent. I covered it briefly in the Wealth and Funds Review Agent article only to make James’s full $5 million transfer easier to follow.

    8. The Signal Aggregator takes the separate findings from the individual agents and converts them into one unified input for the Risk Engine. This step is needed because each agent may produce output in a different format, and the Risk Engine needs a clean structure to apply its rules.
    9. The Risk Engine applies rules to decide what should happen next with the case. It does not just say ‘high risk’ or ‘medium risk.’ It explains why and which issues need human review. This decision is rules-based, not made by an AI model, because the bank needs to explain which rules were applied to regulators.  The LLM takes the structured Risk Engine output and turns it into plain English. It writes a case summary that explains what was verified, what remains unresolved, and where the compliance officer should focus their attention.
    10. A qualified compliance officer reads the summary, reviews the unresolved issues, examines the supporting evidence, and makes the final decision. They can approve the case, reject it, request more information from James, or escalate it to senior management.
    11. The final layer records two things: the case record and the agent trace. The case record captures client information, review outputs, and the final decision. The agent trace captures which steps ran and where the workflow paused.

    That is the architecture at a high level.

    In upcoming posts, I will dive deep into each part of this workflow and explain how each layer works.

    How this workflow reduces onboarding time 

    The workflow reduces onboarding time in three ways.

    First, simple cases move faster.

    Not every high-net-worth client needs deep scrutiny. If a client has straightforward wealth from a high salary, no PEP exposure, no sanctions concerns, and no complex business structures, the Orchestrator skips unnecessary steps. Clients with clean profiles can be reviewed and decided in days instead of weeks.  

    Second, complex cases reach the right compliance team earlier.

    Cases with PEP exposure, crypto funds, business sales, or trust structures need special attention. In a manual process, someone reads 50 pages, discovers the crypto issue buried in the statements, and routes it to someone else who starts over.

    In an agentic workflow, the Orchestrator spots these issues early and routes the case immediately. The compliance officer sees what is supported, what is unresolved, and where to focus. They can spot-check the evidence and decide quickly.

    Third, cases pause and resume without losing context.

    KYC cases pause constantly. A document might be blurry and needs resubmission. A screening match needs verification. A transaction needs more documentation.

    The Workflow Controller records where the case paused and what needs to happen next. For example, when James submits the missing document, the case resumes exactly where it stopped. The compliance officer continues without starting over.

    What this workflow actually does 

    This workflow does not approve clients. The compliance officer still makes that decision. 

    It also does not replace the systems banks already use for identity verification, sanctions screening, document storage, case management, or human review. Instead, it connects to those systems, collects their outputs, and organizes the results into a cleaner format for the compliance team.

    That is where the real value is.

    The relationship manager gets a clearer view of what information is needed from the client. The compliance team receives a better-prepared case. The compliance officer can focus on the unresolved issues instead of searching through the entire file. And if the case is reviewed later, the bank can explain what happened because the key steps were recorded together.

    So the goal is not to replace the bank’s KYC process.

    The goal is to make that process faster, cleaner, and easier to review later.

    Let’s quickly recap

    We started with James, a retired business owner who expected a premium onboarding experience but faced a 40-day wait because of a fragmented KYC process.

    The solution is a workflow that routes the case correctly, runs specialist agents in parallel, organizes the findings, applies rules, and gives the compliance officer the right evidence faster.

    That is how agentic AI becomes useful in KYC. It does not replace compliance officers. It prepares cases that are cleaner, faster to review, and easier to audit. 

    The goal is to help the compliance officer review the right case with the right evidence, faster.

    That is how you reduce high-net-worth client onboarding time with an agentic KYC workflow.

    The next post will go one step earlier in the workflow and show how CRM inputs, uploaded documents, and client declarations become the case package that the Workflow Controller uses to start the KYC process.

    Stay tuned.

     

  • Post-Launch: How Do You Know If Your Feature Actually Worked?

    Post-Launch: How Do You Know If Your Feature Actually Worked?

    Your feature has now been launched to all one million high-net-worth clients.

    But how do you know whether it solved the problem you set out to solve?

    You collected feedback from users during the pilot phase, and that confirmed the feature worked and that clients could use it.

    However, pilot testing involves only a small number of users.

    To determine whether the feature actually solved the problem, you need to see how many more high-net-worth clients use the feature after launch.

    You do this in two ways. You measure the metrics that were defined earlier, and you track the Customer Effort Score.

    Together, these signals show whether the feature solved the problem that was causing churn.

    Give users time to use the feature before measuring the metrics

    You cannot measure the impact of a feature immediately after launch because clients need time to discover the feature and start using it.

    You usually wait about thirty days after launch before measuring the first set of results. This gives enough time for clients to start using the feature and for you to collect enough usage data to see meaningful patterns.

    After that, you measure the same metrics again at sixty days and ninety days.

    Tracking the metrics at 30, 60, and 90 days shows whether clients continue to use the feature and whether the improvements last over time.

    Comparing the metrics before and after launch

    The simplest way to understand whether the feature worked is to compare how clients contacted their RMs before the feature existed and how they contact them after it launched.

    For example, if the feature went live on June 1, 2026, you measure the metrics on July 1, 2026, and compare them to the same period one year earlier on July 1, 2025.

    Feature after and before launch

    Before the feature existed, clients contacted their relationship managers through other channels, such as direct phone calls or emails outside the app.

    The table above compares the same KPIs before and after the feature launched.

    After launch, more clients reached their relationship managers through the app, more requests were handled within the expected SLAs, and fewer cases required escalation. Net asset outflow per client began to decline, and as a consequence, churn also declined.

    These changes show that the feature has reduced the friction that previously prevented clients from reaching their relationship managers.

    Apply segmentation to the metrics

    Looking at the metrics for all high-net-worth clients is not enough. You also need to know how these metrics change for your other major segments.

    Earlier in the series, you identified that traveling retired business owners were churning more than other segments. You need to see whether the feature is solving the problem for this segment. You also need to see how the feature impacted your major client segments like retired business owners and passive heirs, who account for the majority of your clients.

    You analyze the data across all your major client segments:

    • All high-net-worth clients. 
    • Retired business owners (domestic). 
    • Retired business owners (traveling). 
    • Passive heirs (domestic). 
    • Passive heirs (traveling).

    For example, the overall metrics might show great improvements across the entire client base. But when you examine the metrics for traveling retired business owners, you might discover that their escalation rates are still high or that their requests are still taking longer to resolve. If that happens, the original problem still exists for that segment.

    Segment-level analysis helps you see if the feature is working for all segments or if traveling retired business owners are still experiencing the same friction that was causing them to churn. If their metrics haven’t improved, you know where to focus additional improvements.

    Measuring satisfaction using Customer Effort Score

    The metrics show how clients used the feature, but they don’t show how easy it was for clients to use it.

    To measure that, you track the Customer Effort Score.

    Customer Effort Score measures how easy it was for a client to complete a task. In this case, the task is reaching their relationship manager when they need help.

    You measure CES with a single question: 

    “How easy was it to reach your relationship manager using this feature?” 

    Clients respond using a five-point scale.

    Score     Scale
    1   Very difficult
          2      Difficult
          3       Neutral
          4       Easy
    5 Very easy

     

    If most responses fall in 4 or 5, the feature is reducing friction. If responses cluster around 2 or 3, the experience still needs improvement.

    To ensure meaningful responses, you measure CES only for users who have used the feature at least twice.

    Just like the metrics, CES should also be analyzed by segment. This means you review CES scores for:

    • all high net worth clients
    • retired business owners (domestic)
    • retired business owners (traveling)
    • passive heirs (domestic)
    • passive heirs (traveling)

    Now the question is: how do you collect CES responses from one million clients?

    Collecting CES responses at scale 

    Since one million high-net-worth clients use the feature, feedback must be collected at scale.

    You do this through an in-app survey that appears after a client has used the feature. For example, after a client contacts their relationship manager through the app two or more times, the app displays the Customer Effort Score question.

    Survey software makes this easier. It lets you collect responses directly inside the mobile app, calculate CES scores automatically, and analyze results across different client segments.

    You collect enough responses from each segment to understand how that group feels about the feature. For example, you might collect 3,600 responses from retired business owners and 2,500 from passive heirs.

    If CES scores are high across all segments, it indicates that clients find the feature easy to use regardless of their profile or travel status.

    Did the feature solve the problem?

    When these metrics improve together, the answer becomes clear.

    More clients are reaching their RMs through the app. The bank is handling more requests within SLA, fewer cases are escalating, asset outflows are stabilizing, and churn is declining. 

    This shows that the feature is solving the problem that caused clients to leave in the first place.

    This is the final piece of the fintech puzzle.

    The work started with identifying which clients were churning and why. Client interviews uncovered the root cause. The solution was designed within real technology and compliance constraints, built with multiple engineering teams, and verified using real client data.

    When all five pieces come together in the right order, the result isn’t just a new feature. It’s a solution to a real customer problem, and that’s what drives growth in high-net-worth banking.

Twenty Twenty-Five

Designed with WordPress