---
title: "Run your Service"
url: https://services.dev/docs/operate
captured: [operate-day.txt]
---
# Run your Service

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

> Running a Service once it is live, from the owner's seat. Each alarm runs the response your files name, your coding agent acts within the ceilings you set, and the owner console lists only what is left, each item with its control. Every control is a CLI and API call, and every threshold is a key you deploy.

Money releases on the facts each Service names, with no hand of yours. Running the business is your files' job first: each alarm runs the response you wrote, your coding agent takes what the files leave within the ceilings you set, and the [owner console](https://services.dev/docs/app/owner.md) lists the rest under **needs you**.

## A Monday on the console

api.lawyer, a week after an incident its files answered on their own:

```bash
open https://api.lawyer/console   # Monday 16 Nov, 08:00
```

```txt title="magic values: none"
api.lawyer · live 2026-11-09.1 · Team · this week 96 matters · charged $31,404.00 · attorneys' own fees $15,925.00 · AI $118.60 · cover and processing $1,148.00 · you $14,212.40, less the take
  needs you     4 · each with its control
    line        docket-watch.ack clears the high bar: 0 changes in 1,206 acks · frees $763.80 a month · apply to move it to a sample
    support     1 refund request, 1 dispute that sends itself 17 Nov, 1 contest to rule
  done for you  2 · on the audit log
    respond     9 Nov 09:40 · quality.alarm on trademark-response.draft · rerouted to attorneys until 14:20 · inc_4Lp1 closed, $4,045.68
    agent       9 Nov · moved contract-review.flag back to AI alone, then deployed 2026-11-09.1 with the draft pinned to a build
  quiet         no alarm on quality, the Pool, spend or limits · 0 holds · suite green on 2026-11-09.1
    budgets     trademark-response 71% of its 28-day send-back budget left · every other Service over 90%
    next line   none open: the other 7 people on the line hold reserved acts · their act time fell 18m → 11m this quarter
    dates       0 at risk · next 30 days: 41 office dates, each with an owner
  ran alone     92 matters delivered with no hand of yours · 312 thread questions answered by AI · 0 refusals charged
```

Every line under **needs you** carries its control. Everything under **quiet** has an alarm that fires before it needs you, and the budget it has left.

## The quarter, on one line

```bash
npx services.dev console --since 90d --live
```

```txt title="magic values: none"
api.lawyer · live · 17 Aug → 16 Nov · 1,104 matters on 3 versions
  AI alone   steps AI committed with no person: 61% in August → 78% in November
  you        190 minutes a week on the console in August → 35 in November
  acts       412 attorney acts, each signed · reserved acts never move
  line       2 moved down, each from a proposal you applied: docket-watch.check to AI alone on 14 Sep, contract-review.flag to AI alone on 19 Oct
             1 reverted on its own: contract-review.flag, 26 Oct, the week its bar broke · moved again 9 Nov
  margin     38% in August → 45% in November, after attorneys' fees, AI, cover and processing
```

Each line that moved came from a proposal you or your agent applied, and the one revert happened on its own ([Move a step to AI](https://services.dev/docs/operate/line.md)).

## What you run, and where

| You | Page | The calls | Plan |
|---|---|---|---|
| take a version live, in stages | [Deploy](https://services.dev/docs/operate/deploy.md) | `deploy`, `deploy --live --stages <shares> --hold <span>` | every plan; stages on [Team](https://services.dev/docs/money/plans.md#team) |
| prove it before a buyer sees it | [Test and live](https://services.dev/docs/operate/testing.md) | `test-clocks create <time>`, `verify --test-clock <tc>` | every plan |
| change it under jobs in flight | [Versions](https://services.dev/docs/operate/versions.md) | `jobs repin --from <version> --to <version>`, `rollback <version>` | every plan |
| see where a job's time and money went, and who acted | [Observe](https://services.dev/docs/operate/observe.md) | `jobs trace <job>`, `audit --since <date>` | every plan |
| keep the work good | [Quality](https://services.dev/docs/operate/quality.md) | `quality <service>`, `evals run <evl> --against <version>` | evals on [Team](https://services.dev/docs/money/plans.md#team) |
| let AI earn more of it | [Move a step to AI](https://services.dev/docs/operate/line.md) | `line <service>`, `line apply <service>` | [Launch](https://services.dev/docs/money/plans.md#launch); holdouts on [Team](https://services.dev/docs/money/plans.md#team) |
| keep your Pool filled and paid | [Pool health](https://services.dev/docs/operate/pool-health.md) | `pools health <pool> --since 7d`, `pools standby <pool> --role <role> --in <region> --season <from>..<to>` | [Launch](https://services.dev/docs/money/plans.md#launch) |
| keep every date the world sets | [Dates at risk](https://services.dev/docs/operate/dates.md) | `clocks assign <clock> <member>`, `clocks satisfy <clock>` | every plan |
| stop the damage when something breaks, and close it on the record | [Incidents](https://services.dev/docs/operate/incidents.md) | `hold <service>.<step>`, `incidents get <inc>` | every plan |
| answer buyers | [Support](https://services.dev/docs/operate/support.md) | `jobs refund <job>`, `disputes get <dsp>` | every plan |
| know where the ceilings are | [Limits](https://services.dev/docs/operate/limits.md) | `limits`, `plan upgrade <plan>` | each plan's own |

Each page shows the call, the event it writes, what the console shows, its plan and a moment from api.lawyer, apis.tax or api.forsale.

## Every alarm, its key and its answer

Every threshold the console holds you to is a key you wrote, so a change to how the business runs ships through a deploy like any other:

| Event | Fires when | Set by | The answer |
|---|---|---|---|
| [`quality.alarm`](https://services.dev/docs/operate/incidents.md#respond-before-you-read) | a Service burns its send-back, delivery-time or missed-date budget too fast, as below; a missed date the world sets, on its first miss | `slo` | hold the step, or reroute it to people; respond: `{ hold: 'draft', to: 'attorney', pay: 120 }` |
| [`spend.alarm`](https://services.dev/docs/operate/observe.md#ai-spend) | a step's AI a job passes twice its 30-day median | `Brand.ai.alarm` | hold the step; respond: `{ hold: 'draft' }` |
| [`ai.exhausted`](https://services.dev/docs/operate/observe.md#ai-spend) | a job's AI reaches its budget | `price.ai` | fund it, hand the step to a person, or end the job |
| [`ai.capped`](https://services.dev/docs/operate/limits.md#every-limit) | the brand's AI for the day reaches its ceiling | `Brand.ai.daily` | raise it, or let AI steps wait for the next day |
| [`pool.alarm:claim_slow`](https://services.dev/docs/operate/pool-health.md#the-measures) | time to claim passes its p90 | `Pool.health.claim_p90` | raise a rung sooner; respond: `{ raise: 'sooner' }` |
| [`pool.alarm:unreached`](https://services.dev/docs/operate/pool-health.md#the-measures) | a Task no eligible member reached | on with every Pool | invite from the door, or widen the region; respond: `{ invite: true }` |
| [`pool.alarm:no_eligible`](https://services.dev/docs/operate/pool-health.md#the-measures) | no eligible member for a role and region | `Pool.health.no_eligible` | offer a standby seat, raise a rung sooner, or invite; respond: `{ raise: 'sooner' }` |
| [`pool.alarm:overloaded`](https://services.dev/docs/operate/pool-health.md#the-measures) | claimed hours pass a share of declared hours for a week | `Pool.health.load` | offer a standby seat |
| [`pool.alarm:payout_late`](https://services.dev/docs/operate/pool-health.md#the-measures) | act to funds in a member's bank passes its p90 | `Pool.health.payout_p90` | the payout's trace, on the console |
| [`pool.alarm:cover_lapsing`](https://services.dev/docs/operate/pool-health.md#the-measures) | coverage on an act lapses inside its window | `Pool.health.cover` | renewal, or the custodian ladder |
| [`clock.vacant`](https://services.dev/docs/operate/dates.md#why-a-date-is-listed), [`job.at_risk`](https://services.dev/docs/operate/dates.md#why-a-date-is-listed) | a date no one answers for, or a job three-quarters through its within | `clocks`, `price.within` | Dates at risk's controls |
| [`limit.reached`](https://services.dev/docs/operate/limits.md#every-limit) | a key, a job or the brand reaches a ceiling | `Brand.limits`, your plan | plan upgrade, or raise the key; your agent, by `owner.agent.offers_up_to` |
| [`line.ready`](https://services.dev/docs/operate/line.md#the-lines-that-are-ready) | a step's evidence clears its bar | `human.evidence` | line apply; your agent, by `owner.agent.line` |
| [`line.reverted`](https://services.dev/docs/operate/line.md#when-the-model-changes) | a moved line's bar breaks, a model change no eval carried, or a new slice | `human.evidence` | none: it already moved back |
| [`holdout.found`](https://services.dev/docs/operate/line.md#holdouts) | a person finds a defect on a holdout job | `human.holdout` | none: the redo runs at no charge |

`quality.alarm` reads a Service's objectives, with a 28-day budget for each. It fires when the budget burns 14 times too fast over both the last hour and the last 5 minutes, or 6 times over both 6 hours and 30 minutes, and never on fewer than 10 jobs. A missed date the world sets alarms on its first miss:

```ts title="services/trademark-response.ts"
slo: { sendback: '5%', delivered_p90: '5d', dates_missed: 0 },
```

## The file first, the agent second, you last

`respond` runs in seconds, and [Incidents](https://services.dev/docs/operate/incidents.md#respond-before-you-read) shows it. `owner.agent` is the standing order for your coding agent on anything `respond` doesn't cover, and `owner.notify` says where each kind of news reaches you:

```ts title="brand.ts"
owner: {
  agent: { offers_up_to: 'team', hold_on: ['quality.alarm', 'spend.alarm'], line: { standard: 'apply', high: 'propose' }, reroute_pay_up_to: 150 },
  notify: { alarms: 'sms', needs_you: 'email daily 08:00', quiet: 'weekly' },
},
```

A reserved act is on neither list: no response and no agent reroutes it, moves its line or acts in it. What is left after both lists is yours. The [audit log](https://services.dev/docs/operate/observe.md#the-audit-log) shows who did each act.

Several Services under one brand share one console and one ledger: [your business](https://services.dev/docs/business.md).

---

- Up: [Your first paid job](https://services.dev/docs.md)
- Previous: [The owner console](https://services.dev/docs/app/owner.md)
- Next: [Deploy](https://services.dev/docs/operate/deploy.md)
