# Worker

URL: /business/nouns/worker · Id: `noun:worker`

> A Worker is a Human or an Agent that fills a Role and acts on Tasks.

A Worker is a [Human](/business/nouns/human) or an [Agent](/business/nouns/agent) that fills a [Role](/business/nouns/role) and acts on [Tasks](/business/nouns/task).

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | The name the Worker goes by in a Startup. |
| `instructions` | `text` | No | How the Worker does its work. |

## Object
```json
{
  "$id": "https://api.sb/quietcopy.com/workers/worker_1",
  "$type": "Worker",
  "name": "QuietCopy",
  "instructions": "Example instructions"
}
```

## Relationships
- <a id="rel-carries"></a>A Worker **carries** many [Cards](/business/nouns/card): a Worker carries the [Cards](/business/nouns/card) issued for its [Mandates](/business/nouns/mandate); the cardholder on the rail is always the [Company](/business/nouns/company). `carries`, inverse [`carriedBy`](/business/nouns/card#rel-carried-by).
- <a id="rel-conversations"></a>A Worker **has** many [Conversations](/business/nouns/conversation): one Worker owes each [Conversation](/business/nouns/conversation) its next answer. `conversations`, inverse [`awaits`](/business/nouns/conversation#rel-awaits).
- <a id="rel-fills"></a>A Worker **fills** many [Roles](/business/nouns/role): a Worker, human or agent, fills a [Role](/business/nouns/role) and acts under its [Permissions](/business/nouns/permission); one [Agent](/business/nouns/agent) can fill Roles in many [Startups](/business/nouns/startup). `fills`, inverse [`filledBy`](/business/nouns/role#rel-filled-by).
- <a id="rel-has-access"></a>A Worker **has access** many [Access Levels](/business/nouns/access-level): a Worker holds one [Access Level](/business/nouns/access-level) in each namespace it works in, apart from the [Role](/business/nouns/role) it fills. `hasAccess`, inverse [`workers`](/business/nouns/access-level#rel-workers).
- <a id="rel-holds"></a>A Worker **holds** many [Credentials](/business/nouns/credential): a Worker performs a [Reserved Act](/business/nouns/reserved-act) only while it holds the [Credential](/business/nouns/credential) that authorizes it, in good standing. `holds`, inverse [`heldBy`](/business/nouns/credential#rel-held-by).
- <a id="rel-mailbox"></a>A Worker **has** one [Mailbox](/business/nouns/mailbox): every Worker, [Agent](/business/nouns/agent) or [Human](/business/nouns/human), has its own [Mailbox](/business/nouns/mailbox). `mailbox`, inverse [`belongsTo`](/business/nouns/mailbox#rel-belongs-to).
- <a id="rel-practices"></a>A Worker **practices** many [Skills](/business/nouns/skill): the [Skills](/business/nouns/skill) a Worker has, each at a level, matched against what [Roles](/business/nouns/role) require. `practices`, inverse [`practicedBy`](/business/nouns/skill#rel-practiced-by).
- <a id="rel-remembers"></a>A Worker **remembers** one [Memory](/business/nouns/memory): a Worker’s own [Memory](/business/nouns/memory) of what it has learned, read by its [Functions](/business/nouns/function) and kept within its [Startup](/business/nouns/startup). `remembers`, inverse [`heldBy`](/business/nouns/memory#rel-held-by).
- <a id="rel-staffs"></a>A Worker **staffs** many [Services](/business/nouns/service): a [Service](/business/nouns/service)’s outcome is delivered by the [Agents](/business/nouns/agent) and [Humans](/business/nouns/human) who fill its [Roles](/business/nouns/role). `staffs`, inverse [`requires`](/business/nouns/service#rel-requires).
- <a id="rel-tasks"></a>A Worker **has** many [Tasks](/business/nouns/task): the Worker a [Task](/business/nouns/task) waits on; the Task sits in that Worker’s inbox until it is done. `tasks`, inverse [`assignedTo`](/business/nouns/task#rel-assigned-to).
- <a id="rel-uses"></a>A Worker **uses** many [Tools](/business/nouns/tool): the [Tools](/business/nouns/tool) a Worker may call, narrowed to its [Role](/business/nouns/role)’s [Permissions](/business/nouns/permission). `uses`, inverse [`usedBy`](/business/nouns/tool#rel-used-by).
- <a id="rel-writes"></a>A Worker **writes** many [Comments](/business/nouns/comment): every [Comment](/business/nouns/comment) names the Worker, human or agent, who wrote it. `writes`, inverse [`author`](/business/nouns/comment#rel-author).

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| [Action.ask](/business/nouns/action/ask) | Ask puts a Question to a Party, a Role, or a Worker and holds the Action `pending` with reason `awaitingInput`. | [Worker](/business/nouns/worker) | [`Action.asked`](/business/events/Action.asked) | Two-way: `try`, `send`, `do` |
| [Portfolio.brake](/business/nouns/portfolio/brake) | Brake stops one class of effects, such as sends, spend, publishes, or price changes, across a Portfolio query until it expires or is lifted. | [Worker](/business/nouns/worker) | [`Portfolio.braked`](/business/events/Portfolio.braked) | None. |
| [Task.claim](/business/nouns/task/claim) | Claim takes an offered Task from a shared queue or a handoff and makes the calling Worker its assignee. | [Supply Manager](/agents/operations/supply-manager) | [`Task.claimed`](/business/events/Task.claimed) | None. |
| [Task.complete](/business/nouns/task/complete) | Complete marks a Task done and resumes the Action that waited on it. | [Supply Manager](/agents/operations/supply-manager) | [`Task.completed`](/business/events/Task.completed) | None. |
| [Dispute.decide](/business/nouns/dispute/decide) | Decide rules on an answered Dispute for the buyer, the seller, or a split, and releases or returns the held amount. | [Billing Specialist](/agents/finance/billing-specialist) | [`Dispute.decided`](/business/events/Dispute.decided) | One-way (money, customer): `send`, `do` |
| [Portfolio.lift](/business/nouns/portfolio/lift) | Lift ends a brake before it expires, and the Actions it held resume their review and delay windows. | [Worker](/business/nouns/worker) | [`Portfolio.lifted`](/business/events/Portfolio.lifted) | None. |
| [Task.next](/business/nouns/task/next) | Next returns the oldest open Task the calling Worker’s Roles may claim, without claiming it. | [Worker](/business/nouns/worker) | [`Task.offered`](/business/events/Task.offered) | None. |
| [Action.pause](/business/nouns/action/pause) | Pause holds a pending Action past the close of its delay window until a watcher resumes, redirects, or cancels it. | [Worker](/business/nouns/worker) | [`Action.paused`](/business/events/Action.paused) | None. |
| [Watch.pause](/business/nouns/watch/pause) | Pause stops a Watch delivering while its Events keep queuing; the platform pauses a Watch whose deliveries fail for three days. | [Worker](/business/nouns/worker) | [`Watch.paused`](/business/events/Watch.paused) | None. |
| [Integration.pause](/business/nouns/integration/pause) | Pause stops every call through an Integration at once and keeps its token and cursor. | [Worker](/business/nouns/worker) | [`Integration.paused`](/business/events/Integration.paused) | Two-way: `try`, `send`, `do` |
| [Integration.reconnect](/business/nouns/integration/reconnect) | Reconnect re-approves an Integration in place, keeping its id and cursor, so nothing re-imports. | [Worker](/business/nouns/worker) | [`Integration.reconnected`](/business/events/Integration.reconnected) | Two-way: `try`, `send`, `do` |
| [Action.resume](/business/nouns/action/resume) | Resume ends a pause and lets the Action run as reviewed, or reopen what remained of its delay window. | [Worker](/business/nouns/worker) | [`Action.resumed`](/business/events/Action.resumed) | None. |
| [Watch.resume](/business/nouns/watch/resume) | Resume restarts a paused Watch and delivers the Events it held, oldest first. | [Worker](/business/nouns/worker) | [`Watch.resumed`](/business/events/Watch.resumed) | None. |
| [Integration.resume](/business/nouns/integration/resume) | Resume restarts a paused Integration from its cursor and releases the Actions that waited on it. | [Worker](/business/nouns/worker) | [`Integration.resumed`](/business/events/Integration.resumed) | Two-way: `try`, `send`, `do` |
| [Task.return](/business/nouns/task/return) | Return hands an offered Task back to its sender, unchanged, with the reason the receiver cannot take it. | [Supply Manager](/agents/operations/supply-manager) | [`Task.returned`](/business/events/Task.returned) | None. |
| [Integration.revoke](/business/nouns/integration/revoke) | Revoke ends an Integration at once: its token is revoked with the upstream, and every record it brought in stays. | [Security Engineer](/agents/engineering/security-engineer) | [`Integration.revoked`](/business/events/Integration.revoked) | None. |
| [Watch.rotate](/business/nouns/watch/rotate) | Rotate issues a new signing secret for a Watch and signs with both secrets until the old one expires. | [Worker](/business/nouns/worker) | [`Watch.rotated`](/business/events/Watch.rotated) | None. |
| [Noun.trace](/business/nouns/noun/trace) | Trace lists every Verb, Process, Offer, Dashboard and Version that references a Noun, so an edit or a retire shows its reach first. | [Worker](/business/nouns/worker) | [`Noun.traced`](/business/events/Noun.traced) | None. |
| <a id="create"></a>[Worker.create](/business/nouns/worker/create) | Creates a Worker. Inherited from [Noun](/business/nouns/noun). | None. | `Worker.created` | Two-way: `try`, `send`, `do` |
| <a id="get"></a>[Worker.get](/business/nouns/worker/get) | Returns one Worker by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[Worker.list](/business/nouns/worker/list) | Returns Workers, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="update"></a>[Worker.update](/business/nouns/worker/update) | Changes the given properties of a Worker. Inherited from [Noun](/business/nouns/noun). | None. | `Worker.updated` | Two-way: `try`, `send`, `do` |
| <a id="delete"></a>[Worker.delete](/business/nouns/worker/delete) | Deletes a Worker; its history is kept. Inherited from [Noun](/business/nouns/noun). | None. | `Worker.deleted` | One-way: `send`, `do` |

## Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.

| Operation | `owner` | `admin` | `member` | `viewer` |
| --- | --- | --- | --- | --- |
| `Worker.create` | Yes | Yes | Yes | No |
| `Worker.get` | Yes | Yes | Yes | Yes |
| `Worker.list` | Yes | Yes | Yes | Yes |
| `Worker.update` | Yes | Yes | Yes | No |
| `Worker.delete` | Yes | Yes | Yes | No |

## Call it

**Ask**

```text
Add a worker to TutorLoop.
```

**API**

```bash
curl -X POST https://api.sb/tutorloop.com/workers \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"TutorLoop"}'
```

```json
{
  "api": "https://api.sb/tutorloop.com",
  "worker": {
    "$id": "https://api.sb/tutorloop.com/workers/worker_1",
    "$type": "Worker",
    "name": "TutorLoop"
  },
  "action": {
    "$id": "https://api.sb/tutorloop.com/actions/action_1",
    "operation": "Worker.create",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/tutorloop.com/actions/action_1"
  }
}
```

**SDK**

```ts
import { $ } from 'startup-builder'

const worker = await $.Worker.create({ name: 'TutorLoop' })
```

**CLI**

```bash
npx startup-builder do Worker.create --json '{"name":"TutorLoop"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Worker.create({ name: 'TutorLoop' })"
  }
}
```

## Example
At a tax-preparation service, Nora the [Payroll Specialist](/agents/people/payroll-specialist) and a credentialed preparer are both Workers. Each fills a [Role](/business/nouns/role), works [Tasks](/business/nouns/task), and keeps its own [Memory](/business/nouns/memory).