# Slack (https://test.sageox.ai/docs/integrations/slack)

# Slack

SageOx and Slack connect in four separate ways, and the word "connect" hides the question that matters: **who is granting what, and in which direction does data move?** One grant never implies another: a workspace admin publishing to `#decisions` doesn't let SageOx read your messages, and asking Slackbot a question doesn't let anyone else see your Slack.

```mermaid
graph LR
    subgraph you["You authorize"]
        direction TB
        SB["Ask Slackbot"]
        SR["Search your Slack"]
        SI["Sign in with Slack"]
    end
    subgraph admin["An admin authorizes"]
        PB["Post to channels"]
    end
    SX["SageOx"]
    SX -->|"your context, on ask"| SB
    SR -->|"your messages, per question"| SX
    SI -->|"identity only"| SX
    SX -->|"murals, join links"| PB
```

| Grant | Who authorizes | What moves | What SageOx keeps |
|---|---|---|---|
| **Post to channels** <br/>*Available* | A workspace admin, per team | SageOx → the channels you pick | A workspace credential, and your channel choices |
| **Ask Slackbot** <br/>*Coming soon* | You, inside Slack | Your SageOx context → Slackbot, only when you ask | The same per-user grant every AI tool gets |
| **Search your Slack** <br/>*Coming soon* | You | Your Slack messages → SageOx, per question, never stored | An encrypted credential, not the messages |
| **Sign in with Slack** <br/>*Coming soon* | You | Nothing. Identity only | A verified link between your two accounts |

<Callout type="info">
Personal grants ("You authorize") benefit only you and the AI tools you connected. The team grant benefits every coworker on that team, human and AI. Manage personal grants from [Settings → Connections](/settings/connections) and [Settings → Security](/settings/security); the team grant lives in the team's **Settings → Communication**.
</Callout>

## Post to channels

Your team already lives in Slack. Architecture calls happen in `#engineering`, roadmap trade-offs in `#product`, critique in `#design`, and the reasoning behind each one scrolls away by Friday. Linking a channel closes the gap between where the work is discussed and where it's remembered.

{/* Asset is published as `docs/integrations/communication-slack-channels`
    (@sageox/assets 0.1.16). Add `id="docs/integrations/communication-slack-channels"`
    once the monorepo's @sageox/assets pin can be bumped off 0.1.10 — blocked on a
    read:packages grant for the local npm token. */}
<ScreenFrame
  alt="The Where SageOx is section of team Settings → Communication, expanded to show a connected Slack workspace and its two channels."
  caption="Settings → Communication. Each place carries its own row; expanding a workspace shows every channel SageOx is in, what publishes there, and what it can read."
/>

**This grant is one direction: publish only.** SageOx pushes knowledge *out* to Slack; it does not read your Slack conversations back *in*. Reading channels is designed but not built, and the settings page above says so on its face rather than hiding it.

### What gets published

Four kinds of post, and nothing else. Each one is something you choose per channel.

| What lands in the channel | When |
|---|---|
| **Discussion murals** | The mural from each discussion, posted when it wraps. |
| **Live discussion started** | A join-now link — posts every time a discussion starts. |
| **Team murals** | A nightly mural of what moved on the team. |
| **Coworker joined** | A welcome note when a new coworker joins the team. |

Raw transcripts, recordings, and full distillations are never posted to Slack. A mural carries the distilled takeaway as a picture, with a link back to the discussion for anyone who wants the detail.

### Set up

<Steps>

<Step>
#### Open your team's communication settings

Go to **Settings → Communication** for your team. The **Where SageOx is** section lists every place SageOx can take part in.
</Step>

<Step>
#### Connect your workspace

Click **Connect** on the Slack row and authorize SageOx. This installs the SageOx app into your workspace so it can post to the channels you choose. It does **not** read your workspace's messages.

Slack shows **"App is not approved by Slack"** on the install screen. That appears for every app not yet listed in the Slack Marketplace, ours included. Nothing is broken.
</Step>

<Step>
#### Pick the channels and what goes in each

Right after you connect, the list of your workspace's public channels opens — pick one (private channels aren't listed yet, see below). Adjust its chips to choose what posts there, and use **Add channel** on the Slack row to add more. Two channels is the shape most teams settle on: a high-signal `#discussions` for discussion murals and join links, and an ambient `#status` for nightly team murals and welcomes.
</Step>

<Step>
#### Confirm it's working

For an instant check, open a channel's **⋯** menu and choose **Send test message** — it posts a real message so you can confirm murals will land. Beyond that, the next discussion posts its join link as it starts and its mural when it wraps. No bot to babysit.
</Step>

</Steps>

## What the controls do

The page answers two questions with opposite shapes, so it is two lists, not one.

- **What SageOx posts** — short and enumerated. One row per kind of post, showing which channels receive it. Use this when you're thinking *"where do nightly murals go?"*
- **Where SageOx is** — unbounded. One row per place, with its channels collapsed underneath. Use this when you're thinking *"what is SageOx doing in `#status`?"*

Both lists edit the same underlying routing, so a change in one shows up in the other immediately.

### Passive and active

Every place is scored on one ladder, from passive to active. The columns are the same for Slack, Zoom, and anything else SageOx takes part in.

```mermaid
graph LR
    P["Posts<br/>SageOx publishes"] --> L["Listens<br/>SageOx reads the room"]
    L --> J["Joins in<br/>SageOx replies"]
```

For Slack today:

| Control | State | What it means |
|---|---|---|
| **Posts** | Available | SageOx publishes the four kinds above into channels you pick. |
| **Listens** | Coming soon | SageOx doesn't read channel messages yet. |
| **Joins in** | Coming soon | SageOx doesn't reply in channels yet. |

<Callout type="info">
A dashed control is a promise about the shape of the page, not about a date. Nothing in SageOx reads your Slack messages today, and the settings page will never let you turn on something that doesn't exist.
</Callout>

### Per-channel controls

Click the channel count on the Slack row — for example, *"2 channels · 2 posting"* — to expand the list of channels SageOx is in.

- **The chips** are what publishes here. Add one with **+ Add**; remove one with its ✕. A channel always keeps at least one chip — to stop a channel entirely, use the switch instead.
- **Posts** is a pause. Turning it off stops publishing to that channel and keeps every chip exactly as you left it, so turning it back on needs no re-setup. Pausing is not unrouting.
- Each channel's **⋯** menu has **Send test message**, which posts a real message so you can confirm murals will land, and **Stop posting here**.

The **Posts** cell on the Slack row itself is a readout of that summary, not a master switch. There is no workspace-wide kill switch by design: a master switch ANDed with per-channel switches is how a team ends up connected, apparently enabled, and silently posting nothing. To stop everything, disconnect the workspace from its **Settings** page — that forgets its channel choices, so reconnecting starts over.

### Public channels only, for now

**The Add channel list shows public channels only, and SageOx joins one on its own — there is nothing to do.**

**Private channels are not supported yet.** They do not appear in the picker, and inviting SageOx does not change that: SageOx never asks your workspace for permission to see private channels, so it cannot list them. Supporting them means requesting an additional Slack permission and every connected workspace re-authorizing, which is why it is a deliberate future step rather than a setting.

<Callout type="warn">
If a channel row ever warns that **SageOx isn't in this channel yet**, run `/invite @SageOx` there. That warning means SageOx could not confirm its own membership, and it matters more than it looks: Slack lets an app post **text** into a channel it can see, while posting an **image** requires real membership. So join links would keep arriving while murals silently dropped. If murals are the one thing missing from a channel, this is the first thing to check.
</Callout>

## Ask Slackbot

**Coming soon.** Slackbot, Slack's built-in AI assistant, will connect to SageOx and answer _"what did we decide about X?"_ or _"who should I ask about Y?"_ from your team's discussions, decisions, and sessions without leaving Slack.

It will connect the same way Claude and ChatGPT do, with a grant that's yours alone: Slackbot will see exactly what you can see in SageOx, and nothing more. Answers will come back to you, in your own Slackbot conversation; posting one into a channel will be your call, the same as pasting an answer from any AI tool.

## Search your Slack

**Coming soon.** When you connect your own Slack account, SageOx will be able to include the messages you already have access to when answering your questions, in any AI tool you've connected. Searches will run under your credential at the moment you ask; SageOx will keep the credential, never the messages.

## Sign in with Slack

**Coming soon.** You'll be able to sign in to SageOx with the Slack account you already use, with no new password. Signing in will also record a verified link between your Slack and SageOx identities, which is how AI coworkers attribute your contributions correctly, and it grants nothing else.

## What's next

- [All integrations](/docs/integrations): the other places SageOx takes part in.
- [MCP overview](/docs/mcp): how AI tools, including Slackbot, connect to SageOx and what they can do.
- [Team Context](/docs/features/team-context): where the knowledge SageOx publishes to Slack comes from.
