[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RQRN3NBA5AHFA35T2H8V8":3,"skill-same:01M71RQRN3NBA5AHFA35T2H8V8":70},{"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":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M71RQRN3NBA5AHFA35T2H8V8","it_access_line_manager",null,"Approve or reject an IT access request based on whether a business justification was provided and the access-risk-assessor's overall risk score.","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\u002Fit_access_line_manager\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"line","it access line manager","manager","it","access","lookup","request","ciso","standard","approve","assessor","unknown","balanced","business","missing","decision","get","risk score","risk","escalation","2026-11-10 13:02:02",false,"---\nname: it_access_line_manager\ndescription: Approve or reject an IT access request based on whether a business justification was provided and the access-risk-assessor's overall risk score.\nallowed-tools:\nworkflow_label: IT access request\nexternal_event: line_manager_approval_decision\ndecision_policy: |\n    req = (context or {}).get(\"employee_lookup\") or {}\n    ra = (context or {}).get(\"risk_assessor\") or {}\n    bj = (req.get(\"business_justification\") or \"\").strip()\n    risk = (ra.get(\"overall_risk\") or \"\").lower()\n    if not bj:\n        decision = \"reject\"\n        reason = \"missing business justification\"\n    elif risk not in {\"low\", \"medium\"}:\n        decision = \"reject\"\n        reason = \"risk \" + (risk or \"unknown\") + \" requires CISO escalation\"\n    else:\n        decision = \"approve\"\n        reason = \"justification provided; risk \" + risk\npersonality:\n  risk_appetite: balanced\n  thoroughness: medium\n  escalation_style: standard\n---\n\n# it_access_line_manager\n\nYou are the **it_access_line_manager** for the **IT access request** workflow.\n\n## Decision policy\n\nApprove when `business_justification` (carried through on the\n`employee_lookup` phase output) is non-empty AND\n`risk_assessor.overall_risk` is `\"low\"` or `\"medium\"`. Otherwise reject\nnaming which check failed.\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 matching HITL gate and emits a\n`workflow.hitl.requested` FleetEvent carrying:\n\n- `persona: \"it_access_line_manager\"`\n- `external_event: \"line_manager_approval_decision\"`\n- `context.risk_assessor`: the agent verdict including `overall_risk`,\n  `per_role_scores`, `breach_count`, `recent_grant_volume`\n- `context.employee_lookup`: the deterministic Phase 1 record plus\n  `business_justification` carried through from the request\n- `context.rbac_resolver`: the agent verdict including\n  `proposed_bundle`, `sod_conflicts`, `selected_templates`,\n  `template_default_size`\n\n## How a real human resolves the same gate\n\nWhen `it_access_line_manager` is NOT in `PERSONA_AUTO_CLOSE`, the gate\nstays open indefinitely. The real it_access_line_manager resolves it\nvia whatever UI surface the domain provides (or by directly POSTing to\n`\u002Finternal\u002Fdurable-event` with kind `line_manager_approval_decision`).\n","# it_access_line_manager\n\nYou are the **it_access_line_manager** for the **IT access request** workflow.\n\n## Decision policy\n\nApprove when `business_justification` (carried through on the\n`employee_lookup` phase output) is non-empty AND\n`risk_assessor.overall_risk` is `\"low\"` or `\"medium\"`. Otherwise reject\nnaming which check failed.\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 matching HITL gate and emits a\n`workflow.hitl.requested` FleetEvent carrying:\n\n- `persona: \"it_access_line_manager\"`\n- `external_event: \"line_manager_approval_decision\"`\n- `context.risk_assessor`: the agent verdict including `overall_risk`,\n  `per_role_scores`, `breach_count`, `recent_grant_volume`\n- `context.employee_lookup`: the deterministic Phase 1 record plus\n  `business_justification` carried through from the request\n- `context.rbac_resolver`: the agent verdict including\n  `proposed_bundle`, `sod_conflicts`, `selected_templates`,\n  `template_default_size`\n\n## How a real human resolves the same gate\n\nWhen `it_access_line_manager` is NOT in `PERSONA_AUTO_CLOSE`, the gate\nstays open indefinitely. The real it_access_line_manager resolves it\nvia whatever UI surface the domain provides (or by directly POSTing to\n`\u002Finternal\u002Fdurable-event` with kind `line_manager_approval_decision`).\n",{"name":5,"description":7,"personality":44,"allowed-tools":6,"external_event":46,"workflow_label":47,"decision_policy":48},{"thoroughness":45,"risk_appetite":31,"escalation_style":27},"medium","line_manager_approval_decision","IT access request","req = (context or {}).get(\"employee_lookup\") or {}\nra = (context or {}).get(\"risk_assessor\") or {}\nbj = (req.get(\"business_justification\") or \"\").strip()\nrisk = (ra.get(\"overall_risk\") or \"\").lower()\nif not bj:\n    decision = \"reject\"\n    reason = \"missing business justification\"\nelif risk not in {\"low\", \"medium\"}:\n    decision = \"reject\"\n    reason = \"risk \" + (risk or \"unknown\") + \" requires CISO escalation\"\nelse:\n    decision = \"approve\"\n    reason = \"justification provided; risk \" + risk\n","main","db273d7d646605c0bf0175dc9c8057b9ad2628b5","api\u002Fserver\u002Fpersonae\u002Fit_access_line_manager",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":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add arturcrmbot\u002Fzava-control-plane --skill it_access_line_manager",{"tool":62,"command":63},"bunx","bunx skills add arturcrmbot\u002Fzava-control-plane --skill it_access_line_manager",{"tool":65,"command":66},"pnpm","pnpm dlx skills add arturcrmbot\u002Fzava-control-plane --skill it_access_line_manager","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fapi\u002Fserver\u002Fpersonae\u002Fit_access_line_manager\u002FSKILL.md",true,[],[71,92,108,122,130,137],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":39},"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",[],[78,79,80,81,82,83,84,85,86,87,88,89,90,91],"proactive","customer","proactive customer care","customer care","gesture","action","bounded","status","check","booking","operations","travel","issue","itinerary",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":39},"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",[],[99,100,22,101,102,87,103,104,105,85,106,107,86,88,89],"payment","payment exception","retry","balance","when","release","complete","capacity","inventory",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":39},"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",[],[115,116,117,118,86,88,89,119,120,121],"hotel supplier recovery","hotel","recovery","with","move","for","headroom",{"skillNo":123,"name":124,"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":125,"categories":126,"keywords":127,"publishedAt":39},"01M71SJ4G5MPM50WZ6F66M3PNS","holiday-sales-booking","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fholiday-sales-booking\u002FSKILL.md",[],[128,87,129],"holiday sales booking","sales",{"skillNo":131,"name":132,"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":133,"categories":134,"keywords":135,"publishedAt":39},"01M71SJ2AHHWN2C4YV2RKEE947","flight-disruption-recovery","https:\u002F\u002Fgithub.com\u002Farturcrmbot\u002Fzava-control-plane\u002Fblob\u002Fmain\u002Fverticals\u002Ftravel\u002Fskills\u002Fflight-disruption-recovery\u002FSKILL.md",[],[136,117],"flight disruption recovery",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":39},"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",[],[144,88,145,37,86,146,89,147,103,148],"destination operations","destination","dispatch","at","transfer"]