AI-tooling detection
Overview
We look inside a package's source repository for visible signs that an AI coding tool has been set up on it, and we record when each sign first appeared. Finding a sign shows the tool was present, not that it wrote any code.
Repository
This repository shows signs of AI coding tools.
- Claude Codefirst seen on or before 2026-03-14Seen in the repository: CLAUDE.md, .claudeNamed in .Rbuildignore: CLAUDE.mdCommits: 12 by its own account · at least 41 crediting it in the message
- GitHub Copilotfirst seen 2026-05-20Seen in the repository: .github/copilot-instructions.mdPull request: opened by its own account
- Cursorfirst seen 2026-06-02Pull request it wrote: opened by a project member
- Copilot code reviewCommits: at least 3 accepting its review suggestions
- Claude CodePull requests: 2 from outside contributors, first on 2026-05-04, 1 from forks
- Claude Sonnet 4.623 commits · Mar to Jun 2026
- Claude Opus 4.814 commits · Jun to Jul 2026
Each tool is listed with the day it was first seen, the files seen in the repository or named in an ignore file, the pull requests it wrote, and how many commits were found. Review tools and outside contributors follow in groups of their own. The models are the ones its commit messages name.
Agent skill directories count here when they belong to the maintainer (.claude/skills or .agents/skills). The second path is not tied to any one product, so it is recorded without naming one. Skills installed for the package's users (inst/skills) are counted under repository practices instead, because they are a deliverable for users, not a sign of how the package was developed.
Searches
We run several searches, because each one sees something the others miss. A package page shows AI tools once one of them has a file seen in the package's repository, a pull request from its account or one it wrote, or a commit by it or crediting it. Every tool found there is then listed with what was found for it, so a tool known only from an ignore-file line can appear beside one. A line in an ignore file alone is counted on the insights page but names no package.
- Config file or an ignore-file line
- Tool-specific files or directories in the repository (such as CLAUDE.md or .cursor/), or lines in .gitignore or .Rbuildignore that name them. A file seen in the repository was there when we looked, while an ignore line only names it.
- Pull request by the tool's account
- A pull request opened by a known AI agent account. General-purpose bots (Dependabot, Renovate, github-actions) are left out.
- Pull request the tool wrote
- A pull request a project member opened, recognised by the note or the branch name the tool writes. A codex/ branch alone is not enough. The description must carry a Codex task link or its Generated with Codex line.
- Commit by the tool's account
- Commits by the tool's accounts, counted in every repository each week across every account the tool uses.
- Commit message naming the tool
- Commits crediting the tool, such as a co-author credit or a Generated with line, read in every repository's new commits each week and searched through full histories where something was found. The model a credit names is recorded too.
- Tool name in the author's name
- A suffix one tool appends to the git author name.
Every search reads every scanned repository each week. The commit searches differ in how far back they read.
Review tools, counted apart
CodeRabbit configuration, a Gemini Code Assist configuration folder, and commits accepting a review suggestion from Copilot or Gemini Code Assist are listed in a group of their own. These tools review or suggest, so they never count as a tool that wrote the package.
Outside contributors
A pull request from a fork, or opened by someone who is not an owner, member or collaborator of the repository, is an outside contributor's. Its tool is shown in a group of its own and never counted as the package's.
Commit counts
Where a search finds something, we keep how many commits it found. Commits by the tool's accounts and commits whose message credits the tool are counted separately and never added together, since one commit can be both. Commits by a tool's accounts count each commit once across all of its accounts. Commits crediting a tool show the largest count among its credit lines.
These are counts of commits, not lines of code. Nothing we collect says how many lines a tool wrote, and a commit that credits a tool may have been mostly written by a person.
Every count is a minimum. A rewritten or squashed history removes commits, and a search that has not reached a repository yet keeps no count. Where a search found commits but kept no count, the package page says so rather than showing a number.
Coverage gaps
Some tools leave nothing behind: Mistral, Codestral, and inline completions like Copilot tab or Cursor tab. A blank for these means invisible, not absent.
Grok Build and Junie read AGENTS.md, so a repository using them may show only as AGENTS.md. When a cloud agent commits under the person's own name, only the note in its pull request shows it. Repositories hosted outside GitHub are not scanned for AI tools.
Every total is a lower bound on visible tooling, well under the real rate of AI use.
Deliberate exclusions
Several things look like AI tooling but are not. The detection is built to leave each of them out.
- A person named Claude, or a co-author credit with an ordinary email address, is not a bot.
- Account names that belong to people are never matched, even when they read like a tool's name.
- A branch named after a tool is not enough on its own.
- Security fix bots such as Copilot Autofix are left out.
- A fork or template repository can carry config files inherited from upstream. They are shown, but dated on or before, since the file may be older than the fork.
- A generic AGENTS.md file or a shared .agents directory is recorded but never enough on its own to name a package.
- A line in an ignore file that names a tool is not enough on its own either. RStudio 2026.06 and later add lines such as .positai and .posit/assistant themselves when they update a project's ignore files.
- A commit search match that does not hold the full credit line keeps only an on or before date, and does not name a package unless something else was found for that tool.
- Hosting or static-analysis configs (Replit, DeepSource) are not AI agent signals.
- Ignore-file entries are matched as complete lines, so a substring coincidence cannot trigger a false match.
What changed on 2026-10-07
The detection rules changed with the release of 2026-10-07. Every repository's new commits are now read each week, and each tool's accounts are counted in every repository, so counts rose because we look in more places, not because use rose. The AI tooling page says what moved.
Dating a first appearance
When the first matching commit can be walked in the git history, the date is exact. When it cannot, the date is shown as on or before: the real first appearance is that day or earlier. The months beside a model are the dates of the commits that name it.
Interpreting the counts
The earliest date is the earliest sign we found. The tool may have been in use before that. A package with no detection may still use AI tooling in ways that leave nothing visible.
The totals and the commit counts are lower bounds, not a usage rate.