---
title: "human: the line"
url: https://services.dev/docs/people
captured: [approve.txt, examples.txt, legal-check.txt]
codes: [needs_a_person]
---
# human: the line

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

> Where a person comes in, if anywhere. Leave it out and AI delivers every job alone. Draw the line where you want a person, and where the work needs one, name the role and let the rules decide the act.

Leave `human` out and AI delivers every job alone. Add it and you draw **the line**: the point where a job goes to a person before it ships. Each form is one edit, and `check` reads it back.

## Where you want a person

| `human:` | `check` prints |
|---|---|
| left out | AI delivers every job. |
| `'risky'` | A person approves the jobs the review flags, before delivery. |
| `'always'` | A person approves every job before delivery. |
| `{ when: job => job.input.to.startsWith('ja'), because: 'Japanese jobs' }` | A person approves Japanese jobs before delivery. |

Your own rule says why in `because`. [A sampled line](https://services.dev/docs/people/sample.md) checks a share of delivered jobs, falling while send-backs stay rare.

### The rungs

Each step stands on one rung, from the most hands to none:

| Rung | `human:` | What a person sees |
|---|---|---|
| every job | `'always'` | every job, before delivery |
| a sample after delivery | `{ sample, floor }` | a share of delivered jobs, falling while send-backs stay rare |
| flagged, and a sample of the rest | `{ when: 'risky', sample }` | the jobs the review flags, before delivery, and a share of the rest after |
| flagged | `'risky'` | the jobs the review flags, before delivery |
| AI alone | left out | nothing: AI delivers every job |
| reserved | the act your [rules](https://services.dev/docs/people/rules.md) reserve | every job, at that act. It never moves |

A step moves between rungs on the record: [Move a step to AI](https://services.dev/docs/operate/line.md).

A job at the line waits for a person, in your app or in the terminal:

```bash
npx services.dev dev
```

```txt title="captured"
an agent ordered Translation at $49
job_7Hq2 · waiting · on approval · $49.00 held
  record  draft · ai | review · ai · pass
  next    npx services.dev approve job_7Hq2
```

```bash
npx services.dev approve job_7Hq2
```

```txt title="captured"
job_7Hq2 · delivered · document.fr-CA.pdf · $49.00 charged
  record  draft · ai | review · ai · pass | approve · person
  ledger  +$49.00 · AI $0.84 · you $48.16
  next    npx services.dev accept job_7Hq2
```

Only a person approves, in the app. An API key or an MCP tool that tries gets [`needs_a_person`](https://services.dev/docs/reference/errors.md#needs_a_person). To let the buyer decide instead, [sell a person's approval](https://services.dev/docs/money/prices.md#eight-forms).

## Where you need a person

Some work needs a credential. `sign` names it, `in` names the input that holds the job's jurisdiction, and `before` names the step the signer signs before:

```ts
export default Service({
  name: 'Certified Translation',
  input: { document: 'file', to: 'language: such as fr', country: 'jurisdiction: such as FR' },
  output: { document: 'file', certificate: 'file' },
  deliver: { translate: translation, certify: 'ai' },
  human: { sign: 'sworn-translator', in: 'country', before: 'certify' },
  price: { usd: 189, payout: 60, within: '3d' },
})
```

```bash
npx services.dev certified-translation document=birth-certificate.pdf to=fr country=FR --max 189
```

```txt title="captured"
job_7Hq3 · working · $189.00 held
job_7Hq3 · waiting · on signature · $189.00 held
  record  translate · service · job_7Hq4 · $49.00 | review · ai · pass
  next    npx services.dev approve job_7Hq3
```

```bash
npx services.dev approve job_7Hq3
```

```txt title="captured"
job_7Hq3 · delivered · birth-certificate.fr.pdf · certificate.pdf · $189.00 charged
  record  translate · service · job_7Hq4 · $49.00 | review · ai · pass | sign · sworn translator · FR | certify · ai
  ledger  +$189.00 · AI $0.84 · your Translation $49.00 · sworn translator $60.00 · you $79.16
```

That line is shorthand for one role and one step. Licensed work grows it into [Rules](https://services.dev/docs/people/rules.md), your counsel's table of which acts are reserved to a credential, which is how a Service meets licensing by design; [roles](https://services.dev/docs/people/roles.md), who holds the credential and where; and [a Pool](https://services.dev/docs/people/pool.md), the people who fill a role.

The legal example's contract review, as `check` reads it:

```bash
npx services.dev check
```

```txt title="magic values: none"
services/contract-review.ts · 16 lines · $99 per job, within 48 hours, charged on acceptance.
  who     An attorney admitted where the client is signs every memo before delivery. (rules 2026-10) The client consents first.
  roles   attorney · bar admission · from attorneys · $50 an act
  bounds  reserved advise to bar admission where the client is, in US-CA, US-NY and US-TX only · the attorney sells the fee · open send · refused litigate
```

The AI drafts and attacks the memo, and an attorney admitted where the client is advises. [What a person can do](https://services.dev/docs/people/acts.md) lists each act, and [Refusals and cures](https://services.dev/docs/people/refusals.md) what every caller hears when the rules say no.

## Who does the step

Every step has one doer. AI does every step it can, and each rung up is one line:

| Who does the step | One line | Paid | Plan | In apis.tax |
|---|---|---|---|---|
| [AI](https://services.dev/docs/service/ai.md) | `human` left out | AI, at cost | Free | `draft`, `check` |
| [Your code](https://services.dev/docs/service/code.md) | `by:` a function | nothing | Free | `compute`, `tentative` |
| [The buyer or a party](https://services.dev/docs/service/ask.md) | an `ask` | nothing | Free | `consent`, `organizer`, `authorize` |
| [An outside system](https://services.dev/docs/service/submit.md) | a `submit` | its fee passes through, at cost | Free | `pay`, `extend` |
| [The brand, on its own credential](https://services.dev/docs/people/brand-credentials.md) | `and: { brand: 'efin' }` | nothing | Every plan | `file` |
| [AI, with your review](https://services.dev/docs/people/sample.md) | `human: 'risky'`, or a `sample` that falls | nothing | Free · Launch with `human: { sample, floor }` | — |
| [Your staff](https://services.dev/docs/people/staff.md) | a role with no `pool` | your payroll | Free | — |
| [A Pool member](https://services.dev/docs/people/pool.md) | a role with a `pool` | pay per act | Launch | — |
| [A credentialed person](https://services.dev/docs/people/rules.md) | `rules`, and a role that holds the credential | pay per act; their own fee only where a Rules row sets `rail: 'member'` | Every plan · Launch with `Pool({...})` | `sign`, `prepare` |

api.lawyer's attorney sells `advise` on their own rail; apis.tax pays its signer $45 and $15 a jurisdiction an act. The Rules row decides, not the plan. [`check --who`](https://services.dev/docs/start/participants.md#who-does-each-step) prints this for one Service.

## Where a Pool's members come from

| From | One line | Roster · rules · name members see | Placement | Plan |
|---|---|---|---|---|
| [A Pool you rent](https://services.dev/docs/people/pool/share.md#import-a-pool-another-operator-runs) | `pool: 'gigs.expert/translators'` | the operator's, throughout | theirs, on each Task it fills | Launch |
| [Your own Pool](https://services.dev/docs/people/pool.md) | `Pool({...})`, at `/<pool>` on your brand | yours · yours · your brand | none | Launch |
| [An existing door](https://services.dev/docs/people/pool/door.md#use-an-existing-door) | `door: 'gigs.expert'` | the door's · yours · the door | the door's, on each Task it fills | Launch |
| [Your own door](https://services.dev/docs/people/pool/door.md) | `door: 'join.lingua.example'` | yours · yours · your door | none | Team |
| [Your Pool, sold](https://services.dev/docs/people/pool/share.md#export-your-pool) | `export` on your Pool | yours · yours, for every importer | yours, paid to you | Scale |

Every source keeps one [member charter](https://services.dev/docs/people/pool/door.md#the-member-charter) that no Pool, importer or door can weaken.

## Four brands

| Brand | Where a person comes in | Door |
|---|---|---|
| [lingua](https://services.dev/docs/examples/lingua.md) | nobody; AI delivers | none |
| [api.lawyer](https://services.dev/docs/examples/legal.md) | attorneys and patent practitioners, where the client is or anywhere | gigs.lawyer |
| [apis.tax](https://services.dev/docs/examples/tax.md) | a PTIN holder prepares, a CPA or enrolled agent signs, the taxpayer authorizes, and the brand e-files under its own EFIN | gigs.tax |
| [api.forsale](https://services.dev/docs/examples/sales.md) | no credential: a closer on every deal of $50,000 and up | closers.deals |

---

- Up: [Your first paid job](https://services.dev/docs.md)
- Previous: [The manifest](https://services.dev/docs/service/manifest.md)
- Next: [Rules: how a Service meets licensing by design](https://services.dev/docs/people/rules.md)
