@guildai-services/guildai~slack package gives your agents authenticated access to the Slack Web API. This allows your agents to monitor channels, respond to user messages, and post automated updates.
Feature overview
What your Guild Slack integration can do depends entirely on which agents you choose to connect. The integration is highly flexible. The exact capabilities depend on how you configure your Guild agents. Here are a few examples:Ask questions

File feature requests

Post rule-based alerts

Authentication
- Type: OAuth 2.02
- Token management: Slack tokens don’t expire — no refresh needed
Setup
OAuth scopes
| Category | Scopes |
|---|---|
| Channels | channels:history, channels:read |
| Groups | groups:history, groups:read |
| Messages | chat:write, app_mentions:read |
| Reactions | reactions:read, reactions:write |
Usage
You can create a Guild agent that interacts with your Slack workspace by importing the Slack tools using the Guild Agents SDK. This configuration registers all available Slack operations as tools on your agent:Selecting specific tools
Agents perform better with fewer tools. Usepick() to include only what your agent needs. Tools are named with the slack_ prefix — for example, chat_post_message becomes slack_chat_post_message.
API endpoints
Messages
Messages
| Operation | Method | Path |
|---|---|---|
chat_post_message | POST | /chat.postMessage |
chat_update | POST | /chat.update |
chat_delete | POST | /chat.delete |
chat_post_ephemeral | POST | /chat.postEphemeral |
chat_schedule_message | POST | /chat.scheduleMessage |
chat_scheduled_messages_list | GET | /chat.scheduledMessages.list |
chat_delete_scheduled_message | POST | /chat.deleteScheduledMessage |
chat_get_permalink | GET | /chat.getPermalink |
Conversations
Conversations
| Operation | Method | Path |
|---|---|---|
conversations_list | GET | /conversations.list |
conversations_info | GET | /conversations.info |
conversations_history | GET | /conversations.history |
conversations_replies | GET | /conversations.replies |
conversations_members | GET | /conversations.members |
conversations_join | POST | /conversations.join |
conversations_leave | POST | /conversations.leave |
conversations_invite | POST | /conversations.invite |
conversations_archive | POST | /conversations.archive |
conversations_unarchive | POST | /conversations.unarchive |
conversations_set_topic | POST | /conversations.setTopic |
conversations_set_purpose | POST | /conversations.setPurpose |
Reactions
Reactions
| Operation | Method | Path |
|---|---|---|
reactions_add | POST | /reactions.add |
reactions_get | GET | /reactions.get |
reactions_list | GET | /reactions.list |
reactions_remove | POST | /reactions.remove |
Files
Files
| Operation | Method | Path |
|---|---|---|
files_info | GET | /files.info |
files_delete | POST | /files.delete |
Pins
Pins
| Operation | Method | Path |
|---|---|---|
pins_add | POST | /pins.add |
pins_list | GET | /pins.list |
pins_remove | POST | /pins.remove |
Reminders
Reminders
| Operation | Method | Path |
|---|---|---|
reminders_add | POST | /reminders.add |
reminders_complete | POST | /reminders.complete |
reminders_delete | POST | /reminders.delete |
reminders_list | GET | /reminders.list |
Users
Users
| Operation | Method | Path |
|---|---|---|
users_info | GET | /users.info |
users_list | GET | /users.list |
users_lookup_by_email | GET | /users.lookupByEmail |
users_profile_get | GET | /users.profile.get |
User groups
User groups
| Operation | Method | Path |
|---|---|---|
usergroups_create | POST | /usergroups.create |
usergroups_list | GET | /usergroups.list |
usergroups_update | POST | /usergroups.update |
usergroups_users_list | GET | /usergroups.users.list |
usergroups_users_update | POST | /usergroups.users.update |
Team
Team
| Operation | Method | Path |
|---|---|---|
team_info | GET | /team.info |
emoji_list | GET | /emoji.list |
bots_info | GET | /bots.info |
Webhook events
Slack uses an agent-scoped webhook model — a single webhook receives all events and Guild routes them to matching triggers.| Event | Description |
|---|---|
app_mention | The Slack agent is mentioned in a channel. |
app_uninstalled | The Slack workspace uninstalls the Slack agent. |
member_joined_channel | A user joins a public or private channel. |
message.channels | A user posts a message in a public channel. |
message.groups | A user posts a message in a private channel. |
reaction_added | A user adds an emoji reaction to a message. |
reaction_removed | A user removes an emoji reaction from a message. |
tokens_revoked | The workspace revokes API tokens for the Slack agent. |
channel_ids in the service configuration. Messages from the Slack agent itself are automatically excluded to prevent feedback loops.
How the integration works
Guild uses Slack’s OAuth v2 flow. When you connect Slack, Guild receives a bot access token scoped to the installed workspace.- Long-lived token — Slack bot tokens do not expire. Guild stores the token once; no refresh flow is required.
- Bot only — Guild does not receive a user token. All API calls run as the bot, not as the installing user.
- One workspace per connection — Each Slack install maps to one
team_idand one bot token. - Bot user ID — Guild captures this at install time and uses it to filter out the agent’s own messages and prevent feedback loops.
Inbound events
Slack pushes events to a single agent webhook. Guild validates payloads with HMAC-SHA256 (X-Slack-Signature and X-Slack-Request-Timestamp), deduplicates by event_id, and routes events to matching triggers.
Use channel_ids in trigger service_config to limit which channels fire your agent. An empty channel_ids array matches all channels.
Outbound API calls
Agents call the Slack Web API through Guild’s proxy, which injects the bot token. The runtime exposes operations asslack_* tools (for example, slack_chat_post_message). Messages always appear from the bot — you cannot post as a specific user.
Guild scrubs URLs, thumbnails, avatars, and permalinks from webhook payloads before they reach agents to reduce token usage.
Limitations
- You must invite the Slack agent to channels to receive
messageevents (app_mentionworks without an invite) - If
channel_idsis empty in trigger config, events from all channels are processed - If someone uninstalls the Slack agent from the workspace, reconnect credentials in Guild. Guild does not receive a revocation webhook.
- Configure
SLACK_WEBHOOK_SIGNING_SECRETfor webhook verification