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

# Follow workflow runs in Slack

> Choose a Slack channel for a goal so each run opens a thread there, and approve changes from the thread

A goal can post its runs to a Slack channel. Each run opens a thread, so your
team watches progress and answers approvals without opening CostGraph. A
thread opens when a goal's first run starts after you create it, and when you
start a run with **Run now** in the app or over the API. Scheduled runs,
retries, and runs you continue with new guidance don't open a new thread.

You need the [CostGraph Slack app](/costgraph/slack/overview) installed in
your workspace. If you installed it before October 14, 2026, reinstall it from
the Slack integration page so CostGraph can list your channels and post in
public ones.

## Choose a channel

<Steps>
  <Step title="Open the goal">
    Create a goal, or edit an existing one.
  </Step>

  <Step title="Pick a channel">
    Select a channel in **Slack channel**. The list shows every public
    channel and the private channels CostGraph is in. Leave it empty to turn
    Slack updates off.
  </Step>

  <Step title="Invite the app to private channels">
    To use a private channel, open it in Slack and run `/invite @CostGraph`,
    then reload the goal form.
  </Step>
</Steps>

The channel applies to every run of the goal. If Slack isn't connected, the
field links to the Slack integration page. A run started over the API can pick
a different channel for that run. See the [Workflows API](/costgraph/workflows/api#follow-in-slack).

Runs started from a Slack conversation with `@costgraph` already reply in
that conversation, and don't use the goal's channel.

## What the thread shows

When a run starts, CostGraph posts a message in the channel with the goal's
name, who started it, and a link to the run. The run's updates follow as
replies in that thread:

* A summary of each step as it finishes.
* A notice when the run is waiting for someone, with a link to the run.
* The final result.

The run's page in CostGraph shows the channel it posts to.

## Approve from the thread

When a run needs an approval, the thread shows **Approve** and **Deny**
buttons. Everyone in the channel sees them, and anyone can click one.

CostGraph then checks that the person who clicked is allowed to answer, using
the same rules as the app. See [Approvals](/costgraph/workflows/approvals).

* If they are allowed, CostGraph records the answer. The message changes to
  **Approved by** or **Denied by** with their name, and the buttons go away.
* If they haven't connected their Slack account to CostGraph, or can't answer,
  only they see a message saying they can't approve. The buttons stay for someone
  who can. To connect, send the app a direct message.
* If someone already answered, the person who clicked later sees a message
  saying it was answered.

An approval from Slack covers exactly the change shown in the thread, the same
as in the app. If the change has since moved on, the answer is refused and
nothing is applied.

## If CostGraph can't post

CostGraph can't post when the app was removed from the channel, the channel
was deleted, or Slack access was revoked. The run carries on without Slack
updates, and its page shows **Could not post updates to Slack**.

To fix it, reconnect Slack or invite the app back to the channel. New runs
then post again. A run that already stopped posting doesn't resume.

## Next steps

<CardGroup cols={2}>
  <Card title="Approvals" icon="circle-check" href="/costgraph/workflows/approvals">
    What an approval shows and who can answer.
  </Card>

  <Card title="Workflows API" icon="code" href="/costgraph/workflows/api">
    Set a channel when you start a run over HTTP.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.