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

# Notifications & Slack

> Send Checksum events to your team's chat tools: health reports, bug changes, run completions, generated tests, and auto-heal updates. Slack, Microsoft Teams, Discord, and Google Chat are supported. In Slack, you can also mention @checksum to start test generation from a thread.

## At a glance

| You want to… | Use |
| - | - |
| Get health reports, bug alerts, run results, and auto-heal updates in a chat channel | [Notification connectors](#notification-connectors) for Slack, Microsoft Teams, Discord, or Google Chat |
| Start test generation from a Slack conversation | The [`@checksum` Slack bot](#slack-@checksum-bot) |

<div className="ai-ref">
  <Accordion title="Reference for AI: notifications at a glance" icon="robot">
    | Event name | Category | Fires when |
    | - | - | - |
    | `Health Report Ready` | Reporting | A health report is ready |
    | `Bug Detected` | Bug Tracking | A new bug is detected |
    | `Bug Status Changed` | Bug Tracking | A bug's status changes |
    | `Test Run Completed` | Test Runs | A test run finishes (carries `passed`, `failed`, `healed`, `bugs`, `skipped`, `total`) |
    | `Test Generated` | Test Generation | A test is generated |
    | `Auto-Heal Started` | Auto-Heal | A healing batch starts after a failing run |
    | `Auto-Heal Completed` | Auto-Heal | Every session in the batch reached a terminal state, or the batch failed |

    * Destinations: Slack (incoming webhook URL, or bot token with `chat:write` + channel name), Microsoft Teams (Workflows webhook URL), Discord (webhook URL), Google Chat (webhook URL).
    * Defaults: a new connector routes **no** events until they are enabled in the routing matrix. This includes Auto-Heal events.
    * Delivery rule: a connector receives an event only when both the connector and that event's routing rule are enabled.
    * Start generation from Slack: `@checksum <what to test>` in a thread. The whole thread becomes the agent's instructions.
    * Permissions: the workspace **admin** role is required to add connectors or install the Slack app.
  </Accordion>
</div>

<div className="part dev"><span className="part-icon">{"</>"}</span><div><div className="part-title">Developer guide</div><div className="part-sub">Chat-platform webhooks and tokens, the event reference, and <code>@checksum</code> usage</div></div></div>

## Get a webhook URL or bot token from your chat platform

The webhook URL or bot token comes from the **destination chat platform**, not from Checksum. Create it in Slack, Teams, Discord, or Google Chat, then paste it into the Checksum connector form ([Connector setup](#connector-setup)). The steps for each platform follow. Check each platform's official docs for the current UI.

<Tabs>
  <Tab title="Slack">
    Slack supports two setup methods. Use either one.

    #### Incoming webhook

    1. Go to [api.slack.com/apps](https://api.slack.com/apps) and create a new app (**From scratch**).
    2. Open **Incoming Webhooks** and toggle it **On**.
    3. Click **Add New Webhook to Workspace** and choose the channel.
    4. Copy the webhook URL (`https://hooks.slack.com/services/...`).

    #### Bot token

    1. Go to [api.slack.com/apps](https://api.slack.com/apps) and create a new app (**From scratch**).
    2. Under **OAuth & Permissions**, add the `chat:write` bot token scope.
    3. Click **Install to Workspace** and copy the **Bot User OAuth Token** (`xoxb-...`).
    4. In Slack, invite the bot to each target channel: `/invite @your-app-name`.
    5. In the Checksum connector, enter the token and the channel name.

    A webhook is quickest for a single channel. A bot token can post to any channel it's invited to.
  </Tab>

  <Tab title="Microsoft Teams">
    1. In Teams, open the target channel → **⋯** → **Workflows**.
    2. Add the **Post to a channel when a webhook request is received** workflow.
    3. Complete the steps and copy the generated webhook URL.
  </Tab>

  <Tab title="Discord">
    1. Open the target channel → **Edit Channel** → **Integrations**.
    2. Click **Webhooks** → **New Webhook**.
    3. Name it, optionally pick the channel, then **Copy Webhook URL**.
  </Tab>

  <Tab title="Google Chat">
    1. Open the target space → space name → **Apps & integrations**.
    2. Click **Manage webhooks**, add a webhook, and give it a name.
    3. Copy the generated webhook URL.
  </Tab>
</Tabs>

### Supported channels and credentials

| Channel | Setup |
| - | - |
| **Slack** | Incoming webhook URL, or bot token + channel name |
| **Microsoft Teams** | Incoming webhook URL |
| **Discord** | Webhook URL |
| **Google Chat** | Webhook URL |

You can have several connectors of the same type. For example, a `#qa-alerts` Slack channel for bugs and a `#release` Slack channel for run completions.

## What you can be notified about

Each connector subscribes to one or more event types, configured separately for each connector.

| Category | Events | Learn more |
| - | - | - |
| **Reporting** | Health Report Ready | [Feature Health Dashboard](/docs/health-dashboard) |
| **Bug Tracking** | Bug Detected, Bug Status Changed | [Feature Health Dashboard](/docs/health-dashboard) |
| **Test Runs** | Test Run Completed | [Results, Reports & Traces](/docs/results-and-reports) |
| **Test Generation** | Test Generated | [Generate Tests](/docs/generate-tests) |
| **Auto-Heal** | Auto-Heal Started (a healing batch starts after a failing run), Auto-Heal Completed (every session reached a terminal state, or the batch failed) | [Auto-Healing](/docs/auto-healing) |

<Note>
  **How Test Run Completed counts**

  **Test Run Completed** reports the run's outcome counts in five exclusive buckets: `passed`, `failed`, `healed`, `bugs`, and `skipped`. `total` is the sum of all five. Skipped tests count toward `total`, so a run that skips tests reports a `total` higher than the number of tests that actually ran.
</Note>

<Warning>
  **New connectors route nothing by default**

  No events are enabled when you create a connector. It stays silent until you turn events on in the routing matrix (see [Connector setup](#connector-setup), step 3). This applies to Auto-Heal events too.
</Warning>

<Tip>
  **Separate the noisy events**

  **Bug Detected** and **Test Generated** can fire often on an active project. Route them to a dedicated channel so they don't drown out rarer alerts like **Health Report Ready**.
</Tip>

Bug notifications include stable links to the bug's page in the web app, for example `https://app.checksum.ai/#/health-dashboard/bug/BUG-42`. To get a focused view (for example, Checkout vs Admin), segment health reports by **tags**.

<div className="ai-ref">
  <Accordion title="Reference for AI: notification events" icon="robot">
    | Event name | Category | Fires when |
    | - | - | - |
    | `Health Report Ready` | Reporting | A health report is ready |
    | `Bug Detected` | Bug Tracking | A new bug is detected (can be high volume) |
    | `Bug Status Changed` | Bug Tracking | A bug's status changes |
    | `Test Run Completed` | Test Runs | A test run finishes |
    | `Test Generated` | Test Generation | A test is generated (can be high volume) |
    | `Auto-Heal Started` | Auto-Heal | A healing batch starts after a failing run |
    | `Auto-Heal Completed` | Auto-Heal | Every session in the batch reached a terminal state, or the batch failed |

    | `Test Run Completed` count | Meaning |
    | - | - |
    | `passed`, `failed`, `healed`, `bugs`, `skipped` | Exclusive outcome buckets |
    | `total` | Sum of all five buckets. Skipped tests are included, so `total` can exceed the number of tests that actually ran. |

    * Subscriptions are per connector. Several connectors of the same type are allowed.
    * Bug notification link format: `https://app.checksum.ai/#/health-dashboard/bug/BUG-42`.
    * Health reports can be segmented by **tags**.
  </Accordion>
</div>

## Start generation by mentioning `@checksum`

When someone mentions `@checksum` in a channel where the app is installed:

1. Checksum reads the **thread context**: the mention plus recent messages in that thread.
2. A **generation agent session** starts against your Checksum project.
3. The bot replies in the thread with a link to track the session in the web app.
4. When generation finishes, the tests are delivered the same way as other generation flows. That's usually a PR to your tests repository, when the session has pull-request context.

```text Example mentions theme={null}
@checksum add E2E coverage for the new checkout discount flow

@checksum generate tests for the API changes we discussed above
```

The bot uses the whole conversation, not just the mention line, so thread replies before `@checksum` become part of the agent's instructions.

### @checksum usage tips

| Tip | Why |
| - | - |
| Mention `@checksum` in a **thread** | The thread history is sent to the agent as context |
| Be specific in the thread | "Add tests for guest checkout" works better than "add tests" |
| Track progress in the web app | The bot's reply links to the session. Sticky PR comments and auto-opened PRs only apply to PR-based generation (GitHub or API). A Slack-only mention starts a session from the thread with no source PR. |

<div className="ai-ref">
  <Accordion title="Reference for AI: @checksum Slack bot" icon="robot">
    | Item | Value |
    | - | - |
    | Syntax | `@checksum <free-text request>` in a channel where the Checksum app is installed and invited |
    | Context sent to the agent | The mention plus recent messages in the same thread |
    | Action | Starts a generation agent session against the Checksum project |
    | Reply | The bot replies in the thread with a link to the session in the web app |
    | Output | Delivered like other generation flows: a PR to the tests repository when the session has pull-request context, otherwise the tests stay in the session |
    | Not included | Sticky PR comments and auto-opened PRs apply only to PR-based generation (GitHub or API) |
    | Install | **Settings → Integrations → Slack card → Add to Slack** (workspace admin), then invite the app to channels |
    | Equivalent | `/checksum generate` on a GitHub pull request |
  </Accordion>
</div>

<div className="part ui"><span className="part-icon">▦</span><div><div className="part-title">In the Checksum web app</div><div className="part-sub">Connector setup, routing, and installing the Slack app</div></div></div>

## Two kinds of chat integration

| Integration | Direction | What it does | Where to set it up |
| - | - | - | - |
| **Notification connectors** | Checksum → chat | Posts platform events (health reports, bugs, runs, generation, healing) to a channel | **Settings → Integrations**, Notification Connectors section |
| **`@checksum` Slack bot** | Chat → Checksum | Starts a test-generation session from a Slack thread | **Settings → Integrations**, Slack card |

They're independent, so you can use both. Workspace **admin** role is required to configure either.

To turn bugs into Jira, Linear, or ClickUp tickets with two-way status sync, use [Issue Tracker Sync](/docs/issue-tracker-sync) instead. It's set up in its own section of **Settings → Integrations**.

## Notification connectors

### Connector setup

Connectors are managed in **Settings → Integrations**, in the Notification Connectors section. You need the workspace **admin** role to add, edit, or remove them.

<Steps>
  <Step title="Add a connector">
    Pick a channel type, give the connector a name (names must be unique in the workspace), and paste the webhook URL or bot credentials.

    <Warning>
      **Channel type is permanent**

      You can't change a connector's channel type after creating it. To move a connector to another platform, delete it and create a new one.
    </Warning>
  </Step>

  <Step title="Test the connection">
    Every connector has a **Send test notification** action that posts a sample message. Use it to confirm the connector works before relying on it.
  </Step>

  <Step title="Choose which events to route">
    Open the routing matrix and toggle each event on or off for each connector. A connector receives an event only when **both** the connector and that event's rule are enabled.
  </Step>

  <Step title="Enable or disable">
    You can pause a connector without deleting it. A disabled connector receives nothing, whatever its routing rules say.
  </Step>
</Steps>

The connector list shows a **Last used** timestamp for each connector, which is a quick way to confirm it's actually firing.

<Info>
  **Secrets are masked**

  After creation, webhook URLs and bot tokens are masked. Only the last few characters of a webhook URL are shown, and bot tokens are hidden entirely. When **editing** a connector, leave a secret field **blank to keep the existing value**. Only type in it to replace the secret.
</Info>

<Warning>
  **No undo**

  Deleting a connector is permanent and also removes its routing rules.
</Warning>

### Connector troubleshooting

| Symptom | Likely cause |
| - | - |
| Test notification fails | The webhook URL is wrong, revoked, or expired. Regenerate it on the chat platform and update the connector. |
| Test passes but no real notifications arrive | No events are routed yet. Check the routing matrix, since new connectors route nothing by default. |
| Nothing arrives, routing looks correct | The connector or the event's routing rule is disabled. Both must be enabled. |
| Slack bot connector fails | The bot isn't in the target channel (run `/invite @your-app-name`), or the token is missing the `chat:write` scope. |
| Teams connector stops working | Microsoft retired the legacy Office 365 connector. Recreate it with the **Workflows** option. |

## Slack @checksum bot

The **@checksum** Slack bot lets your team start **test generation** from Slack. It's the same capability as `/checksum generate` on a GitHub pull request, without leaving the channel.

### Install the Slack app

Requires workspace **admin** access.

<Steps>
  <Step title="Open the Slack card">
    In the [Checksum web app](https://app.checksum.ai), go to **Settings → Integrations** and find the **Slack** card.
  </Step>

  <Step title="Click Add to Slack">
    Complete the Slack OAuth flow and choose the workspace.
  </Step>

  <Step title="Invite the app">
    Invite the Checksum app to each channel where your team should be able to use `@checksum`.
  </Step>
</Steps>

Once connected, the settings page shows the connected **workspace name** and **team ID**.

<Warning>
  **Only your own workspaces**

  Install the bot only in Slack workspaces your organization owns. The bot can only see channels it has been invited to.
</Warning>

### Slack webhooks vs bot

| Style | Purpose | Setup |
| - | - | - |
| **Incoming webhook** (or bot token connector) | Outbound notifications only | [Notification connectors](#notification-connectors) |
| **@checksum bot** | Inbound `@mention` → generation | Settings → Integrations (Slack card) |

The bot doesn't replace notification connectors. Configure connectors separately for automated health reports, bug alerts, and run summaries. When both are set up, notification messages are formatted differently for each event type (health reports, bug detected, auto-heal batches, and so on), so you can tell them apart at a glance.

## Related

<CardGroup cols={2}>
  <Card title="Generate from Slack" icon="slack" href="/docs/generate-tests#mention-@checksum-in-slack">
    How a Slack thread becomes tests.
  </Card>

  <Card title="Feature Health Dashboard" icon="chart-line" href="/docs/health-dashboard">
    Where bug and health events come from.
  </Card>

  <Card title="Auto-Healing" icon="wand-magic-sparkles" href="/docs/auto-healing">
    The batches behind Auto-Heal events.
  </Card>

  <Card title="Security & Access" icon="shield-halved" href="/docs/security-and-access">
    Roles and what each integration can see.
  </Card>
</CardGroup>
