dead code detection · python · runtime + static
Dead code detection that knows what actually ran
Static tools (Vulture, ts-prune, Knip) only prove "nothing references this." Vinv also reports code that no captured run ever executed — with the live callers that still point at it and an agent verdict on what to do.
Install → pip install vinv · claude mcp add --scope user vinv -- npx -y vinv-mcp · 100% local, Apache 2.0.
two questions, two answers
Source-only (no run needed): index deadcode <repo> — or the vinv_deadcode MCP tool — lists every function, class and method nothing references, each with file and line. It even catches transitively-dead chains (code whose only callers are themselves dead).
Runtime (behavioral): from a recorded run, Vinv reports connected islands of symbols no capture executed — split into never referenced vs reached from live code but never taken (opposite verdicts a filtered canvas can't tell apart), with the traced neighbourhood an integration would wire back into.
why runtime beats static here
Static analysers miss dynamic dispatch, feature flags, registries and environment drift, so they emit candidates a human must adjudicate — which is why the cleanup never happens. Vinv grounds the verdict in what executed, and asks your own coding agent to judge each section as integrate · reimagine · delete · keep · unclear.