Slack
Outbound notifications.
The Slack integration enables workflows to send notifications to Slack channels when events occur: agent completions, incident escalations, deployment milestones, and custom alerts. This is a notification-only integration (no inbound Slack events).
What you can do
- Post messages to Slack channels
- Format messages with rich text, code blocks, and mentions
- Batch notifications from workflows and agent completions
- Status updates from incident handling and approvals
Connect Slack
Slack requires you to create a Slack app in your workspace, grant it the required scopes, and then paste the bot token into Rensei.
Create a Slack app
- Go to api.slack.com/apps
- Click Create New App → From scratch
- App Name: e.g., "Rensei Notifications"
- Workspace: select your workspace
- Click Create App
Grant bot token scopes
- In the left menu, click OAuth & Permissions
- Scroll to Scopes → Bot Token Scopes and add:
chat:write- post messages to channelsusers:read- look up user IDs for<@mention>formatting
- Click Save Changes
These are the minimum scopes. The users:read scope is optional but required if you use <@USERID> mentions in workflow messages.
Install the app to your workspace
- In the left menu, click Install App
- Click Install to Workspace
- Review the permission summary and click Allow
- Copy the Bot User OAuth Token - it starts with
xoxb-
The token is workspace-scoped and does not expire unless you explicitly revoke it.
Add the token to Rensei
- In Rensei, go to Settings → Integrations
- Select the Slack card
- Paste your Bot User OAuth Token (
xoxb-...) - Enter the default channel (e.g.,
#deploymentsoralerts) - Click Connect
The platform validates the token and confirms channel membership by calling conversations.info. If the bot is not yet in the channel, you will see a validation error - invite the bot first (step 5 below).
Invite the Rensei bot to your channels
For every channel Rensei will post to:
- Open the channel in Slack
- Type
/invite @Rensei Notifications(or whatever you named the app) - Confirm the invitation
Slack requires the bot to be a channel member before it can post. Rensei validates membership on connect and will report an error if the bot is not invited.
Credential summary
| Credential field | Value |
|---|---|
| Bot User OAuth Token | xoxb-... |
| Default channel | e.g., #deployments |
| Scopes required | chat:write, users:read |
| Stored | AES-GCM encrypted at workspace level |
Workflow nodes
Slack integration provides one primary workflow node:
| Node | Description |
|---|---|
slack.post | Post a message to a channel |
Post messages
Example: Notify on workflow completion
- id: notify_slack
type: slack.post
inputs:
channel: "#deployments"
message: |
Workflow completed successfully
Status: {{ $workflow.status }}
Duration: {{ $workflow.duration }}ms
threadTs: "{{ $trigger.slack_thread_id }}" # optional; reply in threadMessage formatting:
Use standard Slack message syntax:
*bold*- bold text_italic_- italic text`code`- inline code\``\nblock\n```- code block (use\n` for newlines in expressions)<@USERID>- mention a user (requires user ID, not name)<#CHANNELID>- mention a channel
Example: Rich formatted message
- id: post_alert
type: slack.post
inputs:
channel: "#alerts"
message: |
:warning: *High Priority Alert*
Status: `{{ $trigger.status }}`
Severity: *{{ $trigger.severity }}*
Details:
• Issue: {{ $trigger.issue_url }}
• Assigned: <@{{ $trigger.assignee_slack_id }}>
• Timeline: {{ $trigger.created_at }} → now
_Posted by Rensei_Message threading
To reply in an existing Slack thread, include the threadTs (thread timestamp):
- id: reply_in_thread
type: slack.post
inputs:
channel: "#alerts"
threadTs: "{{ $trigger.original_message_ts }}" # timestamp of the first message
message: "Agent response: {{ $steps.agent.output }}"Notifications from agent workflows
Agent completions can post a summary to Slack via the SDLC template or custom workflows:
steps:
# ... agent work ...
- id: notify_completion
type: slack.post
condition: "{{ $workflow.status == 'success' }}"
inputs:
channel: "#general"
message: |
:white_check_mark: Agent completed task
Issue: {{ $trigger.linear.issue.url }}
Agent: {{ $workflow.agent.name }}
Result: {{ $steps.agent.summary }}Credential and permissions
The Slack integration requires one credential:
- Bot User OAuth Token (
xoxb-*) - grantschat:writeandusers:readscopes
The token is stored encrypted at the workspace level. All workflows in the organization share the same token.
For multi-workspace setups, create one integration per workspace and reference it by name in workflow steps (advanced; not yet fully supported).
Cost and rate limits
Slack's API has rate limits (100+ requests/second per workspace for messaging). Rensei batches notifications intelligently, so typical workflows will not exceed this.
Cost is zero - Slack includes API calls in your workspace plan.
Troubleshooting
"Channel not found"
- Ensure the channel exists and is spelled correctly (e.g.,
#alertsoralerts) - Verify the Slack app has been invited to the channel:
- Go to the channel in Slack
- Click the channel name → Integrations
- Verify "Rensei" is listed
"Authentication failed"
- Verify your Bot User OAuth Token is still valid
- Check the token has not been revoked in Slack
- Re-authorize in Settings → Integrations
"Permission denied"
- Ensure the token has
chat:writescope - Re-install the app to your workspace in Slack
Limitations
- Incoming webhooks: Rensei cannot receive Slack messages or events (one-way integration)
- Slash commands: Not supported (would require command infrastructure)
- File uploads: Not currently implemented (messages only)
- Thread tracking: You must manually pass
threadTsto reply in a thread; the integration does not auto-track threads
For more advanced Slack automation, consider building a custom workflow step or using Slack's Workflow Builder to trigger Rensei workflows.
Next steps
- Workflow steps - Integrate Slack in multi-step workflows
- SDLC notifications - Set up automatic notifications on agent events
- Incident.io - Combine with incident management