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

# Omni Slack Agent

> Ask data questions directly in Slack and get AI-powered answers, charts, and tables from your Omni semantic model.

<Note>
  See [Scheduling Slack deliveries](/share/deliveries/slack) and the [Slack AI integration](/integrations/ai/slack) for more information about other ways to use Slack with Omni.
</Note>

The Omni Slack Agent lets your team ask data questions directly in Slack. Users can DM the agent or `@Omni` it in any channel to get AI-powered answers from your semantic model without leaving Slack.

<h2 id="setting-up-the-omni-slack-agent">
  Setting up the Omni Slack Agent
</h2>

### Requirements

To configure the Omni Slack Agent for your organization, you'll need:

* A Slack workspace
* **Organization Admin** permissions in Omni
* An Omni organization with [AI features enabled](/ai/settings/features)
* At least one [topic](/modeling/topics) configured in your model

### Connecting Omni to your Slack workspace

<Steps>
  <Step title="Connect your Slack workspace">
    1. In Omni, navigate to **Settings > Integrations**.
    2. Click **Connect to Slack** and complete the Slack authorization flow.

    You'll be redirected back to Omni once the connection is established. Admins will receive a welcome message in Slack confirming the integration is active.

    <Tip>
      **Already connected for deliveries?** If your Slack workspace is already connected for [scheduled deliveries](/share/deliveries/slack), you'll see an option to upgrade the connection with additional permissions required by the Omni Slack Agent. Click **Reconnect** to authorize the expanded permissions.
    </Tip>
  </Step>

  <Step title="Verify the agent and introduce it to your team">
    After connecting, the agent will send you a welcome message in Slack confirming the integration is active. To help your team discover the Omni Slack Agent, we recommend using the workflow in the welcome message that will allow the agent to introduce itself in a public channel. You can see a preview of the message in the welcome message.

    <Note>
      Introducing the Omni Slack Agent in a public channel is the best way to drive broad awareness and encourage your team to connect their accounts and start asking questions.
    </Note>
  </Step>
</Steps>

### Configuring agent settings

<Note>
  **Organization Admin** permissions are required to modify integration settings in Omni.
</Note>

In Omni, navigate to **Settings > Integrations** and open the **Slack** tab to manage your integration's settings:

#### Default model

Defines the default model the agent uses when [answering questions](#ask-questions). Users will still be able to use other models they have access to.

<h4 id="admin-privacy-setting">
  Channel response privacy
</h4>

Restricts the behavior of how the agent's responses are shared within Slack channels and group direct messages. The **Require private responses** setting controls the default:

* **Disabled** (default) — Responses post to channel threads, unless the prompting user has [private channel responses configured](#omni-privacy).
* **Enabled** — Users always receive a private response and can choose to share it with the thread.

### Reconnecting the Slack integration

The **Reconnect** action in **Settings > Integrations > Slack** runs a fresh OAuth flow against your existing installation. Reconnect is non-destructive — it does not affect scheduled deliveries, per-user account links, or other Omni-side resources. Use it to:

* **Refresh an invalidated token** — If Omni's stored token stops working for any reason, run Reconnect to install a new one.
* **Upgrade an older install to support new features** — Some features added after your workspace originally installed Omni require additional Slack scopes (the Omni Slack agent is one example). Re-running OAuth grants those scopes.
* **Grant optional scopes you previously skipped** — If the installer opted out of an [optional scope](#optional-scopes) at install time and later wants to enable it, Reconnect re-runs the authorization screen so they can select it.

<Note>
  Reconnect can add scopes to your existing Slack installation, but it cannot remove ones that were previously granted — see [Changing scopes after install](#changing-scopes-after-install).
</Note>

<h3 id="changing-scopes-after-install">
  Changing scopes after install
</h3>

* **Adding scopes** — Use [Reconnect](#reconnecting-the-slack-integration) and select the additional scopes at Slack's authorization screen.
* **Removing scopes** — Requires a Slack workspace admin to uninstall and reinstall the Omni Slack app. Slack does not let an app remove a previously granted scope from an existing installation, so a full reinstall is the only way. See the procedure below.

#### Removing a previously granted scope

<Warning>
  **Do not click Disconnect in Omni when your goal is to change scopes.** [Disconnect](#disconnecting-the-slack-integration) deletes scheduled Slack deliveries and per-user account links. The flow below preserves them.
</Warning>

<Steps>
  <Step>
    Your Slack workspace admin uninstalls Omni from the Slack admin console. This removes the installation in Slack and invalidates Omni's stored token, but does not delete any deliveries, account links, or other resources in Omni.
  </Step>

  <Step>
    In Omni, navigate to **Settings > Integrations** and open the **Slack** tab. Because the token is no longer valid, you'll see an error state with a **Reconnect** action.
  </Step>

  <Step>
    Click **Reconnect** to run a fresh OAuth flow. Slack treats this as a new installation — no scopes carry over from the previous one — so select only the scopes you want at Slack's authorization screen.
  </Step>

  <Step>
    On confirmation, Omni stores the new token. Your scheduled deliveries, per-user account links, and other Omni resources from the previous installation are preserved.
  </Step>
</Steps>

### Disconnecting the Slack integration

<Warning>
  **Disconnect is destructive.** It deletes all scheduled Slack deliveries in your Omni organization, clears every user's Omni↔Slack account link, and stops the agent from responding in your workspace. If you only want to refresh the token or change scopes, use [Reconnect](#reconnecting-the-slack-integration) or the [scope-change procedure](#changing-scopes-after-install) instead.
</Warning>

To remove the Slack integration from Omni, navigate to **Settings > Integrations**, open the **Slack** tab, and click **Disconnect**. This:

* Deletes all scheduled Slack deliveries (channel and DM)
* Clears every user's Omni↔Slack account link — users will need to [reconnect their accounts](#connecting-your-omni-account) before they can interact with the agent again
* Stops the agent from responding to `@Omni` mentions, DMs, and `/omni` slash commands in your workspace

Disconnect does not uninstall the Omni app from your Slack workspace. To remove the app from Slack itself, a Slack workspace admin must uninstall it from the Slack admin console.

<h2 id="optional-scopes">
  Slack permissions
</h2>

When connecting Omni to your Slack workspace, your Slack workspace admin can deselect any of the **optional** scopes at Slack's authorization screen to install Omni with a reduced permission footprint. **Required** scopes cannot be deselected — opting out of them prevents the integration from working.

Omni's Slack integration is installed as a single app, so this scope selection applies to everything Omni does in Slack — agent mentions, slash commands, scheduled deliveries, link unfurling, and emoji reactions. Review the **Impact if removed** column below before deselecting any scope.

<Warning>
  Opting out of `channels:join` or the `files:*` scopes significantly changes how Omni behaves in Slack. Review the impact below before deselecting.
</Warning>

### Required scopes

These scopes are needed for the integration to function. They cannot be opted out of without breaking core functionality.

| Permission                                                                          | How Omni uses it                                                                         |
| ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| [`app_mentions:read`](https://docs.slack.dev/reference/scopes/app_mentions.read/)   | Receives `@Omni` mention events                                                          |
| [`channels:read`](https://docs.slack.dev/reference/scopes/channels.read/)           | Reads public channel metadata                                                            |
| [`chat:write`](https://docs.slack.dev/reference/scopes/chat.write/)                 | Sends messages to Slack                                                                  |
| [`commands`](https://docs.slack.dev/reference/scopes/commands/)                     | Registers and handles `/omni` slash commands                                             |
| [`groups:read`](https://docs.slack.dev/reference/scopes/groups.read/)               | Reads private channel metadata (only channels Omni is a member of)                       |
| [`im:read`](https://docs.slack.dev/reference/scopes/im.read/)                       | Reads DM channel metadata                                                                |
| [`im:write`](https://docs.slack.dev/reference/scopes/im.write/)                     | Opens DM channels with users                                                             |
| [`links:read`](https://docs.slack.dev/reference/scopes/links.read/)                 | Reads URL metadata for unfurling Omni links in Slack                                     |
| [`links:write`](https://docs.slack.dev/reference/scopes/links.write/)               | Provides rich unfurl previews when Omni URLs are shared in Slack                         |
| [`reactions:read`](https://docs.slack.dev/reference/scopes/reactions.read/)         | Observes emoji reactions on messages                                                     |
| [`reactions:write`](https://docs.slack.dev/reference/scopes/reactions.write/)       | Adds and removes emoji reactions on messages                                             |
| [`team:read`](https://docs.slack.dev/reference/scopes/team.read/)                   | Reads workspace metadata to identify the workspace and display its name in Omni settings |
| [`users:read`](https://docs.slack.dev/reference/scopes/users.read/)                 | Resolves Slack user IDs to names                                                         |
| [`users.profile:read`](https://docs.slack.dev/reference/scopes/users.profile.read/) | Reads Slack profile metadata for users surfaced in Omni                                  |
| [`users:read.email`](https://docs.slack.dev/reference/scopes/users.read.email/)     | Resolves a Slack user to an Omni user by matching on email                               |

### Optional scopes

These scopes can be deselected at Slack's authorization screen. Omni recommends keeping all of them enabled for the best experience, but the **Impact if removed** column describes what changes if you opt out.

<Note>
  Slack OAuth scopes are additive within a single installation. To add a scope after install, use [Reconnect](#reconnecting-the-slack-integration). To remove a previously granted scope, a workspace admin must uninstall the Omni Slack app and reinstall it — see [Changing scopes after install](#changing-scopes-after-install) for the procedure that preserves your deliveries and account links.
</Note>

| Permission                                                                                                                                                                                                                                                                                                 | How Omni uses it                                                                                | Impact if removed                                                                                                                                                                                                                                                     |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`channels:join`](https://docs.slack.dev/reference/scopes/channels.join/)                                                                                                                                                                                                                                  | Auto-joins public channels so workspace members don't need to add Omni manually                 | **Scheduled deliveries to channels Omni isn't a member of will fail** until a workspace member adds Omni to the destination channel.                                                                                                                                  |
| [`files:read`](https://docs.slack.dev/reference/scopes/files.read/), [`files:write`](https://docs.slack.dev/reference/scopes/files.write/)                                                                                                                                                                 | Attaches dashboard screenshots, exports, and other files to messages Omni sends                 | Scheduled deliveries cannot include dashboard PDFs or PNGs — the delivery message links back to the source dashboard instead. Agent responses cannot include image or file attachments; users click **Open in Omni** to view visualizations or the full conversation. |
| [`channels:history`](https://docs.slack.dev/reference/scopes/channels.history/), [`groups:history`](https://docs.slack.dev/reference/scopes/groups.history/), [`im:history`](https://docs.slack.dev/reference/scopes/im.history/), [`mpim:history`](https://docs.slack.dev/reference/scopes/mpim.history/) | Reads Slack message history so the agent can use thread and conversation context when answering | The agent answers only from the prompting message and cannot pull context from earlier messages in channels, threads, DMs, or group DMs. Omni recommends building robust context directly in your semantic model rather than relying on conversational history.       |
| [`assistant:write`](https://docs.slack.dev/reference/scopes/assistant.write/)                                                                                                                                                                                                                              | Lets Omni act as a Slack AI assistant in Slack's native assistant-thread UI                     | Future Omni functionality that depends on Slack's native assistant integration will not be available.                                                                                                                                                                 |

## Connecting your Omni account

<Note>
  **This section applies to all users**, not only Slack admins. Every user who wants to interact with the Omni Slack Agent must connect their Omni account.
</Note>

Before you can ask questions, you'll need to link your Slack account to your Omni account:

<Steps>
  <Step noAnchor>
    Send a message to the Omni Slack Agent in a channel or DM by mentioning it with `@Omni`.
  </Step>

  <Step noAnchor>
    The agent will reply with a **Connect account** button.
  </Step>

  <Step noAnchor>
    Click the button and follow the prompts to link your Slack identity to your Omni account.
  </Step>
</Steps>

Once connected, you'll receive a confirmation message and a welcome message explaining what you can do with the Omni Slack Agent. The agent will also pick up your original question automatically.

<Tip>
  Use the [`/omni disconnect`](#omni-disconnect) slash command to disconnect your Slack account.
</Tip>

<h2 id="ask-questions">
  Asking questions
</h2>

You can interact with the Omni Slack Agent in three ways:

* **Direct message**: DM the Omni Slack Agent directly starting your request with `@Omni`.
* **`@mention` in a channel**: Type `@Omni` followed by your question in any channel.
* **Group DM**: To include the Omni Slack Agent in a DM with other people, you must start a new group DM with the agent as one of the participants — you cannot add it to an existing DM.

The agent responds with an answer that can include:

* **Text** — A written explanation or summary
* **Tables** — Tabular data rendered in Slack's Block Kit format
* **Open in Omni** link — Click to view the full result in Omni

<Tip>
  Response visibility depends on your organization's [privacy settings](#admin-privacy-setting), and [your own preferences](#omni-privacy) if user-controlled privacy is enabled.
</Tip>

### Follow-up questions

To ask a follow-up question, type `@Omni` followed by your question in the same Slack thread. The agent maintains conversation context within a thread, so you can refine results — add filters, change groupings, or drill into a metric.

### Providing response feedback

You can rate the quality of agent responses using the <Icon icon="thumbs-up" iconType="regular" /> and <Icon icon="thumbs-down" iconType="regular" /> buttons that appear on AI responses. Your feedback helps improve the accuracy and usefulness of future responses.

When you click the <Icon icon="thumbs-up" iconType="regular" /> button, a form opens where you can optionally share additional context about what worked well. You can also skip providing details and simply register the positive feedback.

When you click the <Icon icon="thumbs-down" iconType="regular" /> button, a form opens where you can select a category that describes the issue and optionally provide additional details. You can also skip providing details and simply register the negative feedback.

## Scoping responses

The Omni Slack Agent enforces the same permissions and model-level access controls as the rest of Omni. Each user's access in Slack mirrors their access in the Omni app — the agent can only query connections, models, topics, and fields that the user is already permitted to see, including any restrictions applied through [access grants](/modeling/develop/data-access-control), [user attributes](/administration/users/attributes), and [connection-level permissions](/administration/users/permissions).

The topics the Omni Slack Agent can use are controlled by the [`ai_chat_topics`](/modeling/models/ai-chat-topics) model parameter, which is also honored by the [Omni Agent](/ai/chat) and [embedded chat instances](/embed/customization/ai-chat).

## Using slash commands

The Omni Slack Agent supports slash commands as an alternative way to interact with the agent. All slash commands use the `/omni` prefix.

<h3 id="omni-omni-help">
  /omni or /omni help
</h3>

Shows a list of available commands. When you're connected to Omni, this displays the full command reference. If you're not yet connected, this shows a prompt to connect your account.

<h3 id="omni-ask">
  /omni ask \[question]
</h3>

Asks a question to the Omni Slack Agent. You can use this command in two ways:

* **With the `ask` keyword**: `/omni ask what was revenue last quarter?`
* **Without the `ask` keyword**: `/omni what was revenue last quarter?`

The agent posts your question to the channel or DM and responds in a thread, just like with `@mentions`. The response can include text, tables, and a link to open the full result in Omni.

<Note>
  If you use `/omni ask` while your account isn't connected, you'll see a prompt to connect. Unlike `@mentions`, the agent will not automatically resume your original question after you connect — you'll need to ask again.
</Note>

<h3 id="omni-model">
  /omni model
</h3>

Opens a menu to select your preferred Omni model. This is the model the agent will use when answering your questions.

* If your organization has multiple models, you'll see a dropdown to choose from
* If only one model is available, you'll see that model displayed
* If you don't have access to any models, you'll see a message asking you to contact your administrator

<h3 id="omni-privacy">
  /omni privacy
</h3>

Toggles whether your responses in channels are visible to everyone or only to you.

* If your administrator allows **user-level** privacy control, you'll see a checkbox to toggle private responses on or off
* If your administrator has enforced **workspace-level** privacy, you'll see a message indicating that privacy is managed by your administrator

<h3 id="omni-disconnect">
  /omni disconnect
</h3>

Disconnects your Slack account from your Omni account. You'll be asked to confirm before the disconnection is completed. After disconnecting, you'll need to reconnect to ask questions again.

## Next steps

* [Delivering content to Slack](/share/deliveries/slack) - Schedule automated dashboard deliveries to Slack channels
* [Omni Agent](/ai/chat) - Use the Omni Agent directly in the Omni app
* [Workbook Agent](/ai/queries) - Get AI help building queries in workbooks
