> ## Documentation Index
> Fetch the complete documentation index at: https://docs.userepo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Slack

> Channels, threads, and permalinks. Public distribution — no app directory listing required.

## What's ingested

* Public channel messages (the bot must be added to the channel)
* Thread replies
* Channel metadata (name, topic)
* Message permalinks

## What's NOT ingested

* DMs (Repo deliberately excludes the `im:history` scope)
* Private channels the bot isn't a member of
* File contents (only the metadata + caption is captured)
* System events (joins, leaves, channel renames) — filtered out at ingest

## OAuth scopes requested

* `channels:read` — list public channels
* `channels:history` — read channel messages
* `users:read` — resolve user IDs to display names
* `groups:read` + `groups:history` — private channels the bot is invited to
* `links:read` — generate permalinks

## Connecting

1. In the Repo console, **Sources** tab → click **Connect** on Slack
2. Slack OAuth screen → pick the workspace → approve
3. After redirect, the connector is `pending` and the first sync queues automatically

## Channel allowlist

By default, Slack ingests every channel the bot is a member of. To limit ingestion to specific channels:

1. Open the connector card in the Sources tab
2. Click the channel picker
3. Toggle the channels you want — only the toggled-on ones are ingested

You can also set the allowlist programmatically — see [Sources API](/api-reference/sources).

## Sync cadence

Auto-sync runs every 15 minutes by default. The Slack connector uses a cursor-based sync — only new messages since the last cursor are fetched. A `fullResync` discards the cursor and re-ingests everything (use sparingly, large workspaces may hit Slack's rate limit).

## Limitations

* The bot must be **manually added** to each channel you want ingested (Slack's design — no global "read all channels" scope exists for public-distribution apps).
* Channel rename events don't auto-update the cached channel name until the next full resync.
* Message deletion is not yet propagated — deleted messages stay in Repo's memory until a manual resync.

## Where this gets cited

```
[1] Q3 OKRs — #leadership (Sam Rivera, 2 days ago)
    https://acme.slack.com/archives/C0123/p1716422400000123
```

Citations include the channel name, author, and Slack permalink so users can verify the source in one click.
