This Raycast extension is the perfect companion for Slack users. It allows you to:
The Set Status command accepts two optional arguments, statusText and emoji, so you can build a deep link (or a Quicklink) that sets your status in one step:
raycast://extensions/mommertf/slack/set-status?arguments=%7B%22statusText%22%3A%22Lunch%22%2C%22emoji%22%3A%22%3Ahamburger%3A%22%7D
The arguments query parameter is a URL-encoded JSON object, for example:
{ "statusText": "Lunch", "emoji": ":hamburger:" }
emoji accepts a Slack emoji name with or without colons (hamburger or :hamburger:).Statuses set this way don't auto-expire. To pick an expiration, open the command and use the Set New Status form.
If you don't want to log in through OAuth, you can use an access token instead. Here's how to get one:
Click Button Create New App
Select From an app manifest
Select a workspace to which you want to grant the extension access.
Copy and paste the following manifest (Select YAML):
Feel free to exclude permission scope groups - see comments - if you don't want to have the full experience of this extension.
display_information:
name: Raycast - Slack
oauth_config:
scopes:
user:
# Command: Search & Unread Messages & Set Presence
- users:read
# Command: Search & Unread Messages
- channels:read
- groups:read
- im:read
- mpim:read
# Command: Search
- search:read
# Command: Unread Messages
- channels:history
- groups:history
- im:history
- mpim:history
# Command: Unread Messages (optional - needed for marking conversations as read)
- channels:write
- groups:write
# Command: Unread Messages (optional - needed for marking conversations as read)
# AI Tool: Send Message (needed to open a DM from a user ID)
- im:write
- mpim:write
# Command: Set Presence
- users:write
# Command: Set Snooze
- dnd:read
- dnd:write
# Command & AI Tool: Send Message
- chat:write
# AI Tool: Upload Files
- files:write
# AI Tool: Download Files
# Command: Search Messages (Download Attachment)
- files:read
# Command: Search Emojis
- emoji:read
# AI Tool: Add Reaction
- reactions:write
# AI Tools: Read Canvas & Edit Canvas
- canvases:read
- canvases:write
# Command: Set Status
- users.profile:write
- users.profile:read
settings:
org_deploy_enabled: false
socket_mode_enabled: false
token_rotation_enabled: false
Confirm creation of app
Press Install to Workspace
Get your personal access token from Features -> OAuth & Permissions (section OAuth Tokens for Your Workspace).
Your personal access token will start with xoxp-.
If you are behind a corporate proxy, you can configure the extension to route Slack API requests through it.
The proxy URL is resolved in the following order:
http://proxy.example.com:8080)HTTPS_PROXY environment variableHTTP_PROXY environment variableSlack applies Web API rate limits per API method, per workspace, per app, using one-minute windows. The published tier number is a guaranteed floor rather than a fixed maximum; Slack allows some bursts and may change the exact allowance. Signing in again or clearing Raycast's extension cache does not reset these workspace-level app limits.
The limits most relevant to this extension are:
| Extension operation | Slack method | Published limit |
|---|---|---|
| Search workspace members | users.list | Tier 2: 20+ requests per minute |
| Search channels and group conversations | conversations.list | Tier 2: 20+ requests per minute |
| Search messages | search.messages | Tier 2: 20+ requests per minute |
| Send messages | chat.postMessage | Special: generally 1 message per second per channel, plus a workspace-wide limit |
users.list and conversations.list are cursor-paginated, and every page is another request against that method's rate limit. Directory loading and search use Slack's recommended 200-item page size. User search scans users.list once, keeping a compact copy of the member list in memory and in Raycast's Cache (fresh for one hour, reusable for up to a day while it refreshes in the background), so later searches make no member requests. Pages are searched as they arrive, so matches appear without waiting for the whole workspace. Timeouts and server errors stop retrying after a few attempts so they surface instead of loading forever.
When a limit is exceeded, Slack responds with HTTP 429 and a Retry-After header containing the number of seconds to wait. The extension waits and retries automatically without showing a toast, including during AI tool calls, except for Canvas tools, which return the wait time without retrying. Although Slack applies limits per method, the Slack SDK pauses this client's request queue during the retry delay. See Slack's rate-limit overview for the full tier definitions and current policy.
Search for all workspace members, group chats, and channels and open them directly in your Slack app.
Search for Slack messages.
Send a message to a channel or user in Slack.
Open an overview of unread messages directly in your native Slack app.
Browse through unread messages within direct messages, channels and groups.
Set settings for how long you want to snooze notifications.
Let Slack decide automatically how to show your presence status or force it to be shown as offline.
Search custom emojis in your Slack team.
Set your status.
canvases:read and canvases:write OAuth scopes.W so those people appear as message recipients instead of channels.internal_error when a message was attached, caused by Slack rejecting the newer markdown block in files.completeUploadExternal; the AI message signature now uses upload-safe blocks for file uploads.internal_error so the AI can recover instead of retrying blindly or re-encoding files.~/Downloads (or a chosen folder) by their file IDs.files:read scope so private files can be downloaded; existing OAuth users will be asked to re-authorize.files:read to the manual access-token setup instructions.expiration argument — any number of minutes, or today / week — so a deep link or Quicklink can set a self-clearing status in one step (e.g. "expiration":"90" for an hour and a half).replyBroadcast flag to the reply-thread AI tool to also send important thread replies to the channel.add-reaction AI tool that adds an emoji reaction to a Slack message and returns its permalink.reactions:write OAuth scope for adding reactions.open-group-dm AI tool that opens or resumes a group DM with 2 to 8 users and returns its conversation ID for messaging or file uploads.get-huddle-link AI tool that returns a Huddle join link for a channel, DM, group DM, or user.files:write scope to the manual access-token setup instructions.upload-files AI tool that uploads one or more local files to Slack channels, DMs, group DMs, or threads, optionally with an accompanying message.files:write OAuth scope for file uploads.update-message AI tool edits a message.update-message AI tool that edits messages posted by the authenticated Slack user and returns a permalink to the updated message.send-message and reply-thread AI tools. Messages sent with the Send Message command are unchanged.send-message AI tool that sends messages to channels, group DMs, existing DMs, or users. User IDs are resolved to a direct-message conversation before posting.chat:write and im:write OAuth scopes required to post messages and open DMs.reply-thread AI tool that posts a message to an existing Slack thread using its channel ID and parent message timestamp.read-thread AI tool to fetch a bounded page of messages in a Slack thread using the channel ID and parent message timestamp. The tool returns hasMore and nextCursor when additional messages are available.read-thread AI tool omitting author identity on incoming webhook messages. Such messages lack a user ID or bot_profile, but Slack sets username on them.profile_status_set_failed_not_valid_emoji when the emoji argument is a raw emoji (e.g. 👈) inserted by Raycast's emoji picker. Raw emoji are now mapped back to their Slack :name: code.statusText and emoji arguments, so a deep link or Quicklink can set your status in one step (e.g. raycast://extensions/mommertf/slack/set-status?arguments=%7B%22statusText%22%3A%22Lunch%22%2C%22emoji%22%3A%22%3Ahamburger%3A%22%7D).application="Slack" hint caused Raycast to launch Slack.exe without forwarding the slack:// URI; the hint is now macOS-only so Windows routes the URI through the registered protocol handler.Angeles finds Ángeles (and the same for any accented characters).HTTPS_PROXY, or HTTP_PROXY environment variableschat:write scope to fix “missing_scope” error when using the Send Message command.search.message slack api to enable AI to use the tool (search for full messages)from:<@${user.id}> instead of from:${user.name})emoji:read scope to fix "missing_scope" error when using Search Emojis commandSearch Emojis command with AI-powered search: If you can't find an emoji by name, describe what you're looking for and AI will suggest the most relevant Slack emojis.Search Emojis command to browse and copy Slack emojisget-emojis tool to fetch emojis with AIchat:write scope to the manifest, and re-install the application in your Slack space.Copy Message URL action to copy the URL of a message to the clipboard from the Search Messages commandCopy Huddle Link action to copy the huddle link of a chat to the clipboardSearch command is renamed as Open Channel to differentiate from Search MessagesSave as Quicklink action in Open Channel commandSet Presence and Set Snooze icons have been improved, along with their performance.Unread Messages command and update required permission scopes accordinglySearch commandSet Presence commandSet Snooze commandOpen Unread Messages command