Skip to the content.

Fleet concepts

A fleet is a set of autonomous agent workers driven by one control point against one shared repository, coordinated so that no two workers edit the same region at the same time and no worker’s claim of success is believed without independent evidence. The pieces below are the vocabulary the repository uses for that arrangement.

Primary audience: a reader who has met the word “fleet” in this repository and wants the pieces named before opening any runbook.

The one-line disambiguation, because “fleet” names two different things here: this page is about the agent-worker fleet — processes that resolve issues. A box fleet — GPU and worker machines — is a separate surface with its own page, fleetctl. When a document says “fleet” without qualification, check which of the two it means.

Next action: run the read-only status example in Two safe commands. Both are non-destructive and neither needs an API key.

What problem does a fleet solve?

One agent working one issue at a time is bounded by wall-clock: a queue of a hundred issues takes a hundred sessions. Running a hundred agents at once against one shared trunk creates three problems a single agent never has, and a fleet is the machinery that answers them:

A fleet is therefore less an execution engine than a trust-and-coordination arrangement wrapped around ordinary agent processes.

How does work flow through a fleet?

The path from a filed issue to a closed one, with the coordination step that guards each hop:

  issue / goal
       │
       ▼
  admission + routing        does this issue have a scope, a route, a witness plan?
       │                     which account and tier should serve it?
       ▼
  lane + lease acquired      claim a region of the tree; a conflicting claim is REFUSED
       │
       ▼
  worker spawned             one headless agent process, one issue
       │
       ▼
  commit on the trunk        the durable effect — uncommitted work is not shipped
       │
       ▼
  witness                    an independent check the worker did not author
       │
       ▼
  monitor + reconcile        close the issue, or return it to the queue flagged

The two hops that make it a fleet rather than a batch script are the lease (before the work) and the witness (after it). Everything else is a normal agent session.

What is a worker?

A worker is one headless agent process assigned to one unit of work — in this repository, typically one GitHub issue. It runs unattended, commits its own result to the trunk, and exits. Workers are deliberately disposable: the fleet’s durable state lives in commits, leases, and ledgers, never in a worker’s memory.

The launch and rollup flow for issue-scoped workers is written down in issue-scoped headless worker dispatch; the always-on driver is the issue-dispatch loop.

What is a lane?

A lane is a named region of the repository — a set of path globs — together with the queue of work that targets it. Lanes are the unit that arbitration reasons about: two workers in disjoint lanes may run concurrently, and two workers whose lanes intersect may not. Lanes also carry routing information, since the region a change lands in implies its work tier and its commit stamp.

What is a lease?

A lease is a time-bounded claim on a lane’s tree, taken before a worker starts editing. An overlapping claim is refused rather than queued, which is what keeps a shared trunk from becoming a collision domain.

Two honest details matter for anyone reading lease state:

What is an account, and what is a seat?

An account is a named credential set for one provider — the unit the account switcher routes to. Two accounts can target the same provider, which is the point: you choose whose credential serves a given model. An account names the environment variable holding its key; the secret itself is never stored in the configuration file. See the account switcher.

A seat is one configuration-home identity a worker runs under (fak accounts is described as a “config-home registry: every CLAUDE_CONFIG_DIR seat with its disk-true identity”). Seats are the fleet’s real capacity unit: a fleet cannot run more concurrent workers than it has usable seats, whatever the host’s CPU count suggests. Seat inventory is one of the ceilings the capacity lens takes as input.

What is a wave?

A wave is a set of work items that is safe to dispatch simultaneously because their lanes and expected paths are pairwise disjoint. Waves are computed by partitioning dispatchable leaves with the same disjoint-tree rule arbitration applies at launch — a first-fit graph colouring over lane and path overlap. The number of waves is therefore the number of sequential rounds a batch needs, and it is a property of the batch’s collision structure, not a scheduling preference.

What is a monitor or supervisor?

Monitors are the read-only surfaces that answer “what is the fleet doing, and what is stuck?” — worker health, stalled hosts, and what is currently gating progress. The fleet control surface is documented as read-only by default, with mutation kept behind explicit subcommands; separate verbs cover host stall fingerprinting and watchdog restart of dead monitors.

A supervisor differs from a worker in what it may touch: it reads fleet state and may replace or reap a dead worker, but it does not resolve issues itself.

What is a witness?

A witness is an external check that the worker did not author, confirming a claimed effect. This is the fleet’s answer to credulity, and the repository states it in exactly those terms: accepted witnesses include a passing parent-rerun test, a commit audit carrying a diff witness, an independent verification verb, or an independent read-back.

The distinction the vocabulary insists on is worth quoting directly: a worker saying it is done, or a local commit mentioning an issue number, is not the issue being closed. Only a reverified resolving commit is. The full vocabulary — spawned, attempted, witnessed, closed, retried, stale — is owned by the dispatch SLO glossary.

Single agent or a fleet? A decision table

Pick the smallest arrangement that does the job. A fleet’s coordination machinery is a real cost, and it earns that cost only past a certain queue size.

  One agent session A fleet
Work shape One task you are watching A queue of independent, pre-scoped units
Coordination None needed Lanes, leases, and wave partitioning
Capacity limit Your attention Provider seats
Trust model You read the diff Witnesses and reconciliation
Failure mode You notice immediately A silent unwitnessed claim poisons the backlog
Worth it when Fewer than a handful of units The queue is long and the units are genuinely disjoint

The honest threshold: if you cannot state each unit’s expected paths in advance, you cannot partition waves, and a fleet will spend its gains on collisions.

Two safe commands you can run now

Both are read-only, need no API key, and print no host or credential identity.

Read the currently visible leases. This is the source that makes a peer’s lease visible at admission:

fak leaseref live

Captured from this repository at the commit that added this page, while a resolver fleet held four lane leases — abridged to the first record. Note what a record contains: the lane, its kind, and the path tree it claims; never a host, user, or credential:

[
  {
    "lane": "resolve-accounts",
    "lane_kind": "cluster",
    "tree": [
      "internal/accounts/**"
    ]
  },
  …
]

With no fleet running, the list is empty.

Size a fleet before starting one. The capacity lens is a dry-run calculator over Little’s law; it launches nothing:

fak fleetcap --rate 40 --session 12 --seats 8 --json

Captured output, abridged to the assessment block:

{
  "assessment": {
    "TargetRatePerHour": 40,
    "MedianSessionMinutes": 12,
    "ExactLoad": 8,
    "RequiredWorkers": 8,
    "AvailableWorkers": 8,
    "ShortfallWorkers": 0,
    "Verdict": "SUFFICIENT"
  },
  "target_rate_per_hour": 40
}

Read it as: sustaining 40 issues/hour at a 12-minute median session needs 8 concurrent workers, and 8 seats covers it. Raise --rate or lengthen --session and the verdict turns to a shortfall.

From a clone, substitute go run ./cmd/fak for fak.

What is public, what is maintainer-only, and what is private

Three different things wear the word “fleet” in this repository, and conflating them is the most common misreading. The separation is a boundary, not a disclaimer.

Layer What it is How to recognize it
Public fak capabilities The governed gateway product: policy, adjudication, routing, and audit at the tool and model boundary. Fleet operation is not part of it. Verbs tiered [frontdoor] in fak help
Repository-maintainer operations The dispatch, lease, seat, and monitoring verbs this page defines. They exist to run this repository’s backlog on a shared trunk. Verbs tiered [dev] in fak help — the tiering line reads “[frontdoor] is the product; [dev] is fak dev <verb> tooling”
Private lab infrastructure The control bridge that actually reaches lab machines, and the identities it carries. It is not in this repository. Absent by construction; the seam is a per-box report JSON

Every fleet verb named on this page is [dev]-tiered maintainer tooling. None of it ships as public product behavior, and nothing on this page should be read as a capability of a deployed fak serve gateway.

The public/private line for the box fleet is a data contract rather than a code import: the private bridge writes one report file per box, and the public tool reads, folds, and scores those files. Neither side imports the other, and the public tree names no host, channel, or token. That boundary and the gates that enforce it are documented in the GPU-server private boundary.

Where the evidence lives

If you want… Read
The terminal fleet UI/UX generation plan Fleet UI/UX generation plan
The per-agent gateway console and its address space The port is the agent
The worker launch and rollup runbook Issue-scoped headless worker dispatch
The always-on backlog driver The issue-dispatch loop
Witness, closure, and retry vocabulary Dispatch SLO glossary
What a running fleet currently reports Dispatch loop and status workflow · fleet rollup
Accounts, seats, and provider routing The account switcher
The box fleet (machines, not agents) fleetctl · fleet compute nodes
Where the private boundary falls GPU-server private boundary
Why the policy floor is the floor Policy in the kernel · security model
Overloaded names, disambiguated Product glossary · contributor concept glossary
Running a deployed gateway instead Operator route
Every other documentation route Documentation home