AI agent skill · by @antoniolg
Slack
Manage unread Slack messages across the workspace: list, open, and reply with confirmation. Stores metadata for later actions.
Archived 2026-10-23 · Source updated 2026-05-18. Check the original repository for the latest version.
SKILL.md instructions
# Slack (inbox + reply) ## Requirements - Environment variable: `SLACK_USER_TOKEN` (user token). - Recommended scopes: `channels:read`, `groups:read`, `im:read`, `mpim:read`, `channels:history`, `groups:history`, `im:history`, `mpim:history`, `users:read`, `chat:write`. - To mark as read (granular scopes): `channels:write`, `groups:write`, `im:write`, `mpim:write` (depends on conversation type). ## Commands (from the skill folder) ### 1) Inbox (unread) ``` scripts/slack-inbox --json-out /tmp/slack-inbox.json ``` - Shows a clean numbered list. - Saves metadata for later actions. ### 2) Open a message ``` scripts/slack-open --index <n> ``` - Uses `/tmp/slack-inbox.json` to resolve IDs. - Writes `/tmp/slack-open.json`. ### 3) Reply (with user confirmation) ``` scripts/slack-reply --index <n> --text "reply" ``` - In channels: replies in thread if it exists (default). - In DMs: use `--no-thread` to reply as a new message. - After replying, mark as read with `scripts/slack-mark-read --index <n>`. ### 4) Mark as read ``` scripts/slack-mark-read --index <n> ``` ## Metadata format `/tmp/slack-inbox.json` contains: - `index` - `id` (channel id) - `name` - `type` - `last_read` - `latest_ts` - `latest_text` - `latest_user_id` - `latest_user_name` - `unread_count` - `unread_has_more` ## Rules - Show the user only the clean list; do not show IDs. - Before replying, ask for confirmation. - If the JSON is stale or missing, re-run inbox. - In DMs, always reply with `--no-thread` and then mark as read. - After replying (channels or DMs), mark as read to clear pending items.