Working prototype. Not published yet.

“Done” is not proof.

Apodix checks the work your AI agent says it finished. For every acceptance criterion, it shows what is proven, what is unproven and what is missing.

$ apodix verify .

Run it in a Python project that uses pytest. Not on PyPI yet, so install it from the repo.

Green tests can still miss the point.

An agent can pass every test it wrote and still skip half of what you asked. Tests that pass tell you nothing about requirements nobody tested.

What the agent says

All three requirements are implemented. All 12 tests pass.
12 tests, 12 green

What Apodix finds

1 of 3 criteria proven

The 12 tests cover one requirement well. The other two are untested or untestable as written.

  • Discount over €100: proven
  • No-discount items: missing
  • Empty promo code: unproven

Three verdicts. No “probably”.

Every criterion ends in exactly one state, so a reviewer knows where to look.

Proven

A test guards it

The test passes today, and it fails when Apodix breaks the matching code on purpose.

Change 10% to 5% and the test goes red.

Unproven

A test exists, but guards nothing

The code may be right, but nothing would notice if it were wrong.

Delete the check and the test still passes.

Missing

Nothing covers it

No code or test relates to this requirement. The agent forgot it, or never understood it.

The words “no discount” appear nowhere in the diff.

How Apodix checks the work

The model never grades itself: the verdict comes from running code.

  1. Read the criteria

    Reads acceptance criteria from a markdown file and keeps each one’s ID. GitHub issues are next.

  2. Find the evidence

    Links each criterion to the tests marked to cover it, and records which code lines those tests ran.

  3. Break it on purpose

    Changes the matching code in a scratch copy and reruns the tests. A real guard test turns red.

  4. Stamp the verdict

    Returns Proven, Unproven or Missing for each criterion and sends the gaps back to the agent.

Try the prototype

Install it from the repo and run it on the demo cart. An agent claimed all three requirements were done. Apodix finds one.

Needs Python 3.10 or newer. The README has the Windows commands. Run it on demo/cart_fixed afterwards to see 3 of 3 proven.

macOS and Linux
git clone https://github.com/NikosLefakis/apodix
cd apodix
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/apodix verify demo/cart
1 of 3 proven. Not done yet.

Works where you already work.

Today only the command line exists. The other two are next, and will share the same engine and verdicts.

Claude Code

Planned. Claude calls verify_done before it says it is finished, then fixes what is missing without you asking.

claude mcp add apodix -- apodix mcp

GitHub Actions

Planned. Every pull request gets a proof table as a comment. Reviewers read verdicts instead of scrolling a diff.

- uses: NikosLefakis/apodix@v0 with: issue: ${{ github.event.number }}

Command line

Available now. Run it locally or in any CI. Output is text, Markdown or JSON, and the exit code is 1 until every criterion is proven.

apodix verify demo/cart --format md

What it can’t prove yet.

A proof tool that overclaims is worse than none. Here is where the first version stops.

  • LanguagesPython with pytest first. TypeScript is next.
  • Kinds of rulesAnything a unit test can check. Visual layout and timing are out of scope for now.
  • Outside servicesPayments, email and other APIs need mocks. Apodix will say so when a rule depends on one.
  • Vague criteria“Make it feel fast” cannot be proven. Apodix flags it and asks for something measurable.

Help build the first proof tool for AI agents.

Apodix is open source from day one. Try the first release, file the cases it gets wrong, or pick up a good first issue.