Dispatch, watch, and coordinate a fleet of agents.
Fleet turns autonomous coding agents into first-class Kubernetes resources. Spawn and hand off Agent CRs, follow any workload's durable session stream live, and keep a human in the loop where it matters — with spawn, handoff, checkpoint, and merge as reconciled operations, not scripts that scroll off a terminal.
An agent is a resource, not a runaway process.
Ad-hoc agent runners are a process and a log file — you can't coordinate them, resume them, or prove what they did. Fleet models coordination as reconciled Kubernetes resources.
Every agent and every task is a CR — Agent, AgentTask, HumanPrompt — reconciled by an operator into a runner Job. Agents coordinate over NATS/JetStream: they claim work with advisory TTL leases on a shared blackboard, message and broadcast, and hand tasks off with a live offer→accept handshake. Progress is checkpointed — a git WIP ref, a context summary, active claims — so an agent can suspend and resume without losing its place. And the whole thing is replayable: the live transcript is a durable JetStream stream, so you can watch, leave, and pick up exactly where it is.
An agent is a Kubernetes resource, not a script that scrolled off your terminal. Spawn, hand off, checkpoint, merge — all reconciled, all replayable.
Every agent, its phase, its focus.
The Fleet panel is a live card per Agent — presence, phase, and what it's working on right now, drawn from status.focus. Values illustrative.
| agent | phase | intent | focus |
|---|---|---|---|
| migrate-aion-web-7f3 | Running | port aion/web to rules_ci | ci-migration |
| grade-plugin-tbzl-a1 | Running | add a coverage grader | testing |
| fix-flaky-cache-9c2 | Suspended | checkpointed at ck-3 | rbe |
| close-issue-42-2b | Done | merged rules_cc_cross#42 | — |
The whole campaign, as a lineage.
The Provenance panel draws the AgentTask DAG: parentRef is a spawn, predecessorRef is a handoff, mergedFrom is a merge. Nothing about how work moved is implicit. Values illustrative.
| task | phase | lineage |
|---|---|---|
| campaign-abc12 | Running | root |
| make-tbzl-ready-d4 | HandedOff | ← predecessor campaign-abc12 |
| coverage-grader-e5 | PROpened | ← parent make-tbzl-ready-d4 |
| merge-wave-f6 | Merged | mergedFrom [coverage-grader-e5, guards-a7] |
Follow it live — or catch up later.
The transcript is a durable JetStream stream (sessions.<kind>.<name>.stream). Each event carries its stream sequence, so a reconnecting client resumes from the last event it saw — surviving a pod suspend or restart.
Spawn → coordinate → checkpoint → merge.
Every step is a reconciled operation you can see and replay.
Spawn
spawn_subagent (or the Control panel) creates an Agent / AgentTask CR; the operator reconciles it into a runner Job. Lineage.parentRef records where it came from.
Coordinate
Agents claim work with advisory TTL leases on a JetStream KV blackboard, message over NATS subjects, and broadcast — so two agents don't collide on the same task.
Checkpoint
An agent appends a CheckpointMeta — git WIP ref, context summary, active claims, pending answers — then may suspend. Resume is a spawn with resumeFrom set to that checkpoint.
Handoff / merge
A live offer→accept handshake hands a task to another profile with its HandoffContext; merge folds branches and artifacts into one task, recording lineage.mergedFrom.
Escalation blocks on a human.
Autonomy with a stop valve — the agent asks, and waits.
How the human gate works
- escalate raises a HumanPrompt CR — approval, choice, input, or notify — and the agent blocks until you answer. The console renders the prompt (its meridian spec) as a card with the right controls.
- Your answer patches the CR's status.response and phase to Answered over a NATS reply subject, unblocking the suspended agent — an auditable who-approved-what.
- handoff is confirm-gated by the offer→accept handshake; a claim is an advisory TTL lease (compare-and-set) — coordination you can reason about, not fire-and-forget.
- Every coordination action is a durable AgentEvent (spawned, checkpointed, handed-off, merged, human-prompted, answered) on the audit stream — the fleet's own record of what happened.
Coordination you can prove.
The alternative runs each agent as an ephemeral process — impossible to resume, coordinate, or audit.
Handoff is an offer the receiver accepts — not fire-and-forget. Escalation blocks on a human. Coordination you can prove.
source · github.com/fastverk/plugin-fleet · tools: spawn_subagent, list_agents, handoff, merge, escalate, checkpoint
Prove it's safe to merge.
fleet is one of 14 plugins in the fastverk console — hosted, or in your own cloud.