ai-ban-board
Live, public leaderboard of GitHub repositories that have explicitly banned, restricted, or filtered AI-generated contributions. Real-time data, refreshed every 15 minutes from the GitHub Search API. No mocks. No seeds. No Math.random().
Live: https://holyai.me/ai-ban-board/
Port: 4901
Base path: /ai-ban-board
Stack: Node.js 20 · Express · better-sqlite3 (WAL) · node-cron · helmet · compression
Auth: none. Every endpoint is public.
---
Why this exists
By May 2026 AI-authored PRs make up an estimated 10–15% of all public GitHub traffic. A small, growing minority of OSS maintainers are pushing back — adding "no AI-generated contributions" clauses to CONTRIBUTING.md, banning specific tools by name (Copilot, Cursor, Claude, ChatGPT, Devin), or requiring explicit disclosure. The movement has high-profile examples — curl, NixOS RFC 2026-014, Software Freedom Conservancy guidance — but no public canonical list of which repos have actually shipped the clause and what wording they used. This board is that list.
What it tracks
- Per-repo: severity (
hard_ban/soft_discouragement/disclosure_required/tool_specific), the named tools, the clause-pattern fingerprint, the verbatim snippet, the first-seen date, and a permalink to the source file on GitHub. - Per-tool: how many repos name each AI tool (Copilot, Cursor, Claude, ChatGPT, Codex, Devin, Cline, Aider, Sweep, Replit Agent, generic "LLM" / "GPT").
- Per-clause-pattern: distribution of phrasings (
will_be_closed,may_be_closed,disclosure_required,human_only,blanket_no_ai,tool_specific_ban). - Time series: daily new-ban-clause count over the last 90 days, week-over-week growth.
Data sources (real, runtime)
| Source | Endpoint | Frequency | Notes |
|---|---|---|---|
| GitHub Code Search | GET https://api.github.com/search/code?q=<rotated-query> | every 15 min, 1 query per tick (8-query rotation) | unauth-friendly; lifts to 30 req/min with GITHUB_TOKEN |
| GitHub Repo Metadata | GET https://api.github.com/repos/{owner}/{repo} | on first-seen + every 6h for top 50 | provides stars, license, language, description |
| Claude Haiku 4.5 (OpenRouter) | POST https://openrouter.ai/api/v1/chat/completions | nightly 30 4 * UTC, 20 rows / pass | optional; without it, regex classifier is used and rows are tagged classified_by="regex" |
Search queries (rotated)
"no AI-generated" path:CONTRIBUTING.md"AI-generated PRs" path:CONTRIBUTING.md"will be closed" "Copilot""do not submit AI" path:CONTRIBUTING.md"AI slop" path:CONTRIBUTING.md"human-authored" path:CONTRIBUTING.md"not accepted" "ChatGPT""LLM-generated" rejected
Honest caveat: the dashboard reflects only what GitHub code-search will surface for these eight patterns. It is a sample, not a census.
API
All endpoints are public, JSON, mounted under /ai-ban-board.
| Method | Path | Purpose |
|---|---|---|
| GET | /health | {ok, version, repos, last_refresh, last_status} |
| GET | /api/stats | top-line counts + WoW growth |
| GET | /api/repos?severity=&tool=&q=&sort=&limit=&offset= | paginated repo list |
| GET | /api/repos/:owner/:repo | single repo detail |
| GET | /api/tools | per-tool ban counts |
| GET | /api/clauses | per-clause-pattern counts |
| GET | /api/timeline?days=90 | daily new-ban time series |
| GET | /api/recent?limit=20 | newest 20 clauses |
| GET | /api/queries | the eight rotated queries |
| GET | /api/fetch_log?limit=30 | last N fetch attempts (debug) |
| GET | /api/refresh | nudge the fetcher; returns immediately |
| GET | /badge/:slug.svg | Shields-style severity badge for one repo |
Run locally
git clone <this-repo>
cd ai-ban-board
cp .env.example .env
npm install
npm start
# open http://localhost:4901/ai-ban-board/
Optional env:
GITHUB_TOKEN— lifts code-search rate limit from 10 to 30 req/min.OPENROUTER_API_KEY— enables Haiku classification (otherwise regex fallback).
Sibling products
- pr-bounce — AI PR rejection leaderboard (per-PR signal)
- agent-revert-radar — AI commits later reverted
- crawl-policy — robots.txt blocks on AI training crawlers
Where crawl-policy tracks who blocks AI on the read side, ai-ban-board tracks who blocks AI on the contribute side.
License
UNLICENSED. Internal Cowork R&D pipeline build. Source files released for transparency.