python profiler · zero code changes
A Python profiler that traces every call — zero code changes
Vinv captures timing and memory per call, with arguments, returns and errors, joined to the exact source line — no decorators, no SDK, no edits. Then it ranks hotspots by the milliseconds you'd actually get back.
Install → pip install vinv · claude mcp add --scope user vinv -- npx -y vinv-mcp · 100% local, Apache 2.0.
vinv vs the usual profilers
| Vinv | cProfile | py-spy | Scalene | |
|---|---|---|---|---|
| Zero code changes | ✓ | ✗ (wrap/run) | ✓ (attach) | ✓ |
| Per-call timing | ✓ | ✓ | sampled | sampled |
| Memory per call | ✓ | ✗ | ✗ | ✓ |
| Args / returns / errors | ✓ | ✗ | ✗ | ✗ |
| Joined to source symbol | ✓ | partial | ✓ | ✓ |
| Ranked by recoverable time | ✓ | ✗ | ✗ | ✗ |
| Proves the fix (95% CI) | ✓ | ✗ | ✗ | ✗ |
from hotspot to proven fix
Vinv doesn't stop at a flamegraph. It names the throughput ceiling with a Universal Scalability Law fit, dispatches a predicted optimization to your agent, and proves it — paired-bootstrap 95% CI on the speedup, byte-identical behavior replay, auto-revert if the numbers don't clear. On the FastAPI template it took a sustained-load median from 75.6ms → 41.2ms (45.4% faster), responses byte-identical.