Open source
noetic-harness
A development harness for AI coding agents. A repository writes down how it is developed, and the harness holds the agents to it: a step reported done without evidence is refused.
By The Editors @editors
noetic-harness is a development harness for AI coding agents. A repository that uses it writes down how it is developed, in an .agents/ directory: the roles that do the work, workflows made of steps, lanes of gates, a trust model, and a run ledger and project memory that only grow. The engine reads that directory and holds the work to it.
It exists because "I ran the tests" is a sentence, and a coding agent writes that sentence easily. The ledger makes it a record. A step reported done with no evidence is refused. A run does not close on gates the harness did not watch pass.
What it does today, at v0.6.0:
- routes each piece of work to a workflow and the smallest team of roles that covers it, and says what to read first;
- plans and runs the gates a change must pass;
- writes a starter pack with
init: thirty roles, nine skills and three lanes of gates, with an add-on for Elixir and a full catalogue of 184 more roles; - generates Claude Code subagents with
sync, along with instructions for Codex, Gemini and Cursor, and serves itself as a read-only MCP server; - ships as a single executable, for Linux
x86_64and Apple silicon only, that needs no Erlang or Elixir, and as a Claude Code plugin that carries the roles and the method where the engine cannot be installed.
It was itself written by AI coding agents under a person's direction, each change routed, recorded in the ledger and closed on a passing lane. It is under Apache-2.0, and the source is public.
What it does not do
It plans and records. It does not do the work: an agent or a person does the steps.
It does not know your stack either. The format, lint, build and test gates call scripts you write. Until you write them those gates report unavailable and the lane reports partial. That is the truth about the change, and the harness will not round it up to a pass.