# Traces

URL: /products/agent/traces · Id: `page:products/agent/traces`

> Follow one task from the message that started it to the verdict that billed it: every Action records who did it, for whom, how and on what.

A trace is every [Action](/business/nouns/action) one [Task](/business/nouns/task) took, in order. Each Action records `by`, `for`, `via`, `on` and `thing`, so the trace is a query, not a log someone has to keep.

## What each Action records
| Field | Holds | Example |
| --- | --- | --- |
| `by` | The [Worker](/business/nouns/worker) that acted | Harbor Residential's agent |
| `for` | The [Party](/business/nouns/party) it acted for | Harbor Residential |
| `via` | The channel or [Interface](/business/nouns/interface) | `email` |
| `thing` | The record it acted on | The lease for unit 5C |
| `status` and `reason` | Where it stands | `done`, or `pending` with `awaitingAction` |

An [Evaluator](/business/nouns/evaluator)'s verdict, an [Approval](/business/nouns/approval)'s answer and every model call sit beside the Action they belong to.

## Read a trace
The builder lists one customer's Actions for a day on [api.sb](/code/platform/api-sb):

```ts
import { $ } from 'startup-builder'

const actions = await $.Action.list({ where: "for = 'cus_BNY3PShL26' and createdAt >= '2026-10-06'" })
```

The [Customer](/business/nouns/customer) reads its own trace in its [Portal](/business/nouns/portal), or from `api.leaseline.app` with its own key. It sees its [Tenant](/business/nouns/tenant)'s Actions only.

## Why traces matter here
A Customer disputes a notice: "your agent offered a concession nobody here set". The trace shows the draft, the `price` Approval, who approved it and when. The question ends in one read.

A failed Evaluator verdict in a trace becomes an eval case. Add it before the fix, so the next [Version](/business/nouns/version) proves it.