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.
Release files for github-stars-organizer 0.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| github_stars_organizer-0.2.4.tar.gz | 51.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| github_stars_organizer-0.2.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 78.8 kB
Release files / github_stars_organizer-0.2.4.tar.gz
| Download URL | github_stars_organizer-0.2.4.tar.gz |
|---|---|
| Size | 51.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
97f73555dec571c67fb7afd8613a5bb4bb928fd547fe7bdaa02e56272e6e28bc
|
|
BLAKE2b-256 checksum How to use checksums |
8c622aca1daec60749b6df503a89baeaebff12860712b2a51f3c4805f08e2ef1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / github_stars_organizer-0.2.4-py3-none-any.whl
| Download URL | github_stars_organizer-0.2.4-py3-none-any.whl |
|---|---|
| Size | 27.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ca664c8a0274855a1818363bfc2149bda76445b778b994eb0eb5df6168b6d774
|
|
BLAKE2b-256 checksum How to use checksums |
92d00a1504a581ed4466c6610a16f81608a4ed2c555dd9fe1a0816f3b8a6b003
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|