slack-automation
Slack channel management, message fetching, searching, and AI categorization. Use this skill when searching Slack channels, reading messages, creating channels, or categorizing message content. Triggers on Slack-related operations, channel search, message history, or internal communications analy...
SKILL.md
Full skill instructions
Slack Automation
Overview
Interact with Slack workspaces for channel management, message reading, and content analysis. All operations are read-only unless creating channels.
Quick Decision Tree
What do you need?
│
├── Search for channels by name
│ └── references/search.md
│ └── Script: scripts/slack_search.py search
│
├── Read messages from a channel
│ └── references/fetch-news.md
│ └── Script: scripts/fetch_slack_news.py
│
├── Create a new channel
│ └── references/create-channel.md
│ └── Script: scripts/create_slack_channel.py
│
└── Categorize/analyze messages
└── references/categorize.md
└── Script: scripts/categorize_slack_messages.py
Environment Setup
# Required in .env
SLACK_BOT_TOKEN=xoxb-your-bot-token
Required Bot Scopes
| Scope | Purpose |
|---|---|
channels:read | List public channels |
channels:history | Read public channel messages |
groups:read | List private channels |
groups:history | Read private channel messages |
channels:manage | Create channels |
Common Usage
Search Channels
python scripts/slack_search.py search "internal" --limit 10
Read Channel Messages
python scripts/slack_search.py read "internal-client" --days 7
Create Channel
python scripts/create_slack_channel.py "project-alpha" --private
Channel Naming Pattern
For client channels: internal-{client-name}
- e.g.,
internal-microsoft,internal-acme-corp
Cost
Free - Slack API has no per-request cost. Rate limited to ~50 requests/minute.
Security Notes
Credential Handling
- Store
SLACK_BOT_TOKENin.envfile (never commit to git) - Bot tokens start with
xoxb-- never expose in logs or output - Rotate tokens via Slack App settings if compromised
- Use environment variables, not hardcoded values
Data Privacy
- Messages may contain sensitive internal communications
- Avoid storing message content in persistent logs
- Use message links/IDs for references instead of copying content
- Consider data retention policies for exported messages
- User profiles include PII (names, emails, profile photos)
Access Scopes
- Request minimum required scopes for your use case:
channels:read- List public channels (read-only)channels:history- Read public channel messages (read-only)groups:read- List private channels bot is in (read-only)groups:history- Read private channel messages (read-only)channels:manage- Create channels (write access)
- Bot can only access channels it has been invited to
- Review scopes at: Slack App Settings > OAuth & Permissions
Compliance Considerations
- Audit Logging: Slack Enterprise Grid provides audit logs for compliance
- Message Retention: Follow your organization's data retention policies
- GDPR: Message content may contain EU user PII
- eDiscovery: Exported messages may be subject to legal holds
- Internal Communications: Treat Slack data as confidential
- Channel Privacy: Private channel access requires explicit invitation
Troubleshooting
Common Issues
Issue: Channel not found
Symptoms: "channel_not_found" error when reading or posting Cause: Invalid channel ID, bot not in channel, or private channel Solution:
- Verify channel ID is correct (use
slack_search.py search) - Invite the bot to the channel (
/invite @botname) - Check if channel is private - bot needs explicit invitation
- Ensure channel hasn't been archived or deleted
Issue: Missing permissions / scope errors
Symptoms: "missing_scope" or "not_allowed_token_type" error Cause: Bot token missing required OAuth scopes Solution:
- Go to Slack App Settings > OAuth & Permissions
- Add required scopes:
channels:read,channels:history, etc. - Reinstall the app to workspace after adding scopes
- Verify using the correct bot token (starts with
xoxb-)
Issue: Token expired or invalid
Symptoms: "invalid_auth" or "token_revoked" error Cause: OAuth token expired, revoked, or incorrectly configured Solution:
- Reauthorize the bot in Slack App settings
- Regenerate the bot token if revoked
- Check
.envfor correctSLACK_BOT_TOKENvalue - Verify no whitespace or special characters in token
Issue: Rate limited
Symptoms: "ratelimited" error or 429 status code Cause: Too many API requests in short period Solution:
- Add delays between requests (1-2 seconds)
- Reduce batch size for bulk operations
- Implement exponential backoff on retries
- Slack allows ~50 requests/minute for most endpoints
Issue: Private channel access denied
Symptoms: Can't read private channel despite having scopes Cause: Bot not added to the private channel Solution:
- Have a channel member invite the bot:
/invite @botname - Ensure
groups:readandgroups:historyscopes are added - Verify bot has been reinstalled after adding scopes
Resources
- references/search.md - Channel search and message reading
- references/fetch-news.md - Fetch news from channels
- references/create-channel.md - Create new channels
- references/categorize.md - AI message categorization
Integration Patterns
Slack to Newsletter
Skills: slack-automation → content-generation Use case: Summarize internal news for weekly newsletter Flow:
- Fetch messages from news/announcements channels
- Categorize and filter relevant content
- Generate formatted newsletter section via content-generation
Slack and Meeting Context
Skills: slack-automation → transcript-search Use case: Find related meetings when researching Slack discussions Flow:
- Search Slack for client name or topic
- Extract date ranges and participant names
- Search transcript-search for related meeting recordings
Slack Reports to Drive
Skills: slack-automation → google-workspace Use case: Archive categorized Slack summaries to Google Drive Flow:
- Fetch and categorize messages from internal channels
- Generate formatted report document
- Upload to Google Drive via google-workspace
