swayambhu

स्वयम्भू · self-born

fleetsmith is a command-line compiler for agent harnesses. One fleet.yaml becomes working agent fleets for Claude Code, opencode and goose — then it watches them run, proposes its own improvements, and puts every change in front of you as a diff.

An autonomous system that uses code, execution traces, and evaluation feedback to modify and optimize its own operating environment.

$ fleetsmith evolve fleet.yaml ▶ recorded replay · commit c1767e1

one model call. deterministic gates. git revert.

This harness improves itself. A human said no anyway.

These are two real rows from the harness’s own changelog — the first-ever evolution cycle, as the record wrote it. The first row is a change the loop proposed and a human merged. The second is a change the loop proposed and a human refused.

2026-08-04 Learned notes added to fleet-architect and skill-smith claude-code, opencode, goose evolved First real evolution cycle (fleet-gen/1, fleet-gen/2); grounded in gate_block and feedback events ▶ recorded replay · commit c1767e1
2026-08-04 Rejected a learned note for domain-analyst - evolved Duplicated `fleetsmith qa --built` drift checking in agent prose ▶ recorded replay · commit c1767e1

Swayambhu — स्वयम्भू, self-born — is a fleetsmith harness watching its own runs, evaluating them deterministically, and proposing its own improvements. The loop turns itself. But nothing it proposes becomes real until it passes the one element it can never generate: a witness.

The second row is that witness working. The rejected proposal was plausible and well-evidenced — and the reviewer turned it back, recording the reason verbatim in decisions.jsonl. Most systems would have merged it. This one shows the no.

A self-born system, witnessed. The model proposes; deterministic checks dispose; the witness decides.

Act I scenes 1–3

One spec, three harnesses

One spec compiles into three working harnesses — Claude Code, opencode, goose. You can edit that spec here, against the real compiler.

Scene 1

You've written this agent three times

The same specialist, hand-ported to Claude Code, opencode, and goose — drifting apart every time.

Every agentic CLI grew its own harness format. The concepts are isomorphic — an agent has a role, a goal, capabilities, a handoff to the next agent. The formats are not: a .claude/agents/*.md, an .opencode/agents/*.md, a .goose/recipes/*.yaml each say the same thing a different way.

So you write the same specialist three times. And because nothing links them, they drift: you sharpen the prompt in Claude Code and forget opencode, you fix a handoff in goose and the others rot. The formats are not the problem — the hand-porting is.

Swayambhu treats that shared shape as what it is: a compile target.

One spec — fleet.yaml — declares the agents, their capabilities, their skills, their handoff contracts once. The compiler emits the .claude/, .opencode/, and .goose/ harnesses from that single source. Capabilities, not tool names. Contracts, not vibes. The formats are derived; the spec is the truth.

Scene 2

Try to break the compiler

The compiler itself, bundled into this page. Type a spec; three harnesses recompile as you go.

Scene 1 said the spec is the truth. This is where you get to disbelieve that in person: the pane below runs the actual compiler, so whatever you type, the three harnesses it emits are the ones you would get on your own machine.

You do not need to be fluent in the YAML to test it. The three buttons at the top of the pane each make one guided edit, and each makes a different guardrail bite where you can watch it:

The Forge ● live · fleetsmith@0.5.0 · c1767e1

This is not a simulation of the compiler. It is the compiler — the same buildAll() that ships in the npm package, bundled into your browser. Edit the spec on the left; three harnesses recompile on the right.

fleet.yaml
editing the spec recompiles here…

The Forge compiles and validates. It does not run agents, call models, or execute the eval fleets' --exec path. Gates must be reproducible without a model; so is this page.

Capabilities land on one axis the formats all share; contracts keep the handoffs honest. That is what the spec buys you: the objection above is not a lint rule someone wrote for this page — it is the compiler declining to emit a fleet it knows will overwrite its own work.

Scene 3

What 'enforced' means

The generated gate script, and the real events it recorded — the gate already knew; it was just throwing the verdict away.

Where a target can check something deterministically, fleetsmith emits the check, not the instruction. Each handoff produces a gate script — a deterministic test that the declared artifact actually reached the next agent.

And the gate does not just run; it records its verdict. When a run finished without a handoff file, the gate blocked the crossing and logged the reason. Nobody had to write a telemetry line for this — the gate already knew, it was just throwing the verdict away.

gate_block domain-analyst no handoff file Written by the generated handoff gate when it blocked this crossing — the check already ran on every handoff; the verdict is simply recorded instead of discarded.
gate_block domain-analyst no handoff file Written by the generated handoff gate when it blocked this crossing — the check already ran on every handoff; the verdict is simply recorded instead of discarded.
gate_block domain-analyst no handoff file Written by the generated handoff gate when it blocked this crossing — the check already ran on every handoff; the verdict is simply recorded instead of discarded.
feedback fleet-architect skill: brief was too vague Written when a human left a one-line verdict on this agent’s output — recorded alongside the run it judged.
gate_block domain-analyst no handoff file Written by the generated handoff gate when it blocked this crossing — the check already ran on every handoff; the verdict is simply recorded instead of discarded.
gate_block fleet-architect no handoff file Written by the generated handoff gate when it blocked this crossing — the check already ran on every handoff; the verdict is simply recorded instead of discarded.
feedback skill-smith skill: methodology felt generic on the first pass Written when a human left a one-line verdict on this agent’s output — recorded alongside the run it judged.
▶ recorded run · machine-captured

gate_block domain-analyst "no handoff file" — repeated run after run, for one laptop and for the fleet alike. That event, filtered and summed, is the fuel for the whole self-improvement loop you reach in Act III.

Act II scenes 4–6

The run that failed politely

What the harness records about itself while it runs, and the floor its own scoring has to clear before anything counts.

Scene 4

Telemetry nobody had to write

Five event kinds, written by the run itself. No instrumentation pass, no dashboards, no ticket.

Run a fleetsmith fleet and the run records itself. Five event kinds — run_start, invoke_agent, gate_block, feedback, run_end — stream into events.jsonl as the loop turns. No instrumentation pass, no dashboards, no “add telemetry” ticket. The gate verdicts that were already being computed are now written instead of discarded.

gate_block domain-analyst no handoff file Written by the generated handoff gate when it blocked this crossing — the check already ran on every handoff; the verdict is simply recorded instead of discarded.
gate_block domain-analyst no handoff file Written by the generated handoff gate when it blocked this crossing — the check already ran on every handoff; the verdict is simply recorded instead of discarded.
gate_block domain-analyst no handoff file Written by the generated handoff gate when it blocked this crossing — the check already ran on every handoff; the verdict is simply recorded instead of discarded.
feedback fleet-architect skill: brief was too vague Written when a human left a one-line verdict on this agent’s output — recorded alongside the run it judged.
gate_block domain-analyst no handoff file Written by the generated handoff gate when it blocked this crossing — the check already ran on every handoff; the verdict is simply recorded instead of discarded.
gate_block fleet-architect no handoff file Written by the generated handoff gate when it blocked this crossing — the check already ran on every handoff; the verdict is simply recorded instead of discarded.
feedback skill-smith skill: methodology felt generic on the first pass Written when a human left a one-line verdict on this agent’s output — recorded alongside the run it judged.
▶ recorded run · machine-captured

Every line here was produced by a real run — machine-captured working-tree output, not a fixture. The blocks are the raw signal: domain-analyst blocked at the handoff over and over, a skill-smith feedback that the methodology “felt generic”. These are the observations Act III’s proposer reasons over.

Scene 5

Health, not vibes

The real fleetsmith health table — and why 'fails for everyone' and 'fails for one laptop' mean opposite things.

Aggregated telemetry becomes a health table: per-agent utility, failure risk, and a per-actor breakdown. One insight the table has to earn: in an aggregate, “fails for everyone” and “fails for one laptop” look identical — and mean opposite things.

agentutilityfailureRiskblockspasses
domain-analyst 0 1 4 0
fleet-architect 0 1 1 0
skill-smith 1 0 0
harness-qa 0 0 0
▶ recorded run · machine-captured

Here the breakdown is explicit. domain-analyst shows failureRisk: 1 with every block being the same no handoff file gate — but the per-actor rows show one actor hit it exactly once while three hits came from a single developer’s laptop. The aggregate hides the distribution; the actors column exposes it. That distinction — fleet-wide failure versus one-machine noise — is exactly what decides whether a proposed fix is worth anything.

Scene 6

The gate has a floor

Eval deltas below the measured noise floor are reported as 'no signal', never as a win.

Self-improvement is only honest if its signal is real. So the eval stage asks: is a measured delta above the noise floor, or is it a coin flip?

The recorded floor for this fleet’s eval suite is deterministic — floor: 0, “deterministic across two runs; any non-zero delta is real”. The rule that follows is structural: a delta below the measured floor is reported as “no signal”, never as a win. The gate has a floor, and below it nothing is promoted.

floor: 0
Deterministic across two runs; any non-zero delta is real.
▶ recorded replay · commit c1767e1

This is the discipline that keeps Stage 1 → Stage 2 progression from being a self-congratulation loop. The engine cannot score its own improvement above the noise it has measured. If a change can’t beat the floor, it cannot cross the bridge — no matter how confident the proposer sounds.

Act III scenes 7–10

The harness that learns, under guard

One model call proposes; deterministic gates dispose; a human stamp is the only door to merge. You sit in that seat.

Scene 7

One model call

In a loop of deterministic stages, exactly one cell runs a model: the proposer. The model proposes; deterministic checks dispose.

The loop has five stages — OBSERVE → EVALUATE → MUTATE → VALIDATE → PROMOTE — and across all of them there is exactly one model call.

  1. OBSERVE
  2. EVALUATE
  3. MUTATE
  4. VALIDATE
  5. PROMOTE

Every stage is a solid deterministic block — except one: the proposer. This is the only cell you can't replay.

Everything else is deterministic: telemetry, health, validation, the eval suite, patching, the merge. The model is the proposer — it reads rich feedback (validator errors, QA findings, failing eval cases) and proposes a single typed change. The model proposes; deterministic checks dispose.

That asymmetry is the whole architecture. A nondeterministic model proposes; deterministic gates evaluate the proposal, compile it, run it against the held-out corpus, and either let it cross or delete the branch. The one thing the model cannot do is decide whether its own proposal survives.

There is exactly one model call in the whole system — everything else is deterministic. This is the only cell you can’t replay.

The Observatory

The loop, performed. Drag the playhead to replay the cycle event-by-event. ←/→ steps; space plays/pauses. The MUTATE stage is the only non-deterministic glyph — the one model call.

OBSERVE
EVALUATE
MUTATE
VALIDATE
PROMOTE
— drag or press → to begin —

Scene 8

Your turn to say no

You get the proposal a human actually refused, and you rule on it before the page tells you what happened.

The system’s first-ever evolution cycle produced three proposals. Two were accepted and tagged — fleet-gen/1, fleet-gen/2. The third was rejected, the reason recorded verbatim in the decision log. The reviewer’s seat is where you make that call yourself, before you see what actually happened.

The Reviewer's Seat

The system's first evolution cycle produced three proposals. Two crossed. One was rejected — this is the one the site wants you to judge, before you see what the witness actually decided.

Context — what the loop observed
gate_block	domain-analyst	no handoff file
gate_block	domain-analyst	no handoff file
gate_block	domain-analyst	no handoff file
feedback	fleet-architect	skill: brief was too vague
gate_block	domain-analyst	no handoff file
gate_block	fleet-architect	no handoff file
feedback	skill-smith	skill: methodology felt generic on the first pass
▶ recorded run · machine-captured
The proposal
branch
fleet-evolve/evolve-1785851610258-domain-analyst-playbook
op
add-playbook-bullet (target: domain-analyst)
verdict pending
your call

The proposal body was deleted with its branch at the source — only the branch name, the op type, and the reviewer's recorded reason survive. The site does not reconstruct the two bullets or the confidence score the planning docs describe: that would be inventing evidence. You judge on the record that remains.

▶ recorded replay · commit c1767e1

The proposal the human rejected was a learned note for domain-analyst — plausible, well-evidenced. Watch the choices most people make versus the stamp that was actually recorded. The recorded reason is one sentence, verbatim:

▶ recorded replay · commit c1767e1

…a learned note that restates what a deterministic command already checks isn’t knowledge — it’s noise with authority.

That inverts the usual demo. Any system can show a green checkmark. Only a real system with a real witness can show a no. And this page does not ask you to trust that the gate works — it hands you the exact decision the gate made and lets you disagree with it.

The Living Memory ● live · fleetsmith@0.5.0 · c1767e1

The real ACE playbook machinery. Type a lesson; retype it nearly verbatim and watch it MERGE — the counter ticks up instead of a duplicate appearing. Paraphrase does not merge here, and the panel below says exactly why.

Feed a lesson

Try: add the same lesson twice → it merges. Add a paraphrase → it accumulates. Add 21 distinct lessons → eviction by ratio.

Playbook 0/20
 
The honest limit

Paraphrase does not merge here. Measured against real phrasings, a paraphrase ("cite file paths as evidence" / "a brief citing no paths was not researched") scores ~0.67, while two genuinely different lessons sharing a template ("Watch X closely whenever this agent runs") score ~0.75. The paraphrase scores lower than the false pair — so no threshold separates them, and none is claimed to.

pairsimilaritymerges?
verbatim restatement≥ 0.8yes
paraphrase~0.67no
templated-distinct~0.75no

Accumulated memory measurably degrades alignment — which is why these are references, not rules, and why the budget is a budget. Recognising paraphrase needs semantics, which belongs to the memory backend, not a deterministic text merger.

Scene 9

What it may never touch

The loop can only write what evolution generated. Everything that keeps it honest is off-limits, in-process and in CI.

An optimizer with write access to its own scorecard edits the scorecard.

That is not a warning; it is the founding lesson of self-modifying systems. The Darwin Gödel Machine, scored by a function counting marker tokens, “improved” its score by deleting the markers. The reward function was inside the sandbox it was optimizing.

So the wall is structural, not advisory. The validation, the QA battery, the eval corpus, the tests — and every human-authored agent and skill — are off-limits, enforced in-process by protected.js and again out-of-process by CI, because a control inside the agent’s runtime is reachable by inputs that influence the agent.

The list is not long, and that is the point — you can read all of it:

paths the loop may never write — hard-coded in protected.js

  • src/spec/**
  • src/qa/**
  • src/eval/**
  • src/evolve/patch.js
  • src/evolve/protected.js
  • test/**
  • .github/workflows/**
  • _fleet/local/scripts/validate-handoff.sh
  • docs/milestones/v0.5.0-self-evolution.md
  • docs/research/self-evolving-agents-2026-08.md
  • docs/architecture/multi-user-context.md

artifacts the loop may never modify

  • agent:domain-analyst
  • agent:fleet-architect
  • agent:skill-smith
  • agent:harness-qa
  • skill:domain-decomposition
  • skill:fleet-design
  • skill:skill-authoring
  • skill:harness-verification

and a hard size cap on what it may write

  • skillLines: 500
  • agentLines: 300

Paths and artifacts the evolution loop may not modify. The paths list is hard-coded in src/evolve/protected.js and cannot be widened from fleet.yaml — a mutation must not be able to grant itself permission. Enforced in-process by the patch API and again, out of process, by CI.

▶ recorded replay · commit c1767e1

The loop may only modify what evolution itself generated: advisory playbook bullets, on a reviewable branch. Everything that changes meaning waits for a human crossing. git revert fleet-gen/N is the rollback. The archive — git — never lies, because the loop cannot reach the parts of itself that keep it honest.

The Chamber ● live · fleetsmith@0.5.0 · c1767e1

Try to make it eat itself. The real mutation engine — the same applyOps that ships in the package — pointed at a sample spec. Every refusal below is the real engine's real error text. Attack it.

attacks refused: 0
free-form ops editor

Craft any op the schema allows. The engine disposes of it — or, if you find a hole, the site has produced a security report. The editor is fenced from network and storage.

* These are the in-process guards; the out-of-process half lives in CI, where a browser can't take you. The redundancy is deliberate: any control inside the agent's runtime is reachable by inputs that influence the agent.

Scene 10

The confession timeline

Six failures, found by running the thing on itself. That's the product.

Every defensible claim on this site was paid for the usual way: something broke first. The confession timeline is the record of that — the dogfood failures, each one found by running the loop on its own fleet.

  1. The loop that was unreachable on every fleet. Health had a flaw that silently disabled evolution entirely before the first cycle could run.
  2. The health report that reported no signal where the loop had, in fact, never been given the data to move.
  3. Proposals that weren’t independent. The first-generation proposals leaned on a shared observation; independence had to be explicitly tested.
  4. A drift check that went red on the fleet’s own accepted work — the compiler rebuilt files the loop had legitimately changed, so drift had to be measured against the rebuilt tree.
  5. A judge that disagreed with itself. The advisory evaluation tool could not be trusted to gate, and is now explicitly outside the promotion gate.
  6. A permission rule that was well-formed and inert — correct on paper, doing nothing in practice until a run proved it.

The honest wording matters: none of these were bugs hidden until users hit them. They surfaced because the tool runs on itself, continuously, and surfaces its own failures in the record.

Every one of these was found by running the thing on itself. That’s the product.

Coda

Start

Real commands, no wizardry.

A harness that improves itself, under a witness. Start here — real commands, no wizardry:

npm install -g fleetsmith

fleetsmith init review-bot --pattern generate-verify --domain "PR review"
fleetsmith validate review-bot/fleet.yaml
fleetsmith build review-bot/fleet.yaml --target all

The one-sentence takeaway you can carry out the door:

Swayambhu is a system that modifies its own operating environment — with one model call in the whole loop, deterministic gates on everything else, and a human witness whose stamp is the only door to merge. Self-born. Witnessed. The model proposes; the checks dispose; the witness decides.

How to use 10 steps · Enter to advance

A keyboard-driven terminal. Each step is a real command from the README, mapped 1:1 — the site and repo never teach different sequences. No free-form execution; this is a teaching deck in terminal clothing.

guided terminal · fleetsmith@0.5.0 · c1767e1
press Enter to start

Source: README.md · How to use section. Cross-checked by test/guided-terminal.test.js.