AI-tooling detection
Overview
We read a package source repository for visible, declared signs that an AI coding tool has worked on it, and we note when each one first turned up. A marker means the tool left a trace someone can point to. It does not mean AI wrote the code, and it is not a judgment of quality or authorship.
Development tooling
Uses AI-assisted development tooling (declared in repo)
Earliest detected marker: Claude Code on 2026-03-14
Most recent: Claude Code on 2026-07-02
- Claude Code: on or before 2026-03-14 · evidence A, D
- GitHub Copilot: on 2026-05-20 · evidence D
The date is the earliest marker we could find; the chips are the tools that left a trace.
Agent skills count here when they are the maintainer's own, under .claude/skills or .agents/skills. The second of those is shared by most agents rather than owned by one, so it is recorded without naming a product. Skills a package SHIPS, under inst/skills, are a repository practice instead: they are installed for the package's users, which says nothing about how the package was written.
The evidence we combine
One kind of evidence on its own misses too much, so we combine several. A package is named only when the strongest tier fires by itself, or when at least two weaker tiers agree. A single low-confidence hit still counts toward the totals, but it is not shown against the package.
- Bot account (Tier A)
- A commit author email or login that exactly matches a curated list of AI coding-agent identities. This is the highest precision, and it is trusted on its own.
- Commit-message signature (Tier B)
- A canonical trailer, such as a Claude Code co-author line or a "Generated with" marker, matched literally rather than by a bare name.
- Author-name suffix (Tier C)
- A recognized suffix appended to the end of the git author name. One tool is known to do this, so this channel searches for one string. Its total is a statement about that one tool and not about the practice.
- Config markers (Tier D)
- Tool artifact files or directories in the repository tree, plus whole-entry scans of the ignore files. This is the quiet-adoption signal and much the commonest, though no longer the only one that fires.
- Pull requests
- A PR opened by an allowlisted agent login. A bare "this is a bot" match is rejected, so Dependabot, Renovate, and github-actions are never flagged. This is the only channel that runs against every repository rather than only the ones a config marker already flagged, and so the only one that can find a tool which leaves no file behind.
Coverage gaps
Some tools leave nothing durable behind, so we simply cannot see them: Mistral and Codestral, and inline editor completions like Copilot tab or Cursor tab. A blank for any of those is not evidence of anything. The number is a floor on visible tooling, comfortably under the real rate of AI use.
All five channels run. Two of them spent a period returning nothing that looked exactly like an absence and was not one. The commit searches were being refused by the search API, and a refused query reads the same as one that matched nothing; that is fixed and those tiers now carry real counts. The pull-request channel was comparing agent logins against a list that spelled four of them with a suffix the API does not return, so it matched nothing it should have; that is fixed too, and its counts start from the next scan rather than being backfilled.
Two limits remain on the bot-account search. It only runs against repositories a config marker already flagged, and it only looks for the tools that flagged them, so a tool that leaves no file cannot be found this way however many commits it signs. Three of the six identities we know of leave no file: Devin, Jules and OpenHands. They are reachable through the pull-request channel, which does run against every repository, and nowhere else. A blank for any of them means we have not looked in the one place they would show.
False positives
A few things resemble AI tooling without being it, and the ruleset is built to leave each of them out.
- A person named Claude, or a co-author line pointing at an ordinary email, is not a bot.
- Forks and template-seeded repositories inherit marker files; an inherited marker is treated as weak and does not, on its own, meet the bar for naming a package.
- A tool-agnostic AGENTS.md file is recorded but never counts by itself, and never wins the earliest-marker tie without something to back it.
- A lone hosting or static-analysis file, such as a Replit or DeepSource config, is not agent evidence on its own.
- Tokens in ignore files are matched as whole entries, so an unrelated name cannot trigger a match by coincidence.
Dating a first appearance
Sometimes the first matching commit cannot be pinned to an exact day. When that happens, the onset is recorded as a floor and shown as on or before that date. The true first appearance is that day or earlier, and never later.
Reading the signal
A marker tells you the tool is visible in the repository, and the earliest date is the earliest marker we found, which is not the same as when AI assistance began. A package with nothing shown has no detectable marker, which is not the same as no AI at all.
The totals across packages are a lower bound, at least this many carry a marker, not a usage rate, so please do not quote them as a percentage.