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.
INSTALLER
To install Slack:
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 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
Writing 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
- 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 - Fuzzy match on name: "#eng" → "#engineering"
- Prefer channels from their profile (where they're active)
- If ambiguous, ask the user
People
- Check frequent contacts in profile first
- Match on display name or real name
- "Sarah" finds the right Sarah if there's only one in their contacts
- 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
- Draft the message content
- Construct valid Block Kit JSON
- Write blocks to
session/slack-blocks.json - Show user a preview and get approval
- Send with the blocks file path
- 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:
Knowledge
This is knowledge you have access to. Read these files if you need additional context:
UI
These are areas on the user's filesystem that you can read from and write to.
SKILL.MD
---
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`
INSTALLER
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. INSTRUCTIONS
# 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.