{"slug": "show-hn-keel-a-conductor-not-an-agent-loop", "title": "Show HN: Keel - A conductor, not an agent loop", "summary": "Dan Eble released Keel, an open-source harness for coding agents that provides auditable stopping conditions and durable memory, installable via `cargo install keel-harness`. Keel introduces falsifiable oracles for acceptance criteria, a persistent knowledge store, and gate checks that block on high/critical security defects, with support for tree-sitter across 8 languages. The tool aims to prevent agents from over-rewriting code, weakening tests, and forgetting past lessons, positioning itself as a conductor rather than an agent loop.", "body_md": "A conductor, not an agent loop.\n\nThe keel is the one member every rib bolts to — the part that decides\nwhether a hull holds its shape under load. Coding agents are good at writing code\nand bad at knowing when to stop. keel owns the two things they don't: **auditable\nstopping conditions**, and **memory that outlives the session**.\n\n`cargo install keel-harness`\n\nInstalls a binary called `keel`\n\n. The `keel`\n\nand `keel-cli`\n\nnames on crates.io belong to unrelated projects.\n\nAn 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.\n\nEvery 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.\n\nKnowledge lives in a durable store and is projected into whatever file your\nagent reads. Recurring mistakes are classified, and the ones that recur across\n*distinct* runs become gate checks rather than more prose to ignore.\n\nEach 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.\n\nOne store per repository, projected into every agent's own file —\n`CLAUDE.md`\n\n, `AGENTS.md`\n\n, `.kiro`\n\n,\n`copilot-instructions`\n\n. Two hashes: one goes stale when the\nsource moves, one refuses to overwrite a human edit. House rules\ntravel between repos; the map and product notes stay local.\n\ntree-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.\n\nReviewable files, not chat scrollback. Requirements in EARS; every criterion carries an oracle that can say no.\n\nFive checkpoints, three verdicts. Blast radius is computed from the import graph and rechecked, not taken on trust.\n\nAn event stream per run, exportable and re-verifiable against its manifest. Approvals bind to the artefact's hash.\n\nEpisodes are classified and promoted only on a second occurrence in a separate run, and only with a human decision.\n\nEach gate answers one question and refuses to answer it vaguely.\n\nEvery requirement falsifiable, every criterion carrying an oracle. A spec that cannot fail cannot pass either.\n\nBlast radius computed from the import graph and compared with what the plan declared — not with what it hoped.\n\nBuild, lint, tests, line budget, blast radius, store drift, baseline ratchet.\nG2.5 adds test-invalidation review, and grades the diff for security defects —\na model, a scanner, or both — where `high`\n\n/`critical`\n\nblock the gate.\n\nEvidence complete, change reviewable in size, earlier gates green, a human verdict where one was required.\n\nEpisodes classified, promotions proposed, decay reviewed. G4 forces the decision; it does not make it for you.\n\nThe checks ran and held.\n\nA check ran and said no.\n\nA check could not run. It never silently passes, and it is never counted as an agentic failure.\n\nAll of these are measured by keel on real repositories. The provenance matters as much as the value.\n\n`-D warnings`\n\n.Point keel at a repository and take one small change all the way\nthrough. The [getting-started\nguide](https://github.com/daneb/keel/blob/master/GETTING-STARTED.md) walks the same path with commentary.\n\n```\n# install\ncargo install keel-harness      # binary is called `keel`\n\n# set up the store, index the repo, render projections\nkeel init\nkeel map\n\n# describe one change, then let the gates argue with you\nkeel spec new short-invocation\nkeel gate g0 short-invocation\n\n# plan it, run it, and export what happened\nkeel plan short-invocation\nkeel run  short-invocation\nkeel export --verify\n```\n\n", "url": "https://wpnews.pro/news/show-hn-keel-a-conductor-not-an-agent-loop", "canonical_source": "https://daneb.github.io/keel/", "published_at": "2026-08-31 20:22:28+00:00", "updated_at": "2026-08-31 20:52:21.821295+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-tools"], "entities": ["Keel", "Dan Eble", "crates.io", "tree-sitter"], "alternates": {"html": "https://wpnews.pro/news/show-hn-keel-a-conductor-not-an-agent-loop", "markdown": "https://wpnews.pro/news/show-hn-keel-a-conductor-not-an-agent-loop.md", "text": "https://wpnews.pro/news/show-hn-keel-a-conductor-not-an-agent-loop.txt", "jsonld": "https://wpnews.pro/news/show-hn-keel-a-conductor-not-an-agent-loop.jsonld"}}