agentleFS
pbc-ospbc-os/smb-starter-kit/skills/tier-2-communication/slack/SKILL.md

slack

Skill10 starsChanged 7 months agoMITView on GitHub

Slack team messaging for small businesses. Send messages, manage channels, post automated updates, run daily standups, and coordinate your team. Includes SMB channel structure and team communication best practices.

  • Sends data out

We split this skill into the rules it gives an agent

6 rules. 0 are common, 6 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 60 edited versions we read keep these.

  • 6

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Create a new app (or use existing)

    line 53
  2. Distinctive:

    Don't over-channel. Start with:

    line 215
  3. Distinctive:

    Add channels only when a topic generates enough noise to warrant its own space.

    line 223
  4. Distinctive:

    Don't over-notify: Every bot message should be actionable or informational — never both at once.

    line 340
  5. Distinctive:

    Respect DND: Don't send non-urgent DMs outside business hours.

    line 345
  6. Distinctive:

    Archive dead channels: If nobody's posted in 30 days, archive it.

    line 347

“Common” is measured: kept by at least 6 in 10 of the 60 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Slack

Team messaging built for how small businesses actually communicate.

For user lookups and directory management, see the slack-directory skill. This skill covers everything else: sending messages, managing channels, posting automated updates, and organizing your team's communication.

Triggers

  • "send a slack message"
  • "post to #channel"
  • "message the team"
  • "set up slack channels"
  • "slack standup"
  • "post an update to slack"
  • Any request involving Slack messaging, channels, or team communication

Prerequisites

  • Slack Bot Token with appropriate scopes (see Setup below)
  • jq installed for JSON parsing
  • slack-directory skill for user lookups
  • secrets-manager skill for secure token storage

Setup

Required Bot Token Scopes

ScopeWhat It Enables
chat:writeSend messages to channels and DMs
channels:readList and get info about public channels
channels:manageCreate and archive public channels
groups:readList private channels the bot is in
im:writeSend direct messages
users:readLook up users (for slack-directory)
files:writeUpload files to channels
reactions:writeAdd emoji reactions

Getting Your Bot Token

  1. Go to api.slack.com/apps
  2. Create a new app (or use existing)
  3. Go to OAuth & Permissions → add the scopes above
  4. Install to your workspace
  5. Copy the Bot User OAuth Token (xoxb-...)
  6. Store securely:
    # GCP Secret Manager (recommended)
    echo -n "xoxb-your-token" | gcloud secrets create slack-bot-token --data-file=-
    
    # Or set as environment variable
    export SLACK_BOT_TOKEN="xoxb-your-token"

Retrieving Your Token

# From GCP Secret Manager
TOKEN=$(gcloud secrets versions access latest --secret="slack-bot-token")

# From environment
TOKEN="$SLACK_BOT_TOKEN"

Every message and channel change is visible to your team and hard to fully unsend. Before the agent posts a message, sends a DM, creates or archives a channel, or uploads a file, show the user the exact text and target and get explicit approval — unless they've pre-approved a specific recurring automation (e.g. a daily briefing to a named channel), in which case state that standing approval the first time and stay within its scope.

Core Operations

Send a message to a channel

TOKEN=$(gcloud secrets versions access latest --secret="slack-bot-token")

curl -s -X POST "https://slack.com/api/chat.postMessage" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C0XXXXXXX",
    "text": "Morning update: 3 deliveries scheduled, 2 pickups. Full details in the daily brief."
  }' | jq '.ok'

Send a DM to someone

# First, look up the user ID (use slack-directory skill)
# Then send a DM
curl -s -X POST "https://slack.com/api/chat.postMessage" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "U09ABC123",
    "text": "Hey — vendor delivery moved to 3pm today. Can you be there to receive it?"
  }' | jq '.ok'

Send a rich message (blocks)

curl -s -X POST "https://slack.com/api/chat.postMessage" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C0XXXXXXX",
    "blocks": [
      {
        "type": "header",
        "text": {"type": "plain_text", "text": "Daily Sales Report"}
      },
      {
        "type": "section",
        "fields": [
          {"type": "mrkdwn", "text": "*Revenue:*\n$2,450"},
          {"type": "mrkdwn", "text": "*vs Forecast:*\n+11%"},
          {"type": "mrkdwn", "text": "*Transactions:*\n87"},
          {"type": "mrkdwn", "text": "*Avg Ticket:*\n$28.16"}
        ]
      },
      {
        "type": "context",
        "elements": [
          {"type": "mrkdwn", "text": "Generated automatically by your AI agent"}
        ]
      }
    ]
  }'

List channels

curl -s "https://slack.com/api/conversations.list" \
  -H "Authorization: Bearer $TOKEN" \
  -G -d "types=public_channel,private_channel" -d "limit=100" | \
  jq -r '.channels[] | "\(.id)\t\(.name)\t\(.num_members) members"'

Create a channel

curl -s -X POST "https://slack.com/api/conversations.create" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "daily-briefing",
    "is_private": false
  }' | jq '.channel.id'

Upload a file

# Upload a report or document to a channel
curl -s -X POST "https://slack.com/api/files.uploadV2" \
  -H "Authorization: Bearer $TOKEN" \
  -F "channel_id=C0XXXXXXX" \
  -F "title=Weekly Sales Report" \
  -F "file=@./report.pdf"

Set channel topic

curl -s -X POST "https://slack.com/api/conversations.setTopic" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C0XXXXXXX",
    "topic": "Daily ops updates. Agent posts briefings at 7:30am."
  }'

Thread a reply

# Reply in a thread (use ts from the parent message)
curl -s -X POST "https://slack.com/api/chat.postMessage" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C0XXXXXXX",
    "thread_ts": "1705300000.000100",
    "text": "Update: delivery confirmed for 3pm."
  }'

SMB Channel Structure

Recommended channels for small businesses

ChannelPurposeWho's InBot Posts
#generalCompany-wide announcementsEveryoneMajor alerts only
#daily-briefingMorning briefing + end-of-day summaryEveryoneDaily automated briefing
#ordersOrder updates, fulfillment statusOperations teamOrder alerts
#inventoryStock levels, reorder alertsOperations + purchasingLow stock alerts
#salesRevenue updates, daily numbersLeadership + salesDaily sales report
#marketingAd performance, campaign updatesMarketing teamAd spend alerts
#ops-logShift handoffs, equipment issuesOperations teamShift change reminders
#vendor-commsVendor updates, delivery trackingPurchasing + opsDelivery confirmations

For very small teams (< 5 people)

Don't over-channel. Start with:

ChannelPurpose
#generalEverything that doesn't fit elsewhere
#daily-briefingAutomated morning briefing
#alertsAnything that needs immediate attention

Add channels only when a topic generates enough noise to warrant its own space.

SMB Messaging Patterns

Morning standup post

Post a structured daily standup every morning:

*Daily Standup — Wednesday, Jan 15*

*Yesterday:*
• Revenue: $2,450 (forecast: $2,200, +11%)
• 87 transactions, avg ticket $28.16
• Vendor delivery received from Fresh Farms

*Today:*
• 3 deliveries scheduled (UPS, Fresh Farms, Packaging Co)
• 2 customer pickups
• Mike out — Sarah covering his shift

*Blockers:*
• Cooler #2 running warm (38°F, target 34°F) — monitoring
• Waiting on quote from new packaging vendor

*Action items:*
• [ ] Follow up with landlord re: lease renewal (Owner)
• [ ] Submit Q1 tax docs by Friday (Owner)

Shift handoff

Post at shift change so the next crew knows what's happening:

*Shift Handoff — 3:00 PM*

*Completed:*
• Morning delivery received and checked in
• Inventory count done for deli case
• Customer order #4521 prepped and ready for pickup

*In progress:*
• Cooler reorganization (about 60% done)

*Needs attention:*
• Customer called about catering for Saturday — details in #orders
• Paper towel supply low — reorder needed
• Register 2 jamming on receipts (works if you open/close the paper door)

*Heads up:*
• Evening delivery from Sysco expected at 5pm
• VIP customer (Johnson) picking up at 6pm — special order in walk-in, labeled

Automated alerts

Post alerts when metrics cross thresholds:

🚨 *Alert: Revenue significantly below forecast*
Today's revenue: $1,200 (forecast: $2,100)
Shortfall: -43%
Time: 4:30 PM

Possible causes to investigate:
• Weather impact? (check conditions)
• Foot traffic? (compare to normal)
• Missing transactions? (check POS)
📦 *Low Stock Alert*
The following items are below reorder point:
• Ground Beef (8 lbs remaining, reorder at 15)
• Chicken Breast (12 lbs remaining, reorder at 20)

Suggested: Place order with Fresh Farms by EOD for Thursday delivery.

Weekly recap

Post a weekly summary every Friday afternoon or Monday morning:

*Weekly Recap — Week of Jan 13*

*Revenue:* $12,450 (target: $11,500, +8.3%)
*Best day:* Tuesday ($2,890)
*Transactions:* 423 total, avg ticket $29.43

*Highlights:*
• New catering client signed (Johnson Corp, $800/week)
• Google Ads ROAS improved to 3.2x (was 2.5x)

*Issues:*
• Cooler #2 still running warm — repair scheduled Monday
• 2 customer complaints (both resolved same-day)

*Next week:*
• Vendor price negotiation with Fresh Farms (Tuesday)
• Monthly inventory count (Thursday)
• Payroll deadline (Friday)

Integration with Other Skills

  • slack-directory — Look up user IDs for DMs and mentions
  • morning-briefing — Post the daily briefing to #daily-briefing
  • gmail — Forward important emails as Slack messages
  • google-sheets — Pull KPI data for automated reports
  • google-drive — Share Drive links in channels
  • autoresearch — Post overnight experiment results
  • google-ads — Post ad performance summaries

Tips

  • Don't over-notify. Every bot message should be actionable or informational — never both at once.
  • Use threads for follow-ups. Keep the main channel clean.
  • Use blocks for structured data (sales reports, KPIs). Plain text for quick updates.
  • Pin important messages — delivery schedules, SOPs, emergency contacts.
  • Set channel topics to explain what the channel is for and what the bot posts there.
  • Respect DND. Don't send non-urgent DMs outside business hours.
  • One channel for bot posts. Consolidate automated messages into #daily-briefing or #alerts rather than spraying every channel.
  • Archive dead channels. If nobody's posted in 30 days, archive it.

API Reference

EndpointMethodWhat It Does
chat.postMessagePOSTSend a message
chat.updatePOSTEdit a message
chat.deletePOSTDelete a message
conversations.listGETList channels
conversations.createPOSTCreate a channel
conversations.invitePOSTAdd someone to a channel
conversations.setTopicPOSTSet channel topic
conversations.setPurposePOSTSet channel purpose
files.uploadV2POSTUpload a file
reactions.addPOSTAdd an emoji reaction
users.listGETList users (see slack-directory)

Full docs: api.slack.com/methods

Related Skills

  • slack-directory — User lookup and caching (prerequisite)
  • google-chat — Alternative for Google Workspace teams
  • morning-briefing — Daily digest that can post to Slack
  • secrets-manager — Secure token storage

Your team channel is your operational heartbeat. Keep it structured and it keeps you informed.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.