Organize GitHub starred repos into Star Lists — free heuristic categorization, optional LLM
Project description
GitHub Stars Organizer
Organize 300+ GitHub stars into lists in minutes — free, no AI required.
GitHub's official API can star/unstar repos, but cannot create or manage Star Lists. This CLI:
- Fetches your starred repos (public GitHub API)
- Categorizes them by name, description, language, and topics
- Creates lists and assigns repos via your browser session
Why this tool?
| Tool | Drawback | This project |
|---|---|---|
| github-star-organizer | Requires paid LLM API | Free heuristic by default |
| ghstars | Manual category files only | Auto-plan + custom rules + optional LLM |
| starred | AI-first, complex | Simple: plan → review → apply |
Install
# From source
git clone https://github.com/nishal21/github-stars-organizer.git
cd github-stars-organizer
uv sync
# Or from PyPI (after v0.2.0 release)
pip install github-stars-organizer
Requires Python 3.12+ and uv (recommended).
Windows note: If pip install says scripts are not on PATH, either add
%APPDATA%\Python\Python313\Scripts to your PATH, or run:
python -m stars_organizer init
From the project folder you can also use: uv run organize-stars init
Quick start
1. Build a plan (no credentials needed)
organize-stars plan --username YOUR_USERNAME
Review categorization-plan.json. Edit assignments or add custom rules:
cp categories.example.toml categories.toml
# edit categories.toml
organize-stars plan --username YOUR_USERNAME --categories categories.toml
2. Configure credentials
organize-stars init
Or copy and edit manually:
cp config.example.toml config.toml
| Field | How to get it |
|---|---|
username |
Your GitHub username |
token |
GitHub token settings (classic; public_repo if you star private repos) |
cookies |
See Getting your cookie below |
3. Preview and apply
organize-stars apply --dry-run
organize-stars apply
View result: https://github.com/YOUR_USERNAME?tab=stars
If interrupted, resume with:
organize-stars apply --resume
Getting your browser cookie
GitHub Star Lists have no public API — applying lists uses your browser session.
- Log into github.com in Chrome or Edge
- Press F12 to open DevTools
- Open the Network tab
- Refresh the page
- Click any request to
github.com - Under Headers, find Cookie
- Copy the entire cookie string into
config.toml→[github.session]→cookies
Cookies expire every few weeks. Refresh from DevTools if you get CSRF or 403 errors.
CLI reference
organize-stars init [--config config.toml] [--force]
organize-stars status [--config config.toml]
organize-stars lists [--config config.toml]
organize-stars plan --username USER [--categories categories.toml] [--output plan.json]
organize-stars plan --config config.toml [--categories categories.toml]
organize-stars plan --config config.toml --llm # optional AI mode
organize-stars apply [--config config.toml] [--plan plan.json] [--dry-run] [--yes] [--resume]
Optional AI mode (multi-provider)
Install the LLM extra:
uv sync --extra llm
organize-stars providers # list all supported providers
Add to config.toml (see config.example.toml):
[llm]
provider = "mistral"
preferences = "I'm a web designer, gamer, and anime fan."
[llm.providers.mistral]
api_key = "your-mistral-key"
[llm.providers.openai]
api_key = "sk-..."
[llm.providers.groq]
api_key = "gsk_..."
Supported providers: openai, mistral, groq, openrouter, google, deepseek, together, fireworks, cerebras.
API keys can also be set via env vars (MISTRAL_API_KEY, OPENAI_API_KEY, GROQ_API_KEY, etc.).
organize-stars plan --config config.toml --llm
organize-stars plan --config config.toml --llm --provider groq
Heuristic mode (no API key) remains the default without --llm.
Default categories
- AI & LLM
- Web Dev & Frontend
- Mobile & Android
- Backend & APIs
- Dev Tools & CLI
- Self-hosting & DevOps
- Security & Privacy
- Media & Creative
- Gaming & Entertainment
- Go & Systems
- Learning & Inspiration
- Misc & Tools
Customize via categories.toml or edit the plan JSON before applying.
Troubleshooting
| Problem | Fix |
|---|---|
| CSRF / 403 error | Refresh browser cookie in config.toml |
| Rate limited | Wait a few minutes; reduce concurrency in config |
| More than 32 lists | GitHub hard limit — merge categories in plan or categories.toml |
| Apply interrupted | Run organize-stars apply --resume |
config.toml not found |
Run organize-stars init |
Check setup anytime:
organize-stars status
Privacy and security
- Token and cookies stay in local
config.toml(gitignored) — never commit them - Plan mode reads only public repo metadata
- LLM mode (optional) sends metadata to your configured provider
- See SECURITY.md
Development
uv sync --dev
uv run pytest
uv run ruff check .
See CONTRIBUTING.md.
Attribution
Web client adapted from luoling8192/github-star-organizer (MIT). See ATTRIBUTION.md.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file github_stars_organizer-0.2.4.tar.gz.
File metadata
- Download URL: github_stars_organizer-0.2.4.tar.gz
- Upload date:
- Size: 51.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97f73555dec571c67fb7afd8613a5bb4bb928fd547fe7bdaa02e56272e6e28bc
|
|
| MD5 |
3b059c8306e1a0cabeeaf7010f8ece4b
|
|
| BLAKE2b-256 |
8c622aca1daec60749b6df503a89baeaebff12860712b2a51f3c4805f08e2ef1
|
File details
Details for the file github_stars_organizer-0.2.4-py3-none-any.whl.
File metadata
- Download URL: github_stars_organizer-0.2.4-py3-none-any.whl
- Upload date:
- Size: 27.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca664c8a0274855a1818363bfc2149bda76445b778b994eb0eb5df6168b6d774
|
|
| MD5 |
04e88be002a3a7bbd43c99ddc5a12093
|
|
| BLAKE2b-256 |
92d00a1504a581ed4466c6610a16f81608a4ed2c555dd9fe1a0816f3b8a6b003
|