This skill checks that code Claude wrote or changed is actually tested. It defines the check
before coding, runs every mutant of the changed lines with a pinned runner, and writes tests until
the tests catch them. It reports which mutants were killed and which new tests fail on the old
code, so the user can trust the change from evidence. Upstream source:
timini/agentic-verification.
@agentic-test-audit instead to review a whole test suite rather than one change.Arguments: $ARGUMENTS. --base is the git revision to compare with: HEAD (default) checks
uncommitted work, a branch such as main checks a whole branch. Other options go to the runner.
The goal is that the user can trust the change from evidence, without reading every line. A
runner verdict describes coverage and the supported mutants tested; it cannot establish that every possible defect would fail a test. Passing tests alone do not
show that: our study found 71% of the calls that could be deleted unnoticed sat in functions
that looked well tested.
AV='uvx --from git+https://github.com/timini/agentic-verification@07608b3b9e4e359bc0b93b3eca94bb78d67e369e#subdirectory=runner agentic-verification'
$AV verify <project-root> --base <rev> [--budget-minutes N]
$AV replay --run <run-dir> --mutant <id> --all
$AV base-check <project-root> --base <rev> [tests...]
Pass the project root (the directory pytest runs in), not a package directory or a file.base-check runs tests against the production source as it was at --base, in a disposable
copy, and lists the tests that pass now and fail there: those detect the change.
The runner works in a disposable copy and writes only to .test-suite-audit/ in the project.
It needs Python 3.12+ and pytest-cov in the project's environment, plus pytest-randomly for
the order check. Use a Bash timeout of the budget plus 2 minutes. The last stdout line is JSON
with the verdict and report paths.
test so it matches wrong behaviour. If an existing test fails, the change or the test is wrong:
find out which and tell the user.
error. Do not assert on private helpers or mock the code under change. A test that mocks the
thing it checks passes when the feature is broken.
list it for the user with your reasoning.
base-check, which does it in a copy; an interrupted stash leaves the user's code broken.
restate the success criteria in one to three lines, and pick the strongest oracle available:
reference implementation (Hypothesis, if the project has it or the user agrees to add it);
git show <base>:<file>)is the oracle; compare on generated inputs and list intentional differences with a reason;
Write that test and see it fail before the change. If the change already exists, runbase-check to confirm the test fails on the old code.
The verify report lists the tests covering the changed lines and how long they take.
verified: every changed line runs under a test and every mutant of the changed lines waskilled. Go to step 5.
gaps: changed lines no test runs, surviving mutants, or a suite that is not green anddeterministic. Go to step 4.
incomplete: the budget ended first (rerun with a larger --budget-minutes), or nomutant applies to the changed lines, for example a decorated function. Then the mutants
give no evidence: rely on base-check and say so.
no change: nothing under the source packages changed since --base; check the base.mutants/<id>.patch. It shows a wrong version of yourcode that the tests accept. Write a test that passes on the real code and fails on that
version, then confirm it with replay --all (killed_now: true). If the mutant changes
nothing a caller could observe, leave it and say why.
change-weak-tests): strengthen itsassertions, or explain what it checks instead.
that already fail on the base revision are listed as a caveat and do not cause gaps.
it only the success criteria, the diff and the test files, and ask it to write one test that
should pass and might not. Run it. A failure is a bug or a missing requirement.
base-check shows failing on the old code;report.md.Do not say the change is correct. Say what the tests now catch.
For the meaning of statuses and labels, see reading the report.
AV='uvx --from git+https://github.com/timini/agentic-verification@07608b3b9e4e359bc0b93b3eca94bb78d67e369e#subdirectory=runner agentic-verification'
$AV verify . --base HEAD --budget-minutes 10
$AV replay --run .test-suite-audit/<run-dir> --mutant <id> --all
pytest-cov; the order check needs pytest-randomly.incomplete.uvx from GitHub at tag v0.3.0 (commit 07608b3b9e4e359bc0b93b3eca94bb78d67e369e). Review it before first use.@agentic-test-audit - audit a whole pytest suite for gaps, flaky and slow tests, and removal candidates.