What ships
- Dispatch, gates, receipts, merge, watchdog, durable state, and a dashboard.
- A pre-push policy with 23 checks, one of them the secret scan that blocks a push.
- Skills, brain templates, CI templates and an example config.
A kernel for running fleets of coding agents
An iteration counts only when it leaves a receipt that a gate can check. A lane that reports success without a receipt a gate can verify has not passed.
Crash-only by design: workers are stateless, state lives in git, SQLite and durable files, and restart is the recovery path.
npx @matt82198/aesop dash --demo
01 / What it is
Aesop does not know your repositories, rules, or accounts. It ships the parts that run the loop. You fill in the rest.
gh auth, and API keys only if you use an API backend.Read the blueprint page: Quickstart.
02 / The receipts loop
An iteration counts only when it leaves a receipt that a gate can check. A lane that reports success without a receipt a gate can verify has not passed.
A wave is dispatched through driver/wave_loop.py, and each lane works in its own worktree.
The pre-push policy runs its checks, including the secret scan that blocks a push, and runs the receipt step last.
tools/emit_receipt.py signs a record of which local checks ran, and the verifier checks it offline.
tools/auto_merge.py merges green PRs in batches and fixes conflicts.
The receipt gate is in a measurement period, so the hosted receipt check is not required yet.
Read the blueprint page: The receipts loop, Signed receipts, Verify a receipt, Receipt format.
03 / Primitives
Each primitive is named in the provenance record. Cards marked private describe hooks that live in the author's private repositories and are not shipped in the public source.
Each event records prev, the SHA-256 of the previous line, so verify finds an edited, removed or reordered line. It is tamper-evident, not tamper-proof.
tools/event_store/store.py
Signed with Ed25519 or HMAC-SHA256 and verified offline. A passing receipt does not prove the parts were run honestly.
tools/emit_receipt.py, tools/verify_receipt.py
A lane that fails is killed, not corrected. The contract is amended and a fresh lane is dispatched.
LANE-CONTRACT.md
A claim that something merged or is green needs a same-turn evidence read. This hook is not shipped.
hooks/claim-binding.mjs
Every lane action leaves a row, and lane reports are written to disk so compaction cannot lose them. These hooks are not shipped.
hooks/lane-ledger.mjs, hooks/handback-ledger.mjs, hooks/verdict-ledger.mjs, dispatch_ledger.py
In the author's private operating setup, a subagent dispatch is denied, not rewritten. It is not shipped.
hooks/force-haiku-subagents.mjs
State is written to disk before context is compacted. This hook is not shipped.
hooks/checkpoint-before-compact.mjs
Three read-only views (pending, rulings, checkpoints) across per-project stores. The tooling ships; the live cutover is not claimed.
tools/event_store/project.py
Read the blueprint page: Gates and hooks, Claim binding, Event store, Per-project stores.
04 / Provenance
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.
Read the blueprint page: Provenance and evidence, Security policy, Releasing.