How it works.
The Slack integration is a workspace-installable app. Once the workspace admin installs it, every wrxstack workspace user who is also in the Slack workspace can opt in personally. The app reads from channels the user is in, posts on behalf of the user with their permission, and surfaces wrxstack actions inside Slack through slash commands, message shortcuts, and interactive blocks.
Channel ingest is opt-in per channel. The app reads new messages, attachments, and reactions on channels that an admin or channel member has marked for ingest. wrxstack indexes the content, links it to the work graph (a Slack thread becomes a referenceable node), and surfaces it in search and assistant context. Direct messages are never ingested unless a user explicitly forwards them to the wrxstack bot.
The assistant uses Slack as both an input and an output. Mentions of the bot in a channel are routed as conversation starters. Outbound, the assistant can draft a reply for the user in a Slack thread, propose a scheduled digest for a channel, or send a daily summary to a private DM. Every outbound message is gated on a confirmation unless the user has enabled a specific "auto" policy.
Setup steps.
A Slack workspace admin clicks "Add to Slack" and approves the twelve listed scopes. The app is now visible in the workspace.
In the wrxstack admin panel, paste the Slack workspace ID. wrxstack confirms the install and surfaces a permissions matrix for review.
Channel-by-channel toggle, or invite the bot to a channel to opt it in. Private channels require the channel owner to invite the bot.
Slack users are matched to wrxstack users by email. Mismatches surface in the admin panel for review. No write actions until mapping is confirmed.
/wrx, /wrx-task, /wrx-doc, /wrx-meeting, and /wrx-assistant are now available in every channel where the bot is invited.
In personal settings, each user picks which wrxstack events get DM'd to them. Defaults are conservative; the assistant respects them.
Example slash command (create a task)
# In any channel where the wrxstack bot is invited /wrx-task Review the renewed MSA from Acme, assign helena, due Friday # Slack posts a confirmation block back into the thread { "id": "tsk_01HQ8E...", "title": "Review the renewed MSA from Acme", "assignee": "helena@acme.com", "due": "2026-05-23", "link": "https://atlas.wrxstack.com/t/8E...", "source": "slack:C0941K2L9/p1748023820000200" }
Example block payload (assistant draft reply)
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Drafted reply* (review before sending)"
}
},
{
"type": "section",
"text": { "type": "plain_text", "text": "Thanks for the nudge. I've attached the updated proposal and will follow up on the open questions today." }
},
{
"type": "actions",
"elements": [
{ "type": "button", "text": { "type": "plain_text", "text": "Send" }, "style": "primary", "value": "send_draft_47a" },
{ "type": "button", "text": { "type": "plain_text", "text": "Edit" }, "value": "edit_draft_47a" },
{ "type": "button", "text": { "type": "plain_text", "text": "Discard" }, "value": "discard_draft_47a" }
]
}
]
} What it syncs.
| Surface | Direction | Cadence | Notes |
|---|---|---|---|
| channel messages | Slack → wrxstack | Real-time event | Opt-in per channel. Threaded messages preserve their thread context. |
| mentions of @wrxstack | Slack → wrxstack | Real-time | Treated as a conversation start with the assistant in that channel. |
| message shortcuts | Slack → wrxstack | On user action | "Create task from message", "Send to doc", "Ask the assistant". |
| slash commands | Slack → wrxstack | On user action | /wrx, /wrx-task, /wrx-doc, /wrx-meeting, /wrx-assistant. |
| notifications | wrxstack → Slack | Event-driven | Personal DMs by default. Channel posts require a confirmed channel route. |
| scheduled digests | wrxstack → Slack | User-defined | Daily, weekly, or custom cron. Each user picks delivery time and recipients. |
Security model.
The integration uses Slack's bot token and user-token OAuth flow with twelve scopes: app_mentions:read, channels:history, channels:read, chat:write, chat:write.public, commands, files:read, groups:history, groups:read, im:read, reactions:read, users:read. We do not request channels:write, groups:write, im:write, or any admin scope. The full scope list is shown to the admin during install, before approval.
Channel ingest is opt-in per channel and revocable per channel. Removing the bot from a channel stops ingest immediately and deletes that channel's indexed content within twenty-four hours. Workspace admins can revoke the app at any time from the Slack admin panel; we honor revocation within sixty seconds.
Slack signing secrets are stored encrypted with a per-tenant data key. Slack signature verification is enforced on every inbound webhook (we reject requests older than five minutes, regardless of timestamp). Outbound writes are signed on behalf of the user with their personal token only after they have authorized that scope; the bot token is used for the assistant's own messages.
Common use cases.
- Turn a Slack thread into a task.Right-click the message, pick "Create task in wrxstack". The thread URL becomes part of the task's source links, the original messages are preserved as context, and the assistant suggests an assignee based on participation.
- Draft replies for a busy thread.Tag the wrxstack bot in a thread with "summarize and draft a reply". The bot reads the thread, drafts a response in a private message to you, and waits for your edit and send.
- Daily digest of the work day.The assistant DMs each user a summary of decisions, assignments, and open threads. Configurable per user. Defaults to weekday mornings.
- Slash-command capture."/wrx-doc Capture this customer call as a sales note" creates a structured doc in wrxstack with the right tags and links it back into the channel.
- Incident broadcast.An on-call event posted to a status channel can be promoted to a wrxstack incident with a single button. The integration carries the channel link, the responders, and the timestamp into the audit log.
Troubleshooting.
- The bot does not respond when mentioned.The bot is not invited to that channel. In Slack, type /invite @wrxstack and try again. For private channels, a channel owner must invite the bot.
- Slash commands return "dispatch_failed".The Slack signing secret in the wrxstack admin panel does not match the active one in the Slack app config. Re-copy from Slack and save.
- User cannot send a draft reply.The user has not authorized chat:write on their personal token. Visit the wrxstack profile page in Slack and click "Reauthorize".
- Channel ingest stopped after a Slack workspace rename.Slack workspace ID is stable, but cached channel names can drift. In the wrxstack admin panel, click "Refresh channel inventory".
- Audit log shows duplicate events.Slack retries webhooks aggressively. We deduplicate by event ID inside a five-minute window. If you see duplicates beyond that window, file a ticket and include the channel and timestamp.