One command, on your machine, in about a minute. doloop reads your repository and writes a single self-contained report: the conventions your code already holds, a check that they are real, your load-bearing files, and what your AI keeps breaking. Nothing is uploaded. Run it again and it is byte-for-byte identical.
Clone the demo (or pip install doloopio), then point it at any repository on your machine.
Python repositories today; the lens itself covers seventeen languages. No API key. Bring your own model only if you want the optional reading pass on top of the deterministic core.
save_record() here also calls emit_event(), far
more often than code at large. These are yours, inferred from your own code.See the sample report (Netflix/dispatch) →
Everything runs on your machine. Your code is never uploaded, never sent to a model you did not choose.
Run it twice and diff the two reports: byte for byte identical. A result you, or an auditor, can reproduce.
It imposes no style guide. It reads your code and reports your conventions, in your own codebase's terms.
It only reads and reports. It changes nothing in your repository.
The conventions are real and generalize out of sample. When AI rewrites a real function it drops the codebase convention 37 to 72 percent of the time, and in a controlled test every one of those breaks passed compile, lint, and type-check — so today only a human reading every diff catches them. doloop catches them deterministically. That is the stall it removes: read the few reds, merge the greens.
Routes you to a real page, asks when ambiguous, or refuses. No model on the answer path, so it never invents.