Slack best practices
Skill Yesterday-AI/skills/plugins/office/skills/slack-best-practices
Yesterday's PUBLIC plugin catalog for Claude Code and Cursor
npx -y skills add Yesterday-AI/skills --skill slack-best-practicesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
A collection of formatting rules, emoji quirks, and communication etiquette for Slack. Use when composing messages for Slack to ensure correct rendering and team-friendly communication.
SKILL.md
5.9 KB, as published. Nobody here has run it
Slack Best Practices π¬πββ¬
π CRITICAL RULE: NEVER USE DOUBLE ASTERISKS (
**)Slack does NOT support Standard Markdown bolding. Using
**will show the literal asterisks to the user. ALWAYS use single asterisks (*) for bold text.FOR AGENTS: You are hard-wired to use
**. You MUST run a post-processing step on your final message string to replace**with*before calling the message tool.
Slack uses a unique flavor of Markdown called mrkdwn. This skill captures the quirks and best practices learned by Yesterday agents to ensure our messages look perfect.
Formatting Rules (mrkdwn)
| Element | mrkdwn Syntax | Standard MD (Avoid!) |
|---|---|---|
| Bold | *text* (single asterisk) | **text** |
| Italic | _text_ (underscore) | *text* |
~text~ | ~~text~~ | |
| Blockquote | > text | same |
| Inline Code | `code` | same |
| Code Block | ```code block``` | same |
| Link | <URL|Label> | [Label](URL) |
Note: Slack does NOT support # headers or Markdown tables. Use ALL CAPS BOLD to simulate headers. Use bullet lists instead of tables.
Links & URLs
Auto-linking works if you paste a raw URL. To suppress the preview embed, wrap it in angle brackets:
<https://example.com>
To show custom link text:
<https://example.com|Click here>
Email links:
<mailto:[email protected]|Mail Alex>
Special characters that must be escaped in text strings (not in URLs):
| Character | Use instead |
|---|---|
& | & |
< | < |
> | > |
Mentions
User mention:
<@U012AB3CD>
Slack auto-converts the user ID to their display name. Get user IDs from their Slack profile ("Copy member ID").
Channel mention:
<#C123ABC456>
Slack auto-converts to the channel name. Get channel ID from the URL: https://app.slack.com/client/E.../C123ABC456
User group mention:
<!subteam^SAZ94GDB8>
Special mentions (use sparingly!):
| Mention | Syntax | Who gets notified |
|---|---|---|
| @here | <!here> | Active members of channel |
| @channel | <!channel> | All members of channel |
| @everyone | <!everyone> | Every workspace member (#general only) |
Date & Time Formatting
Slack can auto-localize timestamps to the reader's timezone:
<!date^UNIX_TIMESTAMP^{date_short} at {time}|Fallback text>
Available tokens:
| Token | Example output |
|---|---|
{date_num} | 2026-03-05 |
{date} | March 5th, 2026 |
{date_short} | Mar 5, 2026 |
{date_long} | Thursday, March 5th, 2026 |
{date_pretty} | today / yesterday / tomorrow |
{time} | 2:00 PM |
{time_secs} | 2:00:00 PM |
Emoji
- Standard Only: Stick to standard Slack emojis (
:feet:,:sparkles:,:rocket:). - No hallucinations: Do not invent emoji names unless sure they exist in the workspace.
- Tone: Use sparingly to soften messages -- one emoji per paragraph max.
- Emoji are stored internally in colon format (
:smile:). When posting, you can use native unicode emoji directly and Slack will convert them.
Cross-Channel Posting (message Tool)
π CRITICAL: Use the Correct Tool Format
The generic
messagetool'schannelparameter does NOT work for cross-channel posting in Slack. It always sends to the current session's DM. Use the Slack skillsendMessageaction instead.
Posting to a different channel from within a DM session:
{
"action": "sendMessage",
"to": "channel:C0EXAMPLE01",
"content": "Hello from another channel"
}
Posting to a user's DM:
{
"action": "sendMessage",
"to": "user:U012AB3CD",
"content": "Hello via DM"
}
The to field format:
| Target | Format | Example |
|---|---|---|
| Channel by ID | channel:C123ABC456 | channel:C0EXAMPLE01 |
| User by ID | user:U012AB3CD | user:U0EXAMPLE02 |
Common mistake: Using message(action=send, channel=C123) -- this ignores the channel parameter and posts to the DM of the current session. Always use sendMessage with to: "channel:...".
Prerequisites:
- The target channel must be in
channels.slack.accounts.default.channelswithallow: true - The bot must be invited to the target channel
groupPolicy: "allowlist"means only explicitly listed channels are allowed
Communication Etiquette
- Thread over Flood: Use threads for deep-dives, detailed logs, or long explanations. Keep channels scannable.
- Mentions: Use
@usersparingly. Prefer no mentions for broad updates unless truly urgent. - Headers: Simulate with
*ALL CAPS BOLD*-- Slack has no#header support. - No tables: Slack does not render Markdown tables. Use bullet lists instead.
- Link embeds: Wrap links in
<>to suppress large previews in busy channels.
Troubleshooting & Common Agent Mistakes
- The "Model Reflex" (CRITICAL): LLMs are pre-trained on millions of Standard Markdown examples and WILL reflexively use
**bold**even when they know better. Treat this as a high-risk failure point. - The "Mental Double-Check": Before any message is sent to Slack, perform a final scan of the text string to ensure NO double-asterisks (
**) exist. Convert to*if found. - Formatting Over Content: High-quality content is useless if the formatting is broken. Prioritize correct mrkdwn syntax over speedy replies.
- Self-Correction Loop: Before calling the
messagetool, run a search-and-replace:**β*.
"Clear is kind. Scannable is better." πΎπ‘