[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DSR6S686BWCKRHMN3D2YDK":3,"skill-same:01M6DSR6S686BWCKRHMN3D2YDK":45},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M6DSR6S686BWCKRHMN3D2YDK","follow_up",null,"nitzanav\u002Fopen_slack_copilot","nitzanav","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1374797?v=4","01M6DSQR9NKGSABGAPD07Z35MC","Nitzan Aviram","01M6DSQREJHQG0SCAH5GK3YFA8",2,"MIT","https:\u002F\u002Fgithub.com\u002Fnitzanav\u002Fopen_slack_copilot\u002Fblob\u002Fmain\u002Fskill_examples\u002Ffollow_up\u002FSKILL.md",[],[18,19],"up","follow up","2026-11-10 10:12:30",false,"# Follow Up\n\nInstall under `~\u002F.open_slack_copilot\u002Fskills\u002Ffollow_up\u002F` (copy from the repo’s `skill_examples\u002Ffollow_up\u002F`). The bot loads skills via progressive disclosure on every draft: **`@CoPilot`**, the **Draft with CoPilot** message shortcut, and **`\u002Fcopilot`** in a thread. This skill applies when the thread and instruction match (e.g. “please follow up”).\n\nWhen asked to follow up with users on an action item from a Slack thread.\n\n## Goal\n\nRegister a **`schedule_prompt`** job that re-checks completion and posts a single in-thread reply via **`send_thread_reply_as_app`** mentioning all users who have not acted (one message that addresses everyone still pending; no per-user loop).\n\n## Steps\n\nTwo contexts — follow the matching path.\n\n### A. First invocation (user asks to follow up)\n\n1. **Infer check frequency or exact date** - daily, hourly or exact date. Default: daily. Keep it daily unless clearly said otherwise.\n2. **Resolve target users** — For **named people**, read **`\u003C@U…>`** from thread message text (Slack stores mentions that way) and use the **Users** roster in context for id ↔ name. For **user groups**, call `list_usergroup_members` (S… id, `\u003C!subteam^S…>` in the message, or handle). **Exclude the requester** (the user who asked for the follow-up) from the target list — never mention them in reminders.\n3. **Completion criteria** (pick from context):\n   - **Emoji reaction** — e.g. ✅ (`:white_check_mark:`). Reactions and the users who set them are already included in the thread context.\n   - **Thread confirmation** — acknowledgment reply in the thread.\n   - **External status** — e.g. Jira; use the right tool to verify.\n4. **`schedule_prompt`** — **`prompt`:** embed user IDs, completion criteria, how to check each user, and thread\u002Fchannel refs. **`cron`:** 5-field UTC (hourly, daily, or a specific clock time). **`expires_in_days`:** optional; if omitted, default is **7** days; **maximum 14**. The scheduler stops firing after that (`expires_at` on the job). For follow-ups, pass **`expires_in_days: 14`** unless the thread clearly needs a shorter run.\n\n   Example (shape of the tool call):\n\n   ```\n   prompt: |\n     Follow-up: RFC review in #backend, thread https:\u002F\u002Fslack.com\u002Farchives\u002FC04XX\u002Fp17120...\n     Users: U0A1B2C, U3D4E5F, U6G7H8I. Done when: ✅ on original message (reactions in thread context).\n     1. From thread context, see who has ✅.\n     2. Collect everyone still missing ✅. If the list is non-empty, call `send_thread_reply_as_app` ONCE with a brief reminder that mentions all of them (`\u003C@U0A1B2C> \u003C@U3D4E5F> …`). Do not loop per user.\n   cron: \"0 9 * * *\"\n   expires_in_days: 14\n   ```\n\n### B. Scheduled run (same reply pipeline; instruction is the saved prompt)\n\n1. **Check each user** — thread context (reactions, replies) vs criteria in the scheduled prompt.\n2. **Remind** — Collect every user still missing the completion signal (excluding the requester). If none remain, do nothing. Otherwise call **`send_thread_reply_as_app`** ONCE with a brief reminder that `\u003C@…>`-mentions all pending users in a single message. Do not loop per user; do not use `send_ephemeral_message` (ephemerals only render if the recipient currently has the channel open, so scheduled reminders get lost). Polite, brief.\n\n## Tone\n\nPolite and brief. No guilt; urgent tone only if the original message was urgent.\n",{},"main","b1eb2efe44930a8c20c80ad99cf0e6309f27f23b","skill_examples\u002Ffollow_up",1,"https:\u002F\u002Fgithub.com\u002Fnitzanav\u002Fopen_slack_copilot","https:\u002F\u002Fgithub.com\u002Fnitzanav","2026-06-01 03:25:53",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add nitzanav\u002Fopen_slack_copilot --skill follow_up",{"tool":37,"command":38},"bunx","bunx skills add nitzanav\u002Fopen_slack_copilot --skill follow_up",{"tool":40,"command":41},"pnpm","pnpm dlx skills add nitzanav\u002Fopen_slack_copilot --skill follow_up","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fnitzanav\u002Fopen_slack_copilot\u002Fblob\u002Fmain\u002Fskill_examples\u002Ffollow_up\u002FSKILL.md",true,[],[46,55,63,76,84,93],{"skillNo":47,"name":48,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":49,"categories":50,"keywords":51,"publishedAt":20},"01M6DSRP6H49V0JW4HQR2103NY","technical_review","https:\u002F\u002Fgithub.com\u002Fnitzanav\u002Fopen_slack_copilot\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Ffixture_skills_dir\u002Ftechnical_review\u002FSKILL.md",[],[52,53,54],"review","technical","technical review",{"skillNo":56,"name":57,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":20},"01M6DSRJ12Q8N307BW27AJ7JBC","polite_reply","https:\u002F\u002Fgithub.com\u002Fnitzanav\u002Fopen_slack_copilot\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Ffixture_skills_dir\u002Fpolite_reply\u002FSKILL.md",[],[61,62],"reply","polite reply",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":73,"publishedAt":20},"01M6DSRFJHKYG0JZV99P1AFS5B","code_review","https:\u002F\u002Fgithub.com\u002Fnitzanav\u002Fopen_slack_copilot\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Ffixture_skills_dir\u002Fcode_review\u002FSKILL.md",[68],{"categoryNo":69,"categoryName":70,"taxonomyType":71,"taxonomyTypeDesc":72},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",[74,52,75],"code review","code",{"skillNo":77,"name":78,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":20},"01M6DSRDNMA746XNTF1S5TZ0A6","fixture_scheduled_skill","https:\u002F\u002Fgithub.com\u002Fnitzanav\u002Fopen_slack_copilot\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Ffixture_scheduled_skill\u002FSKILL.md",[],[82,83],"fixture","fixture scheduled skill",{"skillNo":85,"name":86,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":92,"publishedAt":20},"01M6DSRC726B00WHDQC71S5D4R","summarize","https:\u002F\u002Fgithub.com\u002Fnitzanav\u002Fopen_slack_copilot\u002Fblob\u002Fmain\u002Fskill_examples\u002Fsummarize\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":71,"taxonomyTypeDesc":72},"01JBSEEDCAT000000000000021","资料检索与研究",[86],{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":20},"01M6DSRAQA0B7D0ASXPQTR8Z2H","general_instruction","https:\u002F\u002Fgithub.com\u002Fnitzanav\u002Fopen_slack_copilot\u002Fblob\u002Fmain\u002Fskill_examples\u002Fgeneral_instruction\u002FSKILL.md",[],[99,100],"general","general instruction"]