DocsIntegrations

Slack

Slack connects workspace messages to assistants.

A Slack integration connects one workspace to Mobius. Assistants can answer direct messages, mentions, or selected channel messages, and can post messages, upload files, and read channel context.

Use Slack for assistant messaging, routine notifications, and human checkpoints.

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 Build > Integrations, choose Slack, and connect the workspace.
CLIThe mobius CLI does not connect Slack integrations yet. Use the app or API.
APICall POST /v1/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.

The OAuth connection finishes in Mobius for the person who started it. Returning the browser to an embedded product is currently unavailable: a connect request that includes return_url is refused with 400 embedded_return_disabled.

A Slack workspace is team-managed, so an organization administrator connects it. The assistant that answers in the workspace can use its Slack actions; see Assistant messaging. To let other assistants call Slack actions, open the workspace account and use Who can use its actions. Its Mobius result audience can be everyone or named people, according to the grant. This audience does not restrict the Slack channel named in an action.

Assistant messaging

The last step of connecting Slack asks which assistant answers in the workspace. Everyone in the workspace can message it directly, and in channels people @mention it. To change it later, open the Slack account and click Change under Who answers. Only organization admins choose who answers.

The assistant you choose can also use the workspace's Slack actions, such as posting a message to a channel, with everyone as its result audience. It appears under Who can use its actions. When you choose a different assistant, or no assistant, the previous one loses that access. Access you granted under Who can use its actions yourself stays.

The messaging binding and account grant serve different paths, even though choosing who answers sets up both. The binding routes an incoming Slack conversation to an assistant and sends its reply back to that conversation. The account grant authorizes explicit Slack tool calls, such as posting Northwind's morning brief to #operations. A routine saves the exact Slack workspace account it will use.

Privacy in Slack

What you say to the assistant in a Slack channel or group DM stays in that conversation. Its transcript, its notes, and the files the assistant saves there belong to the conversation. Nobody opens them in Mobius, organization admins included. A DM with the assistant is yours: once your Slack account is linked, the assistant works for you there, as in a private conversation in Mobius (see Use the assistant privately). Privacy in chat apps explains the whole model. What is specific to Slack:

  • Public channels are the only conversations that can add to what the assistant knows everywhere. Private channels, group DMs, and any channel Mobius can't confirm as public stay private.
  • In channels, Mobius doesn't match Slack accounts to Mobius members yet, so "remember for everyone" keeps the note in its channel for now. Your DM link does not change this.
  • The assistant doesn't answer in Slack Connect channels or to Slack guests. It posts one notice instead.

Use the assistant privately

An organization admin first connects Slack and chooses the assistant that answers. Open a direct message with the installed Slack app. Mobius can match it to your account automatically when Slack confirms your email and the same verified email belongs to exactly one active Mobius member in the organization. Wait for the assistant to reply that your account is linked, then send a new request. The same assistant can use Alice's mailbox for Alice and Bob's mailbox for Bob, with separate conversations and private memories.

If automatic matching is unavailable, use the manual linking flow:

  1. Open a direct message with the installed Slack app and send link.
  2. Open the returned link and sign in to Mobius with your own account. You must be an active member of the organization that connected the workspace.
  3. Approve the link in the browser. Copy the confirmation text shown there.
  4. Send confirm <secret> as an ordinary message in the original Slack DM. Use the text from the browser, without a leading slash.
  5. Wait for the assistant to reply that your account is linked, then send a new request.

The browser approval alone does not activate the link. Forwarding the browser URL to someone else does not let them complete your DM link. Messages sent before activation are not carried into the new private conversation.

Connect your own accounts

If the assistant needs an account you have not made available to it, follow its account setup link in Mobius. Choose your own account and grant this assistant access. Then return to the original DM and send your request again. The assistant needs a current grant for the exact account; your coworker's account or the assistant creator's account does not fill in for yours.

Your linked DM's transcript stays private to you, and what the assistant remembers or saves there goes to your own memory and files. Channels and group DMs never use your own accounts or your memory, whatever your DM link. Moving a question into a channel does not make that channel a private conversation.

Open Settings > Profile > My chat links in Mobius to revoke your link. An organization admin can also revoke a stale link under Chat links on the Slack account. Revocation stops further protected work and result delivery from that link. An email change does not transfer an existing link to another person. Revoked links are not automatically restored. Returning to the organization after leaving requires fresh manual linking; old queued requests and unanswered questions cannot regain access through a new link. Revocation cannot retract messages already delivered to Slack.

Supported workspace identities

Private DMs currently require an active ordinary member of the connected workspace. Guest users, Slack Connect identities, shared DMs, and Enterprise Grid identities are not supported by this private flow. An unlinked DM gets a notice about linking and no answer. Group DMs and channels follow Privacy in Slack.

If Mobius cannot verify the workspace, sender, or DM audience, protected work stops. Temporary Slack throttling may delay verification. A stopped request shows as failed in your conversation in Mobius. Check it before sending another request; completed actions are not automatically repeated.

Reply formatting and identity

Automatic assistant replies use Slack's native Markdown blocks for headings, lists, tables, quotations, and code. Code blocks retain their language. Images appear as labeled links. Each reply also includes readable text for notifications and screen readers, including table values and link destinations. Long answers arrive as numbered parts in the original conversation or thread.

Replies use the selected assistant's name when the app has the existing chat:write.customize permission. Slack still owns the installed app identity. This update does not add an assistant avatar or request new permissions.

Generated mention syntax is treated as literal text, and automatic link and media previews are disabled. An assistant's ordinary reply does not notify a person or everyone in a channel merely by including a Slack mention token. Explicit Slack posting actions remain a separate path.

If Slack explicitly rejects the native blocks, Mobius attempts that part once as plain text. Formatting may be reduced, but the content stays readable. A timeout or uncertain result does not trigger another post. Numbered parts make an incomplete long answer visible if later delivery fails.

Slack controls native Markdown availability and client presentation. Some installations may show reduced formatting.

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 turn.

Posting, updating, scheduling, deleting, reacting, uploading, and other Slack changes run without an automatic Mobius confirmation after the selected workspace connection and assistant grant are rechecked. The grant's result audience does not validate the destination channel. An ordinary reply on the bound Slack conversation follows the messaging path; it is not the same as an explicit slack.message.post tool call.

Events

slack.command
slack.event
slack.interactivity

Slack keeps the raw upstream event family behind slack.event. Use the payload fields in the event detail to tell one upstream event family from another.

Who can see a message decides where its event goes:

  • A message in a public channel reaches every waiting assistant, session subscription, and routine, and its body shows in the integration events list.
  • A message in a private channel or a group DM reaches only routines whose condition names that channel (meta.conversation_id == "C0123ABCD"). A routine it starts runs inside that channel and replies only there. The run doesn't appear in the routine's runs or counts for anyone, its owner included.
  • A DM reaches nothing outside the assistant's own conversation, routines included.

The integration events list shows the body only for public-channel messages. See Privacy in chat apps.

slack.interactivity, slack.command, and every other slack.event (edits, deletions, joins, reactions, and the assistant's own replies) follow the same rule, by the conversation they came from. An event that names no conversation, such as app_uninstalled, reaches nothing. Buttons and forms that Mobius itself posts, such as an approval or an account request, go straight to Mobius and never become events.

slack.interactivity normalizes common Block Kit fields so nothing downstream needs 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