Scans all active GitHub repositories accessible via a Personal Access Token (PAT) and produces a full inventory of every language and framework in use — with repo counts, byte-share percentages, and version info where available.
Works as both a standalone CLI script and a Claude Code skill.
pip install -r requirements.txt
python scripts/scan_repos.py --token <YOUR_PAT> --verbose| Flag | Default | Description |
|---|---|---|
--token, -t |
$GITHUB_TOKEN |
GitHub Personal Access Token |
--org, -o |
(all accessible) | Limit scan to a specific org (e.g. my-company) |
--active-days, -d |
365 |
Only include repos pushed within this many days |
--show-repos |
off | List which repos use each language/framework |
--json |
off | Emit raw JSON instead of the formatted report |
--verbose, -v |
off | Print progress to stderr while scanning |
# Scan everything the token can access
python scripts/scan_repos.py --token ghp_xxx --verbose
# Scan a single org only
python scripts/scan_repos.py --token ghp_xxx --org my-company
# Last 6 months, show which repos use each technology
python scripts/scan_repos.py --token ghp_xxx --active-days 180 --show-repos
# JSON output for further processing
python scripts/scan_repos.py --token ghp_xxx --json | jq '.language_bytes'Uses GitHub's native /repos/{owner}/{repo}/languages endpoint — returns byte counts per language, which are aggregated into percentages across all active repos.
| File | Ecosystems detected |
|---|---|
package.json |
React, Vue, Angular, Next.js, Express, NestJS, Vite, Prisma, … |
requirements.txt |
Django, Flask, FastAPI, PyTorch, LangChain, Anthropic SDK, … |
pyproject.toml |
Same as above (PEP 621 and Poetry formats) |
Gemfile |
Rails, Sinatra, Sidekiq, Devise, … |
go.mod |
Gin, Echo, Fiber, GORM, Chi, … |
pom.xml |
Spring Boot, Quarkus, Hibernate, Kafka, … |
build.gradle |
Spring Boot, Ktor, Micronaut, … |
composer.json |
Laravel, Symfony, Doctrine, … |
Cargo.toml |
Actix Web, Axum, Tokio, Tauri, Leptos, … |
pubspec.yaml |
Flutter, Riverpod, Firebase, … |
============================================================
GitHub Tech Stack Report — @username
============================================================
Repos scanned: 42 active (of 87 total, active = pushed within 365 days)
── Languages ────────────────────────────────────────────
TypeScript 41.2% ████████ (18 repos)
Python 28.5% █████ (12 repos)
JavaScript 15.3% ███ (9 repos)
── Frameworks & Libraries ───────────────────────────────
React (11 repos) [18.1.0, 18.2.0]
Django (6 repos) [4.2.0]
Express (5 repos)
============================================================
| Goal | Required scopes |
|---|---|
| Public repos only | No scopes needed |
| Private repos | repo (classic PAT) or Contents: read + Metadata: read (fine-grained PAT) |
| Org repos | Same as above; token must be authorized for the org (SSO if applicable) |
| Create repos in an org | repo + write:org (classic PAT) |
Generate a token at: GitHub → Settings → Developer settings → Personal access tokens
This repo is structured as a Claude Code skill. To install it, place the directory under ~/.claude/skills/ and Claude Code will pick it up automatically.
MIT — see LICENSE.