Messaging
Slack
A Slack integration connects a Slack workspace to Mobius. Agents can answer direct messages, mentions, or selected channel messages, and loops can post messages, manage approvals, read channel context, and react to Slack events.
Use Slack for agent messaging, notifications, and human checkpoints. Keep irreversible provider actions behind an interaction when a message asks someone to approve work before a run continues.
Capability map
| Capability | Value |
|---|---|
| Provider ID | slack |
| Auth kind | oauth2_user |
| Connect flow | OAuth2 user grant or customer-owned Slack app |
| Actions | Yes |
| Events | Yes |
| Webhook delivery | Yes |
| Event samples | Yes |
| Live status | No |
Connect Slack
| Surface | Support |
|---|---|
| App | Open Library > Integrations, choose Slack, and connect the workspace. |
| CLI | The mobius CLI does not connect Slack integrations yet. Use the app or API. |
| API | Call POST /v1/projects/{project}/integrations/providers/slack/connect for the managed Slack app, or the custom-app connect endpoint for customer-owned Slack apps. |
Slack may ask for event subscriptions and interactivity configuration when you use a customer-owned app. The setup info endpoint in the API reference returns the URLs and scopes the app should use.
Products that embed Mobius can add two optional fields to the managed Slack
connect body: return_url (an absolute HTTPS URL whose origin is on the
organization's return-origin allowlist) and client_state (an opaque value
echoed back on return). When return_url is present, the browser is
redirected there after the OAuth callback instead of landing on the Mobius
app. Embedded return is supported for the managed Slack app only; the
customer-owned connect endpoint rejects these fields. See
embedded OAuth return for allowlist setup, callback
fields, failure outcomes, and fallback behavior.
Agent messaging
Connect Slack, then add a messaging binding to the agent that should answer. The binding decides whether the agent responds to direct messages, mentions, all messages in selected channels, or only allowed senders.
Use narrow bindings first. Start with DMs or mentions in one channel, then widen once the agent's replies are useful.
Actions
slack.approval.send
slack.approval.update
slack.channel.archive
slack.channel.create
slack.channel.get
slack.channel.history
slack.channel.invite
slack.channel.join
slack.channel.list
slack.dm.open
slack.file.info
slack.file.upload
slack.message.delete
slack.message.post
slack.message.schedule
slack.message.update
slack.pin.add
slack.pin.remove
slack.reaction.add
slack.reaction.remove
slack.thread.get_replies
slack.user.get
slack.user.list
slack.user.lookup
slack.user.profile
slack.workspace.infoUse slack.message.post for routine notifications. The
slack.approval.send and slack.approval.update actions are low-level Slack
message primitives; they do not create or resolve a Mobius Interaction. Use an
interaction when a decision must be durable,
attributable, channel-independent, or resume a waiting run.
Events
slack.command
slack.event
slack.interactivitySlack keeps the raw upstream event family behind slack.event. Use the
payload fields in the run input or event detail to narrow matching and branch
inside the loop.
slack.interactivity normalizes common Block Kit fields so loops do not need
to parse the raw JSON string. To update an approval message after a button
response, map slack.approval.update.channel from
${{ event.channel_id }}, timestamp from ${{ event.message_ts }}, and
outcome from ${{ event.action.value }}. event.action is a convenience
alias for the first entry; workflows that handle multiple actions should read
the complete event.actions array. Select actions expose
event.action.selected_option or event.action.selected_options; the
short-lived event.response_url is also available for custom interactive
replies. Treat that URL as provider-sensitive.
Next
- Build a notification loop with Morning brief to Slack.
- Route messages to agents with agent messaging.
- Return managed Slack OAuth to an embedded product with embedded OAuth return.
- Use human gates from interactions.
- Inspect received events from source events.