Skip to main content

Slack Integration

Connect Slack to capture decisions from your team's conversations.

Features​

  • Real-time capture - @align to capture decisions instantly
  • Context extraction - Automatically includes surrounding conversation
  • Thread support - Capture decisions from threaded discussions
  • Discover - Scan historical messages for past decisions

Setup (Cloud)​

  1. Go to Settings → Integrations in Align
  2. Click Connect Slack
  3. Click Allow to authorize Align in your workspace
  4. Select which channels Align can access
tip

Start with a few channels and expand as your team gets comfortable.

Capturing Decisions​

Basic Capture​

Mention @align with the decision:

@align We decided to use PostgreSQL for the user service

With Context​

Include rationale for richer snapshots:

@align We're going with PostgreSQL instead of MongoDB.
Reasons:
- Need strong consistency for financial data
- Team has more Postgres experience
- Better tooling for our stack

In Threads​

Reply in a thread with @align to capture the full thread context:

Thread: "Should we use Redis or Memcached?"
Reply: @align Going with Redis for the pub/sub capabilities

Commands​

TriggerDescription
@align <decision>Capture a new decision
@align helpShow available commands
React with 📌 or 🔖Capture the message you reacted to. Works in any channel Align is in, with no per-channel setup. Workspace admins can change which emoji do this

Ambient suggestions - where Align notices a decision-shaped thread and offers an ephemeral "capture this?" prompt - are off by default and enabled per channel by an admin. Nothing is stored unless someone confirms. See Capture.

Best Practices​

  1. Be specific - Include the "why" not just the "what"
  2. Capture early - Don't wait until decisions are forgotten
  3. Use threads - Keeps decision context together
  4. Tag participants - Mention people involved in the decision

Permissions​

Connecting Slack asks for read scopes only. Align asks for a write scope later, when you switch on the feature that needs it, and the consent screen names that feature. The lists below are read from services/gateway/src/auth/connectorScopeSets.ts.

Read scopes (the first connect)​

ScopePurpose
channels:read, groups:readList public channels, and private channels the bot has been added to
channels:historyRead messages in public channels
channels:joinJoin the public channels you tick on first connect, so the first scan has something to read. Joining adds the bot as a member and writes no message
groups:historyRead messages in private channels the bot has been added to
app_mentions:readReceive the event Slack sends when someone mentions @Align
users:readMap Slack users to Align users
users:read.emailRead the email of the person who asks Align a question in chat, so the check runs as them
im:read, mpim:readTell a direct message or group DM apart before Align replies there
im:history, mpim:historyRead the DM or group DM that /align was run in
reactions:readReceive the reaction a channel uses to mark a thread as a decision, where that channel has opted in

Write scopes, one feature at a time​

FeatureScopes it addsWhat Align does with them
Replies and capture cards posted in Slack (slack_replies)chat:writeAnswer @Align and /align, post a capture card after a reaction, reply in a thread when a decision conflicts
Direct messages (slack_dm_digest)chat:write, im:writeOpen a direct message to send the weekly review list or a ratification request
The /align slash command and message shortcut (slack_slash_command)commandsLet Slack deliver /align and "Align this decision" to Align
An eyes reaction on a mention, so people know Align saw it (slack_seen_reaction)reactions:writePut an eyes reaction on a mention the moment Align sees it, before the reply is ready. Without it the reaction is skipped and the reply still arrives

Until a feature is on, Align does not post that kind of message. Slack itself refuses a post without chat:write, so a missing scope cannot be worked around.

Private channels are never joined, and the first-connect picker never lists them; Align reads one only if someone adds the bot to it, and asks before scanning it.

Existing workspaces keep what they granted. Only a new connect starts read-only. Slack only grants a newly added scope when the app is re-authorized, so switching a write feature on sends a workspace admin through the Slack install once more, and the consent keeps the scopes already granted. The Connectors page shows which write features are on.

app_mentions:read follows the same rule. A workspace that connected Slack before it was requested receives plain message events but not @Align mentions, so the bot never replies. Reconnect Slack in the Connectors page to grant it.

reactions:write is optional in practice. A workspace that connected Slack before it was requested still works: Align skips the eyes reaction it puts on a mention. Reconnect Slack in the Connectors page to get it.

Troubleshooting​

Align doesn't respond​

  • Ensure the Align app is installed in your workspace
  • Check that Align has access to the channel
  • Verify the bot is not muted

Missing context​

  • Align captures the last ~50 messages for context
  • Very long threads may be truncated
  • Private channels require explicit access

Self-Hosted Setup​

On Align cloud, Align's OAuth app is used. Self-hosted, you register your own Slack app. See OAuth apps.