slack
Slack Skill
Purpose
Interact with your Slack workspace using natural language from Claude Code.
Prerequisites
You need a SLACK_USER_TOKEN in your ClaudeClaw .env file. If you haven't set this up yet, follow these steps:
Getting your Slack User OAuth Token
-
Go to api.slack.com/apps and click Create New App
-
Choose From scratch (not "From an app manifest")
-
Name it (e.g.
ClaudeClaw), select your workspace, click Create App -
In the left sidebar, click OAuth & Permissions
-
Scroll down to the Scopes section. You'll see Bot Token Scopes and User Token Scopes
-
Ignore Bot Token Scopes. Under User Token Scopes, click Add an OAuth Scope and add all of these:
channels:history— View messages in public channelschannels:read— View basic info about public channelschat:write— Send messages on your behalfgroups:history— View messages in private channelsgroups:read— View basic info about private channelsim:history— View direct messagesim:read— View basic info about DMsmpim:history— View group direct messagesmpim:read— View basic info about group DMssearch:read— Search workspace contentusers:read— View people in the workspace
-
Scroll back up, click Install to Workspace, then click Allow
-
Copy the User OAuth Token (starts with
xoxp-) -
Add to your
.env:SLACK_USER_TOKEN=xoxp-your-token-here
Setup
The CLI lives at the ClaudeClaw project root. All commands must run from the project directory (the CLI reads .env from cwd):
cd /path/to/claudeclaw && node dist/slack-cli.js <command>
Commands
List conversations (with unread counts)
cd /path/to/claudeclaw && node dist/slack-cli.js list
cd /path/to/claudeclaw && node dist/slack-cli.js list --limit 10
Returns JSON array of conversations sorted by unread count then recency. Each object has: id, name, isIm, unreadCount, lastMessage, lastMessageTs.
Read messages from a conversation
cd /path/to/claudeclaw && node dist/slack-cli.js read <channel_id>
cd /path/to/claudeclaw && node dist/slack-cli.js read <channel_id> --limit 30
Returns JSON array of messages (oldest first). Each object has: text, userName, fromMe, ts, threadTs.
Send a message
cd /path/to/claudeclaw && node dist/slack-cli.js send <channel_id> "message text"
cd /path/to/claudeclaw && node dist/slack-cli.js send <channel_id> "reply text" --thread-ts 1234567890.123456
Search conversations by name
cd /path/to/claudeclaw && node dist/slack-cli.js search "jane"
cd /path/to/claudeclaw && node dist/slack-cli.js search "general"
Fuzzy matches against conversation names. Use this to find channel IDs when you need to message someone or read a channel.
Workflow
- "Check my slack" -> Run
listto show conversations with unread counts - "Read my DMs with Jane" -> Run
search "jane"to find the channel ID, thenread <id> - "Message Jane on Slack saying hey" -> Run
search "jane"to find the channel ID, draft the message, show the user for confirmation, thensend <id> "hey" - "What's new in #general" -> Run
search "general"to find the channel ID, thenread <id>
Drafting Rules
- ALWAYS draft the message and show it to the user before sending
- Never send without confirmation
- If the user gives exact phrasing, use it verbatim
More from earlyaidopters/claudeclaw
timezone
Show current times across Mark's key locations. Use when Mark says "timezone", "what time is it", "team times", "check the time in", or wants to know working hours for his team.
1tldr
Summarize the current conversation into a TLDR note and save it to your notes folder. Use when you say "tldr", "save a summary", "note this convo", or want to capture key takeaways from the current session for future reference.
1gmail
Manage your Gmail inbox from Claude Code. List, read, triage, reply, send, and create filters.
1google-calendar
Manage your Google Calendar from Claude Code. Create events with Meet links, send invites, check availability.
1