# Alerts from workflows

> Raise an alert with a workflow's Alert node, start the workflow from a market signal with Monitor a signal, and review each alert and where it went in Notifications.

Source: https://orbitalaip.com/docs/alerts-and-notifications/alerts-from-workflows

## How an alert is raised

An alert is a notification raised by an **Alert** node. Each time the node fires, one row lands in **Notifications** under the **Alert** category. In a workflow, the node fires only during a run, however the run started.

## Add an Alert node

1. **Add the node**
   
   In the workflow editor, click the shapes button at the top left of the canvas; its tooltip reads **Show nodes**. Under **Notify**, click **Alert**.

2. **Wire its inputs**
   
   Connect what it should judge to **Verdict**, **Value** or **Data**, and a ticker to **Symbol** when the run has one.

3. **Name it**
   
   **Alert name** is required and appears on every alert the node raises.

4. **Set when and how loud**
   
   Pick a **Decision mode**, described below. **Severity (default)** is **Info**, **Warning** or **Critical**, and starts at **Warning**.

5. **Test it**
   
   Click **Run**. If the node fires, the alert appears in **Notifications**.

## When the node fires

**Decision mode** has three settings, named here by their first word.

- **Agent-led** is the default. The node fires when the incoming verdict says to alert, and never without a verdict.

- **Threshold** compares the number on **Value** or **Data** with **Threshold (threshold mode)**, using **Comparator (threshold mode)**. Its **Crosses above** and **Crosses below** act like **Greater than (>)** and **Less than (<)**. They match on every run while the value stays past the threshold.

- **Always** fires each time the node runs, unless **Cooldown (seconds)** or **Content-aware dedup** holds it back. Put it behind an **If / else**, or in a workflow a signal monitor starts.

A **Custom LLM Prompt** node with **Output preset** set to **Alert verdict** writes a verdict: whether to alert, a title, summary, severity, tags, confidence and reasoning. Wire its **Verdict (alert_verdict preset)** port to the Alert node's **Verdict**.

## What an alert carries

A verdict's values come first, and the node's settings fill the gaps.

- Title: the verdict's title, else **Title template**, else the alert name and the symbol.

- Message: the verdict's summary or message, else **Message template**, else a default line, such as `AAPL > 70 (now 72.4)` for a threshold alert.

- Severity: the verdict's severity, else **Severity (default)**.

- Symbol and tags: the verdict's symbol, else the **Symbol** input; **Default tags**, a JSON list, plus the verdict's tags.

Templates fill `{{name}}`, `{{symbol}}`, `{{value}}`, `{{threshold}}` and any field of the data or verdict, such as `{{data.title}}`. A missing value renders as nothing, and a template that renders empty falls back to the default.

## Stop repeat alerts

- **Cooldown (seconds)**, 300 by default, stops the node firing again for the same symbol inside that window. With no symbol, the window covers the whole node.

- **Content-aware dedup**, on by default, drops a repeat of the same title, message, symbol and value. It looks back over the cooldown or the last hour, whichever is longer.

- A list wired to **Verdict** or **Symbol** runs the node once per item, each symbol with its own cooldown.

A suppressed alert leaves nothing in **Notifications** and sends nothing. For an alert on every run, set **Cooldown (seconds)** to 0 and clear **Content-aware dedup**.

## Alert on a market signal

Set the Alert node's **Decision mode** to **Always**, set **Cooldown (seconds)** to 0 and clear **Content-aware dedup**. Then add **Monitor a signal** under **Automations**, the lightning button in the editor's top bar, so the workflow starts when a source meets your condition. If the workflow takes an asset as its input, the monitor passes its stock in. See [Set up a signal monitor](https://orbitalaip.com/docs/workflows/webhooks-and-signals#set-up-a-signal-monitor).

> [!NOTE] Signal monitors run the main version
> If the workflow has a [main](https://orbitalaip.com/docs/glossary#main) version, a signal monitor runs it, not the canvas, so save your Alert node changes as a version and make it main. See [Main](https://orbitalaip.com/docs/workflows/runs-and-versions#main).

## Where an alert goes

An alert reaches the inbox of the person the run acts for: you when you click **Run**, and normally whoever set up a monitor or schedule. It also reaches every destination that person routes **Alerts** to, and the node's **Channels** field adds destinations for that node only. See [Where notifications are delivered](https://orbitalaip.com/docs/alerts-and-notifications/notifications#where-notifications-are-delivered).

## Review past alerts

Open **Notifications** from the bell at the bottom of the sidebar. An alert's row reads **Alert** and the alert's name, with a symbol chip when there is one. **Filters** narrows the list by symbol, severity or tag.

Click a row to open it in the reading pane. It shows the message, the verdict's reasoning when it has one, where the alert was delivered, and **Open run** for the run that raised it. See [The reading pane](https://orbitalaip.com/docs/alerts-and-notifications/notifications#the-reading-pane).

With an alert open, click **Chat** in the sidebar to ask about it. Chat is told the alert's message, its verdict's reasoning and confidence, and which run raised it.

With an alert open in Notifications

- "Why did this alert fire?"
- "Show me the full analysis from the run that raised this alert."
