[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71S6S9QTKAVSJB8W4BWCPR4":3,"skill-same:01M71S6S9QTKAVSJB8W4BWCPR4":72},{"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":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M71S6S9QTKAVSJB8W4BWCPR4","credit_risk_officer",null,"Clear small, short-duration synthetic counterparty limit excesses.","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\u002Fverticals\u002Fbanking\u002Fpersonae\u002Fcredit_risk_officer\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"risk officer","credit risk officer","risk","check","synthetic","gbp","approve","workflow","authority","persona","delegation","missing","decision","short","option","auth","value","get","limit","evidence","2026-11-10 13:02:02",false,"---\nname: credit_risk_officer\ndescription: Clear small, short-duration synthetic counterparty limit excesses.\nexternal_event: credit_risk_officer_decision\ndecision_policy: |\n    action = (context or {}).get(\"action\") or \"\"\n    request = (context or {}).get(\"request\") or {}\n    value_raw = request.get(\"amount_gbp\")\n    try:\n        value = float(value_raw)\n    except (TypeError, ValueError):\n        value = None\n    category = request.get(\"category\") or \"synthetic-limit-remediation\"\n\n    auth = authority_check(\n        role=\"credit_risk_officer\",\n        action=action,\n        value=value,\n        category='synthetic-limit-remediation',\n    )\n\n    rule = str(auth.get(\"governing_rule_id\") or \"n\u002Fa\")\n    if not action:\n        decision = \"reject\"\n        reason = \"missing action in context — cannot resolve authority\"\n    elif value is None:\n        decision = \"reject\"\n        reason = \"missing amount_gbp on request — cannot resolve authority\"\n    elif auth.get(\"allowed\"):\n        decision = \"approve\"\n        reason = (\n            \"within credit_risk_officer delegation per matrix rule \" + rule\n            + \": \" + str(category) + \" GBP \" + str(value)\n        )\n    else:\n        decision = \"escalate\"\n        reason = (\n            \"outside credit_risk_officer delegation per matrix rule \" + rule\n            + \": \" + str(category) + \" GBP \" + str(value)\n            + \" — \" + str(auth.get(\"reason\") or \"\")\n        )\n\n    extra = {}\n    if decision == \"approve\":\n        extra[\"persona\"] = \"credit_risk_officer\"\n        extra[\"workflow_id\"] = (context or {}).get(\"workflow_id\")\n        extra[\"story_id\"] = (context or {}).get(\"story_id\")\n        extra[\"decision_id\"] = (context or {}).get(\"decision_id\") or \"\"\n        extra[\"selected_option_id\"] = (context or {}).get(\"selected_option_id\") or \"\"\n        extra[\"evidence_versions\"] = (context or {}).get(\"evidence_versions\") or {}\n        extra[\"rationale\"] = reason\n---\n\n# Credit Risk Officer\n\nThis persona operates on synthetic data only and makes no live operational\nclaims. Wait for the exact external event `credit_risk_officer_decision`.\n\nApprove only a deterministically admitted remediation option whose value sits\nwithin the delegated authority of GBP 5,000,000. A larger or longer-running\nexcess escalates to the senior credit officer rather than being cleared here.\n\nThis persona does not set risk appetite, does not amend a counterparty limit,\ndoes not waive a collateral agreement term, and cannot close out a position.\nIt uses no tools and claims no access to live systems.\n","# Credit Risk Officer\n\nThis persona operates on synthetic data only and makes no live operational\nclaims. Wait for the exact external event `credit_risk_officer_decision`.\n\nApprove only a deterministically admitted remediation option whose value sits\nwithin the delegated authority of GBP 5,000,000. A larger or longer-running\nexcess escalates to the senior credit officer rather than being cleared here.\n\nThis persona does not set risk appetite, does not amend a counterparty limit,\ndoes not waive a collateral agreement term, and cannot close out a position.\nIt uses no tools and claims no access to live systems.\n",{"name":5,"description":7,"external_event":49,"decision_policy":50},"credit_risk_officer_decision","action = (context or {}).get(\"action\") or \"\"\nrequest = (context or {}).get(\"request\") or {}\nvalue_raw = request.get(\"amount_gbp\")\ntry:\n    value = float(value_raw)\nexcept (TypeError, ValueError):\n    value = None\ncategory = request.get(\"category\") or \"synthetic-limit-remediation\"\n\nauth = authority_check(\n    role=\"credit_risk_officer\",\n    action=action,\n    value=value,\n    category='synthetic-limit-remediation',\n)\n\nrule = str(auth.get(\"governing_rule_id\") or \"n\u002Fa\")\nif not action:\n    decision = \"reject\"\n    reason = \"missing action in context — cannot resolve authority\"\nelif value is None:\n    decision = \"reject\"\n    reason = \"missing amount_gbp on request — cannot resolve authority\"\nelif auth.get(\"allowed\"):\n    decision = \"approve\"\n    reason = (\n        \"within credit_risk_officer delegation per matrix rule \" + rule\n        + \": \" + str(category) + \" GBP \" + str(value)\n    )\nelse:\n    decision = \"escalate\"\n    reason = (\n        \"outside credit_risk_officer delegation per matrix rule \" + rule\n        + \": \" + str(category) + \" GBP \" + str(value)\n        + \" — \" + str(auth.get(\"reason\") or \"\")\n    )\n\nextra = {}\nif decision == \"approve\":\n    extra[\"persona\"] = \"credit_risk_officer\"\n    extra[\"workflow_id\"] = (context or {}).get(\"workflow_id\")\n    extra[\"story_id\"] = (context or {}).get(\"story_id\")\n    extra[\"decision_id\"] = (context or {}).get(\"decision_id\") or \"\"\n    extra[\"selected_option_id\"] = (context or {}).get(\"selected_option_id\") or \"\"\n    extra[\"evidence_versions\"] = (context or {}).get(\"evidence_versions\") or {}\n    extra[\"rationale\"] = reason","main","db273d7d646605c0bf0175dc9c8057b9ad2628b5","verticals\u002Fbanking\u002Fpersonae\u002Fcredit_risk_officer",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":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add arturcrmbot\u002Fzava-control-plane --skill credit_risk_officer",{"tool":64,"command":65},"bunx","bunx skills add arturcrmbot\u002Fzava-control-plane --skill credit_risk_officer",{"tool":67,"command":68},"pnpm","pnpm dlx skills add arturcrmbot\u002Fzava-control-plane --skill credit_risk_officer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Fbanking\u002Fpersonae\u002Fcredit_risk_officer\u002FSKILL.md",true,[],[73,93,110,124,132,139],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"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",[],[80,81,82,83,84,85,86,87,27,88,89,90,91,92],"proactive","customer","proactive customer care","customer care","gesture","action","bounded","status","booking","operations","travel","issue","itinerary",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"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",[],[100,101,102,103,104,88,105,106,107,87,108,109,27,89,90],"payment","payment exception","it","retry","balance","when","release","complete","capacity","inventory",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"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",[],[117,118,119,120,27,89,90,121,122,123],"hotel supplier recovery","hotel","recovery","with","move","for","headroom",{"skillNo":125,"name":126,"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":127,"categories":128,"keywords":129,"publishedAt":44},"01M71SJ4G5MPM50WZ6F66M3PNS","holiday-sales-booking","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fholiday-sales-booking\u002FSKILL.md",[],[130,88,131],"holiday sales booking","sales",{"skillNo":133,"name":134,"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":135,"categories":136,"keywords":137,"publishedAt":44},"01M71SJ2AHHWN2C4YV2RKEE947","flight-disruption-recovery","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fflight-disruption-recovery\u002FSKILL.md",[],[138,119],"flight disruption recovery",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"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",[],[146,89,147,26,27,148,90,149,105,150],"destination operations","destination","dispatch","at","transfer"]