AI Labs AI Labs
Open source · Apache-2.0 · on PyPI

Axonscanner

Audit whether your codebase is as real as it claims. A zero-dependency static analyzer that grades every module on a verification ladder derived from the code itself — never from commit messages or documentation.

terminal
$ pip install axonscanner
$ axonscanner scan .

One pip install. Everything happens in your terminal — no dashboard to host, no service to trust, nothing sent anywhere.

1 · The dashboard

A real scan of werkzeug

The actual terminal dashboard axonscanner produced — nothing mocked. The repo was cloned, scanned statically, and deleted. Composed and colored in the terminal with the standard library alone: a stacked verification bar, an at-a-glance panel, heat-mapped risk hotspots, and a per-package rollup.

axonscanner dashboard — werkzeug
AXONSCANNER
codebase honesty · static analysis
werkzeug · git b24c8ec · 2026-08-05 19:21 UTC · 45 modules / 21,177 LOC
Verification
16 asserted 8 tested 1 reachable 20 claimed-only
At a glance
modules45
lines21,177
tests281 funcs
verified56%
asserted36%
hi-risk11 modules
slop taxunmeasurable
Risk hotspots churn × unverified × complexity
0.47
routing/matcher
0.46
routing/rules
0.44
routing/map
0.42
wrappers/response
0.41
debug/tbtools
0.40
wrappers/request
0.40
datastructures/structures
0.37
datastructures/accept
Packages weakest first — a package is only as verified as its weakest file
(top level)14
claimed-only
datastructures10
claimed-only
routing5
claimed-only
sansio5
claimed-only
wrappers2
claimed-only
debug3
claimed-only
middleware6
tested
A real scan, reproduced here for illustration — run it yourself and every number will be your own codebase's, not this one.
2 · The report

Verified capability register

Every module, ranked worst-first: its verification tier, size, test count, risk score, and the machine-derived note. This is the report written to .axonscanner/CAPABILITY_REGISTER.md on every scan.

StatusModuleLOCTestsRiskNote
claimed-onlyrouting/map97200.44no test path statically proven — verify by hand
claimed-onlyrouting/rules95600.46no test path statically proven — verify by hand
claimed-onlydatastructures/structures91700.40no test path statically proven — verify by hand
claimed-onlywrappers/response84600.42no test path statically proven — verify by hand
claimed-onlysansio/response82200.37no test path statically proven — verify by hand
claimed-onlydatastructures/headers65800.36no test path statically proven — verify by hand
claimed-onlywrappers/request65700.40no test path statically proven — verify by hand
claimed-onlydebug/tbtools45000.41no test path statically proven — verify by hand
claimed-onlydatastructures/accept41300.37no test path statically proven — verify by hand
claimed-onlydatastructures/range35100.36no test path statically proven — verify by hand
Full register: 45 rows, sorted weakest-first. This is the top 10.
3 · The graph

See the whole codebase at once premium

The intel command turns the same analysis into a dependency graph — every module sized by LOC, colored by verification status, connected by its real imports. Hover a node for a summary; click it for the full evidence trail. intel is a premium feature — scan, dashboard and the capability register above are free and open source, always.

proven claimed-only synthetic-risk stub entrypoint unknown · size=LOCdrag=orbitscroll=zoomclick=evidence
Illustrative — a synthetic codebase, not a real scan. Every node's evidence note is templated from its actual status, exactly like a real axonscanner report.
The problem

Comprehension debt

AI writes code 5–7× faster than anyone can read it. Pull requests are up, review time is up, and "done" increasingly means a model said it was done — not that anyone verified it. The sharp edge of that is code which claims to be finished but is a stub, a placeholder, or synthetic data dressed up as real computation.

The verification ladder

Each rung is a strictly stronger claim than the one below

asserted
A test assertion actually checks this module's output — the strongest claim.
tested
A test directly exercises it.
reachable
A test's call path reaches it, but nothing asserts on it.
claimed-only
Commits say "complete"; no test path reaches it.
stub
Placeholder, TODO, pass, NotImplementedError.
synthetic-risk
Returns random-generated values where real computation is claimed.
The governing rule

It under-credits, never over-credits. If it marks a module verified, it is verified. Its errors only ever hide real tests — they never invent them. That is what makes the output safe to trust.

Then act on it

Structural intelligence, not just a score

  • A dependency graph of the whole codebase
  • Risk hotspots ranked by churn × unverified × complexity × coupling
  • An algorithmically-ranked improvement backlog
  • A self-learning loop that measures whether acting on a recommendation actually helped, and reweights itself over time
  • Dream mode — a living dashboard, shipped in v0.3.0
Zero dependencies

Pure standard library. No execution of the code under audit, and no install of it either. It reads your code; it never modifies it.