# KYC Desk > One client or investor onboarding packet in; the five things an onboarding analyst produces from it > out. Paste the packet and a free in-browser scan does the deterministic half before anything is > sent: it walks the ownership chains and multiplies every indirect holding out against the 25% > beneficial-ownership threshold, checks the customer-identification elements party by party, > validates identification numbers and expiries, resolves jurisdictions against a dated snapshot, > foots the funding schedule against the $10,000 currency-reporting threshold, matches the document > inventory against the required set for the account type, and scores the risk factors with every > term printed. Then one of five lanes does the judgement. URL: https://kyc-desk.skillsafe.ai/ Model: gpt-terra (resolves to gpt-5.6-terra) · publisher markup 1000 bps Pricing: the client-side scan, the examples and the exports are free; a lane run costs credits Visibility: unlisted — reachable by link, not listed on the marketplace ## What it is for The user is a compliance or onboarding analyst who has just been handed one packet and has minutes. The work object is that single packet. Every lane takes the same paste; the second lane runs on the first lane's output. ## The five lanes | `task` | What it returns | `verdict.call` | | --- | --- | --- | | `parse` | The structured KYC record and an explicit account of what the packet does not contain | `complete` / `partial` / `insufficient` | | `cip` | The customer-identification determination, element by element, plus the approval tier the file needs | `open` / `open-with-conditions` / `do-not-open` | | `risk` | The CDD customer risk rating argued factor by factor, the EDD triggers, the refresh interval | `low` / `medium` / `high` | | `aml` | The money-laundering review of the declared funding and activity | `clear` / `monitor` / `escalate` | | `rfi` | The client-facing request for information plus the internal action plan | `ready-to-send` / `needs-internal-review` | Pipeline order is the sitting: read the file, judge it, close it. `parse` hands to `cip`, `cip` and `aml` hand to `rfi`, `risk` hands to `aml` — each as a button that pre-fills the next lane's `upstream` field. ## Source skills A derived work of five agent skills, credited in full: - `@anthropics/kyc-doc-parse` (Apache-2.0) — parsing an onboarding packet into structured KYC fields. The `parse` lane. - `@joellewis/know-your-customer` (MIT) — customer identification, due diligence and ongoing monitoring under FINRA Rule 2090, CIP and the FinCEN CDD rule. The `cip` and `risk` lanes. - `@joellewis/anti-money-laundering` (MIT) — BSA/AML programme operation, structuring detection, reporting thresholds. The `aml` lane. - `@joellewis/account-opening-compliance` (MIT) — risk-based approval tiers and exception tracking. The routing in the `cip` lane. - `@joellewis/client-onboarding` (MIT) — onboarding workflow and NIGO remediation. The `rfi` lane. Not affiliated with, or endorsed by, their authors. ## What the free client-side scan computes No model, no network, no credits. Every number below is derived in the browser and is authoritative for the run that follows — the prompt forbids the model from recomputing or contradicting it. - **Party framing.** The packet is split into blocks on role headings (applicant, beneficial owner, control person, trustee, entity, …), matched whole rather than as prefixes. Blocks naming the same party are merged, roles unioned, and a field stated twice with different values is reported rather than resolved. - **Field reading.** A whole-label, longest-first synonym table over about fifty canonical fields, so "source of wealth" is never read as "source of funds" and "beneficial owner certification" never satisfies "beneficial owner". - **Three-valued declarations.** PEP status, sanctions screening, beneficial-ownership certification, enhanced due diligence and verification method each resolve to `yes`, `no` or `not_stated`. A non-answer ("n/a", "TBD", "pending", "-") is `not_stated`, never `no`. Screening-type fields are read in a different sense from subject-type fields, so "cleared, no matches" is a performed screen and "not a politically exposed person" is a negative answer. - **Beneficial ownership.** Every path from an ultimate owner to the account entity is enumerated, the percentages along it multiplied, and the paths summed per owner — so a person holding 24% through two branches is surfaced at 48%. Direct owners are footed to 100% against a tolerance derived from the precision they were written to. Cycles are detected and not followed. The same edge stated twice (a list and a prose sentence) is counted once; stated with two different percentages it is reported as a contradiction. - **CIP elements.** Name, date of birth, address and identification number for a natural person; legal name, principal place of business and taxpayer identification number for an entity. - **Identification validity.** SSN area, group and serial ranges; EIN campus prefixes; passport shape; placeholder detection; and expiry as a third state — a document can be present, well-formed and unusable. - **Ages.** Whole years on calendar components, with minors and the age-65 senior-investor line flagged, and an ambiguous numeric date reported as ambiguous rather than guessed. - **Jurisdictions.** Whole-name matching with an alias table against a dated bundled snapshot, so the Republic of Korea is never confused with the DPRK and a US state or Canadian province resolves to its country. This is orientation, not a sanctions screen. - **Funding.** Items in the band below the $10,000 reporting threshold, items at or over it, and same-day sets of sub-threshold items that cross it together while none of them crosses it alone. - **Documents.** The inventory matched against the required set for the resolved account type, with a document named only on the packet's own outstanding list never reading as present. - **Risk score.** A weighted score whose every term, basis and total is printed and re-addable, with a band and a refresh interval. Finding severity is graded against the mitigating facts already computed, so the same gap is not critical on every file. - **Subsampling.** A long funding schedule is subsampled by a golden-ratio low-discrepancy draw, not a fixed stride — a stride resonates with a periodic counterparty column and can hand the model one actor's rows while claiming to be a sample. ## Privacy An onboarding packet is the most identifying document a firm holds. Masking is **on by default**: names, identification numbers, dates of birth, street addresses, emails and phone numbers are replaced with stable placeholders in the browser before anything is sent, and the same dictionary is applied to the analyst's notes and to the scan's own findings. A **leak gate** then walks the assembled request body looking for any value a placeholder replaced, and a hit **blocks the run** rather than warning about it. The pasted packet is never stored — not in the account history, not in `localStorage`. ## What it explicitly does not do - It performs **no screening of any kind**. It holds no SDN, consolidated, PEP or adverse-media list and reaches no network other than the model. A packet with no screening result yields "screening is not evidenced", never "clear" and never "match". - It makes **no regulatory determination**, states no filing obligation, and opens no account. Every output is a draft for a named human reviewer. - It gives **no legal or compliance advice**. ## API `https://api.skillsafe.ai/v1/app-api` — see https://kyc-desk.skillsafe.ai/api.html for a worked example per lane in cURL, Python, JavaScript, Go, Java, Ruby, PHP and C#. The run body is the input object itself; there is no wrapper key. `task` is the first field and selects the lane. ## Data One declared collection, `reviews`, per-user (`acl_read: owner`, `acl_write: user`), with semantic search over `title`, `summary`, `lane` and `account_type`. It stores the review, never the packet.