use caseofficial ogbuilds guide

The state of vibe-coded code quality: we scanned 549 self-described AI-built repos

By O Grover, founder, ogbuilds · updated 2026-07-25

the short answer

We ran the quality·vibes heuristic rules engine (no AI pass) over 549 public GitHub repos that describe themselves as AI- or vibe-coded, collected July 2026: 55.6% had at least one duplication finding, 63.2% had dead-code findings, and 60.5% had at least one file past the ~600-line threshold. The median repo scored 89 (a B), but the distribution is bimodal: a mean of 80.7 and 71 repos at F, because tiny demo repos inflate the medians while the messy tail is properly messy.

We scanned 549 public GitHub repos that describe themselves as AI- or vibe-coded and ran every one through the quality·vibes rules engine, Claude review off. Nearly two-thirds, 63.2%, had dead code left in the tree. More than half carried the same logic duplicated across files, and 71 of the 549 graded F. These are deterministic, re-runnable pattern hits rather than judgment calls.

The headline numbers: duplication, dead code, and size

55.6% of the 549 repos had at least one duplication finding, and cross-file duplication on its own, meaning the same block living in two or more files, hit 46.4%. 63.2% had dead-code findings, with commented-out code the single most common finding in the whole study at 59.2% of repos. And 60.5% had at least one file flagged for size past the ~600-line threshold, averaging 5.3 size-flagged files per affected repo.

These three are the signature of how AI tools write code: generating a fresh copy is cheaper than finding the existing one, abandoned approaches get commented out rather than deleted, and the current file grows forever because adding to it always works. None of it breaks the app, so nothing in the build stops it shipping, and it turns up in half of everything we scanned.

The mess compounds, too, and it doesn't reverse on its own. The next prompt reads the oversized, half-duplicated file as its context, so duplication breeds more duplication and the big file keeps growing. What was a weekend convenience becomes the thing a maintainer, or the next model, has to wade through before it can change anything.

A bimodal distribution: the median B and the 71 Fs are both true

The median repo scored 89, a B. 71 of the 549 repos graded F, with the lowest score at 13. Both numbers are real, and the distribution is bimodal. The median is inflated by tiny repos: 85 of the 549 have 15 or fewer scannable files (workshop demos, single-page toys, docs-heavy repos), and a repo that small trivially scores an A because there's almost nothing in it to flag. They're self-described vibe-coded output, so we counted them rather than filtering them out.

The mean and the spread carry more: mean score 80.7, grades A 273, B 92, C 65, D 48, F 71. That's 276 repos below A and a heavy tail, with 39.5% carrying at least one critical or high finding. Findings per repo tell the same two-population story: mean 21.4 against a median of 6, and since per-rule reporting caps at 10 findings, the mean is a floor for the messiest repos.

Restrict this to repos with 15 or more scannable files (n = 467) and the second population comes into focus on its own: 70% had dead-code findings, 66% carried commented-out code, 63% had duplication, and 42.6% had at least one critical or high finding. Nothing improves when the toys leave.

Where the mess concentrates, and what we didn't measure

By category, 42.8% of repos had at least one hygiene finding, 55.6% duplication, 61.2% structure, 63.2% dead code, 55.9% readability, and 22.8% consistency. The top individual findings: commented-out code (59.2%), deep nesting (53.6%), large files (56.1%), cross-file duplication (46.4%), in-file repetition (41.2%), and giant files past 1,200 lines (33.0%).

Two limits, and they matter for how you cite this. The study ran the heuristic rules engine only, with the Claude review from every real quality·vibes scan switched off, so anything needing code-reading judgment went uncounted and scores would likely shift down with it on. And "vibe-coded" means self-described: we took repos at their word. About this study: 549 public GitHub repos self-described as AI- or vibe-coded, data collected July 2026, scanned by the quality·vibes rules engine. Methodology in full on the how-we-benchmarked page.

Share of the 549 repos with at least one finding, by quality·vibes category (rules engine only, July 2026)

CategoryRepos with ≥1 findingMost common finding inside it
Repo hygiene42.8%No .gitignore (15.3% of repos), no README (11.7%)
Duplication55.6%Cross-file duplication (46.4% of repos)
Structure & size61.2%Files past ~600 lines (56.1% of repos)
Dead code & leftovers63.2%Commented-out code (59.2% of repos)
Readability & complexity55.9%Deep nesting (53.6% of repos)
Consistency & style22.8%Mixed conventions and competing lockfiles

frequently asked

Does this prove AI-generated code is messy?

It proves something narrower. More than half of self-described vibe-coded repos carry duplication, nearly two-thirds carry dead code, three-fifths carry oversized files, and 71 of 549 grade F, all measured by deterministic rules rather than opinion. The mess is predictable, and predictable is catchable.

Why lead with hit rates when the median grade is an A?

Because the median is inflated by tiny demo repos, 85 of which have 15 or fewer files and trivially score A. The distribution is bimodal: a clean small half and a properly messy tail. Means, the grade spread, and per-category hit rates describe both halves; the median describes neither.

Was AI used in the scoring?

No. The study ran the quality·vibes rules engine only, with the Claude review from normal scans switched off, so every number here is reproducible pattern detection. Real scans add an AI pass on top, and that finds more.

Can I see how my repo compares?

Yes. Paste your GitHub repo link into quality·vibes and you get the same six-category scan, scored 0 to 100 with a letter grade, in under a minute. The free tier covers one scan, no card.

Published June 11, 2026 · Last updated July 25, 2026

ready to try quality·vibes?

scan your repo