Skip to content

michael-borck/gh-toolkit

Repository files navigation

gh-toolkit

categorization cli-tool github llm portfolio-management python repository-management shell repository-health-checking topic-tagging

PyPI version Python 3.12+

GitHub repository portfolio management and presentation toolkit with LLM-powered categorization and beautiful site generation

A comprehensive command-line tool for managing GitHub repository portfolios at scale. Perfect for academics, educators, and developers who need to organize, categorize, and showcase their GitHub repositories professionally.

✨ Features

  • πŸ“‹ Repository Management - List, filter, and extract comprehensive repository data
  • πŸ€– LLM-Powered Categorization - Intelligent repository classification using Claude AI
  • πŸ“ Description Generation - AI-powered repository description creation
  • 🏷️ Automated Topic Tagging - Smart topic suggestions with custom tag preferences
  • πŸ”– Topic Badges - Generate shields.io badges from repository topics
  • 🩺 Repository Health Checking - Comprehensive quality audits with best practices compliance
  • 🎨 Portfolio Site Generation - Beautiful, responsive HTML portfolios with 4 themes
  • πŸ“„ Landing Page Generation - Convert README.md to stunning HTML or Jekyll pages
  • πŸ“§ Invitation Management - Bulk accept/leave repository collaborations
  • 🏒 Organization READMEs - Generate and push org profile READMEs directly to GitHub
  • 🎯 Academic Workflow - Perfect alternative to GitHub Classroom
  • πŸ–₯️ Interactive TUI - Full-featured terminal UI for visual repository management
  • ⚑ Modern CLI - Built with typer and rich for beautiful terminal experience

gh-toolkit vs GitHub CLI (gh)

gh-toolkit complements the official GitHub CLI (gh) rather than replacing it.

Use gh for Use gh-toolkit for
Pull requests & issues Portfolio site generation
GitHub Actions workflows Bulk repository operations
Releases & gists AI-powered categorization
Codespaces & projects Repository health auditing
Single-repo operations Cross-org portfolio management
Raw API access Academic/educator workflows

They work great together:

# Daily work with gh
gh pr create --fill && gh run watch

# Portfolio presentation with gh-toolkit
gh-toolkit repo extract my-repos.txt --output data.json
gh-toolkit site generate data.json --theme resume

See docs/gh-cli-comparison.md for a detailed feature comparison.

Working with local clones instead? gh-toolkit manages your repos on GitHub. For the checkouts on your disk, two focused tools pair well with it: gita for multi-repo status and batch git commands across many clones, and git-reclaim β€” a tiny, zero-dependency git reclaim subcommand that frees disk space (purge regenerable caches, git gc) and flags clones that are safe to delete because the remote already has everything.

πŸš€ Quick Start

Installation

pip install gh-toolkit

Authentication

Most commands need a GitHub token. gh-toolkit resolves one from the first available source, so if you already use the gh CLI there's nothing to set up:

  1. The --token flag (visible in shell history/process lists β€” prefer the others)
  2. The GITHUB_TOKEN environment variable
  3. A token key in the config file (see below)
  4. The gh CLI's stored token (gh auth token)

Configuration file (optional)

Put repeated defaults in gh-toolkit.toml (project-local, takes precedence) or ~/.config/gh-toolkit/config.toml:

token = "ghp_..."        # optional β€” env var or gh CLI usually better

Basic Usage

# List repositories
gh-toolkit repo list username

# Extract repository data with LLM categorization
gh-toolkit repo extract repos.txt --anthropic-key=sk-...

# Generate beautiful portfolio site
gh-toolkit site generate repos_data.json --theme educational

# Convert README to landing page
gh-toolkit page generate README.md --output index.html

# Check repository health and best practices
gh-toolkit repo health username/repo --rules academic

# Add topic tags to repositories
gh-toolkit repo tag username/* --dry-run

# Manage invitations (perfect for educators)
gh-toolkit invite accept --dry-run

πŸ“– Commands

Repository Commands

# List repositories with filters
gh-toolkit repo list michael-borck --public --language Python

# Machine-readable output for piping (jq, spreadsheets, gradebooks)
gh-toolkit repo list michael-borck --json | jq '.[].name'

# Extract comprehensive data (concurrent; --resume continues an interrupted run)
gh-toolkit repo extract repos.txt \
  --anthropic-key=sk-... \
  --parallel 8 \
  --output portfolio_data.json
gh-toolkit repo extract repos.txt --resume --output portfolio_data.json

# Generate repository descriptions with AI
gh-toolkit repo describe "user/*" --dry-run
gh-toolkit repo describe user/repo --model claude-sonnet-4-6

# Add intelligent topic tags
gh-toolkit repo tag user/repo --force --anthropic-key=sk-...
gh-toolkit repo tag "user/*" --tags "edtech: Educational, tool: CLI tools"

# Generate topic badges for READMEs
gh-toolkit repo badges user/repo
gh-toolkit repo badges "user/*" --apply  # Auto-update READMEs

# Check repository health and compliance
gh-toolkit repo health user/repo --rules professional --min-score 80
gh-toolkit repo health "user/*" --json | jq '.[] | {repo: .repository, grade}'

# Custom rubric: re-weight checks, set grade thresholds, mark checks required
gh-toolkit repo health user/repo --rubric example_rubric.yaml

# Post the health report back as a GitHub issue (idempotent; confirms first)
gh-toolkit repo health "org/*" --post-issue

# Roster submission report (joins health to a class roster CSV)
gh-toolkit repo roster students.csv --org cs101 --repo-pattern "lab1-{github}"

# Clone repos; --before snapshots each at the last commit before a deadline
gh-toolkit repo clone student_repos.txt --target-dir ./submissions
gh-toolkit repo clone student_repos.txt --before "2026-06-12 23:59"

Site Generation

# Generate portfolio with different themes
gh-toolkit site generate repos.json --theme educational
gh-toolkit site generate repos.json --theme resume  
gh-toolkit site generate repos.json --theme research
gh-toolkit site generate repos.json --theme portfolio

# Custom title and metadata
gh-toolkit site generate repos.json \
  --title "My Projects" \
  --description "My awesome software" \
  --metadata custom.yaml

Page Generation

# Generate standalone HTML landing page
gh-toolkit page generate README.md

# Generate Jekyll-compatible markdown
gh-toolkit page generate README.md --jekyll --output index.md

# Custom title and description
gh-toolkit page generate README.md --jekyll \
  --title "My Project" \
  --description "Amazing software project"

Organization Commands

# Generate README for an organization
gh-toolkit org readme my-org --template detailed

# Push README directly to organization's GitHub profile
gh-toolkit org readme my-org --apply

# Generate with filtering
gh-toolkit org readme my-org --max-repos 20 --min-stars 5 --apply

Portfolio Commands

# Generate cross-organization portfolio
gh-toolkit portfolio generate --discover
gh-toolkit portfolio generate --org org1 --org org2 --html portfolio.html

# Audit repositories for missing metadata
gh-toolkit portfolio audit --discover
gh-toolkit portfolio audit --user --output audit-report.json

# Fix what the audit finds: generate missing descriptions/topics in place
gh-toolkit portfolio audit --org my-org --fix --dry-run   # preview first
gh-toolkit portfolio audit --org my-org --fix --license mit

Invitation Management

# Accept all pending invitations
gh-toolkit invite accept --dry-run

# Leave repositories you're collaborating on
gh-toolkit invite leave --confirm

πŸ–₯️ Terminal UI (TUI)

gh-toolkit includes a full-featured terminal user interface for visual repository management.

Installation

# Install with TUI support
pip install gh-toolkit[tui]

Launch

gh-toolkit tui

Features

  • Browse Organizations - Navigate your GitHub organizations visually
  • Search & Filter - Press / to search repos by name or description
  • Multi-Select - Use Space to select multiple repos, Ctrl+A to select all
  • Bulk Actions - Press a to open the action modal for selected repos
  • Context-Aware - Actions apply to selected items or all visible items

Keybindings

Key Action
? Show help
a Open actions menu
/ Search/filter
Space Toggle selection
Ctrl+A Select all
Ctrl+D Deselect all
Enter View/drill down
Esc Back/cancel
s Cycle sort (in org view)
g Generate README (in org view)

Actions Menu

The TUI provides form-based action selection:

  • Generate Descriptions - AI-powered descriptions with model selection
  • Add Topics - Intelligent tagging with preferred tag support
  • Generate Badges - Create shields.io badges with style options
  • Health Check - Audit repository quality
  • Audit - Find missing metadata

All actions support dry-run mode for safe previewing.

🎨 Portfolio Themes

Educational Theme

Perfect for educators and academic portfolios

  • Purple gradient design
  • Emphasizes learning resources and tools
  • Category order: Desktop β†’ Web β†’ Python β†’ Learning Resources

Resume Theme

Professional showcase for career portfolios

  • Blue corporate design
  • Highlights technical expertise
  • Category order: Web β†’ Desktop β†’ Python β†’ Infrastructure

Research Theme

Academic research and scientific computing

  • Green academic design
  • Focuses on publications and analysis
  • Category order: Learning β†’ Analysis β†’ Python β†’ Web

Portfolio Theme

General project showcase

  • Indigo modern design
  • Balanced category presentation
  • Category order: Web β†’ Desktop β†’ Python β†’ Infrastructure

πŸ€– LLM Integration

gh-toolkit integrates with Anthropic's Claude for intelligent repository analysis:

  • Smart Categorization - Analyzes README, description, languages, and topics
  • Confidence Scoring - Shows certainty of AI classifications
  • Graceful Fallback - Uses rule-based classification when LLM unavailable
  • Topic Generation - Suggests relevant GitHub topics based on content
export ANTHROPIC_API_KEY=sk-ant-...
gh-toolkit repo extract repos.txt  # Uses LLM automatically

πŸ“š Academic Use Case

Perfect alternative to GitHub Classroom:

# Students accept repository invitations
gh-toolkit invite accept

# Track submissions against a class roster (CSV with a github username column).
# Reports who set up their repo and its hygiene score β€” not a mark of the work.
gh-toolkit repo roster students.csv --org cs101 --repo-pattern "lab1-{github}"
gh-toolkit repo roster students.csv --org cs101 --output submissions.csv

# Snapshot every submission at the deadline (last commit before the due date),
# producing an owner/repo folder tree ready for content-assessment tools.
gh-toolkit repo clone student_repos.txt --before "2026-06-12 23:59" \
  --target-dir ./submissions

# Extract all student repositories  
gh-toolkit repo extract student_repos.txt --anthropic-key=sk-...

# Generate class portfolio site
gh-toolkit site generate student_data.json \
  --theme educational \
  --title "CS 101 Student Projects" \
  --output class_portfolio.html

The roster CSV needs a GitHub username column (github, username, handle, …); name, student_id, and an explicit repo column are optional and auto-detected. Each student's repo is resolved from an explicit repo column, the --repo-pattern (fields: {github}, {username}, {id}, {name}), or org/<username>. See example_roster.csv. This is the GitHub-side companion to content-assessment tools β€” it tracks whether the repo was submitted and set up well, leaving marking of the work to a human (see docs/ROADMAP.md).

πŸ› οΈ Development

Setup

git clone https://github.com/michael-borck/gh-toolkit.git
cd gh-toolkit
uv sync --group dev

Testing

# Run all tests
./scripts/test.sh

# Generate coverage report
./scripts/coverage.sh

# Run specific test suites
uv run pytest tests/unit/ -v
uv run pytest tests/integration/ -v

Architecture

src/gh_toolkit/
β”œβ”€β”€ cli.py                 # Main CLI entry point
β”œβ”€β”€ commands/              # Command implementations
β”‚   β”œβ”€β”€ repo.py           # Repository management (list, extract, describe, badges, health)
β”‚   β”œβ”€β”€ org.py            # Organization commands (readme)
β”‚   β”œβ”€β”€ portfolio.py      # Portfolio commands (generate, audit)
β”‚   β”œβ”€β”€ site.py           # Site generation
β”‚   β”œβ”€β”€ tag.py            # Topic tagging
β”‚   └── invite.py         # Invitation management
β”œβ”€β”€ tui/                   # Terminal UI (optional)
β”‚   β”œβ”€β”€ app.py            # Main TUI application
β”‚   β”œβ”€β”€ screens/          # TUI screens (home, org, repo, help)
β”‚   └── widgets/          # Reusable widgets (action modal, etc.)
└── core/                  # Core functionality
    β”œβ”€β”€ github_client.py   # GitHub API client
    β”œβ”€β”€ repo_extractor.py  # Data extraction
    β”œβ”€β”€ site_generator.py  # HTML generation
    β”œβ”€β”€ readme_generator.py # Organization README generation
    └── topic_tagger.py    # LLM tagging

πŸ”§ Configuration

Environment Variables

export GITHUB_TOKEN=ghp_...          # GitHub personal access token
export ANTHROPIC_API_KEY=sk-ant-...  # Anthropic API key (optional)

GitHub Token Scopes

  • repo - Access repositories
  • read:org - Read organization membership
  • write:org - Accept organization invitations

πŸ“Š Example Workflow

# 1. Extract repository data
gh-toolkit repo extract my_repos.txt \
  --anthropic-key=$ANTHROPIC_API_KEY \
  --output extracted_data.json

# 2. Add topic tags
gh-toolkit repo tag my_repos.txt \
  --anthropic-key=$ANTHROPIC_API_KEY \
  --force

# 3. Generate portfolio site
gh-toolkit site generate extracted_data.json \
  --theme portfolio \
  --title "My Software Portfolio" \
  --output index.html

# 4. Deploy to GitHub Pages
# Upload index.html to your GitHub Pages repository

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments


⭐ Star this repository if gh-toolkit helps you manage your GitHub portfolio!

About

Manages GitHub repositories through CLI commands for categorization, health checking, topic tagging, and portfolio organization using LLM-powered automation.

Topics

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors