---
title: "Observe"
url: https://services.dev/docs/operate/observe
captured: [operate-day.txt, operate-observe.txt]
---
# Observe

URL: https://services.dev/docs/operate/observe

> Every job's trace, step by step, with who did it, how long it took, what it waited on, what AI cost and what the gate said. Then the job's ledger to the cent, and AI spend by Service, step and model, with an alarm when a step's cost jumps. Each view is read from the record, so nothing is sampled or estimated.

Observing a job answers one question: where did its time and money go? Every answer here is read from [the record](https://services.dev/docs/service/record.md), the job's append-only history, so a trace, a ledger and a spend report never disagree with each other or with what the buyer was charged.

## A job's trace

One return from apis.tax's spring, filed three weeks before its date:

```bash
npx services.dev jobs trace job_5Tq1 --live
```

```txt title="magic values: none"
job_5Tq1 · Annual Return · Tailwind Traders · 2026 · S corp · US, US-CA · accepted · version 2027-01 · rules 2026-10
  step       doer                began        took     waited on                AI             gate
  consent    owner · consent     02-01 09:00  4h 12m   the officer              —              committed
  organizer  owner · upload      02-01 13:12  9d 3h    the officer, 6 items     —              committed
  compute    code · schedules    02-10 16:20  2s       —                        —              committed · cites 2 schedules
  draft      ai                  02-10 16:20  3m 41s   —                        4 calls $1.92  committed
  check      ai · adversarial    02-10 16:24  2m 05s   —                        6 calls $1.38  passed in round 2 · 1 finding fixed
  sign       signer · mbr_8Ea4   02-10 16:26  1d 2h    claim 1h 40m             —              committed · stamped
  authorize  owner · sign        02-11 18:31  6h 02m   the officer              —              committed
  file       submit · each       02-12 00:33  3h 20m   the IRS, then US-CA      —              2 receipts, accepted
  total      10d 19h · 9d 13h of it waiting on the officer · AI 10 calls, $3.30 · 1 person's act
```

| Column | Read from |
|---|---|
| step, doer | each `step.committed`, and the role, code, AI or party that proposed it |
| began, took | the step's first proposal to its commit |
| waited on | the open ask, the unclaimed Task or the outside system the step was waiting for, from `job.paused` and the Task's timers |
| AI | each `decision.made`: the calls, the model each was pinned to, their cost in cents |
| gate | what the [gate](https://services.dev/docs/service/gate.md) did: committed, refused with its reason, or the review's rounds and findings |

The trace says where to act. Here nine and a half of its eleven days were the officer's, so the request list is the lever, not the AI.

## The job's money

```bash
npx services.dev jobs ledger job_5Tq1
```

```txt title="magic values: none"
job_5Tq1 · $1,800.00 released on file.accepted · 2027-02-12
  + charge                $1,800.00
  − processing               $52.50
  − AI                        $3.30   draft $1.92, check $1.38
  − signer's pay             $75.00   mbr_8Ea4 · accrued at sign
  − state fees                $0.00   US-CA takes none to e-file
  − services.dev's take   the take on $1,725.00
  = you                   $1,669.20, less the take
```

The ledger's lines and who carries each one are on [Money](https://services.dev/docs/money.md#the-ledger). The take sits on the line the brand adds, never on a member's pay.

## AI spend

```bash
npx services.dev spend --by step --since 2027-02-01 --live
```

```txt title="magic values: none"
apis.tax · live · 2027-02-01 → 2027-03-31 · AI $1,045.56 on 392 returns · $2.67 a return
  service          step     calls  spend    a job   of the price
  annual-return    draft    1,140  $547.20  $1.92   0.11%
  annual-return    check    1,710  $393.30  $1.38   0.08%
  question         answer      61   $51.24  $0.84   1.71%
  estimate         draft       92   $53.82  $1.17   1.48%
  caps     no return reached its AI budget · ai.exhausted 0 times
  alarm    none · a step whose cost a job rises past twice its 30-day median raises spend.alarm
```

Each AI job has a budget, a fifth of its price unless `price.ai` says otherwise. Past it, `ai.exhausted` asks you to fund more, hands the step to its escalate role, or ends the job, and the buyer is never billed for AI ([price.ai](https://services.dev/docs/money/prices.md#nothing-on-effort)). `spend.alarm` fires when a step's cost a job passes twice its 30-day median, so a model that starts looping shows up the same hour. `Brand.ai.alarm` sets the multiple.

## On the console

```bash
open https://apis.tax/console/jobs/job_5Tq1
```

```txt title="magic values: none"
Return job_5Tq1 · Tailwind Traders · accepted 12 Feb · you $1,669.20, less the take
  tabs     trace · record · ledger · thread · files · clocks
  trace    8 steps · the longest wait: organizer, 9d 3h, on the officer · the costliest: draft, $1.92
```

## The audit log

Every act on the console is on the audit log: who did it, under which session, and the reason they gave. An act your [files](https://services.dev/docs/operate.md#the-file-first-the-agent-second-you-last) or your coding agent took is marked as theirs:

```bash
npx services.dev audit --since 2026-11-09 --live
```

```txt title="magic values: none"
api.lawyer · live · 9 Nov → 16 Nov · 6 acts on the console, by your files, your coding agent under your login, and you
  when          who      act             what
  9 Nov 09:40   respond  hold            hld_2Lp4 · trademark-response.draft → attorney, $120.00 an act · quality.alarm
  9 Nov 13:41   agent    evals run       evl_3Lq7 against 2026-11-09.1 · no lens finds fewer grounds
  9 Nov 13:50   agent    line apply      contract-review.flag back to AI alone · owner.agent.line: { standard: 'apply' } · its evidence in 2026-11-09.1's notes
  9 Nov 13:55   agent    deploy --live   2026-11-09.1 · draft pinned to claude-x@2026-11-08
  9 Nov 14:20   you      hold lift       hld_2Lp4 --repin-to 2026-11-09.1 · 22 drafts by attorneys, $2,640.00 · 6 repinned
  9 Nov 14:31   you      jobs send-back  8 matters --affected, by: 'incident' · $1,400.00 in second acts
  kept      90 days, on Team's audit log
```

Only the owner and staff read decisions, traces and the audit log. A buyer's portal shows the job's timeline and its receipts, never what the AI cost or which model ran. How long the audit log keeps each act depends on the plan ([limits](https://services.dev/docs/operate/limits.md)).

## Controls

| Call (CLI) | API | Event | On the console | Plan |
|---|---|---|---|---|
| `jobs trace <job>` | `GET /owner/jobs/:id/trace` | none: it reads | `/console/jobs` | every plan |
| `jobs ledger <job>` | `GET /owner/jobs/:id` | none: it reads | `/console/jobs` | every plan |
| `spend --by service\|step\|model --since <date>` | `GET /owner/spend` | `spend.alarm`, `ai.exhausted` | `/console` | every plan |
| `logs` | `GET /owner/logs` | none: it reads | `/console/audit` | every plan |
| `listen` | `GET /events/stream` | none: it reads | — | every plan |
| `audit --since <date> [--who agent]` | `GET /owner/audit` | none: it reads | `/console/audit` | every plan |

---

- Up: [Run your Service](https://services.dev/docs/operate.md)
- Previous: [Versions](https://services.dev/docs/operate/versions.md)
- Next: [Quality](https://services.dev/docs/operate/quality.md)
