--- name: slack-reply-drafting description: Draft Slack replies from available context. Use when the user wants help finding messages that likely need a response and preparing reply drafts. --- # Slack Reply Drafting Use this skill to identify messages that likely need a reply and produce Slack-ready draft responses from the available context. ## Related Skills | Workflow | Skill | | --- | --- | | Refine, draft, or send the final Slack text | [../slack-outgoing-message/SKILL.md](../slack-outgoing-message/SKILL.md) | ## Start Here - If the user provided channels, threads, DMs, people, or topics, use that scope instead of the default search. - If no source scope was provided, default to searching: - unanswered direct conversations - direct mentions - threads with prior user participation and newer replies - threads with prior user mention and newer replies - For time-specific requests, resolve the user's timezone with `slack_read_user_profile`. ## Support Boundaries - This skill is for draft-first reply workflows. - If the user explicitly asks to send a reply now rather than prepare a draft, gather the needed Slack context here if useful, then switch to `../slack-outgoing-message/SKILL.md` and send directly. - Do not invent facts, commitments, approvals, or decisions. If the context is not enough to answer confidently, draft a clarifying reply instead of guessing. ## Workflow 1. **Resolve the current user** with `slack_read_user_profile` so you have the user's `user_id` and can resolve the time window if necessary. 2. **Resolve the time window** if the user supplied one. 3. If the user provided an explicit scope, use the cheapest matching path: - specific thread: `slack_read_thread` - named channel: `slack_search_channels`, then `slack_read_channel` - named person or DM: `slack_search_users`, then `slack_search_public_and_private` - bounded keyword search: `slack_search_public_and_private` 4. If no scope was provided, search these default categories: - unanswered direct conversations: `slack_search_public_and_private` across `im,mpim` to generate candidate conversations, then `slack_read_channel` for each plausible candidate before deciding whether it needs a reply; do not decide from the search snippet alone - direct mentions: `slack_search_public_and_private` with `query` set to `<@USER_ID>` - threads with prior user participation: `slack_search_public_and_private` with `query` set to `from:<@USER_ID> is:thread`, then `slack_read_thread` for newer replies - threads with prior user mention: `slack_search_public_and_private` with `query` set to `<@USER_ID> is:thread`, then `slack_read_thread` for newer replies after the mention 5. Keep only candidates where the latest unresolved ask is from someone else, or where newer replies appeared after the user's last substantive reply or mention. Do not count emoji-only, acknowledgement-only, or other non-answer chatter from the user as a reply. 6. Expand only the threads or surrounding messages needed to answer accurately. Answer the question first, then add clarification or next steps when the context supports it. 7. If the context is incomplete, write the smallest useful clarifying reply instead of pretending the answer is known. 8. Finish according to the user's explicit intent: - draft/review-first flow: create the draft with `slack_send_message_draft` in the source channel or DM - explicit send-now flow: switch to `../slack-outgoing-message/SKILL.md` and send directly Include `thread_ts` only for thread replies; otherwise omit the parameter entirely. If Slack returns `draft_already_exists`, stop and tell the user you cannot overwrite the existing attached draft via API. ## Drafting Rules - Use the [../slack-outgoing-message/SKILL.md](../slack-outgoing-message/SKILL.md) skill to draft outgoing Slack text. ## Formatting - For a concise Slack or chat summary, you MUST use exactly this structure unless the user explicitly requests a different format. - If you use `../slack-outgoing-message/SKILL.md` to draft or send the final message, this output contract remains binding. The downstream skill does not relax or rename these sections. Format multiple drafts as: ```md **Reply Drafts — ** **** Draft: **** Draft: ``` - Keep each item minimal: a short header plus the draft link. - The header should identify the channel, DM, or thread. - If the user asked for a single reply, return just that item. - If no unreplied messages are found, say so directly and explain the scope checked.