> For the complete documentation index, see [llms.txt](https://docs.eesel.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.eesel.ai/integrations/communication/slack.md).

# Slack

Set up an AI agent for Slack. This Slack chatbot answers questions in the thread from your knowledge, links the source, and works your other apps from there. Set it up in the dashboard or with the ees

eesel's AI agent for Slack is an AI Slack bot your team @mentions in a channel or messages directly. It can also answer questions in channels it is in without being mentioned. It answers in the thread from your connected knowledge, with a link to the source, and it can also draft replies or do work in your other apps from that thread.

Invite your AI teammate into Slack and it answers questions in the thread from your knowledge, with a link to the source. It keeps answering follow-ups in that thread without being mentioned again. From the same thread it also does work in your other integrations, such as looking things up and drafting replies. It is not Slack AI, which is Slack's own built-in feature.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-3b1c450fb5e1cf0f0989c78362ebd3b1df2fff5f%2Fslack-hero.png?alt=media" alt="A Slack thread in #it-help where a teammate asks where the security incident runbook lives, and eesel answers in the thread with a link to the runbook"><figcaption><p>Your agent answering a question in a Slack thread, with a link to the source.</p></figcaption></figure>

{% hint style="info" %}
**Using Claude Code, Codex or Cursor?** Ask it to connect Slack with [eesel CLI](https://docs.eesel.ai/apis-and-developer-resources/cli). Point it to the [setup guide](https://docs.eesel.ai/getting-started/set-up-from-a-coding-agent).

**Using Claude.ai or ChatGPT?** Use the eesel connector (MCP). See [Claude and other assistants](/apis-and-developer-resources/use-eesel-from-claude-and-other-assistants.md) or [ChatGPT](/apis-and-developer-resources/use-eesel-from-chatgpt.md). If the eesel connector is already linked to the correct workspace, keep using it. For steps it cannot complete, use the dashboard.

**CLI details for your coding tool:** Run `npx @eesel/cli integrations connect slack`, add your knowledge sources and ask eesel to create an automation that replies to mentions. You still need someone to approve access and invite eesel to the channels you have agreed to use. Check the automation, then test an @mention and its answer in the thread, including its sources. You can also follow the dashboard steps below.
{% endhint %}

## Set up eesel in Slack

{% stepper %}
{% step %}

### Ask your agent to connect Slack

Open the chat in your dashboard and ask it to connect Slack. It posts an **Add to Slack** link for you to open and approve in the browser. It then waits for you to say it is done. Prefer to click? **Integrations > Slack** has the same **Connect** button.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-c04a1cc36dbc7243c0b546eeb85ef3826f94ce63%2Fslack-connect-chat.png?alt=media" alt="The dashboard chat where the user asks to connect Slack and the agent posts an Add to Slack link to open and approve in the browser"><figcaption><p>The agent posts the Add to Slack link in the chat.</p></figcaption></figure>
{% endstep %}

{% step %}

### Approve it in Slack

The link opens Slack's own permission screen. Pick the workspace, read the list of what the app can view and do, and click **Allow**.

Slack shows a notice saying the app is not approved by Slack. That is because eesel is not listed in the Slack Marketplace. It is not an error and it does not limit what the app can do.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-7ad344df7886604f9c2e9a1c711d0e9330ce09be%2Fslack-oauth-approve.png?alt=media" alt="Slack&#x27;s permission screen asking to allow the eesel AI app to access Slack, with a not-approved-by-Slack notice, a workspace picker, the permission list and an Allow button"><figcaption><p>Slack's permission screen, with the workspace picker and the permission list.</p></figcaption></figure>

A person approves this in the browser.
{% endstep %}

{% step %}

### Confirm the connection

Tell your agent in the chat that you approved it. It confirms the connection, names the person who approved it, and says how to reach it in Slack.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-ee797f6ff2c91ddf1d69f092894c01dbb9b77df1%2Fslack-connected-chat.png?alt=media" alt="The dashboard chat confirming Slack is connected by the person who approved it, with the agent explaining that anyone can mention it in any channel and suggesting a first question"><figcaption><p>The chat confirming Slack is connected.</p></figcaption></figure>

**Check it worked.** The left sidebar now lists Slack with your workspace name. From a terminal, `eesel status` lists the integration as connected.
{% endstep %}

{% step %}

### Check the workspace is on your agent

**Integrations > Slack** shows the connection as **Connected**, with your Slack workspace name. The **Automations** section lists two automations for this workspace, both switched on: the mention automation, and the one that answers channel messages without a mention. The **Actions** section shows the Read and Write action groups.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-6202b1bf0aa301c2c4ff2d989c26afc87c625547%2Fslack-integration-page.png?alt=media" alt="The Slack integration page in the eesel dashboard showing Connected with the workspace name, the mention automation switched on, and the Read and Write action groups"><figcaption><p>The Slack integration page, with the mention automation on and the action groups listed.</p></figcaption></figure>
{% endstep %}

{% step %}

### Ask it a question in a channel

Your teammate asks before it joins a channel. Right after you connect, it sends a direct message to whoever installed it, naming the public channels it would like to join and why. It joins only the ones you say yes to, then reads the most active of them to get to know your team. Naming a channel yourself, for example "read #support", counts as a yes. Private channels always need a person to run `/invite @eesel`.

Connecting turns on two automations. With the mention automation, anyone can mention your agent in a channel it is in and get the answer in the thread. With the channel message automation, it also replies in a thread to new messages it can help with, with no mention needed. See [Answering without a mention](#answering-without-a-mention). To change how it answers, ask in the dashboard chat. Direct messages need no mention. It has an App Home tab in Slack too.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-a8c3f41dea1c29d97232a68c59d5103886ad7365%2Fslack-knowledge-thread.png?alt=media" alt="A Slack channel where the eesel app has posted a short hello saying it can be mentioned in any channel or messaged directly, and a thread panel where it answers a teammate&#x27;s mention"><figcaption><p>The app's hello message, and its answer to a mention in the thread.</p></figcaption></figure>

**Check it worked.** Your **Automations** page lists both automations, switched on. From a terminal, `eesel automations` lists them as on.
{% endstep %}

{% step %}

### Ask it to do work in your other apps

Mention your agent and ask for a look-up in a connected store or helpdesk. It answers in the thread with what it found.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-ac7edd270c2ec8bf6b18fc2b95738fe61e31d140%2Fslack-action-lookup.png?alt=media" alt="A Slack thread where a teammate mentions eesel to list the newest tickets in the connected helpdesk, and the app answers with a numbered list of tickets"><figcaption><p>A look-up in another connected app, answered in a Slack thread.</p></figcaption></figure>

Ask it to draft a reply and the draft appears in the thread. It sits there until you tell it to send, and the thread says so.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-169d332c2b367840a95d44ee6acdf5f8cdba058e%2Fslack-action-draft.png?alt=media" alt="A Slack thread where the teammate asks for a draft reply and the app posts the full draft, ending with a line saying it will post it only when told"><figcaption><p>The draft waiting in the thread to be sent.</p></figcaption></figure>
{% endstep %}

{% step %}

### Approve it from the thread

Tell it to go ahead. If an action is waiting on a person, its approval card posts in the same thread. Each action gets its own card naming the integration, the action, the record it touches and the content. **Approve** and **Deny** decide it, and **Review in eesel** opens the same approval in the dashboard. Nothing runs until someone decides it.

Only people with edit rights in your eesel workspace can decide an approval, in Slack or in the dashboard.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-2a932b75433052f9bc4f6f72a8d6fc82270ff8f6%2Fslack-action-approval.png?alt=media" alt="A Slack thread with two approval cards from the eesel app, each listing the integration, the action, the ticket and the content, with Approve, Deny and Review in eesel buttons"><figcaption><p>One approval card per action, waiting in the thread.</p></figcaption></figure>
{% endstep %}

{% step %}

### Check the result in the app

Open the app the action ran in and look at the record. The reply is there as a public message, signed the way you asked for. Any tag it applied is on the record too.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-bc0b3cdfccb10633ff07c0ad288cdfcc9e900b65%2Fslack-action-result.png?alt=media" alt="A helpdesk ticket showing the public reply the agent posted after approval, with the applied tag visible in the ticket details"><figcaption><p>The approved reply and tag on the helpdesk ticket.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## Answering without a mention

New Slack connections get a second automation, **When someone posts in a channel eesel is in**. It is on by default. It lets your agent answer a question in a channel without anyone mentioning it.

* **Where it looks.** Only channels your agent is in. If you pick channels on the automation, only those.
* **What it answers.** A quick filter checks each message first. By default it lets through questions, requests and problems, and skips small talk and messages meant for someone else. You can change the filter's wording on the automation.
* **How it replies.** If your agent can help, it replies in a thread on the message. If it can't, it says nothing, and it posts no reaction or status first. Once it has replied, follow-ups in that thread work the same as after a mention.
* **One agent replies.** If several agents have this automation, only the newest one replies.

To turn it off, open the **Automations** page and pause **When someone posts in a channel eesel is in**. The mention automation keeps working. Connected Slack before this automation existed? Add it from the **Automations** page: pick Slack, then **Someone posts in a channel eesel is in**.

## Sources, triggers and actions

### Sources

Slack is a place your agent answers, not a knowledge source it indexes. Nothing in your Slack workspace is copied into eesel. Your agent searches messages live while it answers. Once it is in a channel it can read that channel's history, including messages from before it arrived.

Its answers in Slack come from what else you have connected. [Confluence](/integrations/knowledge/confluence.md), [Notion](/integrations/knowledge/notion.md) and [Google Drive](/integrations/knowledge/google-drive.md) are usually where the answers live. Your help center or website helps if people in Slack ask what customers ask. See [Integrations](/integrations/overview.md).

Search only ever covers channels your agent is in. Within those, it covers every public channel, plus the private channels the person asking is also in. Reading a channel's history also needs your agent to be in it.

Your agent also reads images attached to a mention, up to five of them.

### Triggers

Triggers are the Slack events an automation can run on:

| Trigger                                         | Fires when                                                                                                                                  | Best for                               | Key                     |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | ----------------------- |
| **When @eesel is mentioned in a channel**       | Someone mentions the eesel app in a channel it is in                                                                                        | Answering questions on demand          | `slack_eesel_mentioned` |
| **When someone posts in a channel eesel is in** | Someone posts in a channel it is in, without mentioning it. A filter checks the message first, and your agent replies only when it can help | Answering questions nobody aimed at it | `slack_channel_message` |

Slack has two triggers, and connecting turns both on. The trigger event is fixed when the automation is created. So a new automation is required for each different trigger event.

Each automation has three controls:

* **Channels.** A multi-select picker where you choose channels by name, or paste channel IDs. Leave it empty and the automation covers every channel your agent is in.
* **The instructions.** Describe in plain language the questions you want it to take and what to do with them, and it skips the rest.
* **Pause.** A switch that stops the automation. While it is paused your agent is silent in Slack.

**Several agents on one Slack workspace.** The Channels picker on each automation decides which agents are eligible in a channel. Where more than one is eligible, eesel picks from the question itself. When it is not sure, it posts a picker in the thread and you choose. The first agent to answer in a thread owns that thread from then on.

### Actions

Actions are what it can do:

|             | Action               | What it does                                                                                                  |
| ----------- | -------------------- | ------------------------------------------------------------------------------------------------------------- |
| **Respond** | Send Message         | Sends a message to a channel, a thread, or a person as a direct message, using Slack's own formatting         |
|             | Add reaction         | Reacts to a message with an emoji                                                                             |
|             | Edit message         | Changes a message your agent posted, to correct it. Only its own messages                                     |
|             | Delete message       | Deletes a message your agent posted, such as one sent by mistake. Only its own messages                       |
| **Manage**  | Join channel         | Joins a public channel with no `/invite` needed, after asking in the conversation first. Public channels only |
|             | List channels        | Lists the workspace's channels, flagging which ones your agent is in                                          |
| **Look up** | Look up user         | Finds a Slack user by email or name                                                                           |
|             | Read thread          | Reads a full thread, with each message marked as your agent's or someone else's                               |
|             | Read channel         | Reads the recent messages in a channel                                                                        |
|             | Search messages      | Searches past Slack messages live. Nothing is indexed                                                         |
|             | List channel members | Lists who is in a channel the person asking can see (team chats only)                                         |
|             | List files           | Lists files people shared in channels the person asking can see, newest first (team chats only)               |
|             | Read file            | Reads one shared file's details, and the text of a text file (team chats only)                                |
|             | Check presence       | Says whether someone is active or away in Slack (team chats only)                                             |
|             | Get message link     | Gets Slack's own link to a message                                                                            |
|             | Workspace info       | Gets the connected Slack workspace's name and domain                                                          |

You stay in control the whole way. Adjust your AI agent's access to knowledge and its action permissions to your liking. See [Actions and Approvals](/instructions-and-memory/actions-and-approvals.md).

People whose Slack email matches an editor or the owner of your eesel workspace can change eesel's setup from Slack, such as its instructions and automations. Everyone else can still ask it questions, and actions in your other apps follow their own permissions.

{% hint style="info" %}
**Search respects Slack's own permissions.** It covers the public channels your agent is in, and the private ones the person asking is in. So it cannot surface a private or customer channel to someone who is not in it. Slack does not let a guest into public channels on their own, so a guest only gets the channels they share with your agent. That holds in Slack and in the eesel dashboard. In the dashboard we match you to your Slack account by your email address. If you sign in to eesel with a different address, your private channels are left out, and your agent tells you why.
{% endhint %}

## Limitations

* **It only reads and posts where it is a member.** Private channels need a person to invite it.
* **Nothing from Slack is indexed.** It searches your Slack history live while it answers. The rest of its answers come from your other connected sources.
* **Two triggers.** Slack automations run on a mention, or on a new message in a channel your agent is in. Follow-ups in a thread it has answered need no new mention.
* **One Slack workspace, one eesel workspace.** A Slack workspace answers to the eesel workspace that connected it last. Connecting it from a second eesel workspace moves it there.
* **Up to five images per mention.** It reads images attached to a mention, up to five of them.
* **Older connections may lack newer permissions.** Reconnect to pick them up. See Troubleshooting below.

## Troubleshooting

<details>

<summary>Agent not responding to mentions?</summary>

Check the **Automations** page shows the mention automation on and not paused. Check your agent is in that channel. If the automation has channels picked, it only runs in those. Check the automation's instructions cover the questions you expect. Mention the app from Slack's autocomplete, since Slack matches mentions by user ID rather than by a typed name. Then open the **Activity** page in your dashboard, where every Slack run appears.

</details>

<details>

<summary>Agent replies to messages nobody asked it about?</summary>

That is the automation **When someone posts in a channel eesel is in**. On the **Automations** page, change its filter to say which messages to answer, pick the channels it covers, or pause it. Mentions still work while it is paused.

</details>

<details>

<summary>Agent can't post in a channel, or the wrong agent answers?</summary>

For a public channel, ask your agent to join it or run `/invite @eesel`. A private channel needs a person to invite it. If the wrong agent answers, check which channels each automation covers. The first agent to answer in a thread keeps it.

</details>

<details>

<summary>Search isn't finding a message?</summary>

A channel your agent is not in will not appear. Nor will a private channel the person asking is not in. A full member of your Slack workspace gets every public channel your agent is in, whether or not they have joined it themselves. A guest gets only the channels they share with your agent.

</details>

<details>

<summary>Message search, joining channels or reading files not working?</summary>

These need permissions added to the Slack app after some workspaces connected. An older connection keeps the permissions it was granted at the time. Disconnect Slack and connect it again to pick up the newer ones.

</details>

<details>

<summary>Slack says the app isn't approved?</summary>

That notice appears because eesel is not listed in the Slack Marketplace. It is not an error and it does not limit what the app can do. Continue with the approval.

</details>

## FAQ

<details>

<summary>How do I add an AI agent to Slack?</summary>

Connect Slack from the dashboard chat or **Integrations > Slack**, approve **Add to Slack** in your browser, and let it join your channels. Connecting turns on the mention automation and the channel message automation. Your team can then @mention the agent in any channel it is in, or message it directly. The steps are in [Set up eesel in Slack](#set-up-eesel-in-slack).

</details>

<details>

<summary>Does connecting Slack start answering questions automatically?</summary>

Yes, once your agent is in a channel. Connecting turns on the mention automation and the channel message automation, so it answers mentions and replies to messages it can help with. It joins only the public channels you say yes to, and a person has to invite it to a private one. You can pause either automation on the **Automations** page.

</details>

<details>

<summary>Can the Slack AI agent auto reply without being mentioned?</summary>

Yes. New connections have the automation **When someone posts in a channel eesel is in** switched on. It replies in a thread when a message in a channel it is in is something it can help with, and stays quiet otherwise. Inside a thread it has already answered, it picks up further messages on its own. Direct messages never need a mention. To answer only mentions, pause that automation on the **Automations** page.

</details>

<details>

<summary>Can I use the Slack AI bot for support?</summary>

Yes. It answers your team's questions from your help center, docs and files, and from the same thread it can look up tickets or orders and draft replies in your connected helpdesk or store. See [Internal operations](/use-cases/internal-operations.md) and [Helpdesk](/use-cases/helpdesk.md).

</details>

<details>

<summary>Can I connect Slack to Claude or ChatGPT?</summary>

Yes, through eesel. Once Slack is connected, you can talk to the same eesel agent from Claude, ChatGPT or Cursor, and it works with your Slack workspace too. See [Use eesel from Claude and other assistants](/apis-and-developer-resources/use-eesel-from-claude-and-other-assistants.md), [Use eesel from ChatGPT](/apis-and-developer-resources/use-eesel-from-chatgpt.md) and [Claude Code and MCP clients](/apis-and-developer-resources/claude-code-and-mcp-clients.md).

</details>

<details>

<summary>Does eesel index my Slack messages?</summary>

No. Nothing from Slack is copied into eesel. Your agent searches your message history live, only in channels it is in, and only in private channels the person asking is also in.

</details>

<details>

<summary>Which Slack channels can the eesel AI agent see?</summary>

Only channels it is in. It asks before joining a public channel, and a person has to invite it to a private one. When it searches, it covers the public channels it is in plus the private channels the person asking shares with it. A guest gets only the channels they share with it.

</details>

<details>

<summary>Do I have to name the Slack app "eesel" for mentions to work?</summary>

No. Slack matches mentions by the app's user ID, not by its display name. Mention it from Slack's autocomplete and it works under any name.

</details>

## Related pages

* [Internal operations](/use-cases/internal-operations.md) for the job your agent does for your team
* [Helpdesk](/use-cases/helpdesk.md) for the customer-facing work it can run from a thread
* [Actions and Approvals](/instructions-and-memory/actions-and-approvals.md) for choosing what your agent may do
* [Integrations overview](/integrations/overview.md) for how sources, triggers and actions fit together
* [Set up from Claude Code or the terminal](/getting-started/set-up-from-a-coding-agent.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.eesel.ai/integrations/communication/slack.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
