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

# Slack

> Connect your agents to Slack for real-time communication

Slack lets you communicate with your agents directly — assign work, ask for status updates, or get notified about progress. Each agent gets its own Slack app so messages show up under the agent's name.

## What You Need

Each agent needs two tokens:

* **Bot Token** (`xoxb-...`) — lets the agent read and send messages
* **App Token** (`xapp-...`) — enables Socket Mode for real-time communication

<Note>
  Slack integration is optional. Without it, agents can still work through Linear and GitHub but won't be able to communicate with you in real time.
</Note>

## Step 1: Create a Slack App

Repeat this for each agent (Juno, Titus, Scout).

1. Go to [api.slack.com/apps](https://api.slack.com/apps)
2. Click **"Create New App"** > **"From a manifest"**
3. Select your workspace
4. Paste the manifest for the agent you're setting up (expand below)

<Tip>
  Use the Slack app manifests below for each agent. Copy and paste them during app creation.
</Tip>

### Slack App Manifests

<AccordionGroup>
  <Accordion title="Juno — Product Manager">
    ```json theme={null}
    {
      "display_information": {
        "name": "Juno (PM)",
        "description": "Slack connector for OpenClaw"
      },
      "features": {
        "bot_user": {
          "display_name": "Juno",
          "always_online": false
        },
        "app_home": {
          "messages_tab_enabled": true,
          "messages_tab_read_only_enabled": false
        },
        "slash_commands": [
          {
            "command": "/openclaw",
            "description": "Send a message to OpenClaw",
            "should_escape": false
          }
        ]
      },
      "oauth_config": {
        "scopes": {
          "bot": [
            "chat:write",
            "chat:write.customize",
            "channels:history",
            "channels:read",
            "groups:history",
            "groups:read",
            "groups:write",
            "im:history",
            "im:read",
            "im:write",
            "mpim:history",
            "mpim:read",
            "mpim:write",
            "users:read",
            "app_mentions:read",
            "reactions:read",
            "reactions:write",
            "pins:read",
            "pins:write",
            "emoji:read",
            "commands",
            "files:read",
            "files:write"
          ],
          "user": [
            "channels:history",
            "channels:read",
            "groups:history",
            "groups:read",
            "im:history",
            "im:read",
            "mpim:history",
            "mpim:read",
            "users:read",
            "reactions:read",
            "pins:read",
            "emoji:read",
            "search:read"
          ]
        }
      },
      "settings": {
        "socket_mode_enabled": true,
        "event_subscriptions": {
          "bot_events": [
            "app_mention",
            "message.channels",
            "message.groups",
            "message.im",
            "message.mpim",
            "reaction_added",
            "reaction_removed",
            "member_joined_channel",
            "member_left_channel",
            "channel_rename",
            "pin_added",
            "pin_removed"
          ]
        }
      }
    }
    ```
  </Accordion>

  <Accordion title="Titus — Engineer">
    ```json theme={null}
    {
      "display_information": {
        "name": "Titus (Engineer)",
        "description": "Slack connector for OpenClaw"
      },
      "features": {
        "bot_user": {
          "display_name": "Titus",
          "always_online": false
        },
        "app_home": {
          "messages_tab_enabled": true,
          "messages_tab_read_only_enabled": false
        },
        "slash_commands": [
          {
            "command": "/openclaw",
            "description": "Send a message to OpenClaw",
            "should_escape": false
          }
        ]
      },
      "oauth_config": {
        "scopes": {
          "bot": [
            "chat:write",
            "chat:write.customize",
            "channels:history",
            "channels:read",
            "groups:history",
            "groups:read",
            "groups:write",
            "im:history",
            "im:read",
            "im:write",
            "mpim:history",
            "mpim:read",
            "mpim:write",
            "users:read",
            "app_mentions:read",
            "reactions:read",
            "reactions:write",
            "pins:read",
            "pins:write",
            "emoji:read",
            "commands",
            "files:read",
            "files:write"
          ],
          "user": [
            "channels:history",
            "channels:read",
            "groups:history",
            "groups:read",
            "im:history",
            "im:read",
            "mpim:history",
            "mpim:read",
            "users:read",
            "reactions:read",
            "pins:read",
            "emoji:read",
            "search:read"
          ]
        }
      },
      "settings": {
        "socket_mode_enabled": true,
        "event_subscriptions": {
          "bot_events": [
            "app_mention",
            "message.channels",
            "message.groups",
            "message.im",
            "message.mpim",
            "reaction_added",
            "reaction_removed",
            "member_joined_channel",
            "member_left_channel",
            "channel_rename",
            "pin_added",
            "pin_removed"
          ]
        }
      }
    }
    ```
  </Accordion>

  <Accordion title="Scout — QA Tester">
    ```json theme={null}
    {
      "display_information": {
        "name": "Scout (QA)",
        "description": "Slack connector for OpenClaw"
      },
      "features": {
        "bot_user": {
          "display_name": "Scout",
          "always_online": false
        },
        "app_home": {
          "messages_tab_enabled": true,
          "messages_tab_read_only_enabled": false
        },
        "slash_commands": [
          {
            "command": "/openclaw",
            "description": "Send a message to OpenClaw",
            "should_escape": false
          }
        ]
      },
      "oauth_config": {
        "scopes": {
          "bot": [
            "chat:write",
            "chat:write.customize",
            "channels:history",
            "channels:read",
            "groups:history",
            "groups:read",
            "groups:write",
            "im:history",
            "im:read",
            "im:write",
            "mpim:history",
            "mpim:read",
            "mpim:write",
            "users:read",
            "app_mentions:read",
            "reactions:read",
            "reactions:write",
            "pins:read",
            "pins:write",
            "emoji:read",
            "commands",
            "files:read",
            "files:write"
          ],
          "user": [
            "channels:history",
            "channels:read",
            "groups:history",
            "groups:read",
            "im:history",
            "im:read",
            "mpim:history",
            "mpim:read",
            "users:read",
            "reactions:read",
            "pins:read",
            "emoji:read",
            "search:read"
          ]
        }
      },
      "settings": {
        "socket_mode_enabled": true,
        "event_subscriptions": {
          "bot_events": [
            "app_mention",
            "message.channels",
            "message.groups",
            "message.im",
            "message.mpim",
            "reaction_added",
            "reaction_removed",
            "member_joined_channel",
            "member_left_channel",
            "channel_rename",
            "pin_added",
            "pin_removed"
          ]
        }
      }
    }
    ```
  </Accordion>
</AccordionGroup>

5. Click **"Create"**

## Step 2: Get the Bot Token

1. In your new app's settings, go to **OAuth & Permissions**
2. Click **"Install to Workspace"** and approve
3. Copy the **Bot User OAuth Token** — it starts with `xoxb-`

## Step 3: Get the App Token

1. Go to **Basic Information** > **App-Level Tokens**
2. Click **"Generate Token and Scopes"**
3. Name it (e.g., `socket-mode`)
4. Add the scope: `connections:write`
5. Click **"Generate"**
6. Copy the token — it starts with `xapp-`

## Step 4: Add Tokens to `.env`

Add both tokens per agent to your `.env` file using the `<ROLE>_SLACK_BOT_TOKEN` and `<ROLE>_SLACK_APP_TOKEN` patterns:

```bash theme={null}
PM_SLACK_BOT_TOKEN=xoxb-XXXXXXXXXXXX
PM_SLACK_APP_TOKEN=xapp-XXXXXXXXXXXX
```

When you run `clawup deploy`, these are validated and stored encrypted in Pulumi config (e.g., `pmSlackBotToken`, `pmSlackAppToken`).

## How Agents Use Slack

Agents connect to Slack via **Socket Mode** — no public URLs or webhook endpoints needed. They can:

* Respond to DMs and mentions
* Post updates to channels
* React to messages
* Read channel history for context

### By Role

| Agent                | How They Use Slack                                                                            |
| -------------------- | --------------------------------------------------------------------------------------------- |
| **Juno** (PM)        | Reports progress, shares ticket breakdowns, responds to questions about priorities and status |
| **Titus** (Engineer) | Shares PR links, asks for clarification on requirements, reports blockers                     |
| **Scout** (QA)       | Reports test results, shares bug details, confirms fixes                                      |

<Tip>
  Juno treats Slack as the primary communication channel. If you want to give instructions or check on progress, message Juno directly.
</Tip>
