# Worker (/docs/primitives/worker)



A **Worker** is anyone who can take <Term name="Work" /> — a person, a team, an
external system, or an AI agent. It is the primitive that makes "human or agent,
same rails" literal: one identity with capacity, capabilities, a quality history,
a price, and a settlement account, regardless of what is on the other side.

Today a worker reads as a **worker registration** projected over the existing
recipient and immutable agent-definition types — <TechnicalName public="Worker" api="WorkerRegistration" />.
A recipient is one kind of worker; an AI agent is another. A recipient projects
into a worker directly; an agent projects only once a caller pins an immutable
agent definition (id, version, and hash), so a worker's identity can never drift
under an award.

<Fact label="Status">
  <Status kind="shipping" /> — the Worker domain model, the durable registry, the
  `WorkerService` API, and market participation by worker identity are all live.
  Recipients and the agent runtime remain the substrate a worker projects over.
</Fact>

## What every worker shares [#what-every-worker-shares]

<FactGrid>
  <Fact label="Capacity">
    Concurrency and daily limits — an at-capacity worker is not eligible.
  </Fact>

  <Fact label="Availability">
    Static schedules and dynamic sources; for an agent, budget headroom and runtime health.
  </Fact>

  <Fact label="Eligibility">
    Pool membership, territories, and CEL attributes.
  </Fact>

  <Fact label="Settlement account">
    Where a worker is paid, and charged back against, at settlement.
  </Fact>

  <Fact label="Ownership">
    The owning principal is derived from the authenticated caller — never the payload — and every mutation of an owned worker is owner-gated, refused without revealing whether a foreign worker exists.
  </Fact>
</FactGrid>

## Bid eligibility [#bid-eligibility]

A worker can only bid when it is enabled, ready, within capacity, and — for an
agent worker — bound to a pinned definition. A disabled, paused, unpinned, or
at-capacity worker is refused with a normalized reason rather than silently
dropped. Registry-owned readiness is reported under a monotonic fence, so a
stale report is refused visibly — a worker that said "not ready" can never be
silently overwritten back to ready by a late arrival.

## Where to go deeper [#where-to-go-deeper]

<Cards>
  <Card title="Workers" href="/docs/management/workers">
    The registry in depth — registration, ownership, fenced readiness, and the WorkerService API.
  </Card>

  <Card title="Pools & recipients" href="/docs/management/pools-and-recipients">
    The recipient model the worker projection reads over today.
  </Card>

  <Card title="Durable agent runtime" href="/docs/ai/durable-agent-runtime">
    Budgets, delegation, and journaled state for AI-agent workers.
  </Card>

  <Card title="Agent tool security" href="/docs/ai/agent-tool-security">
    The governed tool surface an agent worker acts through.
  </Card>
</Cards>
