/agents/:agentId/slack) or a router’s (/routers/:agentId/slack),
in the sidebar group Settings under Slack Users (/settings/slack-users) and Slack
Groups (/settings/slack-groups, /settings/slack-groups/:groupId), and the workspace
connection under Settings -> Integrations (/integrations). Who may talk to an agent is set
on its Access tab (/agents/:agentId/access), described in Agents.
What it does
- Workspace connection. A company saves Slack app configuration tokens
(
saveSlackConfigTokens,testSlackConfigTokens); with them Olyros can create apps programmatically.disconnectSlackWorkspaceremoves the workspace and clears the stored Slack team, so the company can later connect a different workspace. - One Slack app per agent or router.
POST /api/slack/agents/{agent_id}/create-appbuilds the app from a manifest and installs it through Slack OAuth (GET /api/slack/oauth/callback);.../reinstallre-applies the manifest, andupgradeSlackAppHomeManifestsupgrades pending App Home manifests (all, or one agent). The install link carries a signed state that expires after 600 seconds and is checked before Olyros talks to Slack: the person who started it must still be a company member, and an install into a different Slack team than the connected workspace is refused (“This Slack app was installed into a different Slack workspace than the one connected to this company.”). An expired link shows “This Slack link expired. Open the agent’s Slack page and click Re-authorize.” TheAgentSlackConnectionholds the app id, bot user, encrypted bot credentials, display name and the channel list (updateAgentSlackConnection).disconnectAgentFromSlackdetaches the app;slackCapableAgentslists agents eligible for Slack. - Routers. A router is an agent of kind
routerwith its own Slack app; it hands each person to the agent their route names, and replies, App Home buttons, questions and the busy prompt leave through the router’s bot (via_agent_idrecords the path). One app can therefore front many agents and sandboxes. Routes and defaults are documented in Routers, not here. - Channel list. A non-empty channel list limits the channels the bot answers in: a
mention in any other channel gets the ephemeral reply “I’m not enabled in this
channel.” and is not processed. Direct messages are not limited by the channel list;
the agent’s access list decides them. An empty list means every channel the bot is in.
Channel ids must be Slack channel ids (
C…orG…). The bot answers mentions only:trigger_modeaccepts onlymentions_only, andall_messagesis rejected. - Conversations. Slack events (
POST /api/slack/events) and interactive actions (POST /api/slack/interactions) are signature-checked and mapped to the company from the verified workspace before any handler runs, acknowledged within Slack’s budget and handled in the background; bot messages are ignored. Replies post as the agent’s own bot (or the router’s) and are threaded. Per agent,setSlackReplyOptionschooses a reply preset (final_replies_only,status_and_replies,verbose) or individual frames (container_notice,session_metadata,thinking,tool_call_summary,tool_call_arguments,tool_call_result,error_detail,invocation_metrics) and a rich-rendering preset (plain,standard,rich; togglesfinal_reply_tables,final_reply_markdown). - Outbound queue. Every message goes through
SlackOutboundMessage(pendingwith retries, attempts andnext_retry_at; long replies are split into chunks withchunk_sequence/chunk_total; files attached by id). A platform admin can inspect and requeue (/api/admin/slack-outbound/..., admin app/slack-outbound). A second message sent while the agent is still busy is not dropped: the person gets an ephemeral prompt with Wait or Stop & send, and the pending message moves throughawaiting_decision,queued_for_after,dispatchedorexpired. - Sandbox agents from Slack. App Home and message buttons drive sandbox lifecycle
actions
start,stop,rebuild,open_in_olyros,invocation_stopand rebuild confirmations; each click is logged with resultok,rejected_unauthorized,rejected_stateorerror. - Questions to people. When an agent asks a structured question
(
olyros_ask_user), it can be delivered as a Slack card; the click resumes the agent. Delivery channels areweb_chat,slack,text. - Slack users. The workspace user list is cached (
SlackUserCache: names, email, avatar, bot flag, last activity) and refreshed per agent (refreshSlackWorkspaceUsers) or registered by email (registerSlackUserByEmail). A cached person is linked to an Olyros user automatically when the Slack profile is trusted (home team of the installation, not a guest, email confirmed) and its email matches a verified Olyros email. Admins browse and export it (slackUsersPagewith search, linked filter and tags;slackUsersActivityExport), link a Slack person to an Olyros user (linkSlackUser,unlinkSlackUser), tag them for cost attribution (setSlackUserTags) and delete stale entries. - Slack groups and access. Groups (
createSlackUserGroup, add and remove members,addTaggedSlackUsersToGroupto build a group from a tag; originmanualortag, with an optional Slack usergroup id) are subjects of access grants. An agent’s Access tab (setAgentAccess) and a workflow’s Access table can list Olyros users, Slack users and Slack groups; an object with no grant is open to everyone, one with any grant only to the listed subjects, on the web and in Slack alike (see Agents). A Slack user also passes through the Olyros user it is linked to.deleteSlackUserGrouprefuses a group that any agent or workflow still grants, naming them. Admins audit who can reach which agent (slackAccessAuditAgents,slackAccessAudit);agentSlackStatsshows per-agent Slack usage. The pickers show only people from the currently connected workspace (slackUsersPage(currentWorkspaceOnly)); the Slack Users page shows every cached row. - Workflows. The
slack_messagenode posts to a channel or user as a chosen agent; see Workflows.
Who can use it
Talking to an agent in Slack is decided per agent by its Access table (ability
agent.chat), not by role. The abilities and their roles are listed under Settings ->
Roles (/settings/roles). No plan or tier gate.
How to configure it
- Settings -> Integrations -> Slack: paste the app configuration access and refresh
tokens from Slack’s app settings (
saveSlackConfigTokens) and test them. - On an agent’s Slack tab (
/agents/:agentId/slack), Create app (POST /api/slack/agents/{agent_id}/create-app) and approve the install in Slack within ten minutes; then optionally list the channels it may answer in (updateAgentSlackConnection) and choose the reply and rich presets (setSlackReplyOptions). To serve many agents through one app, create a router under Agents -> Routers (/routers) and do this on the router’s Slack tab instead (Routers). - Invite the bot to the channels you listed.
- Settings -> Slack Users (
/settings/slack-users): refresh the directory, link people to Olyros users, tag them; Settings -> Slack Groups (/settings/slack-groups): build groups. - On the agent’s Access tab (
/agents/:agentId/access,setAgentAccess) list the Olyros users, Slack users or Slack groups who may talk to it, then review the access audit. - After a manifest change, run the App Home upgrade (
upgradeSlackAppHomeManifests).
Limits and defaults
What it emits
- Agent conversations and tool activity rendered in Slack threads, per the reply options.
- Outbound message rows (status, attempts, chunks, posted timestamps) and pending message rows; processed-event records for dedup.
- Lifecycle action logs for sandbox buttons; HITL requests and answers.
- Slack user and group tables used by access control and cost attribution.
Known gaps
- Everything is per workspace; a company cannot connect two Slack workspaces at once.
- The bot cannot listen to every message in a channel; there is no all-messages mode and only mentions and DMs reach the agent.
- Access audit and user management are admin-only and app creation needs an editor, but the workspace tokens and disconnecting a workspace or an agent’s app are open to any member.
- There is no Slack trigger node for workflows; Slack starts agents, and agents can
start workflows through the
api_triggertools. - Automatic linking needs a matching verified email; there is no matching by SSO identity, and guests or Slack Connect users are never linked automatically.