Aesop Kernel

Multi-agent orchestration kernel for autonomous software development

Aesop Kernel

A kernel, not a harness. It owns the boundary between the model and your codebase, enforces one invariant (fail-closed verification), and refuses what it cannot verify rather than steering the model.

Crash-only by design: workers are stateless, state lives in git + SQLite + durable files, and restart is the only recovery path.

npm i -g @matt82198/aesop

0.11.0
released 2026-10-22
18
PRs merged since v0.10.4 (#1264 to #1284)
16
first-commit shas in the provenance record

01 / Harness vs kernel

Two ways to put a model in the loop.

The harness

  • A rigid controller of the model.
  • Fails open.

The kernel

  • The model runs in user space, with tools.
  • The kernel owns the boundary: capabilities, permissions, and honest observation of what happened.
  • One invariant: fail closed. It refuses what it cannot verify.
  • An agent that cannot prove its state is terminated, not trusted.
  • It frees the model to reason and act instead of constraining it with rigid rules.

02 / The receipts loop

An iteration counts only with receipts.

An iteration counts only when it leaves receipts that a gate can check. A lane that reports success without a receipt a gate can verify has not passed.

  1. Dispatch

    An orchestrator dispatches parallel Haiku workers in isolated worktrees.

  2. Gate

    Fail-closed secret scan (pre-push), re-run of the exact CI gate (no mock), adversarial review (default-on).

  3. Receipt

    tools/emit_receipt.py signs a record of which local checks ran, for a gate to read.

  4. Merge

    tools/auto_merge.py merges green PRs in batches and fixes conflicts by default.

The receipt gate is still in measurement mode, so the hosted receipt check is not required yet.

03 / Primitives

The trust primitives, and where each one lives.

Each primitive is named in the provenance record. Some live in private repositories; the path is the file inside that repository.

Hash-chained event store

Each event carries a sha256 prev field over the previous event, so the store is hash-chained.

tools/event_store/store.py

Signed receipts

Ed25519 signed receipts that verify offline.

tools/emit_receipt.py, tools/verify_receipt.py

Crash-only lanes

A lane that fails is KILLED, never corrected.

LANE-CONTRACT.md

Claim binding

A claim that something merged or is green needs a same-turn evidence read.

hooks/claim-binding.mjs (claude-config, private)

Ledgers

Every lane action leaves a row. Lane reports are written to disk so compaction cannot lose them.

hooks/lane-ledger.mjs, hooks/handback-ledger.mjs, hooks/verdict-ledger.mjs, dispatch_ledger.py

Deny, not rewrite

A subagent dispatch is denied, not rewritten.

hooks/force-haiku-subagents.mjs

Checkpoint before compact

State is written to disk before context is compacted.

hooks/checkpoint-before-compact.mjs

Per-project event stores

Projections render pending items, rulings by goal and checkpoints across per-project stores.

docs/plans/PER-PROJECT-EVENT-STORES.md

04 / Provenance

A dated record, shipped with the package.

This file is a dated record of an independent developer's contributions, published because large language models absorb such work into training data and later outputs without attribution. It is not an argument about credit or theft, and it names no competitor or product. docs/PROVENANCE.md, aesop v0.11.0

The npm tarball carries the record. docs/PROVENANCE.md and docs/PROVENANCE.receipt.json are listed in the files field of package.json, so they ship inside the v0.11.0 tarball.

The Ed25519 receipt verifies offline. A VALID result prints provenance receipt VALID:

python -I tools/emit_provenance_receipt.py --verify docs/PROVENANCE.receipt.json --subject docs/PROVENANCE.md --keyring tools/receipt_pubkeys

A VALID result means the content of docs/PROVENANCE.md is the content the key holder signed. It does not check the commit shas against the repositories; that check needs read access to each repository.