keel
Rust · macOS · v0.2.1

keel

A conductor, not an agent loop.

The keel is the one member every rib bolts to — the part that decides whether a hull holds its shape under load. Coding agents are good at writing code and bad at knowing when to stop. keel owns the two things they don't: auditable stopping conditions, and memory that outlives the session.

$cargo install keel-harness

Installs a binary called keel. The keel and keel-cli names on crates.io belong to unrelated projects.

DWL KEEL EVERY FRAME BOLTS TO IT STEM STERN
Plate I — Side elevationSheer · stations · keel
The problem

Agents don't know when to stop

An agent will happily rewrite a module you never mentioned, declare victory on a test it weakened, and forget by Tuesday what it learned on Monday. None of that is a model failure — it's a missing harness. keel supplies the harness and stays out of the way of the model.

01

Stopping conditions you can audit

Every acceptance criterion carries a falsifiable oracle — a command, a test, a schema, a doctest, or a named human. A gate that cannot fail is not a gate, so keel reports which of its own checks have never fired.

02

Memory that outlives the session

Knowledge lives in a durable store and is projected into whatever file your agent reads. Recurring mistakes are classified, and the ones that recur across distinct runs become gate checks rather than more prose to ignore.

Components

Six parts, one spine

Each is useful alone. The wire schemas between them are frozen and additive-only, so a new agent or a new check plugs in without touching the spine.

KNOWLEDGE

Store & projections

One durable source, rendered per agent. Two hashes: one goes stale when the source moves, one refuses to overwrite a human edit.

STRUCTURE

Symbol index

tree-sitter across 8 languages — Rust, Python, JS, TS/TSX, Go, Java, C#. Agents work from outlines and symbols, and pull a full body only when they need one.

ARTEFACTS

Spec → plan → tasks

Reviewable files, not chat scrollback. Requirements in EARS; every criterion carries an oracle that can say no.

GATES

G0 – G4

Five checkpoints, three verdicts. Blast radius is computed from the import graph and rechecked, not taken on trust.

EVIDENCE

Trajectory & bundle

An event stream per run, exportable and re-verifiable against its manifest. Approvals bind to the artefact's hash.

LEARNING

Failures → lessons

Episodes are classified and promoted only on a second occurrence in a separate run, and only with a human decision.

Gates

Where the load is carried

Each gate answers one question and refuses to answer it vaguely.

G0

Is the spec answerable?

Every requirement falsifiable, every criterion carrying an oracle. A spec that cannot fail cannot pass either.

G1

Is the plan honest about its reach?

Blast radius computed from the import graph and compared with what the plan declared — not with what it hoped.

G2

Did the work stay inside its scope, and does it build?

Build, lint, tests, line budget, blast radius, store drift, baseline ratchet. G2.5 adds test-invalidation review: a test that mocks away the behaviour under test is worse than no test.

G3

Could a reviewer actually check this?

Evidence complete, change reviewable in size, earlier gates green, a human verdict where one was required.

G4

Did we learn anything that should become a rule?

Episodes classified, promotions proposed, decay reviewed. G4 forces the decision; it does not make it for you.

pass · exit 0

The checks ran and held.

fail · exit 1

A check ran and said no.

blocked · exit 3

A check could not run. It never silently passes, and it is never counted as an agentic failure.

Evidence

Numbers, and where they came from

All of these are measured by keel on real repositories. The provenance matters as much as the value.

14.6×
Less context
At 100% recall on keel's retrieval benchmark.
1.25 s
To index 5,705 files
Cold, across eight languages.
359
Tests · 0 warnings
Clippy clean at -D warnings.
11 → 54%
G2 pass rate
Inside keel vs. on a real project. The low number was the artefact.
KEEL DECK

The check to scrutinise first

keel's own metrics flag G2/store-drift: it has never failed in 26 runs across two repositories. That is either a check that is correctly always-true here, or gate theatre. A harness that measures other people's work should be able to say which — so it says so, on its own front page.

Plate II — Midship sectionBody plan · centreline · keel
Get started

Five commands

Point keel at a repository and take one small change all the way through. The getting-started guide walks the same path with commentary.

# install
cargo install keel-harness      # binary is called `keel`

# set up the store, index the repo, render projections
keel init
keel map

# describe one change, then let the gates argue with you
keel spec new short-invocation
keel gate g0 short-invocation

# plan it, run it, and export what happened
keel plan short-invocation
keel run  short-invocation
keel export --verify

Before you trust it on real work

  • macOS only. The Windows branches compile and are unexercised. That is a decision, not an oversight.
  • G2.5 passes on heuristics unless you configure an adversarial reviewer. Configure one.
  • Three lessons in force against the five the design wants. They accrue with use, and they are not manufactured.
  • The evidence is thin and young — two repositories, one operator. The roadmap keeps a full accounting of what is deferred and why.