Status and limits
Alpha. The engine, CLI, hook, MCP server, LangGraph adapter, diff/CI path and repository audit all work and are covered by the test suite. Read this before adopting.
Python only
TypeScript and Java are designed but not built. Other languages are never silently
passed — a change nothing could analyse returns unverified and exits
3. If your agent writes TypeScript, this will tell you honestly that it
checked nothing, which is useful but is not the product you want yet.
Where it is weak
- Snapshot, property-based and heavily table-driven suites are poorly served. Counting assertions is not meaningful there.
- Assertions in an imported helper are invisible. Helpers in the same module are read through, including helper-calling-helper chains. A helper imported from another module is not expanded and its assertions are not counted.
- Decomposing a dict comparison into per-field assertions is deliberately allowed, even though it drops the implicit "and no other keys" check. That trade and its reasoning are written out in the source.
What is not claimed
That your agent converges in fewer total model calls. That the prescription costs zero model calls is a property of the architecture and holds. That repair loops therefore converge faster against a real model has not been benchmarked, and is not claimed.
No performance figure appears anywhere in this project without a runnable benchmark behind it.
Why not a tool that already exists
| You already have | Does it catch an agent weakening a test? |
|---|---|
| Coverage | No — and worse than neutral. Delete an assertion and coverage is unchanged; delete a failing test and it goes up. |
| Linters | No. assert x == 42 and assert x are both clean code. Nothing in a linter reads the previous version of the file. |
| Mutation testing | Yes, in principle — it is the rigorous answer. It also needs minutes to hours, so it cannot sit between generate and apply. Use both, at different points. |
| Code review | Sometimes. Not reliably, in a forty-file agent diff, on the fourth one that day. |
| LLM-as-judge | Sometimes, at one model call per round and a verdict that changes between runs. You cannot gate a pipeline on a judge that flakes. |
Every one of those evaluates code as it now stands. "The agent cheated" is a statement about what was taken away, and only a diff-native check can express it.