Everyone gets an app

The running jobjob_7Hq2 · accepted · document.fr-CA.pdf · $49.00 final

Who takes part in a job is worked out from your Service, never declared, and each of them gets the app and the calls their part needs.

You never list who takes part in a job. check reads it off your Service: who orders it, who the work is for, who acts at each step, and who runs the business. Each of them gets an app, and each app shows only the calls their part allows.

Translation, as npx services.dev writes it, has no person in it, so check finds two apps:

Terminal
$ npx services.dev check
services/translation.ts · 4 lines · $49 per job, within 48 hours, charged on delivery.
  who     AI delivers every job.
  steps   draft · ai → review · ai · adversarial
  agent   order_translation · 24 of 30 words · bought job_7Hq2 · $49.00 · no person
  ledger  +$49.00 · AI $0.84 (example) · you $48.16
  margin  at least $39.20 a job (80%) · a job that stops costs you at most $9.80
  apps    customer portal · owner console

Grow it with a question for the buyer and a sworn translator's signature, and the third app appears. Nothing declared it:

Terminal
$ npx services.dev check
services/translation.ts · 13 lines · $89 per job, within 48 hours, charged on delivery.
  who     A translator signs every document before delivery. (rules 2026-10) The buyer answers at glossary.
  roles   translator · sworn translator · from sworn-translators · $30 an act
  steps   glossary · buyer · answer → translate · ai → harden · ai · adversarial · 2 lenses → sign · translator · * · stamped
  bounds  reserved sign to sworn translator
  agent   order_translation · 25 of 30 words · job_7Hq2 waits on party
  ledger  +$89.00 · AI $1.26 (example) · translator $30.00 · you $57.74
  margin  at least $41.20 when the first translator signs ($89.00 − $30.00 translator − $17.80 AI cap) · $26.20 at the ladder's cap, the lower of 50% and what the floor leaves · $11.20 after a decline and a second translator
          a job that stops costs you at most $47.80
  apps    customer portal · delivery portal · owner console

The signer is on the ledger, the buyer is on the glossary step, and the delivery portal is where the signer signs.

check --who prints, for one Service, the doer of every step, why it is theirs, how they are paid, and the plan its line needs. apis.tax's annual return:

captured/tax-who.txt · magic values: none
$ npx services.dev check --who services/annual-return.ts
services/annual-return.ts · Annual Return · 12 steps · $1,800 per return, charged when the federal return is accepted
  consent    party         the owner, as officer · an ask: the §7216 consent · nothing · Free
  organizer  party         the owner · an ask: upload the request list · nothing · Free
  compute    code          schedules, your code · by: schedules, citing each one · nothing · Free
  draft      ai            AI, citing the workpapers · the default · AI, at cost · Free
  check      ai            AI, with three adversarial lenses · the default · AI, at cost · Free
  sign       credentialed  a signer from practitioners: a PTIN, and a CPA licence or an enrolled agent's card, as the paid preparer for the brand's firm · rules: sign is reserved · $45 + $15 a jurisdiction an act · Launch: roles.signer.pool at :34
  authorize  party         the owner, id-verified · an ask: Form 8879-CORP or 8879-PE · nothing · Free

Each doer is a rung of who does the step.

WhoTheir partTheir appMoneyPlan
buyerpays, holding a key with a cap; often an agentcustomer portalpays the price, held until the fact it namesFree
clientthe party the work is for, when it isn't the buyer: a party input. Only the client sets the choices that are theirs to makecustomer portal, or a link that needs no accountpays nothing, unless they're also the buyerFree
membera credentialed person who does a step, from a Pooldelivery portalpaid the fee fixed at post, on every outcome of the actLaunch
staffyour own team, at the steps you keep in houseowner consoleon your own payroll; no fee lineFree
tenantan integrator reselling your Service as its own offertenant consolepays your price and sets its ownTeam
practicea buyer that brings its own professionals to do the stepspractice consolepays your price; its professionals are its ownScale
owneryou: every job, every ledger line, the line where people come inowner consolekeeps the ledger's last lineFree

A credentialed step needs a person who holds the credential. You and two staff sign on Free, with a role and no pool. Past that, a Pool's members come from one of five places, each one line:

FromOne lineRoster · rules · name members seePlacementPlan
A Pool you rentpool: 'gigs.expert/translators'the operator's, throughouttheirs, on each Task it fillsLaunch
Your own PoolPool({...}), at /<pool> on your brandyours · yours · your brandnoneLaunch
An existing doordoor: 'gigs.expert'the door's · yours · the doorthe door's, on each Task it fillsLaunch
Your own doordoor: 'join.lingua.example'yours · yours · your doornoneTeam
Your Pool, soldexport on your Poolyours · yours, for every importeryours, paid to youScale

Every source keeps one member charter that no Pool, importer or door can weaken. Which step each person does, and how they're paid, is who does the step.

Each credential reaches the operations its holder may call, and no more. This table is generated from the credential and operation registries:

WhoHoldsCanOperationsReachesA person?
a buyersecret key, test mode, sk_test_order, read, accept, send back, cancel, end, watch, and run test clocks37http, cli, mcp, sdk
a buyersecret key, sk_live_order, read, accept, send back, cancel, end, watch35http, cli, mcp, sdk
an agent a party delegated, scoped by Service and timedelegated key, dlg_order within its cap; complete answer and upload asks; read that party's jobs31http, mcp, sdk

A key can order, wait, accept and send back, so an agent can buy a whole job. Some acts need the person themselves: signing, consenting, directing, deciding and approving. Those take a person's own session or the link their ask carries, and they are never an MCP tool. An agent that reaches one gets the link first in next, to hand to the person it asks, and the calls it can still make:

Output
→ tools/call get_job {"id":"job_7Hq2","wait":50}
# the text an agent reads first, beside structuredContent
← job_7Hq2 · waiting · on party · $49.00 held
  next  hand http://localhost:8787/a/ask_7Hq2?t=8FaWT5EoCj4h-uMyjlXp3_ to the person it asks
  next  get_job {"id":"job_7Hq2"}
  next  cancel_job {"id":"job_7Hq2"}

If it tries to finish the job itself, the answer is needs_the_party, with the same link.

So a person keeps every act that is theirs, and an agent still does everything else.

Choose your shape: the reference Service that looks like yours, what each job leaves you, and the plans it climbs.