vibeindex
How much of GitHub is now AI-written? A live, public index of AI-coauthored commits across the 8 most-used coding agents.
vibeindex polls the public GitHub Search API every 30 minutes for
known Co-Authored-By: trailers (Claude, Cursor, Codex, GitHub Copilot,
Aider, Gemini, Devin, generic OpenAI bots) and records the daily count
plus all-time totals in SQLite. The dashboard surfaces:
- A live headline — *"X commits with AI coauthor trailers were pushed
- to GitHub today (+Y% week-over-week)."*
- A 90-day stacked-area chart, one band per coding agent.
- An agent leaderboard with today / 7d / 30d / all-time + market share.
- Movers — biggest 7-day climbers and fallers.
- Top GitHub repos using each agent (link-through to github.com).
- Source transparency — every API call logged with timestamp + status.
Live demo: https://holyai.me/vibeindex/
Why this exists
By May 2026, ~5.6M commits on GitHub carry a Co-Authored-By: Claude
trailer. Cursor alone shipped ~40,000 coauthored commits on a single
random day in early May. Every founder, EM, and VC wants to answer
"who's winning the AI coding agent war?" with data — but until vibeindex
the only option was running 8 manual GitHub searches and pasting numbers
into a spreadsheet. Now it's a live dashboard.
Data sources
Every number on the page comes from one of these public endpoints:
| Endpoint | Used for | Cadence |
|-------------------------------------------------------------------------|---------------------------------------|---------------|
| GET https://api.github.com/search/commits?q=<fp>&per_page=1 | All-time total_count per agent | every 30 min |
| GET https://api.github.com/search/commits?q=<fp>+committer-date:DAY | Daily count per agent (last 14 days) | 06:15 + 18:15 UTC |
| GET https://api.github.com/search/commits?q=<fp>&sort=committer-date&order=desc&per_page=30 | Top repos per agent | 06:15 + 18:15 UTC |
| GET https://api.github.com/repos/{owner}/{repo} | Language, stars, description (cached 24h) | hourly enrich |
Authentication is via GITHUB_TOKEN — required to get the 30-req/min
search rate limit (vs 10/min unauthenticated). vibeindex never writes
to GitHub and never reads anything beyond public commit metadata.
Run it locally
cp .env.example .env
# (optional but recommended) set GITHUB_TOKEN to a token with public_repo read.
npm install
npm start
# → http://localhost:4734/vibeindex/
The first quick sweep runs ~5 seconds after boot. The first deep sweep
runs ~90 seconds after boot. After that, the 30-min and twice-daily
crons take over.
Stack
- Node.js 20+, Express
- better-sqlite3 (WAL mode)
- node-cron
- helmet + compression
- Vanilla JS SPA + Chart.js (loaded via cdnjs)
- Dark theme, English labels (international audience)
- No auth anywhere. Every endpoint public.
Honest caveats
- vibeindex counts only commits whose message includes a known
-
Co-Authored-By:trailer (or, for Aider, a known message signature). - Most AI-assisted commits don't carry a trailer. We undercount.
- Multi-agent commits double-count by design.
- GitHub's Search index is best-effort. For very large queries it
- returns
incomplete_results: true. We report GitHub'stotal_count - verbatim and surface the caveat in the UI.
- vibeindex is not affiliated with Anthropic, OpenAI, GitHub, Google,
- Anysphere, Cognition, or any of the agents tracked.
License
UNLICENSED — internal Cowork experiment.