slack-reply-drafting

Draft Slack replies from available context. Use when the user wants help finding messages that likely need a response and preparing reply drafts.

685 stars

Best use case

slack-reply-drafting is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Draft Slack replies from available context. Use when the user wants help finding messages that likely need a response and preparing reply drafts.

Teams using slack-reply-drafting should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/slack-reply-drafting/SKILL.md --create-dirs "https://raw.githubusercontent.com/openai/plugins/main/plugins/slack/skills/slack-reply-drafting/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/slack-reply-drafting/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How slack-reply-drafting Compares

Feature / Agentslack-reply-draftingStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Draft Slack replies from available context. Use when the user wants help finding messages that likely need a response and preparing reply drafts.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 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 — <scope>**

**<channel / DM / thread info>**
Draft: <link to draft>

**<channel / DM / thread info>**
Draft: <link to 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.

Related Skills

teams-reply-drafting

685
from openai/plugins

Draft Microsoft Teams replies from available context. Use when the user wants help finding messages that likely need a response and preparing reply drafts.

slack

685
from openai/plugins

Read Slack context, route to the right Slack workflow, and prepare or perform Slack writes that match the user's intent.

slack-outgoing-message

685
from openai/plugins

Primary skill for composing, drafting, or refining any outbound Slack content. Use this whenever the task will require using `slack_send_message`, `slack_send_message_draft`, or `slack_create_canvas`. Use `slack` to read or analyze Slack context; use this skill to produce the final outgoing message.

slack-notification-triage

685
from openai/plugins

Triage recent Slack activity into a priority queue or task list for the user.

slack-daily-digest

685
from openai/plugins

Create a daily Slack digest from selected channels or topics. Use when the user asks for a daily Slack recap or summary of today's Slack activity.

slack-channel-summarization

685
from openai/plugins

Summarize activity from one Slack channel and return a concise recap, post-ready update, or summary doc.

outlook-email-reply-drafting

685
from openai/plugins

Draft Outlook email replies safely from connected mailbox context. Use when the user wants to reply to a thread, decide whether to reply-all, prepare a draft before sending, or turn the latest Outlook message into a polished response.

workflow

685
from openai/plugins

Vercel Workflow DevKit (WDK) expert guidance. Use when building durable workflows, long-running tasks, API routes or agents that need pause/resume, retries, step-based execution, or crash-safe orchestration with Vercel Workflow.

verification

685
from openai/plugins

Full-story verification — infers what the user is building, then verifies the complete flow end-to-end: browser → API → data → response. Triggers on dev server start and 'why isn't this working' signals.

vercel-storage

685
from openai/plugins

Vercel storage expert guidance — Blob, Edge Config, and Marketplace storage (Neon Postgres, Upstash Redis). Use when choosing, configuring, or using data storage with Vercel applications.

vercel-services

685
from openai/plugins

Vercel Services — deploy multiple services within a single Vercel project. Use for monorepo layouts or when combining a backend (Python, Go) with a frontend (Next.js, Vite) in one deployment.

vercel-sandbox

685
from openai/plugins

Vercel Sandbox guidance — ephemeral Firecracker microVMs for running untrusted code safely. Supports AI agents, code generation, and experimentation. Use when executing user-generated or AI-generated code in isolation.