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

CapabilityValue
Provider IDslack
Auth kindoauth2_user
Connect flowOAuth2 user grant or customer-owned Slack app
ActionsYes
EventsYes
Webhook deliveryYes
Event samplesYes
Live statusNo

Connect Slack

SurfaceSupport
AppOpen Library > Integrations, choose Slack, and connect the workspace.
CLIThe mobius CLI does not connect Slack integrations yet. Use the app or API.
APICall 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.info

Use 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.interactivity

Slack 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