Full ledger
Every decision is written down — observation, plan, diff, evaluation, verdict, reflection. Reconstruct the run from the ledger alone.
A soul plugin for any code. Drop the kernel into any git repository, give it a measurable goal, and the codebase begins to perceive its environment, judge its own output, and rewrite itself toward the goal.
Each iteration runs your metric command — or pulls live state from an HTTP endpoint — then lets the planner read the metric plus the history of prior attempts and produce a concrete plan. A coding agent applies the plan inside a git worktree wrapped in firejail; the metric is re-run, and the change is accepted or rejected.
Accepted changes land as real git commits on an evolution branch; rejected worktrees are discarded. The loop runs until max_iterations, max_total_usd or max_total_tokens fires.
Every decision is written down — observation, plan, diff, evaluation, verdict, reflection. Reconstruct the run from the ledger alone.
Every accepted change is a named git commit. One git reset rolls back to any prior point.
Edits outside allowed_paths are auto-rejected before the diff is applied.
firejail wraps the executor process; the rest of the filesystem is read-only.
max_total_usd, max_total_tokens, max_iterations — durable across restarts. The budget actually halts the loop.
Planner, executor and evaluator are decoupled processes that talk through files. Aider, Claude Code, Anthropic, OpenAI — swap by config.
The kernel is MIT-licensed and pip-installable, with a small Python core built on a single dependency (PyYAML) and CI green on Python 3.10 and 3.12. The README walks through a worked example on SWE-bench Verified.
Read the protocol on the live site, or go straight to the source.