Search Slack messages and read channel history across your workspaces. Use this skill when the user asks about Slack conversations, channel messages, or internal communications.
Scanned 5/27/2026
Install via CLI
openskills install BuilderIO/agent-native---
name: slack
description: >
Search Slack messages and read channel history across your workspaces.
Use this skill when the user asks about Slack conversations, channel messages, or internal communications.
---
# Slack Integration
## Connection
- **Base URL**: `https://slack.com/api/`
- **Auth**: `Authorization: Bearer $SLACK_BOT_TOKEN` (or `$SLACK_BOT_TOKEN_2` for secondary workspace)
- **Credentials**: `SLACK_BOT_TOKEN` (primary), `SLACK_BOT_TOKEN_2` (secondary workspace)
- **Caching**: 2-minute in-memory cache, max 200 entries; separate user/bot caches
## Server Lib
- **File**: `server/lib/slack.ts`
### Exported Functions
| Function | Description |
| ---------------------------------------------------------- | -------------------------------------------- |
| `getTeamInfo(workspace)` | Get workspace info |
| `listChannels(workspace)` | List channels (paginated, first page cached) |
| `getChannelHistory(workspace, channelId, limit?, cursor?)` | Channel message history |
| `searchMessages(workspace, query, count?)` | Search messages |
| `getUserInfo(workspace, userId)` | Get user info (cached per user) |
| `getBotInfo(workspace, botId)` | Get bot info (cached) |
| `resolveUsers(workspace, userIds, messages?)` | Batch resolve user names |
## Agent Action
Use `slack-messages` for agent-facing Slack reads. Do not call
`/api/slack/*` directly from the agent.
| Mode | Args | Description |
| --- | --- | --- |
| `team` | `workspace` | Get workspace info |
| `channels` | `workspace` | List channels |
| `history` | `workspace`, `channel`, `limit`, `cursor` | Read channel history |
| `multi-history` | `workspace`, `channels`, `names`, `limit`, `cursors` | Read multiple channels |
| `search` | `workspace`, `query` | Search messages |
## Key Patterns & Gotchas
- Two workspaces supported via workspace parameter ("primary" / "secondary")
- `getChannelHistory` auto-joins channels on "not_in_channel" error, then retries — requires `channels:join` scope
- If auto-join fails, throws a detailed message explaining how to invite the bot
- `searchMessages` may require user token; bot token tried first
- `listChannels` paginates via cursor; only first page is cached
- `getUserInfo` resolves bots via `getBotInfo` when needed
No comments yet. Be the first to comment!