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

# Signals & Event-driven Runs

> The agent doesn't just run on a schedule — anomalies and forecast breaches wake it up.

Besides the cron schedule, your co-founder watches for **signals**: discrete "something needs attention" events. When an open signal crosses the severity threshold, it triggers a focused run — that's why `trigger_source` in the [Runs API](../api/runs) can be `event`, not just `schedule` or `manual`.

## Signal kinds

| Kind                                 | What produces it                                                                                                         |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| `anomaly`                            | The anomaly detector found a metric moving outside its normal band (downloads, revenue, conversion, review velocity)     |
| `forecast_breach`                    | Actuals broke out of the forecast confidence interval                                                                    |
| `hypothesis_open` / `hypothesis_due` | An open hypothesis from a past analysis reached its check-in date                                                        |
| `episode_followup`                   | An applied action's 14-day measurement window expired — time to score the outcome                                        |
| `knowledge_drift`                    | A knowledge source you saved now conflicts with your current playbook (see [Second Brain](../capabilities/second-brain)) |
| `goal_offtrack`                      | A [goal](../capabilities/goals-okr) crossed from on-track into off-track (fires once on the transition)                  |
| `runway_low` / `payback_degrading`   | A financial guardrail crossed the owner's threshold (see [Unit Economics](../capabilities/unit-economics))               |
| `churn_spike`                        | Daily churn spiked well above the 30d baseline (see [Retention & Lifecycle](../capabilities/retention-lifecycle))        |
| `manual`                             | You clicked "why?" on a metric (feeds the [Why-agent](../capabilities/why-agent))                                        |

Each signal has a severity (`info` → `critical`), a fingerprint for dedup (the same anomaly reported twice in a day collapses to one row), and a 14-day TTL.

## How runs consume signals

1. The event orchestrator polls open signals above the minimum severity.
2. It triggers a run for that app with the signal(s) attached.
3. The collector injects the signal context into the payload, so the briefing opens with *why* this run happened ("Triggered by: downloads anomaly, −38% vs baseline").
4. The signal is marked `triggered` and won't fire again.

The daily scheduled run also checks recent signal-runs and skips its heartbeat if a signal-triggered analysis already covered the morning — no duplicate briefings.

## Where you see them

* **Dashboard → Co-founder → Signals** — open/resolved list with severity and history
* **Briefings** — signal-triggered runs open with the triggering event
* **Why-agent** — a signal can seed a root-cause analysis with its metric context
