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

# dbt™ impact assessor

> Build a DinoAI agent that maps downstream models and exposures of a changed dbt™ model, flags breaking-change risk, and posts an impact report to Slack.

The dbt™ impact assessor is a DinoAI agent that answers the question every reviewer asks before approving a model change: what breaks downstream? Given a model name, it walks the dependency graph, reads the SQL of every directly downstream model, checks which exposures (dashboards, reverse ETL) consume the affected columns, and posts a structured impact report to Slack with the highest-blast-radius consumers at the top.

<Note>
  **Prerequisites**

  * [Slack connected](/integrations/slack) (the agent posts the impact report via `post_slack_message`).
  * Bolt runs producing dbt™ artifacts, which power the [dbt Discovery tools](/products/dino-ai/tools-and-features/dbt-discovery-tools) the agent uses for lineage and exposures.
  * Familiarity with [programmable agents](/products/dino-ai/programmable-agents/index) and [running an agent with Bolt](/guides/programmable-agents/run-an-agent-with-bolt).

  Estimated time: 15 minutes.
</Note>

## Steps

<Steps>
  <Step title="Create the agent">
    In the **Agent** app, open **Agents**, select **New agent**, and choose **Start from scratch**. Fill in the builder fields below, leave **Model** on **Auto**. See [Build an agent in the UI](/guides/programmable-agents/build-in-the-agent-ui) for a tour of the builder.

    **Name**: `impact-assessor`

    **Role**:

    ```text theme={"system"}
    dbt Lineage Impact Analyst with deep knowledge of column-level lineage
    and exposure mapping.
    ```

    **Goal**:

    ```text theme={"system"}
    For the model named in the trigger message, enumerate every downstream
    dbt model and exposure. Use get_lineage (direction: downstream) for
    the model graph and get_exposures for the dashboards, apps, and
    reverse ETL syncs that consume it, then read the source SQL of each
    directly downstream model to see exactly which columns it selects.
    Highlight any breaking-change risk: column removals, type changes,
    and downstream models that select the affected columns explicitly.
    Post a structured impact report to Slack.
    ```

    **Backstory**:

    ```text theme={"system"}
    You are exhaustive. You read the source SQL of every directly
    downstream model — never assume "it's just a passthrough" without
    checking. You always show the exposure consumers (BI dashboards,
    reverse ETL) at the top of the report, since those are the ones that
    page people.
    ```

    **Allowed tools** (everything else is refused, see the [Tools Reference](/products/dino-ai/programmable-agents/tools-reference)):

    * `get_lineage`, `get_exposures`
    * `read_file`, `search_files_and_directories`, `ripgrep_search`
    * `run_sql_query`
    * `post_slack_message`

    **Output**: set the Slack channel where reviewers should see the reports (for example `#analytics-eng`).

    <Info>
      The agent is entirely read-only: it has no write or terminal tools, so it can never change the repo. `get_lineage` and `get_exposures` ([dbt Discovery tools](/products/dino-ai/tools-and-features/dbt-discovery-tools)) give it the real dependency graph from your Bolt runs' artifacts; reading the downstream SQL on top of that catches explicit column selections that graph-level lineage alone would miss.
    </Info>
  </Step>

  <Step title="Deploy the agent">
    Select **Deploy** and choose where the agent lives: **Just here** saves it to the workspace and makes it live immediately, **Open a pull request** commits it to your repo as `.dinoai/agents/impact-assessor.yml` so it is governed as code. Both appear in the Bolt agent picker. See [Creating Agents in the App](/products/dino-ai/programmable-agents/creating-agents-in-the-app).
  </Step>

  <Step title="Run it">
    The trigger message names the model, so the same agent serves two workflows:

    **Ad hoc, from Chat**: hover the agent card, select **Chat**, and ask:

    ```text theme={"system"}
    Assess the impact of changing fct_orders.
    ```

    **On every PR, from Bolt**: add a **Run Paradime DinoAI Agent** command to a Bolt schedule triggered on pull request merge, with a task like:

    ```text theme={"system"}
    For each dbt model changed in this PR, assess the downstream impact
    and post one report per model to Slack.
    ```

    The command runs natively, with no API keys to configure. See [Run an agent with Bolt](/guides/programmable-agents/run-an-agent-with-bolt) for the full walkthrough.
  </Step>
</Steps>

<Check>
  The report lands in your Slack channel with exposures first (each dashboard or sync consuming the model), then every downstream model with the exact columns it selects and a risk flag for removals and type changes. A model with no downstream consumers gets a short all-clear instead. If the agent reports no lineage data, the workspace has no Bolt runs with dbt™ artifacts yet; run your production schedule once first.
</Check>

## How it works

Graph-level lineage tells you *that* `fct_revenue` depends on `fct_orders`; it does not tell you *whether* it selects the column you are about to drop. The agent layers the two: `get_lineage` and `get_exposures` enumerate the consumers from your Bolt artifacts, then it reads each direct consumer's SQL to determine which columns are explicitly referenced. Exposures always lead the report because a broken dashboard is noticed by stakeholders before a broken model is noticed by dbt™.

Pair it with the [end-to-end PR reviewer](/guides/programmable-agents/end-to-end-pr-reviewer): the reviewer's IMPACT section gives a verdict-level summary, while this agent produces the full standalone report when a change needs deeper scrutiny.

## Next steps

<CardGroup cols={2}>
  <Card title="End-to-end PR reviewer" href="/guides/programmable-agents/end-to-end-pr-reviewer" icon="git-branch">
    Impact as one dimension of a full PR verdict.
  </Card>

  <Card title="dbt™ documentation backfiller" href="/guides/programmable-agents/doc-backfiller" icon="book">
    Keep the YAML docs accurate on the same PRs.
  </Card>

  <Card title="dbt Discovery tools" href="/products/dino-ai/tools-and-features/dbt-discovery-tools" icon="search">
    The lineage and exposure tools this agent uses.
  </Card>

  <Card title="Programmable Agents reference" href="/products/dino-ai/programmable-agents/index" icon="code">
    The agent schema, tools, and API.
  </Card>
</CardGroup>


## Related topics

- [Tests Dashboard](/products/radar/dbt-monitoring/tests-dashboard.md)
- [dbt™ mesh](/products/bolt/ci-cd/lineage-diff/dbt-mesh.md)
- [Monte Carlo](/integrations/monte-carlo.md)
- [Bolt CI/CD for dbt™ pull requests and deploys](/products/bolt/ci-cd/index.md)
- [Column-Level Lineage Diff for Looker](/products/bolt/ci-cd/lineage-diff/looker.md)
