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
| 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 |
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)
| 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, … |
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
| 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
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.