[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GDVCYMM9A8HJ32Z2XDZMV2":3,"skill-same:01M6GDVCYMM9A8HJ32Z2XDZMV2":67},{"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":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":66},"01M6GDVCYMM9A8HJ32Z2XDZMV2","swap",null,"Request someone to cover one of your upcoming on-call shifts. Lists your shifts, helps identify a candidate based on availability, and creates an override after explicit confirmation. Write action - never executes without confirming.","Rootly-AI-Labs\u002Frootly-claude-plugin","Rootly-AI-Labs","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F199156715?v=4","01M6GDSNB03JH301SNQ63Q4VNG","Rootly AI Labs","01M6GDSNF81P4GSZ0FN3SR8787",1,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FRootly-AI-Labs\u002Frootly-claude-plugin\u002Fblob\u002Fmain\u002Fskills\u002Fswap\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34],"MCP","confirmation","write","never","call","next","availability","selector","true","action","cover","2026-11-10 10:12:30",false,"---\nname: swap\ndescription: Request someone to cover one of your upcoming on-call shifts. Lists your shifts, helps identify a candidate based on availability, and creates an override after explicit confirmation. Write action - never executes without confirming.\nargument-hint: [optional shift selector — date or \"next\"]\ndisable-model-invocation: true\nallowed-tools:\n  - mcp__rootly__*\n---\n\n# Shift Swap Request\n\nYou are helping the user offload one of their on-call shifts to someone else. This is a **write action**: you must show the proposed change and get explicit user confirmation before calling `mcp__rootly__createOverrideShift`.\n\n## Workflow\n\n### 1. Identify the user\n\nCall `mcp__rootly__getCurrentUser`. Capture `user_id`.\n\n### 2. List the user's shifts\n\nCall `mcp__rootly__listShifts` (or `list_shifts`) scoped to:\n- The current user\n- Next 14 days\n\nIf the MCP doesn't expose user-level filtering, call the broader `listShifts` and filter client-side by `user_id`.\n\n### 3. Pick the target shift\n\n- If `$ARGUMENTS` is empty: show the next 5 shifts and ask \"Which shift do you want covered?\"\n- If `$ARGUMENTS` is `next`: pick the soonest upcoming shift.\n- If `$ARGUMENTS` is a date or shift identifier: try to match.\n\nIf no match, list options and ask.\n\n### 4. Find candidate coverers\n\nFor the shift's schedule and time window:\n1. Call `mcp__rootly__create_override_recommendation` if it accepts the shift parameters — this is the cleanest path; it returns suggested coverers.\n2. Otherwise, fall back to `mcp__rootly__check_responder_availability` against the relevant team\u002Fschedule and propose users with `available=true` and no conflicting shifts.\n3. Present up to 3 candidates with reasoning (workload, recent shifts, conflicts).\n\nIf no candidates are available, surface that and stop.\n\n### 5. Show the proposal\n\n```\n**Proposed shift swap:**\n- **Shift**: [Schedule name] [start] → [end] ([duration])\n- **Currently assigned**: you ([your name])\n- **Proposed coverer**: [candidate name]\n- **Why**: [reason — e.g. \"no shifts this week, on team rotation\"]\n\n**Alternatives**:\n- [other candidate] — [reason]\n- [other candidate] — [reason]\n\nConfirm to create the override? (yes \u002F no \u002F pick another)\n```\n\n### 6. Wait for confirmation\n\n- **`yes`** → call `mcp__rootly__createOverrideShift` with this shape:\n\n```json\n{\n  \"schedule_id\": \"[schedule_id]\",\n  \"data\": {\n    \"type\": \"shifts\",\n    \"attributes\": {\n      \"starts_at\": \"[shift start ISO8601]\",\n      \"ends_at\": \"[shift end ISO8601]\",\n      \"user_id\": [coverer user id]\n    }\n  }\n}\n```\n\nEcho the resulting override ID and a confirmation line.\n- **`pick another`** or naming a different candidate → revise the proposal and re-confirm. Do not execute on the first reply if the user is changing the candidate.\n- **`no`** or any other answer → acknowledge and stop. Do not call the create tool.\n\n### 7. After the override is created\n\nOutput:\n\n```\n✅ Override created.\n- ID: [uuid]\n- Coverer: [name]\n- Window: [start] → [end]\n\nRecommended next steps:\n- Notify the coverer in Slack \u002F your team channel.\n- The original on-call schedule will route alerts to the coverer for this window.\n```\n\n### 8. Guidelines\n\n- **Never** call `createOverrideShift` without confirmation. The \"yes\" must come from the user, not be inferred.\n- If `create_override_recommendation` is unavailable, lean on `check_responder_availability` rather than guessing. Don't propose a coverer you can't verify is available.\n- If the user's shift is in the past or already started, refuse with a helpful message — overrides for the present moment are usually a different operation.\n- Show timezone explicitly in the proposal. Ambiguous times cause mistakes.\n","# Shift Swap Request\n\nYou are helping the user offload one of their on-call shifts to someone else. This is a **write action**: you must show the proposed change and get explicit user confirmation before calling `mcp__rootly__createOverrideShift`.\n\n## Workflow\n\n### 1. Identify the user\n\nCall `mcp__rootly__getCurrentUser`. Capture `user_id`.\n\n### 2. List the user's shifts\n\nCall `mcp__rootly__listShifts` (or `list_shifts`) scoped to:\n- The current user\n- Next 14 days\n\nIf the MCP doesn't expose user-level filtering, call the broader `listShifts` and filter client-side by `user_id`.\n\n### 3. Pick the target shift\n\n- If `$ARGUMENTS` is empty: show the next 5 shifts and ask \"Which shift do you want covered?\"\n- If `$ARGUMENTS` is `next`: pick the soonest upcoming shift.\n- If `$ARGUMENTS` is a date or shift identifier: try to match.\n\nIf no match, list options and ask.\n\n### 4. Find candidate coverers\n\nFor the shift's schedule and time window:\n1. Call `mcp__rootly__create_override_recommendation` if it accepts the shift parameters — this is the cleanest path; it returns suggested coverers.\n2. Otherwise, fall back to `mcp__rootly__check_responder_availability` against the relevant team\u002Fschedule and propose users with `available=true` and no conflicting shifts.\n3. Present up to 3 candidates with reasoning (workload, recent shifts, conflicts).\n\nIf no candidates are available, surface that and stop.\n\n### 5. Show the proposal\n\n```\n**Proposed shift swap:**\n- **Shift**: [Schedule name] [start] → [end] ([duration])\n- **Currently assigned**: you ([your name])\n- **Proposed coverer**: [candidate name]\n- **Why**: [reason — e.g. \"no shifts this week, on team rotation\"]\n\n**Alternatives**:\n- [other candidate] — [reason]\n- [other candidate] — [reason]\n\nConfirm to create the override? (yes \u002F no \u002F pick another)\n```\n\n### 6. Wait for confirmation\n\n- **`yes`** → call `mcp__rootly__createOverrideShift` with this shape:\n\n```json\n{\n  \"schedule_id\": \"[schedule_id]\",\n  \"data\": {\n    \"type\": \"shifts\",\n    \"attributes\": {\n      \"starts_at\": \"[shift start ISO8601]\",\n      \"ends_at\": \"[shift end ISO8601]\",\n      \"user_id\": [coverer user id]\n    }\n  }\n}\n```\n\nEcho the resulting override ID and a confirmation line.\n- **`pick another`** or naming a different candidate → revise the proposal and re-confirm. Do not execute on the first reply if the user is changing the candidate.\n- **`no`** or any other answer → acknowledge and stop. Do not call the create tool.\n\n### 7. After the override is created\n\nOutput:\n\n```\n✅ Override created.\n- ID: [uuid]\n- Coverer: [name]\n- Window: [start] → [end]\n\nRecommended next steps:\n- Notify the coverer in Slack \u002F your team channel.\n- The original on-call schedule will route alerts to the coverer for this window.\n```\n\n### 8. Guidelines\n\n- **Never** call `createOverrideShift` without confirmation. The \"yes\" must come from the user, not be inferred.\n- If `create_override_recommendation` is unavailable, lean on `check_responder_availability` rather than guessing. Don't propose a coverer you can't verify is available.\n- If the user's shift is in the past or already started, refuse with a helpful message — overrides for the present moment are usually a different operation.\n- Show timezone explicitly in the proposal. Ambiguous times cause mistakes.\n",{"name":5,"description":7,"allowed-tools":40,"argument-hint":42,"disable-model-invocation":44},[41],"mcp__rootly__*",[43],"optional shift selector — date or \"next\"",true,"main","65832aa6ff7a7b39c6bd64899a7a64646e3948ed","skills\u002Fswap",0,"https:\u002F\u002Fgithub.com\u002FRootly-AI-Labs\u002Frootly-claude-plugin","https:\u002F\u002Fgithub.com\u002FRootly-AI-Labs","https:\u002F\u002Frootly.com\u002Fai-labs","Pushing the boundaries of AI in incident management & system reliability","2026-11-11 15:42:35",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":44},[56,59,62],{"tool":57,"command":58},"npx","npx skills add Rootly-AI-Labs\u002Frootly-claude-plugin --skill swap",{"tool":60,"command":61},"bunx","bunx skills add Rootly-AI-Labs\u002Frootly-claude-plugin --skill swap",{"tool":63,"command":64},"pnpm","pnpm dlx skills add Rootly-AI-Labs\u002Frootly-claude-plugin --skill swap","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FRootly-AI-Labs\u002Frootly-claude-plugin\u002Fblob\u002Fmain\u002Fskills\u002Fswap\u002FSKILL.md",[],[68,92,104,122,144,165],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":75,"publishedAt":35},"01M6GDVHA9QGJJ699HBV9YATM1","trend","Reliability trend summary for a service, team, or the whole org. Reports incident volume, severity mix, and MTTR direction over a window (default 30 days). Use for standups, 1-on-1s, or quarterly reviews.","https:\u002F\u002Fgithub.com\u002FRootly-AI-Labs\u002Frootly-claude-plugin\u002Fblob\u002Fmain\u002Fskills\u002Ftrend\u002FSKILL.md",[74],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[70,76,32,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,24],"default","mix","reviews","direction","org","name","service","volume","incident","summary","reports","reliability","use","team","mttr","severity",{"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":101,"publishedAt":35},"01M6GDVFZK06MTYEM8J86PTFG9","test","Simple test skill","https:\u002F\u002Fgithub.com\u002FRootly-AI-Labs\u002Frootly-claude-plugin\u002Fblob\u002Fmain\u002Fskills\u002Ftest\u002FSKILL.md",[98],{"categoryNo":99,"categoryName":100,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[94,102,103],"simple","Test Skill",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":111,"publishedAt":35},"01M6GDV8M9ZHYNAM4M61WC8XHW","status","Show a compact service health overview including active incidents by severity. Use for a quick health check of your services.","https:\u002F\u002Fgithub.com\u002FRootly-AI-Labs\u002Frootly-claude-plugin\u002Fblob\u002Fmain\u002Fskills\u002Fstatus\u002FSKILL.md",[110],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[106,112,113,81,82,114,115,116,117,88,118,32,119,91,120,24,121],"check","quick","active","compact","show","health check","overview","health","services","incidents",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":129,"publishedAt":35},"01M6GDV5Q4CVMVCJA0RAPGACTP","setup","Set up the Rootly plugin. Verifies MCP server connection via OAuth2 or API token and guides through configuration. Run this after installing the plugin.","https:\u002F\u002Fgithub.com\u002FRootly-AI-Labs\u002Frootly-claude-plugin\u002Fblob\u002Fmain\u002Fskills\u002Fsetup\u002FSKILL.md",[128],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[124,32,130,131,132,133,134,135,136,137,138,139,140,141,142,24,143],"connection","guides","via","token","Bash","up","api","oauth2","SET","server","run","plugin","mcp server","configuration",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":151,"publishedAt":35},"01M6GDV22J607XB81DDXXRQXPS","retro","[experimental] Generate a structured post-incident retrospective from incident data. Forked-subagent flow may not have MCP access in all Claude Code contexts.","https:\u002F\u002Fgithub.com\u002FRootly-AI-Labs\u002Frootly-claude-plugin\u002Fblob\u002Fmain\u002Fskills\u002Fretro\u002FSKILL.md",[150],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[146,152,153,154,24,155,32,156,157,158,159,84,160,161,162,163,164],"code","generate","retrospective","flow","post","id","structured","analyst","mcp access","subagent","access","post-incident","data",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":172,"publishedAt":35},"01M6GDTX4HDD6FXNQ052BZFC2T","respond","[experimental] Investigate and respond to a production incident. Pulls context, finds similar past incidents, suggests solutions, and enables coordination. Forked-subagent flow may not have MCP access in all Claude Code contexts -- prefer \u002Frootly:status + \u002Frootly:brief for now.","https:\u002F\u002Fgithub.com\u002FRootly-AI-Labs\u002Frootly-claude-plugin\u002Fblob\u002Fmain\u002Fskills\u002Frespond\u002FSKILL.md",[171],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[167,84,32,173,121,174,175,176,157,160,177,161,162,178,179,155,180,152,106,24],"past","production incident","now","investigator","coordination","investigate","Production","brief"]