[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RZS1TM4VDPDPVT6Y9EJJ9":3,"skill-same:01M71RZS1TM4VDPDPVT6Y9EJJ9":76},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":6,"ownerHtmlUrl":60,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":61,"install":62,"resources":75},"01M71RZS1TM4VDPDPVT6Y9EJJ9","vendor_kyc_finance_bp",null,"Approve a new vendor when entity sanctions, all UBO sanctions, and the adverse-media sweep all came back clean; otherwise reject naming the failure.","arturcrmbot\u002Fzava-control-plane","arturcrmbot","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F156445312?v=4","01M71R9QBEJ4ZSX5AXBGBYH82C","Artur Zielinski","01M71R9QCJSV19ESCAF5773TWH",1,"MIT","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fapi\u002Fserver\u002Fpersonae\u002Fvendor_kyc_finance_bp\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000040","财务","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"finance bp","vendor kyc finance bp","vendor","finance","kyc","human","resolver","phase","balanced","when","new","join","open","clean","decision","up","diligence","get","Media","back","2026-11-10 13:02:02",false,"---\nname: vendor_kyc_finance_bp\ndescription: Approve a new vendor when entity sanctions, all UBO sanctions, and the adverse-media sweep all came back clean; otherwise reject naming the failure.\nallowed-tools:\nworkflow_label: Vendor onboarding & KYC\nexternal_event: finance_signoff_decision\ndecision_policy: |\n    kyc = (context or {}).get(\"kyc_diligence\") or {}\n    ubo = (context or {}).get(\"ubo_resolver\") or {}\n    entity_hits = kyc.get(\"entity_sanctions_hits\") or []\n    ubo_hits = ubo.get(\"ubo_sanctions_hits\") or []\n    media_hits = ubo.get(\"adverse_media_hits\") or []\n    HIGH_RISK = {\"RU\", \"BY\", \"IR\", \"KP\", \"SY\", \"VE\"}\n    country = (kyc.get(\"country_of_incorporation\") or \"\").upper()\n    if entity_hits:\n        decision = \"reject\"\n        reason = (\n            \"entity sanctions hits: \"\n            + \", \".join(str(h) for h in entity_hits[:3])\n        )\n    elif ubo_hits:\n        decision = \"reject\"\n        reason = (\n            \"UBO sanctions hits: \"\n            + \", \".join(str(h) for h in ubo_hits[:3])\n        )\n    elif media_hits:\n        decision = \"reject\"\n        reason = (\n            \"adverse media hits: \"\n            + \", \".join(str(h) for h in media_hits[:3])\n        )\n    elif country in HIGH_RISK:\n        # Phase 6 escalate: even with a clean sweep, high-risk jurisdictions\n        # require human signoff. Gate stays open; FM picks up via triage.\n        decision = \"escalate\"\n        reason = (\n            f\"high-risk jurisdiction {country!r} — clean sweep but \"\n            f\"requires human signoff per FCA enhanced due diligence\"\n        )\n    else:\n        decision = \"approve\"\n        reason = \"entity, UBOs and adverse-media sweep all clean\"\npersonality:\n  risk_appetite: balanced\n  thoroughness: medium\n  escalation_style: standard\n---\n\n# vendor_kyc_finance_bp\n\nYou are the **vendor_kyc_finance_bp** for the **Vendor onboarding & KYC**\nworkflow.\n\n## Decision policy\n\nApprove when `entity_sanctions_hits`, `ubo_sanctions_hits`, and\n`adverse_media_hits` are all empty. Otherwise reject naming the first\nnon-empty list in one sentence.\n\nThe same rule lives, in executable form, in the YAML frontmatter\n`decision_policy` block. The persona responder reads the frontmatter\nand applies that code against the parked workflow context whenever\nthis persona is in the `PERSONA_AUTO_CLOSE` env-var allow-list.\n\n## When this fires\n\nThe orchestrator parks at the Phase 4 (Finance Signoff) HITL gate and\nemits a `workflow.hitl.requested` FleetEvent carrying:\n\n- `persona: \"vendor_kyc_finance_bp\"`\n- `external_event: \"finance_signoff_decision\"`\n- `context.kyc_diligence`: the Phase 2 agent verdict (registry record,\n  countries screened, entity sanctions hits)\n- `context.ubo_resolver`: the Phase 3 agent verdict (UBO list, UBO\n  sanctions hits, adverse-media hits)\n\n## How a real human resolves the same gate\n\nWhen `vendor_kyc_finance_bp` is NOT in `PERSONA_AUTO_CLOSE`, the gate\nstays open indefinitely. The real vendor_kyc_finance_bp resolves it by\nraising the `finance_signoff_decision` external event via the\norchestration HTTP API (or any UI surface that calls\n`POST \u002Finternal\u002Fdurable-event` with kind `finance_signoff_decision`).\n","# vendor_kyc_finance_bp\n\nYou are the **vendor_kyc_finance_bp** for the **Vendor onboarding & KYC**\nworkflow.\n\n## Decision policy\n\nApprove when `entity_sanctions_hits`, `ubo_sanctions_hits`, and\n`adverse_media_hits` are all empty. Otherwise reject naming the first\nnon-empty list in one sentence.\n\nThe same rule lives, in executable form, in the YAML frontmatter\n`decision_policy` block. The persona responder reads the frontmatter\nand applies that code against the parked workflow context whenever\nthis persona is in the `PERSONA_AUTO_CLOSE` env-var allow-list.\n\n## When this fires\n\nThe orchestrator parks at the Phase 4 (Finance Signoff) HITL gate and\nemits a `workflow.hitl.requested` FleetEvent carrying:\n\n- `persona: \"vendor_kyc_finance_bp\"`\n- `external_event: \"finance_signoff_decision\"`\n- `context.kyc_diligence`: the Phase 2 agent verdict (registry record,\n  countries screened, entity sanctions hits)\n- `context.ubo_resolver`: the Phase 3 agent verdict (UBO list, UBO\n  sanctions hits, adverse-media hits)\n\n## How a real human resolves the same gate\n\nWhen `vendor_kyc_finance_bp` is NOT in `PERSONA_AUTO_CLOSE`, the gate\nstays open indefinitely. The real vendor_kyc_finance_bp resolves it by\nraising the `finance_signoff_decision` external event via the\norchestration HTTP API (or any UI surface that calls\n`POST \u002Finternal\u002Fdurable-event` with kind `finance_signoff_decision`).\n",{"name":5,"description":7,"personality":49,"allowed-tools":6,"external_event":52,"workflow_label":53,"decision_policy":54},{"thoroughness":50,"risk_appetite":32,"escalation_style":51},"medium","standard","finance_signoff_decision","Vendor onboarding & KYC","kyc = (context or {}).get(\"kyc_diligence\") or {}\nubo = (context or {}).get(\"ubo_resolver\") or {}\nentity_hits = kyc.get(\"entity_sanctions_hits\") or []\nubo_hits = ubo.get(\"ubo_sanctions_hits\") or []\nmedia_hits = ubo.get(\"adverse_media_hits\") or []\nHIGH_RISK = {\"RU\", \"BY\", \"IR\", \"KP\", \"SY\", \"VE\"}\ncountry = (kyc.get(\"country_of_incorporation\") or \"\").upper()\nif entity_hits:\n    decision = \"reject\"\n    reason = (\n        \"entity sanctions hits: \"\n        + \", \".join(str(h) for h in entity_hits[:3])\n    )\nelif ubo_hits:\n    decision = \"reject\"\n    reason = (\n        \"UBO sanctions hits: \"\n        + \", \".join(str(h) for h in ubo_hits[:3])\n    )\nelif media_hits:\n    decision = \"reject\"\n    reason = (\n        \"adverse media hits: \"\n        + \", \".join(str(h) for h in media_hits[:3])\n    )\nelif country in HIGH_RISK:\n    # Phase 6 escalate: even with a clean sweep, high-risk jurisdictions\n    # require human signoff. Gate stays open; FM picks up via triage.\n    decision = \"escalate\"\n    reason = (\n        f\"high-risk jurisdiction {country!r} — clean sweep but \"\n        f\"requires human signoff per FCA enhanced due diligence\"\n    )\nelse:\n    decision = \"approve\"\n    reason = \"entity, UBOs and adverse-media sweep all clean\"\n","main","db273d7d646605c0bf0175dc9c8057b9ad2628b5","api\u002Fserver\u002Fpersonae\u002Fvendor_kyc_finance_bp",2,"https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane","https:\u002F\u002Fgithub.com\u002Farturcrmbot","2026-09-28 17:47:06",{"source":8,"skillName":5,"commands":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add arturcrmbot\u002Fzava-control-plane --skill vendor_kyc_finance_bp",{"tool":68,"command":69},"bunx","bunx skills add arturcrmbot\u002Fzava-control-plane --skill vendor_kyc_finance_bp",{"tool":71,"command":72},"pnpm","pnpm dlx skills add arturcrmbot\u002Fzava-control-plane --skill vendor_kyc_finance_bp","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fapi\u002Fserver\u002Fpersonae\u002Fvendor_kyc_finance_bp\u002FSKILL.md",true,[],[77,98,114,128,136,143],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":44},"01M71SJECD4KXSSJV1B0HSY4T4","proactive-customer-care","Proactively notifies and, where warranted, extends a small bounded goodwill gesture to a customer whose itinerary materially changed.","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fproactive-customer-care\u002FSKILL.md",[],[84,85,86,87,88,89,90,91,92,93,94,95,96,97],"proactive","customer","proactive customer care","customer care","gesture","action","bounded","status","check","booking","operations","travel","issue","itinerary",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":44},"01M71SJ9VHGNNTB6452H1KRZD6","payment-exception","Resolves a failed balance payment by retrying it to complete the booking, or releasing the booking's inventory when retry is not viable.","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fpayment-exception\u002FSKILL.md",[],[105,106,107,108,109,93,33,110,111,91,112,113,92,94,95],"payment","payment exception","it","retry","balance","release","complete","capacity","inventory",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":44},"01M71SJ6S6XREB0J6CCVCSFZ9E","hotel-supplier-recovery","Restores accommodation for a shortfall-hit hotel allotment by moving contracted rooms from a donor allotment with headroom, resolving the reported supplier shortfall.","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fhotel-supplier-recovery\u002FSKILL.md",[],[121,122,123,124,92,94,95,125,126,127],"hotel supplier recovery","hotel","recovery","with","move","for","headroom",{"skillNo":129,"name":130,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":44},"01M71SJ4G5MPM50WZ6F66M3PNS","holiday-sales-booking","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fholiday-sales-booking\u002FSKILL.md",[],[134,93,135],"holiday sales booking","sales",{"skillNo":137,"name":138,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":44},"01M71SJ2AHHWN2C4YV2RKEE947","flight-disruption-recovery","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fflight-disruption-recovery\u002FSKILL.md",[],[142,123],"flight disruption recovery",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":44},"01M71SHYPK8HNQ80C9XAWSER53","destination-operations","Dispatches a replacement resort transfer when an arrival is at risk, rebinding any travellers on the at-risk transfer to the replacement.","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fdestination-operations\u002FSKILL.md",[],[150,94,151,152,92,153,95,154,33,155],"destination operations","destination","risk","dispatch","at","transfer"]