Slack
Send and read Slack messages with rich Block Kit formatting

Slack

Send and read messages in your Slack workspace. I know your personal Slack habits - your top channels, frequent contacts, and common topics.

What you can do

  • Send messages — Post to channels or DM someone directly
  • Read conversations — Catch up on channel activity or DM history
  • Rich formatting — Create polished announcements with headers, sections, buttons
  • Personal insights — See your most active channels and who you talk to most

Examples

  • "Send a message to #engineering saying the deploy is complete"
  • "DM Sarah asking if she's free for a quick sync"
  • "Post a weekly metrics update to #leadership with our numbers"
  • "What's the latest in #product?"
  • "Who do I talk to most on Slack?"

Setup

On first use, I'll analyze your Slack activity to build a personal profile showing your top channels, frequent contacts, and common topics.

When to use
Use when user wants to interact with Slack. Triggers: 'message', 'DM', 'post to slack', 'send to #channel', 'check slack', 'what's happening in #channel'. Supports: sending messages to channels and DMs, reading conversation history, rich Block Kit formatting for announcements and status updates.

INSTALLER

To install Slack:

1
📥
Download and install skill files rm -rf ./skills/sauna/slack.workspace.hub && curl -fsSL "https://sk.ills.app/api/skill/slack.workspace.hub/download" | tar -xzf - -C ./skills/sauna/ && cat ./skills/sauna/slack.workspace.hub/SKILL.md
2
▶️
Check if Slack is connected. If not, help the user connect their account. Once connected, explain that you can analyze their Slack activity to learn how they use it, capture their writing style, and build a profile—but this takes a few minutes. Ask if they'd like to run the analysis now or skip it. If yes, run taskSetup Slack Connection. If no, explain that you can still help them send and read messages.

SKILL.MD

Slack Agent Rules

Personal Profile

The profile at <a href="/ui/context.connections.profiles" class="bullet-pill"><img src="/icons/bullets/ui.svg" alt="ui" class="bullet-pill-icon" /><span class="pill-name">Connection Profiles</span></a> shows how THIS user uses Slack:

  • Top channels — where they're most active, with activity percentages
  • Frequent contacts — who they DM and collaborate with most, with context on relationships
  • Topics — what they typically discuss
  • Writing style — how they write in Slack (captured in uiWriting Style)
  • Quick access — channel and DM IDs for fast lookups without searching

The profile is narrative-focused, describing how the person uses Slack rather than just listing channels. Use this to understand their workflow, who they work with, and communication patterns. When they mention "my team channel" or "message Sarah", check their profile first.

Always Use Tasks, Not Code Directly

Route through the appropriate task:

  • "Read messages" / "What's happening in" / "Check #channel" / "Show conversation" → <a href="/task/slack.workspace.read" class="bullet-pill"><img src="/icons/bullets/task.svg" alt="task" class="bullet-pill-icon" /><span class="pill-name">Read Slack Messages</span></a>
  • "Send message" / "DM someone" / "Post to" / "Tell them" / "Announce" → <a href="/task/slack.workspace.send" class="bullet-pill"><img src="/icons/bullets/task.svg" alt="task" class="bullet-pill-icon" /><span class="pill-name">Send Slack Message</span></a>

Tasks contain interpretation logic and human-friendly behavior. Calling code directly bypasses that.

Interpret Intent, Not Just Words

Users say "#eng" not "channel ID C12345ABC". They say "DM Sarah" not "send to D98765XYZ".

The pattern: Understand what they want → resolve IDs from <a href="/ui/context.connections.profiles" class="bullet-pill"><img src="/icons/bullets/ui.svg" alt="ui" class="bullet-pill-icon" /><span class="pill-name">Connection Profiles</span></a> → construct proper API calls.

If you can't resolve something, ask: "I found 2 channels with 'eng' in the name: #engineering and #eng-support. Which one?"

Destination Resolution

Channels

  1. Check <a href="/ui/context.connections.profiles" class="bullet-pill"><img src="/icons/bullets/ui.svg" alt="ui" class="bullet-pill-icon" /><span class="pill-name">Connection Profiles</span></a> Quick Access table first
  2. Fuzzy match on name: "#eng" → "#engineering"
  3. Prefer channels from their profile (where they're active)
  4. If ambiguous, ask the user

People

  1. Check frequent contacts in profile first
  2. Match on display name or real name
  3. "Sarah" finds the right Sarah if there's only one in their contacts
  4. If multiple matches, ask: "Did you mean Sarah Chen or Sarah Miller?"

Message Sending

Confirmation Required

Before sending any message, confirm the destination and content with the user. Never send without explicit approval.

Format Selection

Use When
Plain text Quick replies, simple one-liners, "tell them I'll be late"
Block Kit Announcements, status updates, metrics, anything needing visual hierarchy

Don't over-engineer simple messages. But for anything substantive, use Block Kit formatting from the artifact-composer dependency.

Block Kit Workflow

  1. Draft the message content
  2. Construct valid Block Kit JSON
  3. Write blocks to session/slack-blocks.json
  4. Show user a preview and get approval
  5. Send with the blocks file path
  6. Clean up the blocks file after

Reading Messages

Extract the useful parts:

  • Lead with recent and relevant messages
  • Summarize long threads rather than dumping everything
  • Note important reactions or reply counts
  • For ongoing conversations, highlight what's actionable

When history is long, summarize first: "There are 47 messages in the last week. The main topics are X and Y. Want the full history or a specific thread?"

Error Handling

Common issues and responses:

  • channel_not_found: "I can't find that channel. It might be private, archived, or the name changed. Want me to search?"
  • not_in_channel: "I need to be added to that channel first. Can you invite me, or should I try a different channel?"
  • msg_too_long: "That message is too long for Slack (40k char limit). Want me to split it into multiple messages?"
  • invalid_blocks: "The formatting didn't work. Let me try with simpler formatting."
  • restricted_action: "Workspace permissions are blocking this action. You may need to check with your Slack admin."

Rate Limits

Slack allows ~50 messages/minute for posting, ~20 reads/minute.

For bulk operations, warn users: "Sending to 10 channels—this'll take about 15 seconds."

Understanding User's Slack Usage

The profile at <a href="/ui/context.connections.profiles" class="bullet-pill"><img src="/icons/bullets/ui.svg" alt="ui" class="bullet-pill-icon" /><span class="pill-name">Connection Profiles</span></a> is built during setup by analyzing 90 days of activity. It captures:

  • Channel patterns — where they spend time, activity levels
  • Collaboration — who they work with, context on relationships
  • Topics — what they discuss
  • Writing style — tone, formality, patterns (also saved to <a href="/ui/context.user.writing_style" class="bullet-pill"><img src="/icons/bullets/ui.svg" alt="ui" class="bullet-pill-icon" /><span class="pill-name">Writing Style</span></a>)

Always check the profile before searching or asking. The profile tells you HOW this specific user uses Slack, not just what channels exist.


# Slack Agent Rules

## Personal Profile

The profile at ``./documents/connections/[service-name].md`` shows how THIS user uses Slack:

- **Top channels** — where they're most active, with activity percentages
- **Frequent contacts** — who they DM and collaborate with most, with context on relationships
- **Topics** — what they typically discuss
- **Writing style** — how they write in Slack (captured in `./documents/user/writing_style.md`)
- **Quick access** — channel and DM IDs for fast lookups without searching

The profile is narrative-focused, describing how the person uses Slack rather than just listing channels. Use this to understand their workflow, who they work with, and communication patterns. When they mention "my team channel" or "message Sarah", check their profile first.

## Always Use Tasks, Not Code Directly

Route through the appropriate task:

- "Read messages" / "What's happening in" / "Check #channel" / "Show conversation" → ``./skills/sauna/slack.workspace.hub/resources/recipes/slack.workspace.read.md``
- "Send message" / "DM someone" / "Post to" / "Tell them" / "Announce" → ``./skills/sauna/slack.workspace.hub/resources/recipes/slack.workspace.send.md``

Tasks contain interpretation logic and human-friendly behavior. Calling code directly bypasses that.

## Interpret Intent, Not Just Words

Users say "#eng" not "channel ID C12345ABC". They say "DM Sarah" not "send to D98765XYZ".

**The pattern:** Understand what they want → resolve IDs from ``./documents/connections/[service-name].md`` → construct proper API calls.

If you can't resolve something, ask: "I found 2 channels with 'eng' in the name: #engineering and #eng-support. Which one?"

## Destination Resolution

### Channels

1. Check ``./documents/connections/[service-name].md`` Quick Access table first
2. Fuzzy match on name: "#eng" → "#engineering"
3. Prefer channels from their profile (where they're active)
4. If ambiguous, ask the user

### People

1. Check frequent contacts in profile first
2. Match on display name or real name
3. "Sarah" finds the right Sarah if there's only one in their contacts
4. If multiple matches, ask: "Did you mean Sarah Chen or Sarah Miller?"

## Message Sending

### Confirmation Required

Before sending any message, confirm the destination and content with the user. Never send without explicit approval.

### Format Selection

| Use        | When                                                                      |
| ---------- | ------------------------------------------------------------------------- |
| Plain text | Quick replies, simple one-liners, "tell them I'll be late"                |
| Block Kit  | Announcements, status updates, metrics, anything needing visual hierarchy |

Don't over-engineer simple messages. But for anything substantive, use Block Kit formatting from the artifact-composer dependency.

### Block Kit Workflow

1. Draft the message content
2. Construct valid Block Kit JSON
3. Write blocks to `session/slack-blocks.json`
4. Show user a preview and get approval
5. Send with the blocks file path
6. Clean up the blocks file after

## Reading Messages

Extract the useful parts:

- Lead with recent and relevant messages
- Summarize long threads rather than dumping everything
- Note important reactions or reply counts
- For ongoing conversations, highlight what's actionable

When history is long, summarize first: "There are 47 messages in the last week. The main topics are X and Y. Want the full history or a specific thread?"

## Error Handling

Common issues and responses:

- **channel_not_found**: "I can't find that channel. It might be private, archived, or the name changed. Want me to search?"
- **not_in_channel**: "I need to be added to that channel first. Can you invite me, or should I try a different channel?"
- **msg_too_long**: "That message is too long for Slack (40k char limit). Want me to split it into multiple messages?"
- **invalid_blocks**: "The formatting didn't work. Let me try with simpler formatting."
- **restricted_action**: "Workspace permissions are blocking this action. You may need to check with your Slack admin."

## Rate Limits

Slack allows ~50 messages/minute for posting, ~20 reads/minute.

For bulk operations, warn users: "Sending to 10 channels—this'll take about 15 seconds."

## Understanding User's Slack Usage

The profile at ``./documents/connections/[service-name].md`` is built during setup by analyzing 90 days of activity. It captures:

- **Channel patterns** — where they spend time, activity levels
- **Collaboration** — who they work with, context on relationships
- **Topics** — what they discuss
- **Writing style** — tone, formality, patterns (also saved to ``./documents/user/writing_style.md``)

Always check the profile before searching or asking. The profile tells you HOW this specific user uses Slack, not just what channels exist.

Tasks

These are tasks you can execute. Read the task file to get your instructions:

task icon Read Slack Messages task:slack.workspace.read Fetch and present message history from a channel or DM
task icon Send Slack Message task:slack.workspace.send Compose and send a message to a Slack channel or DM
Read Slack Messages : Fetch and present message history from a channel or DM
💡 Fetch and present conversation history
Send Slack Message : Compose and send a message to a Slack channel or DM
💡 Compose and send messages with optional Block Kit

Knowledge

This is knowledge you have access to. Read these files if you need additional context:

slice icon Slack API Reference slice:slack.workspace.api Key Slack Web API methods and patterns for messaging
Slack API Reference : Key Slack Web API methods and patterns for messaging

UI

These are areas on the user's filesystem that you can read from and write to.

ui icon Connection Profiles ui:context.connections.profiles Cached summaries for connected services - channels, contacts, preferences. How does the user interact with the connected service?
ui icon User Context ui:context.user.profile Extracted user context organized by theme - work, interests, projects, etc.
ui icon Writing Style ui:context.user.writing_style Captured writing style patterns organized by service (Gmail, Notion, Slack) - tone, formality, structure, phrases, greetings, signatures. Each service has its own section to preserve context-specific styles. Used to draft content matching the user's voice.
Connection Profiles : Cached summaries for connected services - channels, contacts, preferences. How does the user interact with the connected service?
💡 [slack]
User Context : Extracted user context organized by theme - work, interests, projects, etc.
💡 Persistent user insights from Slack analysis
Writing Style : Captured writing style patterns organized by service (Gmail, Notion, Slack) - tone, formality, structure, phrases, greetings, signatures. Each service has its own section to preserve context-specific styles. Used to draft content matching the user's voice.
💡 'slack': Writing style analysis from Slack messages
---
name: Slack
description: Use when user wants to interact with Slack. Triggers: 'message', 'DM', 'post to slack', 'send to #channel', 'check slack', 'what's happening in #channel'. Supports: sending messages to channels and DMs, reading conversation history, rich Block Kit formatting for announcements and status updates.
---


# Slack Agent Rules

## Personal Profile

The profile at `./documents/connections/[service-name].md` shows how THIS user uses Slack:

- **Top channels** — where they're most active, with activity percentages
- **Frequent contacts** — who they DM and collaborate with most, with context on relationships
- **Topics** — what they typically discuss
- **Writing style** — how they write in Slack (captured in `./documents/user/writing_style.md`)
- **Quick access** — channel and DM IDs for fast lookups without searching

The profile is narrative-focused, describing how the person uses Slack rather than just listing channels. Use this to understand their workflow, who they work with, and communication patterns. When they mention "my team channel" or "message Sarah", check their profile first.

## Always Use Tasks, Not Code Directly

Route through the appropriate task:

- "Read messages" / "What's happening in" / "Check #channel" / "Show conversation" → `./skills/sauna/slack.workspace.hub/resources/recipes/slack.workspace.read.md`
- "Send message" / "DM someone" / "Post to" / "Tell them" / "Announce" → `./skills/sauna/slack.workspace.hub/resources/recipes/slack.workspace.send.md`

Tasks contain interpretation logic and human-friendly behavior. Calling code directly bypasses that.

## Interpret Intent, Not Just Words

Users say "#eng" not "channel ID C12345ABC". They say "DM Sarah" not "send to D98765XYZ".

**The pattern:** Understand what they want → resolve IDs from `./documents/connections/[service-name].md` → construct proper API calls.

If you can't resolve something, ask: "I found 2 channels with 'eng' in the name: #engineering and #eng-support. Which one?"

## Destination Resolution

### Channels

1. Check `./documents/connections/[service-name].md` Quick Access table first
2. Fuzzy match on name: "#eng" → "#engineering"
3. Prefer channels from their profile (where they're active)
4. If ambiguous, ask the user

### People

1. Check frequent contacts in profile first
2. Match on display name or real name
3. "Sarah" finds the right Sarah if there's only one in their contacts
4. If multiple matches, ask: "Did you mean Sarah Chen or Sarah Miller?"

## Message Sending

### Confirmation Required

Before sending any message, confirm the destination and content with the user. Never send without explicit approval.

### Format Selection

| Use        | When                                                                      |
| ---------- | ------------------------------------------------------------------------- |
| Plain text | Quick replies, simple one-liners, "tell them I'll be late"                |
| Block Kit  | Announcements, status updates, metrics, anything needing visual hierarchy |

Don't over-engineer simple messages. But for anything substantive, use Block Kit formatting from the artifact-composer dependency.

### Block Kit Workflow

1. Draft the message content
2. Construct valid Block Kit JSON
3. Write blocks to `session/slack-blocks.json`
4. Show user a preview and get approval
5. Send with the blocks file path
6. Clean up the blocks file after

## Reading Messages

Extract the useful parts:

- Lead with recent and relevant messages
- Summarize long threads rather than dumping everything
- Note important reactions or reply counts
- For ongoing conversations, highlight what's actionable

When history is long, summarize first: "There are 47 messages in the last week. The main topics are X and Y. Want the full history or a specific thread?"

## Error Handling

Common issues and responses:

- **channel_not_found**: "I can't find that channel. It might be private, archived, or the name changed. Want me to search?"
- **not_in_channel**: "I need to be added to that channel first. Can you invite me, or should I try a different channel?"
- **msg_too_long**: "That message is too long for Slack (40k char limit). Want me to split it into multiple messages?"
- **invalid_blocks**: "The formatting didn't work. Let me try with simpler formatting."
- **restricted_action**: "Workspace permissions are blocking this action. You may need to check with your Slack admin."

## Rate Limits

Slack allows ~50 messages/minute for posting, ~20 reads/minute.

For bulk operations, warn users: "Sending to 10 channels—this'll take about 15 seconds."

## Understanding User's Slack Usage

The profile at `./documents/connections/[service-name].md` is built during setup by analyzing 90 days of activity. It captures:

- **Channel patterns** — where they spend time, activity levels
- **Collaboration** — who they work with, context on relationships
- **Topics** — what they discuss
- **Writing style** — tone, formality, patterns (also saved to `./documents/user/writing_style.md`)

Always check the profile before searching or asking. The profile tells you HOW this specific user uses Slack, not just what channels exist.


## Skills

This skill depends on the following skills. Use these if needed.

**Artifact Composer**: Professional formatting for reports, emails, messages, data, and pages
Note: Provides Block Kit formatting knowledge for rich Slack messages
Follow the instructions in: `./skills/sauna/slack.workspace.hub/resources/skills/compose.artifact.creator/SKILL.md`

**Writing Style Analyzer**: Analyze writing samples to capture your voice and style
Note: Provides comprehensive writing style analysis
Follow the instructions in: `./skills/sauna/slack.workspace.hub/resources/skills/context.user.style_analyzer/SKILL.md`


## Tasks

These are tasks you can execute. Read the task file to get your instructions:

**Read Slack Messages**: Fetch and present message history from a channel or DM
Note: Fetch and present conversation history
Follow the instructions in: `./skills/sauna/slack.workspace.hub/resources/recipes/slack.workspace.read.md`

**Send Slack Message**: Compose and send a message to a Slack channel or DM
Note: Compose and send messages with optional Block Kit
Follow the instructions in: `./skills/sauna/slack.workspace.hub/resources/recipes/slack.workspace.send.md`



## Knowledge

This is knowledge you have access to. Read these files if you need additional context:

**Slack API Reference**: Key Slack Web API methods and patterns for messaging
Read the documentation in: `./skills/sauna/slack.workspace.hub/resources/context/slack.workspace.api.md`



## UI

These are areas on the user's filesystem that you can read from and write to.

**Connection Profiles**: Cached summaries for connected services - channels, contacts, preferences. How does the user interact with the connected service?
Note: [slack]
Use this directory: `./documents/connections/[service-name].md`

**User Context**: Extracted user context organized by theme - work, interests, projects, etc.
Note: Persistent user insights from Slack analysis
Use this directory: `./documents/user/[personal|work|goals|interests].md`

**Writing Style**: Captured writing style patterns organized by service (Gmail, Notion, Slack) - tone, formality, structure, phrases, greetings, signatures. Each service has its own section to preserve context-specific styles. Used to draft content matching the user's voice.
Note: 'slack': Writing style analysis from Slack messages
Use this file: `./documents/user/writing_style.md`
1. Install Slack with: ```bash
rm -rf ./skills/sauna/slack.workspace.hub && curl -fsSL "https://sk.ills.app/api/skill/slack.workspace.hub/download" | tar -xzf - -C ./skills/sauna/ && cat ./skills/sauna/slack.workspace.hub/SKILL.md
```. Do so silently without commentary.

2. Check if Slack is connected. If not, help the user connect their account. Once connected, explain that you can analyze their Slack activity to learn how they use it, capture their writing style, and build a profile—but this takes a few minutes. Ask if they'd like to run the analysis now or skip it. If yes, run `./skills/sauna/slack.workspace.hub/resources/recipes/slack.workspace.setup.md`. If no, explain that you can still help them send and read messages.

# Slack

Send and read messages in your Slack workspace. I know your personal Slack habits - your top channels, frequent contacts, and common topics.

## What you can do

- **Send messages** — Post to channels or DM someone directly
- **Read conversations** — Catch up on channel activity or DM history
- **Rich formatting** — Create polished announcements with headers, sections, buttons
- **Personal insights** — See your most active channels and who you talk to most

## Examples

- "Send a message to #engineering saying the deploy is complete"
- "DM Sarah asking if she's free for a quick sync"
- "Post a weekly metrics update to #leadership with our numbers"
- "What's the latest in #product?"
- "Who do I talk to most on Slack?"

## Setup

On first use, I'll analyze your Slack activity to build a personal profile showing your top channels, frequent contacts, and common topics.