# Slack

> Query Slack channels, search messages, and fetch user information. Use when reading Slack data, checking channel history, searching messages, or looking up users.

- Skill: `drn/slack` (Agent Skill)
- Install (CLI): `npx skillmds@latest add drn/slack`
- Raw SKILL.md: https://api.skillmd.com/api/skills/drn/slack/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: drn (https://skillmd.com/u/drn)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/drn/slack

---


# Slack (Read-Only)

Query Slack channels, search messages, and fetch user information using the `slack` CLI.

## Instructions

You are helping query Slack data. Auth is handled via environment variables loaded from `~/.dots/sys/env`:
- `SLACK_XOXP_TOKEN` — user token for search, history, thread, dms
- `SLACK_XOXB_TOKEN` — bot token for channels, users

### Operations

```bash
# Test authentication
slack auth-test

# Channel operations
slack channels                                # List all channels
slack find-channel releases                   # Find channel by name

# Message history
slack history C04M5PG7P7T                     # By channel ID
slack history releases --limit 50             # By name, limit 50
slack history releases --days 7               # Last 7 days

# Thread replies
slack thread C04M5PG7P7T 1234567890.123456

# Search messages
slack search "deployment failed"              # Full search
slack search "urgent" --days 1                # Last 24 hours
slack search "from:@darren" --days 7 --full   # Full message text

# User operations
slack users                                   # List all users
slack find-user darren                        # Find by name

# DMs
slack dms                                     # List DM conversations

# JSON output (for programmatic use)
slack channels --json
```

### Common Tasks

#### Get recent channel history
```bash
slack history releases --days 7
```

#### Search for mentions of a topic
```bash
slack search "outage" --days 7
```

#### Find who posted about something
```bash
slack search "from:@darren deployment" --days 30
```

#### Get activity from a specific person
```bash
# First find their user ID
slack find-user "john"
# Then search their messages
slack search "from:@john" --days 7
```

#### Full-Text Search
By default, search truncates messages to 200 chars. Use `--full` for complete message text:
```bash
slack search "from:@aaron" --days 7 --full
```

### Token Types & Required Scopes

| Token | Env Var | Used For |
|-------|---------|----------|
| User (xoxp) | `SLACK_XOXP_TOKEN` | `search`, `dms`, `history`, `thread` |
| Bot (xoxb) | `SLACK_XOXB_TOKEN` | `channels`, `users`, `find-user`, `find-channel` |

**Required User Token Scopes**: `channels:history`, `channels:read`, `groups:history`, `groups:read`, `im:history`, `im:read`, `mpim:history`, `mpim:read`, `search:read`, `users:read`

**Required Bot Token Scopes**: `channels:read`, `groups:read`, `users:read`, `users:read.email`

### API Rate Limits

Slack has rate limits:
- Tier 1 methods (chat.postMessage): 1 request/second
- Tier 2 methods (conversations.history): 20 requests/minute
- Tier 3 methods (search.messages): 20 requests/minute

If rate limited, wait for the `retry_after` period.

### Error Handling

Common errors:
- `channel_not_found` — Channel doesn't exist or bot/user not in channel
- `not_in_channel` — Need to join the channel first
- `ratelimited` — Too many requests, check `retry_after`
- `invalid_auth` — Token is expired or invalid
- `missing_scope` — Token lacks required OAuth scopes

## Capabilities

- **Channel listing**: Public and private channels the user has access to
- **Channel history**: Messages from any channel (with proper permissions)
- **Thread replies**: Full thread contents
- **Message search**: Full-text search with date filters
- **User lookup**: Find users by name, display name, or email
- **DM listing**: List direct message conversations

## Limitations

- **Read-only** — Cannot send messages. When asked to send/DM someone, draft the message as copyable text instead.
- Cannot access channels the user/bot isn't in
- Search results are truncated to 200 chars by default. Use `--full` for complete text.
- Rate limited by Slack's API tier system

