---
slug: agents/metrics
title: Agent compute metrics
kind: reference
surface: agents
summary: What every figure on the Aetherfy agent compute dashboard means, which of the two sources it comes from, why an absence is rendered as "no data" rather than zero, and why the count of agents with activity is not the count of agents you have deployed.
sources:
  - aetherfy-control-plane:api/routes/internal.py
  - docs/TELEMETRY.md
  - dashboard/src/app/(authenticated)/dashboard/analytics/page.tsx
  - dashboard/src/lib/telemetry/telemetry-format.js
---

# Agent compute metrics

The Aetherfy dashboard reports what your agents actually did: how long they ran,
how many task runs completed, how often machines woke and slept, and how many
requests reached them. This page says what each figure counts, so a number you
read here means the same thing as the number Aetherfy billed.

The equivalent page for the vector database is
[/vectors/usage-and-metrics](/vectors/usage-and-metrics). The two sets of
figures are never added together.

## Aetherfy measures agent compute from two independent sources

Every figure comes from one of two collectors, and they observe different
things. Which one a figure came from decides what it can and cannot tell you.

| Source | What it records | Quality |
|---|---|---|
| Billing records | One row per completed task run, plus a row each time Aetherfy observes a machine waking or sleeping | Billing-grade — every row has a start and a stop behind it |
| Edge request counts | Invocations seen by the Aetherfy edge, including 4xx, 5xx, and requests that merely woke a sleeping machine | Observational — a bounded undercount |

The two live apart on purpose. Edge counts and billing records answer different
questions, and adding them would produce a figure whose meaning nobody could
state. Aetherfy never sums across them into one number.

**The edge is a bounded undercount, and the bound is stated rather than
implied.** A producer never retries a failed flush, because the write is
additive and a retry would over-count instead. At most one unflushed interval
per evicted edge worker is lost, nothing at all is recorded from before the
Aetherfy edge went live, and the counts do not extend further back than the edge
retention window. The window is reported alongside the figures rather than
restated here, so it cannot go stale on this page.

## The Aetherfy zero rule applies to every compute figure

An empty figure means one of two very different things: the thing did not
happen, or nothing was counting. Aetherfy renders those differently and never
collapses them.

| What you see | What it means |
|---|---|
| `0` | Measured, and it was none. That thing genuinely did not happen in the window |
| `no data` | Not measured. Nothing was counting, or the figure could not be read |

A dashboard that showed `0` for both would be wrong exactly when it mattered
most — a collector that silently stopped looks identical to a quiet account.
This is the same rule the Aetherfy vector API applies through its `coverage`
flag; see [/vectors/usage-and-metrics](/vectors/usage-and-metrics).

## What each Aetherfy compute figure counts

| Figure | Source | What it counts |
|---|---|---|
| Compute time | Billing records | Machine time across the window. **Booked when a run ENDS**, so a run that spans midnight lands entirely in the day it finished |
| Compute cost | Billing records | The dollar cost of rows Aetherfy has already priced |
| Task runs | Billing records | One per completed run of a `type: job` agent, scheduled or manual |
| Wakes and sleeps | Billing records | Machine state CHANGES observed between polls — not a request count |
| Edge invocations | Edge counts | Requests the Aetherfy edge saw, including errors and wake-up requests |
| Agents with activity | Both | Distinct agents seen by **either** source in the window |
| Deployed agents | Neither | A live count of the agents you have deployed right now |

**Pricing lags behind compute.** Aetherfy prices completed runs after the fact,
so a run that has just finished has a compute time and no cost yet. That
remainder is reported as its own figure rather than folded into the dollar
total as zero, which would render pricing lag as a discount.

**Wakes and sleeps are observations, not traffic.** Aetherfy writes one only
when a machine's state differs from the last time it looked, so a machine that
wakes and sleeps between two observations is never counted at all. Reading these
as a request count is wrong twice over: use edge invocations for traffic.

## Agents with activity is not how many Aetherfy agents you have

This is the figure most often misread, and the misreading is reasonable.

**Agents with activity** counts distinct agents that either source saw doing
something inside the window. An always-on service agent serving traffic is
counted, through the edge. An always-on service agent that served nothing is
not — nothing woke, nothing slept, no task ran, no request arrived — so a
perfectly healthy agent contributes zero to this figure.

That is correct for what the figure is: a measure of activity in a window. It is
the wrong figure for "how many agents do I have", and it used to carry a label
that invited exactly that question.

**Deployed agents** is the other number, shown beside it. It is a live count,
not a window measurement: it says how many agents hold compute-plane capacity at
the moment you loaded the page. It is the same definition your plan's agent
quota is enforced against, so the two can never disagree — see
[/platform/limits](/platform/limits).

An archived agent is not counted. Archiving releases the agent's compute-plane
capacity, which is the same reason it frees the quota slot; its configuration
and code are preserved and a restore re-provisions it. See
[/agents/managing](/agents/managing).

Read together, the two figures answer the question either one answers badly
alone: how much of your fleet did anything.

## Where to read Aetherfy compute metrics

The dashboard's overview page shows the last 24 hours. The analytics page shows
the same figures over longer windows, plus a per-agent breakdown and a per-day
series.

The per-agent breakdown is a union across both sources, so an agent seen only by
the edge still appears in it. Agents you have since deleted also appear, because
the figures describe a window that includes the time they were running — the
compute they used was real and was billed.

There is no public REST endpoint for these figures. The vector database's
analytics reads are public and documented at
[/vectors/usage-and-metrics](/vectors/usage-and-metrics); the agent compute
figures are read by the Aetherfy dashboard through an internal route that is
deliberately not part of the published API.
