- Receive DMs and
@mentionsand route them to a default deployed agent (or per-channel routing rules). - Stream agent replies back into the same thread, updating the message as new tokens arrive.
- Post escalation prompts into a designated channel so on-call humans can answer.
slack_post_message, slack_conversation_history, slack_conversation_replies) from the Connections tab of the agent’s tool picker. The Builder surfaces them under type: "connector" in list_workspace_integrations, with a connected flag and a setup_path pointing back at this page.
Slack threads create agent sessions — one session per thread, reused for every reply. See Triggers for the full set of ways an agent can be woken up.
Setup
Install the Slack app from Connections → Slack → Connect Slack. The button kicks off Slack’s OAuth flow via the generic OAuth surface; on approval Slack redirects back to/webhooks/inbound/oauth/slack/callback, which exchanges the code for a bot token and stores it encrypted in oauth_installs (with Slack-specific routing defaults under metadata).
The Slack app itself is provisioned from a manifest checked into the repo at docs/setup/slack-app-manifest.yaml — paste it into api.slack.com/apps → Create New App → From a manifest to reproduce the exact scopes, slash commands, and event subscriptions agntdata expects.
Bot scopes
Grouped by capability so it’s easy to reason about least-privilege. Chat with an agentapp_mentions:read,chat:write,chat:write.public,commandsim:history,im:read,im:writempim:history,mpim:read,mpim:writechannels:history,groups:history
channels:read,channels:manage,channels:joingroups:read,groups:write
team:read,users:read,users:read.email
SLACK_BOT_SCOPES in apps/api/src/services/oauth/providers/slack.ts. Keep the manifest, the constant, and this page in sync — adding a scope later forces every install to be re-authorized.
Channel-management tools
Once an install is connected, agents can ask the platform to spin up a Slack channel, invite teammates, and converse with them inline. The connector exposes:slack_post_message,slack_conversation_history,slack_conversation_replies— chat primitives.- (Coming soon)
slack_create_channel,slack_invite_to_channel,slack_set_channel_topic— built on top ofconversations.create,conversations.invite, andconversations.setTopic. Scopes are already granted by the manifest above so no reinstall will be needed when these ship.
Routing inbound messages
For every Slack DM or mention, the router:- Looks up which agent answers in this channel via the
chat_platform_connectionsrouting table. - Resolves (or creates) an
agent_sessionsrow keyed off the conversation id — one session per thread, reused for every reply. - Sends the user message to Anthropic against the resolved agent.
- Streams the response back, calling
chat.updateto replace the placeholder message in real time.
list_slack_channel_routes, create_slack_channel_route, update_slack_channel_route, and delete_slack_channel_route tools manage the routing table — you can ask the Builder “route this channel to my support agent” and it’ll write the row directly. Or change the default agent and the escalation channel from the Slack dialog on Connections.
Slash commands
/agnt list— lists your deployed agents and how to use them./agnt help— usage instructions.
External users
Each install has anexternal_user_policy:
reject(default) — block messages from users outside your Slack workspace.allow_listed— only accept users you’ve explicitly added.allow_all— accept anyone the bot can see.
Escalations
When a deployed agent callsescalate_to_human, the escalation lands in your dashboard Inbox and — if your Slack install has an escalation channel configured — a Slack message is posted with deep links back to the question. Replies in Slack and replies in the dashboard both flow into the same agent_escalations row. See Permissions.
Next steps
Triggers
Schedules and webhooks alongside Slack.
Permissions
Configure the escalation channel.
Sessions
How Slack threads map onto agent sessions.