| name | slack-tools |
| description | Send messages, send files, read messages, search, and list channels on Slack. Use this skill when: send slack message, slack DM, read slack, slack file, slack search, slack channel, message someone on slack |
Purpose
Interact with the local Slack desktop app to send messages, upload files, read messages from channels/DMs, read threads, search messages, and list channels. Uses locally extracted tokens from the Slack snap installation — no API keys needed.
Prerequisites
- Slack desktop app installed via snap (
~/snap/slack/)
- Python 3.13+ with
uv available
- GNOME keyring accessible (for cookie decryption)
Instructions
The skill provides a single unified Python script at {baseDir}/scripts/slack.py with subcommands: send, send-file, read, thread, search, list.
Targets can be a user display name (e.g. Ruda, Falko), a channel name (e.g. general), or a channel ID.
Workflow
Execute the following steps in order, top to bottom:
-
Determine what the user wants to do
Map the user's request to one of the subcommands:
- "send message to X" →
send
- "send file to X" →
send-file
- "read messages from X" →
read
- "read thread" →
thread
- "search slack for X" →
search
- "list channels" →
list
-
Install dependencies (first run only)
cd {baseDir}/scripts && uv sync
-
Run the appropriate command
Use uv run from the scripts directory:
cd {baseDir}/scripts && uv run python slack.py <subcommand> [args]
-
Report result — Show success/failure output to the user.
Script Reference
Send messages
uv run python slack.py send "Ruda" "Hello!"
uv run python slack.py send "Ruda" "Hello!" "How are you?" "See you later"
uv run python slack.py send "Ruda" "Hello" --repeat 5
uv run python slack.py send "general" "Hey team!"
uv run python slack.py send "C08TGQZEY1H" "Thanks!" --thread-ts "1775567823.744029"
Send files
uv run python slack.py send-file "Falko" ./screenshot.png
uv run python slack.py send-file "Falko" ./report.pdf -m "Here's the report"
uv run python slack.py send-file "#general" file1.png file2.png
Read messages
uv run python slack.py read "Ruda"
uv run python slack.py read "general" -n 50
Read a thread
uv run python slack.py thread "C08TGQZEY1H" "1775567823.744029"
uv run python slack.py thread "Ruda" "1711234567.123456"
Extracting thread timestamp from Slack URLs:
Slack thread URLs look like: https://apheris.slack.com/archives/C08TGQZEY1H/p1775567823744029
- The channel ID is the path segment after
/archives/ (e.g. C08TGQZEY1H)
- The timestamp starts with
p, remove the p and insert a . before the last 6 digits: p1775567823744029 → 1775567823.744029
Search messages
uv run python slack.py search "deployment issue" -n 10
List channels
uv run python slack.py list
uv run python slack.py list -t "public_channel"
Cookbook
-
IF: User says "send 5 hello messages to Ruda"
-
THEN: uv run python slack.py send "Ruda" "Hello" --repeat 5
-
IF: User says "reply in this thread" with a Slack URL like https://apheris.slack.com/archives/C08TGQZEY1H/p1775567823744029
-
THEN: Extract channel ID C08TGQZEY1H and timestamp 1775567823.744029, then uv run python slack.py send "C08TGQZEY1H" "message" --thread-ts "1775567823.744029"
-
IF: User says "read this thread" with a Slack URL
-
THEN: Extract channel ID and timestamp from URL, then uv run python slack.py thread "C08TGQZEY1H" "1775567823.744029"
-
IF: User says "read my DMs with Falko"
-
THEN: uv run python slack.py read "Falko"
-
IF: User says "send this image to #general"
-
THEN: uv run python slack.py send-file "general" ./image.png
-
IF: User says "search slack for deployment"
-
THEN: uv run python slack.py search "deployment"
-
IF: User provides a channel ID directly (e.g. C02UN6GPLQ1)
-
THEN: Use it directly as the target argument