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
| 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 Build > 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/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:
- Open a direct message with the installed Slack app and send
link. - 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.
- Approve the link in the browser. Copy the confirmation text shown there.
- Send
confirm <secret>as an ordinary message in the original Slack DM. Use the text from the browser, without a leading slash. - 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.
Revoke a link
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.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 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.interactivitySlack 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
- Send a scheduled summary with Morning brief to Slack.
- Route messages to assistants with assistant messaging.
- Use human gates from interactions.
- Manage workspace access in Connect accounts.
- See what stays in each chat in Privacy in chat apps.
- Inspect received events from source events.