github-tech-scanner

April 13, 2026 · View on GitHub

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.


Usage

Standalone

pip install -r requirements.txt

python scripts/scan_repos.py --token <YOUR_PAT> --verbose

Flags

FlagDefaultDescription
--token, -t$GITHUB_TOKENGitHub Personal Access Token
--org, -o(all accessible)Limit scan to a specific org (e.g. my-company)
--active-days, -d365Only include repos pushed within this many days
--show-reposoffList which repos use each language/framework
--jsonoffEmit raw JSON instead of the formatted report
--verbose, -voffPrint progress to stderr while scanning

Examples

# 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'

What it detects

Languages

Uses GitHub's native /repos/{owner}/{repo}/languages endpoint — returns byte counts per language, which are aggregated into percentages across all active repos.

Frameworks (via manifest files)

FileEcosystems detected
package.jsonReact, Vue, Angular, Next.js, Express, NestJS, Vite, Prisma, …
requirements.txtDjango, Flask, FastAPI, PyTorch, LangChain, Anthropic SDK, …
pyproject.tomlSame as above (PEP 621 and Poetry formats)
GemfileRails, Sinatra, Sidekiq, Devise, …
go.modGin, Echo, Fiber, GORM, Chi, …
pom.xmlSpring Boot, Quarkus, Hibernate, Kafka, …
build.gradleSpring Boot, Ktor, Micronaut, …
composer.jsonLaravel, Symfony, Doctrine, …
Cargo.tomlActix Web, Axum, Tokio, Tauri, Leptos, …
pubspec.yamlFlutter, Riverpod, Firebase, …

Sample output

============================================================
  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)
============================================================

Token requirements

GoalRequired scopes
Public repos onlyNo scopes needed
Private reposrepo (classic PAT) or Contents: read + Metadata: read (fine-grained PAT)
Org reposSame as above; token must be authorized for the org (SSO if applicable)
Create repos in an orgrepo + write:org (classic PAT)

Generate a token at: GitHub → Settings → Developer settings → Personal access tokens


As a Claude Code skill

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.


License

MIT — see LICENSE.