Method

What this measures,
and what it can't.

Including the version of this measurement that was wrong, why it was wrong, and what it cost to fix.

The question

AI-agent tokens passed memecoins on share of investor attention this year. The pitch behind almost all of them is autonomous software doing real work. This site checks the software: for every token CoinGecko files under AI Agents, Agent Launchpads or AI Meme, is there a public repository, and how long since anybody pushed to it?

What counts as shipping code

A public repository published by the project itself — a link the team filed with its own CoinGecko listing or its own DexScreener token profile. Not a repository that merely mentions the token.

That distinction is the whole measurement, so it is worth showing why. A GitHub search for aixbt, zerebro and fartcoin returns 16, 14 and 60 results. Every one is third-party: tutorials, zero-star clones, and unrelated projects last touched in 2012 and 2017. Counting search hits as evidence would score all three as alive — and would be a metric measuring the generosity of its own threshold rather than the thing itself.

What it cannot see

Private repositories

A legitimate choice this site cannot distinguish from having no code. The single largest source of unfairness in these numbers, and the reason every page says “no public repo found” rather than “no code”.

Forges that aren't GitHub

GitLab, Codeberg and self-hosted instances are not followed. A project hosting there scores as having nothing.

Whether the code does anything

A daily commit to a README counts the same as a daily commit to an inference engine. This measures activity, not substance.

Anything on X

The original design measured when each agent last posted. It is not buildable — see below.

Why there is no X column

The first scope for this site was “when did each agent last post”. It cannot be built without a paid API key, and that was measured rather than assumed: the syndication endpoint returns zero bytes, the oEmbed endpoint 301s, and x.com/<handle> returns HTTP 200 with no timestamps in the HTML — even for handles that do not exist. It cannot tell a live account from a deleted one.

A scraper written against that will appear to work and will score every account identically. Rather than ship a column that looks like a signal and is noise, the site does not report on X at all.

The hand audit, and the number it overturned

The scan only sees repository links a team filed with CoinGecko or DexScreener. Plenty of real projects never fill those fields in, so "no repo in either listing" is a much weaker claim than "no public code" — and for a while this site printed the strong one.

Every token above $10M with nothing in either listing was therefore checked by hand. The rule, and it is the entire value of the exercise:

A token ships code only if a GitHub owner's own profile links back to the project's own website. Both directions, or it does not count.

That audit moved ten projects worth $1.4B — Venice, Virtuals, Talus, AWE, Recall, Turbo, Bankr, SingularityNET, Phala and Elsa — out of the "no code" column. The unaudited scan had said 34% of the sector shipped code. The audited figure is 78%. The site led with the wrong one, and this paragraph is here because it did.

The rule earns its keep in both directions. The token Rei lists reilabs.org, and github.com/reilabs is a real organisation with 68 repositories — but its profile points at reilabs.io, a different company. The name matched; the backlink did not. Counting it would have credited a token with a stranger's source code. Conversely AWE Network ships under STPDevteam, which resembles nothing about the brand until you notice CoinGecko still files the token under the id stp-network.

Every verdict and every rejected candidate is committed to data/audit.json. Two projects whose own websites would not load are recorded as inconclusive and excluded from every percentage, rather than counted as empty.

The measurement that was wrong before that

The first working scan reported that 5% of the sector ships code. That number was false too, in the same direction and for a related reason.

To avoid CoinGecko's rate limit, that version took repository links from DexScreener alone, which does not throttle. But DexScreener token profiles carry a website and a Twitter handle and essentially never a repository. The scan was measuring which teams fill in a DEX aggregator's link form.

It scored Virtuals Protocol, OriginTrail, Concordium and iExec as shipping no code. All four are open source, and CoinGecko lists repositories for two of them that DexScreener had never heard of. A second bug sat underneath: the scanner required a full owner/repo path, so github.com/Concordium — an organisation with public code — parsed as nothing at all.

Both are the same failure: an instrument measuring itself. It is a shape this family of sites keeps hitting, which is why the fix was to pay the rate limit rather than route around it. A cheap measurement that answers the wrong question is not cheaper.

The pattern across all three corrections is worth stating plainly, because it runs against the grain of what a site like this is expected to find: every error made the sector look worse than it is. The instrument was measuring which teams fill in link forms, and mistaking that for whether they write software. If a future change here produces a more damning number, that is exactly when to check the instrument first.

Sources

CoinGecko

The token universe, market caps, and the repository links teams file with their listing. Its keyless tier allows roughly five calls a minute before locking out entirely, which is why the scan is offline.

DexScreener

A second, independent set of team-submitted links. Queried by contract address, never by symbol — several unrelated tokens here share a ticker, and a name search folds an impostor's data into the real token's row.

GitHub API

Last push date, star count and the archived flag for every repository found. Where a listing points at an organisation, the most recently pushed non-fork repo is used, and the row is labelled.

Coverage

The scan covers the largest tokens by market cap and states exactly how many smaller ones it leaves out. A truncated scan that does not say so reads as full coverage.

The result is committed as a static snapshot rather than fetched live. That is not a stylistic choice: a sector-wide sweep against a five-call-a-minute limit is a background job measured in tens of minutes, not something a page load can do.