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

# Loop health

> Whether the autopilot loop is working, idle or blocked, and why: readings, automation runs and skips, findings, work produced and re-reads due, per day.

## What it answers

"Why has nothing happened?" Loop health answers that from records rather than guesses. For each workspace and each day it shows:

* **Readings per engine**: how many succeeded and how many failed.
* **Scheduled automation outcomes**: each automation that fired, was skipped (with the reason), or failed.
* **Detection findings** raised by the hourly [detection](/agent/findings) pass.
* **Work produced**: items filed for your approval or review.
* **Approvals pending**: how many items wait on a person.
* **Pull requests opened**.
* **Re-reads due**: [before-and-after](/measure/before-and-after) re-reads scheduled for that day.

Each count is read once for its date. The days are listed side by side, but they are not a trend and nothing on the page compares one day with another.

It is on the [Today](/start/today) page, as `get_loop_health` over [MCP](/mcp/tools#get_loop_health), and as `GET /v1/loop-health` over the [REST API](/api/endpoints#get-v1loop-health).

## The three statuses

| Status      | Meaning                                                                      |
| ----------- | ---------------------------------------------------------------------------- |
| **Working** | Work was produced, or a pull request opened, in the last two days            |
| **Idle**    | Nothing is blocked, and nothing was produced. A quiet loop, not a broken one |
| **Blocked** | Something stops the loop. The reasons say which                              |

A workspace is **blocked** when any of these is true:

* the credit balance is spent;
* no reading succeeded in two days;
* nothing is scheduled and detection is off;
* every scheduled run failed;
* the scheduler stopped.

Every status comes with its reasons as sentences you can act on, such as "The credit balance is spent, so scheduled automation runs are refused. Top up to restart the loop." or "'Daily win plan' is paused." Reasons also carry notes that do not block the loop, such as how many pieces of work wait for your approval.

<Note>
  The org home at [/clients](/agencies/clients) currently shows a simpler status per workspace, derived from its automations: **blocked** when there is no scheduled automation, all of them are paused, or credits are used up; **idle** when an automation is scheduled but has never run, or has not run in 48 hours. It will read loop health instead once that is wired in.
</Note>

## Why a scheduled run was skipped

A skipped run is recorded, grouped with a count, instead of disappearing. Each skip carries one of these reasons:

| Reason           | What it means                                                                                                                    |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `no_credits`     | The credit balance was spent when the run was due. See [Credits](/account/credits#when-the-balance-is-spent)                     |
| `manual_trigger` | The automation only runs when started by hand (**When I ask**), so nothing was scheduled                                         |
| `parked_on_ask`  | The previous run is waiting on an answer from you; the scheduled fire handed that run back instead of starting another           |
| `flag_disabled`  | [Detection](/agent/findings) is off for this workspace, so a lost citation or a competitor change does not start work on its own |
| `retired`        | The product paused the automation on its own (see `retired_reason` on the automation). Resume it to put it back on the schedule  |
| `paused`         | Somebody paused it                                                                                                               |
| `cap_reached`    | A [change cap](/agent/approval#change-caps) was reached; the changes over it wait for you to approve them by hand                |
| `in_flight`      | A run of the same automation was still in progress, so a second was not started                                                  |

## Credits stop runs, not readings

A spent credit balance stops **scheduled automation runs**. It does not stop **readings**: the daily answers to your tracked prompts run on your plan's monthly response budget, not on credits. A blocked workspace with no credits still gets its numbers; what stops is the work built on them.

Loop health itself costs nothing and answers on a spent balance.

## Over the API

```bash Shell theme={null}
curl "https://api.attensira.com/v1/loop-health?days=7" \
  -H "Authorization: Bearer atn_live_<your key>"
```

```json Response theme={null}
{
  "status": "blocked",
  "reasons": ["The credit balance is spent, so scheduled automation runs are refused. Top up to restart the loop. (Readings run on the plan's response budget, not credits.)"],
  "days": [
    {
      "date": "2026-09-22",
      "readings": { "chatgpt": { "ok": 40, "failed": 1 }, "perplexity": { "ok": 41, "failed": 0 } },
      "runs": [
        { "automation_id": "aut_71cd", "name": "Daily win plan", "status": "skipped", "reason": "no_credits", "count": 1, "at": "2026-09-22T06:00:00Z" }
      ],
      "findings": 2,
      "work_produced": 0,
      "approvals_pending": 3,
      "prs_opened": 0,
      "rereads_due": 1
    }
  ]
}
```

`days` takes 1 to 30 and defaults to 7. The dashboard reads the same data from `GET /v2/projects/{id}/loop-health`.
