---
title: "What a person can do"
url: https://services.dev/docs/people/acts
captured: [ask-the-client.txt, member-acts.txt, pool-register.txt, task-packet.txt, task-sheet.txt, task-wire.txt]
codes: [defects_required, evidence_missing, guard_refused, ineligible, memo_required, needs_a_person, needs_direction, needs_the_party, not_cleared, not_contestable, not_on_site, question_open, reserved, task_taken]
---
# What a person can do

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

> Every act a person takes on a Task, from the claim to the attestation, what it carries, whether it is paid, and what it does to the job. Each one is the person's own, in the delivery portal or the member CLI, and never an MCP tool or a key's.

## The acts

| Act | [Verb](https://services.dev/docs/reference/task-verbs.md) | In the portal | Carries | [Paid](https://services.dev/docs/people/pool/pay.md) | The job |
|---|---|---|---|---|---|
| **claim** | `claim` | Claim | nothing | no | the Task holds for this member until `held_until`, and leaves every other feed |
| **pass** | none | Pass · free | an optional reason | no, and never scored | counted against the Task, never the member; under `cascade` the next member is offered it at once |
| **clear** | `start` | Clear | each `clear` statement, word for word | no | the conflict check runs again, and the packet opens to this member alone |
| **attest** (approve, sign, done) | `complete` | Sign, Attest or Adopt | `{ member, credential, region, hash, rules }`, frozen on the record | yes | the gate commits it, and a reserved act is now performed |
| **attest, qualified** | `complete` | Sign, with a reservation | the same, plus a reservation the member writes, which travels with the output | yes | the gate commits it, and the reservation is part of the deliverable |
| **attest, edited** | `complete` | Sign, with the file edited | a revised file: the attestation binds the hash before and after, and the record reads `sign · person · edited · sha256:a→b` | yes | the gate commits the revised file; a step may ask for an AI recheck of the edit first |
| **send back** | `complete` | Send back | a defects note, required, and the step it returns to | yes | returns to the step named, by default the one before |
| **decline** | `complete` | Decline | a reasoned memo on the merits, required, for the client alone | yes, and never scored | waits on the client's direction: another member, or an end |
| **arrive** | `start` | Check in | the device's fix, read only now and at completion | no | in a [work register](https://services.dev/docs/people/pool/register.md), the Task reads `on_site` |
| **complete** | `complete` | Complete | every evidence item the step names, hashed together | yes | the gate commits the visit, and the charge can release |
| **complete, party absent** | `complete` | No one came | the member's own evidence, after `site.grace` | yes, the full fee | the Task is `done · party_absent`; nothing waits on the party |
| **party silent** | `complete` | none: the clock writes it | the member's evidence, after `site.wait` with a party-held item unfinished | yes, the full fee | the Task is `done · completed · party_silent`; the client may contest it |
| **step aside** (recuse) | none | Step aside | the parties a conflict names, added to the member's own ledger | no, and never scored | the Task reopens at once, and the member is screened from every Task on the subject |
| **release** | `unassign` | Give it back · free | nothing | no | the Task opens again at its fee, never scored |
| **extend** | none | Extend my hold, once | nothing | no | the hold runs as long again, once, never past the due date |
| **question**, **note**, **flag** | `block` for a question | Ask, Post a note, Flag | a message in the job's thread | no | a question pauses the deadline and the hold until the party answers (`unblock`); a flag is a signal the owner sees, and never blocks |
| **contest** | `escalate` | Contest the send-back | a reason, against a send-back their own attested work received | no | a [credentialed peer](https://services.dev/docs/people/pool/track.md#contests) rules it when a rules row reserves the act, and staff rule the rest; only an upheld send-back counts on the track record |

### Decline or step aside?

| | Decline | Step aside |
|---|---|---|
| Why | the work, on its merits: the member won't put their name to it as it stands | the member: a conflict with a party, before they read the matter |
| What they write | a memo the client alone reads, saying what's wrong | the parties the conflict names, hashed into their own ledger |
| Paid | yes, at the Task's fee | no |
| Scored | never | never |
| The job | waits on the client's direction: another member, or an end | the Task reopens at once to everyone else, and the member is kept off the subject |
| In the legal example | "Claim 1 as drafted doesn't read on the one-handed lock in the disclosure" | a party they represent in another matter |

## On each surface

| Op | API | CLI | MCP | SDK | Who |
|---|---|---|---|---|---|
| `task.claim` | `POST /tasks/:id/claim` | `tasks claim <task>` | never | never | member session |
| `task.pass` | `POST /tasks/:id/pass` | `tasks pass <task> <reason>` | never | never | member session |
| `task.clear` | `POST /tasks/:id/clear` | `tasks clear <task>` | never | never | member session |
| `task.attest` | `POST /tasks/:id/attest` | `tasks attest <task> k=v …` | never | never | member session |
| `task.send_back` | `POST /tasks/:id/send_back` | `tasks send-back <task> <defects>` | never | never | member session |
| `task.decline` | `POST /tasks/:id/decline` | `tasks decline <task> <memo>` | never | never | member session |
| `task.release` | `POST /tasks/:id/release` | `tasks release <task>` | never | never | member session |
| `task.message` | `POST /tasks/:id/messages` | `tasks message <task> <kind> <text>` | never | never | member session |
| `task.contest` | `POST /tasks/:id/contest`, `POST /owner/tasks/:id/contest` | `tasks contest <task> <reason>` | never | never | member session, owner session |
| `task.recuse` | `POST /tasks/:id/recuse` | `tasks recuse <task>` | never | never | member session |
| `task.extend` | `POST /tasks/:id/extend` | `tasks extend <task>` | never | never | member session |
| `task.arrive` | `POST /tasks/:id/arrive` | `tasks arrive <task>` | never | never | member session |
| `task.complete` | `POST /tasks/:id/complete` | `tasks complete <task> k=v …` | never | never | member session |

| App | Where |
|---|---|
| delivery portal | `/<pool>`, each Task's packet |
| member CLI | `npx services.dev tasks …`, with `SERVICES_DEV_SESSION` from `members login` |
| owner console | the ruling on a contest no rules row reserves |

## Each act, captured

### claim and clear

```txt
→ POST /reviews/tsk_7Hq2/claim
```

```txt title="captured/task-packet.txt · magic values: client.email = signs@example.test, member = mbr_eligible"
← tsk_7Hq2 · claimed · attorney · sign · US-NY · $75.00 · signals collections, recipient_elsewhere · 30 min · $150.00 an hour · due 2026-10-27 14:02
→ POST /reviews/tsk_7Hq2/clear {"attest":[]}
← 403 ineligible · clearance: Attest each statement before the packet opens: I checked conflicts across my full book, including my firm.
→ POST /reviews/tsk_7Hq2/clear {"attest":["I checked conflicts across my full book, including my firm"]}
← tsk_7Hq2 · cleared · attorney · sign · US-NY · $75.00 · signals collections, recipient_elsewhere · 30 min · $150.00 an hour · due 2026-10-27 14:02
```

### pass

```txt
→ POST /reviews/tsk_7Hq2/pass {"reason":"fee"}   # as mbr_7Hq2
```

```txt title="captured/task-sheet.txt · magic values: client.email = signs@example.test, member = mbr_eligible"
← 200 tsk_7Hq2 · open · attorney · sign · US-NY · $75.00 · signals collections, recipient_elsewhere · 30 min · $150.00 an hour · due 2026-10-27 14:02
```

### attest

```txt
→ POST /reviews/tsk_7Hq2/attest {"checklist":["the claims read on the disclosure","every inventor is named","a reasonable inquiry was made"]}   # as mbr_7Hq2
```

```txt title="captured/member-acts.txt · magic values: applicant.email = signs@example.test, client.email = signs@example.test, member = mbr_eligible"
← 200 tsk_7Hq2 · done · practitioner · sign · * · $150.00 · attested · 60 min · $150.00 an hour · due 2026-10-30 14:02
  14:02 · step.committed · sign · person · patent agent · * · mbr_7Hq2
  14:02 · pay.accrued · mbr_7Hq2 · attest · $150.00
  attested {"member":"mbr_7Hq2","credential":"patent agent","region":"*","hash":"sha256:27d7bdec3be22fd633af279053beef779c9c5080629816867bbfc4e4593a5b33","rules":"2026-10"}
```

### attest, qualified

```txt
→ POST /reviews/tsk_7Hq2/attest {"checklist":["the claims read on the disclosure","every inventor is named","a reasonable inquiry was made"],"reservation":"Claim 3 rests on a test the inventor has not yet run."}   # as mbr_7Hq2
```

```txt title="captured/member-acts.txt · magic values: applicant.email = signs@example.test, client.email = signs@example.test, member = mbr_eligible"
← 200 tsk_7Hq2 · done · practitioner · sign · * · $150.00 · attested · 60 min · $150.00 an hour · due 2026-10-30 14:02
  14:02 · step.committed · sign · person · patent agent · * · mbr_7Hq2 · reservation sign/reservation.txt
  14:02 · pay.accrued · mbr_7Hq2 · attest · $150.00
  attested {"member":"mbr_7Hq2","credential":"patent agent","region":"*","hash":"sha256:27d7bdec3be22fd633af279053beef779c9c5080629816867bbfc4e4593a5b33","rules":"2026-10"}
  reservations [{"step":"sign","member":"mbr_7Hq2","path":"sign/reservation.txt","sha256":"sha256:840bb8bb55b0955ba5fd34f699cf596a3a00bd1eb9875716da571b63f1e35bbf"}]
```

### send back

```txt
→ POST /reviews/tsk_7Hq2/send_back {}   # as mbr_eligible
```

```txt title="captured/member-acts.txt · magic values: applicant.email = signs@example.test, client.email = signs@example.test, member = mbr_eligible"
← 422 defects_required: A send-back names its defects, so sign's work can be redone against them.
```

```txt
→ POST /reviews/tsk_7Hq2/send_back {"defects":"Claim 2 reaches past what the drawings show.","to":"draft"}   # as mbr_eligible
```

```txt title="captured/member-acts.txt · magic values: applicant.email = signs@example.test, client.email = signs@example.test, member = mbr_eligible"
← 200 tsk_7Hq2 · done · practitioner · sign · * · $150.00 · sent back · 60 min · $150.00 an hour · due 2026-10-30 14:02
  14:02 · job.sent_back · mbr_eligible · to draft · "Claim 2 reaches past what the drawings show."
  14:02 · pay.accrued · mbr_eligible · send_back · $150.00
  14:02 · task.posted · tsk_7Hq3 · $150.00 · dispatch cascade
  14:02 · task.offered · tsk_7Hq3 · mbr_eligible · cascade
```

### decline

```txt
→ POST /reviews/tsk_7Hq2/decline {}   # as mbr_eligible
```

```txt title="captured/member-acts.txt · magic values: applicant.email = signs@example.test, client.email = signs@example.test, member = mbr_eligible"
← 422 memo_required: A decline carries a reasoned memo, for the client alone.
```

```txt
→ POST /reviews/tsk_7Hq2/decline {"memo":"Claim 1 as drafted doesn't read on the one-handed lock in the disclosure; I won't sign it without a narrower claim."}   # as mbr_eligible
```

```txt title="captured/member-acts.txt · magic values: applicant.email = signs@example.test, client.email = signs@example.test, member = mbr_eligible"
← 200 tsk_7Hq2 · done · practitioner · sign · * · $150.00 · declined · 60 min · $150.00 an hour · due 2026-10-30 14:02
  14:02 · task.declined · tsk_7Hq2 · mbr_eligible · memo sha256:16916696…, the client's alone
  14:02 · pay.accrued · mbr_eligible · decline · $150.00
  14:02 · job.paused · on the client's direction · sign
```

### step aside

```txt
→ POST /matters {"service":"provisional-patent","invention":[{"url":"data:text/plain,The%20invention.txt.","name":"invention.txt"}],"applicant":{"name":"Ada Lovelace","email":"signs@example.test"},"inventors":[{"name":"Ada Lovelace","email":"ada@example.com"}],"entity_size":"micro","max_usd":199,"key":"recuse"}
```

```txt title="captured/task-wire.txt · magic values: applicant.email = signs@example.test, member = mbr_eligible"
← job_7Hq2 · waiting · on claim · $199.00 held · sign · tsk_7Hq2
```

### release

```txt
→ POST /reviews/tsk_7Hq2/release {}   # as mbr_eligible
```

```txt title="captured/member-acts.txt · magic values: applicant.email = signs@example.test, client.email = signs@example.test, member = mbr_eligible"
← 200 tsk_7Hq2 · open · practitioner · sign · * · $150.00 · 60 min · $150.00 an hour · due 2026-10-30 14:02
  14:02 · task.offered · tsk_7Hq2 · mbr_eligible · cascade
```

### question

```txt
→ POST /reviews/tsk_7Hq2/messages {"kind":"question","text":"Is the lease you sent the signed copy? Write me at grace@firm.example."}   # as mbr_7Hq2
```

```txt title="captured/ask-the-client.txt · magic values: none"
← 200 msg_7Hq2 · the attorney · question · open: Is the lease you sent the signed copy? Write me at [email withheld: reply in this thread].
  14:02 · job.paused · on the client's reply · advise · tsk_7Hq2
```

### arrive and complete

```txt
→ POST /tasks/tsk_7Hq2/arrive {"fix":{"lat":48.8556,"lng":2.3605,"accuracy_m":12}}   # as mbr_eligible, 3 Nov 13:56
```

```txt title="captured/pool-register.txt · 200 · tsk_7Hq2 · on_site · 38 m from the site · 4 min before the window · magic values: client.email = signs@example.test, member = mbr_eligible"
← 200 · tsk_7Hq2 · on_site · 38 m from the site · 4 min before the window
```

```txt
→ POST /tasks/tsk_7Hr6/complete {"party_absent":true,"check_out":{"fix":{"lat":48.8662,"lng":2.3411,"accuracy_m":11}}}   # as mbr_eligible, 4 Nov 10:16: on site since 09:58, and no one came to the door
```

```txt title="captured/pool-register.txt · 200 · tsk_7Hr6 · done · party_absent · sha256:91c4e2d07b3a · magic values: client.email = signs@example.test, member = mbr_eligible"
  10:16 · step.committed · attend · person · certified interpreter · FR · mbr_eligible · party_absent after site.grace 15min
  10:16 · pay.accrued · mbr_eligible · complete · party_absent · $90.00
  10:16 · job.charged · job_7Hr6 · $140.00 · released on party_absent
```

### contest

```txt
→ POST /reviews/tsk_7Hq2/contest {"reason":"The application names every inventor the applicant gave."}   # as mbr_eligible
```

```txt title="captured/member-acts.txt · magic values: applicant.email = signs@example.test, client.email = signs@example.test, member = mbr_eligible"
← 200 tsk_7Hq2 · done · practitioner · sign · * · $150.00 · attested · contested
  14:02 · task.contested · tsk_7Hq2 · mbr_eligible · "The application names every inventor the applicant gave."
  14:02 · task.posted · tsk_7Hv5 · contest of tsk_7Hq2 · $150.00, funded by the brand · cascade to peers who hold patent agent · blind to both names
```

```txt
→ POST /reviews/tsk_7Hv5/attest {"output":{"ruling":"upheld","memo":"The inventor list matches the declaration; the send-back was right on claim 2."}}   # as mbr_7Hq9, the peer the contest Task reached
```

```txt title="captured/member-acts.txt · magic values: applicant.email = signs@example.test, client.email = signs@example.test, member = mbr_eligible"
← 200 tsk_7Hv5 · done · contest · ruled · upheld · $150.00
  14:40 · task.ruled · tsk_7Hq2 · upheld · by peer · mbr_7Hq9 · patent agent · no finding of bad faith
  14:40 · pay.accrued · mbr_7Hq9 · attest · $150.00
```

## As the wire serves them

| Answer | Its fields |
|---|---|
| each act | the [Task](https://services.dev/docs/reference/objects.md#task), whole |
| the packet, once cleared | the [packet](https://services.dev/docs/reference/objects.md#packet) |
| an attestation, on the record | the [attestation](https://services.dev/docs/reference/objects.md#attestation) |
| a refusal's rule | the [rule_ref](https://services.dev/docs/reference/objects.md#rule_ref) |

```txt
→ POST /reviews/tsk_7Hq2/claim {}   # as mbr_eligible
```

```json title="captured/task-wire.txt · 200 · tsk_7Hq2 · claimed · magic values: applicant.email = signs@example.test, member = mbr_eligible"
{
  "id": "tsk_7Hq2",
  "object": "task",
  "livemode": false,
  "pool": "attorneys",
  "role": "practitioner",
  "status": "claimed",
  "fields": {
    "act": "sign",
    "region": "*",
    "fee_usd": 150,
    "signals": []
  },
  "est": {
    "minutes": 60,
    "from": "step"
  },
  "hourly_usd": 150,
  "due": "2026-10-30T14:02:11.000Z",
  "held_until": "2026-10-26T14:02:11.000Z",
  "simulated": true
}
```

```txt
→ GET /reviews/tsk_7Hq2/packet   # as mbr_eligible: the packet
```

```json title="captured/task-wire.txt · 200 · tsk_7Hq2 · packet · magic values: applicant.email = signs@example.test, member = mbr_eligible"
{
  "object": "packet",
  "task": "tsk_7Hq2",
  "job": "job_7Hq2",
  "service": "provisional-patent",
  "step": "sign",
  "act": "sign",
  "summary": "Provisional Patent Application: A provisional application, drafted, examined, filed. Done so far: consent, questions, draft, examine. Yours: sign.",
  "input": {
    "invention": [
      {
        "url": "data:text/plain,The%20invention.txt.",
        "name": "invention.txt"
      }
    ],
    "applicant": {
      "name": "Ada Lovelace"
    },
    "inventors": [
      {
        "name": "Ada Lovelace"
      }
    ],
    "entity_size": "micro"
  },
  "sheet": {
    "parties": [
      {
        "as": "applicant",
        "name": "Ada Lovelace"
      },
      {
        "as": "inventors",
        "name": "Ada Lovelace"
      }
    ],
    "kind": "Provisional Patent Application"
  },
  "artifacts": [
    {
      "path": "draft/application.txt",
      "sha256": "sha256:bf3b849629a4666142bccd9481a6d1048aa03f455313f713f8321984a0a57a2b",
      "versions": 1,
      "url": "http://localhost:8787/matters/job_7Hq2/files/bf3b849629a4666142bccd9481a6d1048aa03f455313f713f8321984a0a57a2b"
    },
    {
      "path": "draft/exam.txt",
      "sha256": "sha256:190897a68763a61887a14ab3697e3d7f854268b7fed07c6a0c9b1a51e8c503ad",
      "versions": 1,
      "url": "http://localhost:8787/matters/job_7Hq2/files/190897a68763a61887a14ab3697e3d7f854268b7fed07c6a0c9b1a51e8c503ad"
    }
  ],
  "reviews": [
    {
      "step": "examine",
      "verdict": "pass",
      "report": {
        "step": "examine",
        "of": "draft",
        "kind": "adversarial",
        "round": 0,
        "lenses": [
          "eligibility",
          "novelty",
          "obviousness",
          "written description"
        ],
        "findings": [],
        "signals": {
          "eligibility": false,
          "novelty": false,
          "obviousness": false,
          "written description": false
        },
        "verdict": "pass"
      }
    }
  ],
  "answers": [
    {
      "step": "questions",
      "answer": "Simulated answer."
    }
  ],
  "checklist": [
    "the claims read on the disclosure",
    "every inventor is named",
    "a reasonable inquiry was made"
  ],
  "stamps": true,
  "record": "consent · applicant · consent | questions · applicant · answer | draft · ai | examine · ai · adversarial · 4 lenses · pass",
  "signals": [],
  "clock": {
    "due": "2026-10-30T14:02:11.000Z",
    "hold_until": "2026-10-26T14:02:11.000Z",
    "extended": false
  },
  "hash": "sha256:27d7bdec3be22fd633af279053beef779c9c5080629816867bbfc4e4593a5b33",
  "simulated": true
}
```

```txt
→ POST /reviews/tsk_7Hq2/attest {"checklist":["the claims read on the disclosure","every inventor is named","a reasonable inquiry was made"]}   # as mbr_eligible: the attestation
```

```json title="captured/task-wire.txt · 200 · tsk_7Hq2 · done · magic values: applicant.email = signs@example.test, member = mbr_eligible"
{
  "id": "tsk_7Hq2",
  "object": "task",
  "livemode": false,
  "pool": "attorneys",
  "role": "practitioner",
  "status": "done",
  "fields": {
    "act": "sign",
    "region": "*",
    "fee_usd": 150,
    "signals": []
  },
  "est": {
    "minutes": 60,
    "from": "step"
  },
  "hourly_usd": 150,
  "due": "2026-10-30T14:02:11.000Z",
  "outcome": "attested",
  "simulated": true
}
```

```txt
→ GET /owner/matters/job_7Hq2   # the owner: record[27].attested, the attestation the gate froze
```

```json title="captured/task-wire.txt · 200 · attested · magic values: applicant.email = signs@example.test, member = mbr_eligible"
{
  "member": "mbr_eligible",
  "credential": "patent attorney",
  "region": "*",
  "rules": "2026-10",
  "affirmed": [
    "the claims read on the disclosure",
    "every inventor is named",
    "a reasonable inquiry was made"
  ],
  "fields": [
    "application",
    "exam"
  ],
  "hash": "sha256:27d7bdec3be22fd633af279053beef779c9c5080629816867bbfc4e4593a5b33"
}
```

## Refusals

| Code | Act | HTTP |
|---|---|---|
| [`ineligible`](https://services.dev/docs/reference/errors.md#ineligible) | claim, clear | 403 |
| [`task_taken`](https://services.dev/docs/reference/errors.md#task_taken) | claim, pass, clear | 409 |
| [`defects_required`](https://services.dev/docs/reference/errors.md#defects_required) | send back | 422 |
| [`memo_required`](https://services.dev/docs/reference/errors.md#memo_required) | decline | 422 |
| [`not_cleared`](https://services.dev/docs/reference/errors.md#not_cleared) | attest, send back, decline, message | 403 |
| [`reserved`](https://services.dev/docs/reference/errors.md#reserved) | attest | 403 |
| [`guard_refused`](https://services.dev/docs/reference/errors.md#guard_refused) | attest | 422 |
| [`needs_direction`](https://services.dev/docs/reference/errors.md#needs_direction) | attest | 409 |
| [`needs_the_party`](https://services.dev/docs/reference/errors.md#needs_the_party) | attest | 403 |
| [`not_contestable`](https://services.dev/docs/reference/errors.md#not_contestable) | contest | 409 |
| [`question_open`](https://services.dev/docs/reference/errors.md#question_open) | message | 409 |
| [`not_on_site`](https://services.dev/docs/reference/errors.md#not_on_site) | arrive, complete | 403 |
| [`evidence_missing`](https://services.dev/docs/reference/errors.md#evidence_missing) | complete | 422 |
| [`needs_a_person`](https://services.dev/docs/reference/errors.md#needs_a_person) | every act, from a key or a tool | 403 |

---

- Up: [human: the line](https://services.dev/docs/people.md)
- Previous: [Credentials the brand holds](https://services.dev/docs/people/brand-credentials.md)
- Next: [Declines and direction](https://services.dev/docs/people/direction.md)
