SlopScore

How we count

Method v1, frozen 2026-09-14. Every chart on /trends and every number in the Trawl Report is produced by the rules below. They were written down before the numbers, they are versioned, and they are never edited in place: a rule change bumps the version and leaves a dated line at the bottom of this page. Reports stamp the version they were written under.

Machine-readable: /method.json. The code behind every rule here is public: src/lib/virtual.ts picks the sample, src/lib/judge.ts is the judge, src/jobs/trends.ts does the counting, src/jobs/report.ts writes the weekly bulletin.

The one sentence that matters

This site measures software whose author says in public that an AI tool wrote it. It does not measure AI-written software. Those are different populations and the gap between them is enormous and unknowable: most generated code carries no such statement, and the statement is the only thing anybody can see from outside. Every number here inherits that. If you quote one, quote it with that sentence attached.

Two samples, never mixed

  • Trawled. The Cap'm found the repo. Its owner never asked to be here and mostly did not know the site existed. Nothing was selected for beyond the filters in the next section, so within the labelled population this is about as close to a random sample as anyone gets.
  • Opted in. The owner committed a slopscore.md. That is a person choosing to file paperwork about their own work, which is self-selection with a capital S. This cohort describes people who volunteer. It is also the only cohort that can answer a question a human had to answer personally — how much of it a model wrote, how much they went back over — because nobody else knows.

The two are counted separately and drawn in separate columns everywhere. A number that merges them is not a number from this site.

How the trawl picks

Six search grounds, worked in rotation. Each is a handful of GitHub searches:

  • The Vibe Banks — repos that call themselves vibe-coded and name no tool at all. Searches: topic:vibe-coded, topic:vibecoded, "vibe coded" in:description
  • Claude Cay — repos that name Claude or Claude Code. Searches: topic:built-with-claude, topic:built-with-claude-code, "built with claude" in:description
  • Cursor Shoals — repos that name Cursor. Searches: topic:built-with-cursor, topic:cursor-ai, "built with cursor" in:description
  • The GPT Narrows — repos that name ChatGPT, GPT or Codex. Searches: topic:built-with-chatgpt, topic:built-with-gpt, "built with chatgpt" in:description
  • Copilot Reach — repos that name GitHub Copilot or Gemini. Searches: topic:built-with-copilot, topic:built-with-gemini, "built with copilot" in:description
  • The Generated Deeps — repos that say a machine wrote them, and the builder tools: v0, Bolt, Lovable, Windsurf. Searches: topic:ai-generated, topic:built-with-v0, topic:built-with-lovable, "ai-generated" in:description

Every result is then filtered on facts from the search response alone, before anything is read and before any model is paid:

  • 1 to 2,000 stars
  • pushed within the last 90 days
  • not a fork, not archived, not a template, not private
  • a licence permissive enough to quote from: MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, 0BSD, Unlicense, CC0-1.0
  • not owned by an organisation — a repo nobody can personally claim is a repo nobody can personally take down
  • the description or topics carry a past-tense claim that a tool wrote the code. "Built with Cursor" counts. "An IDE for vibe coding" does not.

What survives goes to the judge.

The judge

One cheap model, temperature 0, two multiple-choice questions, and nothing else. It cannot write a sentence that reaches this site.

  • code decides whether the repo is listed. app, game, tool, library, hardware are listed; tool-for-ai-coding, list-or-template, needs-disclosure, low-effort, not-ai-made, unclear are thrown back.
  • domain decides nothing at all. It is what the software is for, off a closed list of 18, and it is kept only to be counted.

Both answers are validated against those closed lists and anything else is discarded. The verdict is stored for every candidate the judge sees — the ones listed and the larger number thrown back. That second half is the most useful thing this site has, and it is the half a leaderboard normally throws away.

Counted, and judged

Almost everything on /trends is counted: a GROUP BY over rows some earlier job already wrote. Languages, licences, stars, topics, which tool gets the credit, what the net threw back. No model is called to draw the dashboard — not one token.

Exactly two charts are judged: what the software is for, and what kind of thing it is. Those count the model's labels rather than a maker's. They are marked as such where they appear, here, and in every report. They are the only numbers on this site that are somebody's opinion.

Known biases — read these before quoting a number

  1. The label is the sample. Restating the sentence above, because it is the one people drop. We see repos whose owners announced the tool. Announcing is a behaviour, and it varies by tool, by community, by how new the tool is, and by whether announcing is currently fashionable.
  2. Tool share here is query-shaped. The grounds above are named after tools. A tool with a popular built-with-x topic will out-count a tool whose users never tag anything, whatever people actually use. Tool share on this site measures how loudly a tool's users say its name in public, and nothing else. It is not market share, it is not usage, and quoting it as either is wrong.
  3. Permissive licences only. We read repos we could quote from. Anything GPL or unlicensed is invisible here, and that filters the kind of project as much as the licence.
  4. The star window's ends are our rule. The first and last bars of the star chart are where we stopped looking, not where the world stops.
  5. The opted-in cohort is self-selected and small. Read it as "people who volunteer", never as "makers".
  6. Cross-sections are stock, not flow. Anything without a month on it counts what is listed tonight. A repo taken down, delisted or archived leaves no trace in it, so the past quietly changes shape as the present does.
  7. The sample is young. Snapshots are kept for 180 days and the site is younger than that. Week-over-week movement on a small n is mostly noise, and the reports say so rather than dressing it up as a trend.

What this site does not claim

  • Nothing about code quality. Nobody here runs the code. A listing is not a review, and a score is a popularity count on a joke leaderboard.
  • Nothing about security. The dependency check on a repo page reports what a public advisory database already says about that repo's dependencies. That is not an audit.
  • No ranking of one tool's output against another's. Read bias 2 again. A repo crediting a tool is a statement its owner made, not a judgement of the tool.
  • No statistical significance. These are counts of a convenience sample. There are no p-values here and there will not be any.

Reproducing any of it

  • /trends.json is tonight's snapshot in full.
  • Every report keeps the numbers it was written from: /report/<week>.json.
  • The snapshot job runs once a night at 00:05 UTC and replaces the day rather than appending to it, so re-running it is safe and lands on the same rows.

Corrections

If a number here is wrong, say so on the contact form. Corrections are published as a line in the next report and, where the method itself was wrong, as a new version below. Nothing is quietly edited.

Changes to this method

  • v1 · 2026-09-14 — First freeze. Writes down what the trawl was already doing: the six search grounds, the star and push windows, the licence filter, the judge's two closed questions, and the split between counted and judged numbers. No rule changed in order to publish this.