{"id":49003862,"url":"https://github.com/catuscio/gh-stars-classifier-skill","last_synced_at":"2026-04-25T01:01:39.992Z","repository":{"id":352218950,"uuid":"1214325635","full_name":"catuscio/gh-stars-classifier-skill","owner":"catuscio","description":"Classify your GitHub stars into semantic categories and sync to GitHub Lists, using LLM's reasoning.","archived":false,"fork":false,"pushed_at":"2026-04-18T12:33:00.000Z","size":26,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-20T21:34:04.993Z","etag":null,"topics":["agents-md","classifier","claude-code","codex-cli","gemini-cli","github","opencode","plugin","stars"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/catuscio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-18T12:22:56.000Z","updated_at":"2026-04-20T00:07:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/catuscio/gh-stars-classifier-skill","commit_stats":null,"previous_names":["catuscio/gh-stars-classifier-skill"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/catuscio/gh-stars-classifier-skill","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catuscio%2Fgh-stars-classifier-skill","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catuscio%2Fgh-stars-classifier-skill/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catuscio%2Fgh-stars-classifier-skill/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catuscio%2Fgh-stars-classifier-skill/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/catuscio","download_url":"https://codeload.github.com/catuscio/gh-stars-classifier-skill/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/catuscio%2Fgh-stars-classifier-skill/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32112030,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T11:25:29.218Z","status":"ssl_error","status_checked_at":"2026-04-21T11:25:28.499Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents-md","classifier","claude-code","codex-cli","gemini-cli","github","opencode","plugin","stars"],"created_at":"2026-04-18T19:33:44.092Z","updated_at":"2026-04-21T22:01:05.144Z","avatar_url":"https://github.com/catuscio.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gh-stars-classifier-skill\n\nA Claude Code plugin that organizes your GitHub Stars into semantic categories and syncs them to GitHub Lists — using Claude's reasoning instead of a fixed keyword table.\n\n## What it does\n\n1. Fetches every repository you've starred via the GitHub GraphQL API.\n2. **Claude proposes a category taxonomy** that actually fits what you've starred (not a generic list).\n3. You approve / edit the taxonomy.\n4. Claude classifies each repo, shows you a preview, and — after you confirm — writes assignments to your GitHub Lists.\n\nNo opaque keyword rules. The LLM does the judgment; the scripts do the API plumbing.\n\n## Install\n\n```\n/plugin marketplace add catuscio/gh-stars-classifier-skill\n/plugin install gh-stars-classifier@gh-stars-classifier-marketplace\n```\n\nReplace `catuscio/gh-stars-classifier-skill` with your own `OWNER/REPO` if you forked this.\n\n## Using with other CLI agents\n\nThe same skill works across every agentic CLI that reads a local markdown\ninstruction file. The canonical workflow is [`AGENTS.md`](AGENTS.md); each\nCLI has a thin entry file that points at it.\n\n| CLI | Entry file | Install |\n|---|---|---|\n| Claude Code | `skills/gh-stars-classifier/SKILL.md` | plugin marketplace (above) |\n| Codex CLI (OpenAI) | `AGENTS.md` | `git clone` + `cd` + `codex` |\n| opencode | `AGENTS.md` | `git clone` + `cd` + `opencode` |\n| Gemini CLI | `GEMINI.md` (imports `AGENTS.md`) | `git clone` + `cd` + `gemini` |\n\n### Codex CLI / opencode\n\nBoth read `AGENTS.md` at the repo root automatically:\n\n```bash\ngit clone https://github.com/catuscio/gh-stars-classifier-skill\ncd gh-stars-classifier-skill\ncodex    # or: opencode\n```\n\nThen ask: *\"organize my starred repos into GitHub Lists.\"* The agent loads\nAGENTS.md and walks you through the five-phase workflow with confirmations.\n\n### Gemini CLI\n\nGemini CLI reads `GEMINI.md`, which `@`-imports the same workflow:\n\n```bash\ngit clone https://github.com/catuscio/gh-stars-classifier-skill\ncd gh-stars-classifier-skill\ngemini\n```\n\n### Root path resolution\n\nEvery phase in `AGENTS.md` uses `${GH_STARS_CLASSIFIER_ROOT}/scripts/...`.\nThe preamble resolves it in priority order:\n\n1. `$GH_STARS_CLASSIFIER_ROOT` if you exported it\n2. `$CLAUDE_PLUGIN_ROOT` (auto-set by Claude Code's plugin loader)\n3. `$PWD` (your current directory — just `cd` into the clone)\n\nSo for Codex / opencode / Gemini: `cd` into the repo before invoking the CLI,\nor export the variable explicitly.\n\n## Prerequisites\n\n- [GitHub CLI](https://cli.github.com/) (`gh`) authenticated with the `user` scope:\n  ```bash\n  gh auth login\n  gh auth refresh -h github.com -s user\n  ```\n- Python 3.8+ on PATH (for the helper scripts).\n\n## Usage\n\nIn Claude Code, just ask:\n\n\u003e \"organize my starred repos into GitHub Lists\"\n\u003e\n\u003e \"classify my GitHub stars into categories\"\n\nClaude will load this skill and walk you through five phases, pausing for your approval at each checkpoint.\n\n### Power-user shortcut: bring your own taxonomy\n\nIf you run the skill regularly and want a **stable set of categories**, pre-populate `.gh-stars-workspace/categories.json` in your working directory:\n\n```json\n[\n  {\"name\": \"🤖 Agents\",    \"description\": \"autonomous agents, MCP, copilots\"},\n  {\"name\": \"🧠 LLM Infra\", \"description\": \"inference, serving, fine-tuning\"},\n  ...\n]\n```\n\nWhen the file exists, Phase 2 (taxonomy proposal) is skipped and the skill goes straight to reconciling with existing GitHub Lists.\n\n## Behavior notes\n\n**Fetch is cacheable.** The skill calls `fetch_stars.py --reuse-if-fresh 24`, so repeat runs within 24 hours reuse the cached `.gh-stars-workspace/stars.json` instead of refetching. Ask Claude to \"refresh my stars\" to force a new pull.\n\n**Lists are created automatically** (with your confirmation) via the `createUserList` GraphQL mutation. If the approved taxonomy contains categories that don't yet exist as Lists, the skill will list them, ask you to confirm, and then create each one. Existing lists are reused by name match.\n\n**Manual list assignments are preserved.** `updateUserListsForItem` on its own *replaces* a repo's full list-set, which would normally wipe memberships in any list outside the skill's taxonomy. To avoid that, the skill first reads the current memberships with `get_lists.py --with-items` and passes them to `apply_classification.py --current-memberships`. The apply script then computes `final = (new plan) ∪ (existing memberships in orphan lists)`, so lists you curated by hand are untouched.\n\n## Layout\n\n```\n.\n├── .claude-plugin/\n│   ├── plugin.json          # Plugin manifest\n│   └── marketplace.json     # Single-plugin marketplace\n├── skills/\n│   └── gh-stars-classifier/\n│       └── SKILL.md         # Orchestration (what Claude reads)\n├── scripts/\n│   ├── fetch_stars.py           # Paginated fetch of starred repos\n│   ├── get_lists.py             # Enumerate existing Lists\n│   ├── create_list.py           # Create a new User List\n│   ├── get_repo_id.py           # Resolve owner/name -\u003e node ID\n│   └── apply_classification.py  # Apply the plan to GitHub Lists\n└── examples/\n    └── plan.example.json    # Plan schema reference\n```\n\n## Development\n\n### Running scripts standalone\n\n```bash\npython3 scripts/fetch_stars.py YOUR_USERNAME --out /tmp/stars.json\npython3 scripts/get_lists.py\npython3 scripts/apply_classification.py examples/plan.example.json --dry-run\n```\n\n### Running tests\n\nThe scripts ship with stdlib-only unit tests (no pytest dependency):\n\n```bash\npython3 -m unittest discover -s tests -v\n```\n\n### Hacking on the skill locally\n\n1. Clone this repo anywhere, e.g. `~/src/gh-stars-classifier-skill`.\n2. Install from the local path:\n   ```\n   /plugin marketplace add ~/src/gh-stars-classifier-skill\n   /plugin install gh-stars-classifier@gh-stars-classifier-marketplace\n   ```\n3. Edit `skills/gh-stars-classifier/SKILL.md` or any script, then in Claude Code run:\n   ```\n   /plugin reload\n   ```\n   Changes to `.claude-plugin/plugin.json` or `marketplace.json` require a full Claude Code restart.\n\n### Forking / republishing under your own name\n\nIf you fork and want to publish under your own handle, touch these spots:\n\n1. `.claude-plugin/plugin.json` — `author.name`, `homepage`, `repository`\n2. `.claude-plugin/marketplace.json` — `owner.name`\n3. `README.md` — the `catuscio/gh-stars-classifier-skill` string in the install block\n4. `LICENSE` — copyright line if you'd like\n\nNothing else is owner-coupled.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatuscio%2Fgh-stars-classifier-skill","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcatuscio%2Fgh-stars-classifier-skill","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatuscio%2Fgh-stars-classifier-skill/lists"}