Skip to content
Back to skills

Gh Star List

ASecurity

Organize GitHub starred repositories into GitHub Lists using AI-assisted categorization. Supports full batch mode and selective mode (specific repos or latest N stars), proposes a plan, then applies it after user confirmation. Use when the user wants to organize, categorize, sort, or assign GitHub stars to Lists. Trigger phrases: organize my stars, categorize stars, GitHub Lists, 整理 stars, stars 分类, gh-star-list.

  • 17 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 28, 2026
developmentpythonrustgoswiftkotlinbashreactvuenextjsnode

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned May 28, 2026

npx -y skills add shiqkuangsan/oh-my-daily-skills --skill gh-star-list --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Gh Star List?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Gh Star List
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/shiqkuangsan-gh-star-list/badge)](https://www.skillsdirectory.com/skills/shiqkuangsan-gh-star-list)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: tooyoung:gh-star-list
description: "Organize GitHub starred repositories into GitHub Lists using AI-assisted categorization. Supports full batch mode and selective mode (specific repos or latest N stars), proposes a plan, then applies it after user confirmation. Use when the user wants to organize, categorize, sort, or assign GitHub stars to Lists. Trigger phrases: organize my stars, categorize stars, GitHub Lists, 整理 stars, stars 分类, gh-star-list."
metadata:
  version: "1.0.1"
  author: shiqkuangsan
  visibility: public
---

# GitHub Star List

Organize GitHub starred repos into GitHub Lists automatically.

## Prerequisites

Verify environment before starting. Run these checks and guide user through any failures:

```bash
# 1. Check gh CLI installed
gh --version || echo "MISSING"

# 2. Check gh authenticated with 'user' scope
gh auth status  # must show 'user' in scopes

# 3. Check jq installed
jq --version || echo "MISSING"
```

**Troubleshooting:**

| Problem              | Solution                                                                 |
| -------------------- | ------------------------------------------------------------------------ |
| `gh` not installed   | macOS: `brew install gh`. Others: <https://cli.github.com>               |
| `gh` not logged in   | `gh auth login -h github.com -p https -w` (opens browser)                |
| `user` scope missing | `gh auth refresh -s user -h github.com`                                  |
| `jq` not installed   | macOS: `brew install jq`. Others: <https://jqlang.github.io/jq/download> |

All checks must pass before proceeding. The `user` scope is required for GitHub Lists API access.

## Scripts

All scripts are in `scripts/` relative to this skill's directory.

| Script            | Purpose                                                            |
| ----------------- | ------------------------------------------------------------------ |
| `fetch_stars.sh`  | Fetch starred repos (paginated). Outputs one JSON object per line. |
| `manage_lists.sh` | CRUD for GitHub Lists: `get`, `create`, `delete`, `add`            |

## Modes

### Mode 1: Full Batch (default)

Categorize all starred repos at once. Trigger: "整理所有 stars", "organize all my stars".

### Mode 2: Selective

Categorize specific repos or the latest N stars. Trigger: "整理最近 10 个 star", "把 xxx/yyy 加到合适的 list".

When no specific repos are mentioned and user says "整理一下" without "所有/全部/all", default to **latest 10 stars**.

## Workflow

### Step 1: Fetch Data

**Full batch mode:**

```bash
bash scripts/fetch_stars.sh > /tmp/stars.jsonl
bash scripts/manage_lists.sh get > /tmp/lists.json
```

**Selective mode (latest N):**

```bash
bash scripts/fetch_stars.sh --limit N > /tmp/stars.jsonl
bash scripts/manage_lists.sh get > /tmp/lists.json
```

For specific repos, use `gh api` to fetch individual repo info:

```bash
gh api repos/{owner}/{repo} --jq '{id: .node_id, full_name: .full_name, description: (.description // ""), topics: (.topics // []), language: (.language // ""), url: .html_url}'
```

Tell user how many stars to process and how many existing lists found.

### Step 2: Analyze and Propose Categories

Read `/tmp/stars.jsonl` and `/tmp/lists.json`.

Analyze all repos and existing lists. Propose a categorization plan.

#### Classification Principles (IMPORTANT)

1. **Classify by PURPOSE, not language** (unless the user explicitly requests language-based grouping): A Rust-written JS bundler belongs in "Build & DX", not "Rust". A Swift-written clipboard tool belongs in "CLI & Tools", not "iOS". Language is metadata, not category.
2. **Description > Topics > Name > Language**: Prioritize description to understand what the repo DOES. Language is the weakest signal and should only be used as a tiebreaker.
3. **Ask "what does this repo help the user DO?"**: A framework for building mobile apps → Mobile. A linter for Python → Build & DX. A deepfake tool → AI or Misc.
4. **Avoid over-broad categories**: If a list exceeds 40 items, consider splitting by sub-purpose.
5. **Framework vs Library vs Tool**: Web frameworks (Express, Hono, Koa) → Backend. UI component libraries (Ant Design, shadcn) → UI & Design. Build tools (Vite, Rspack) → Build & DX.

#### Recommended Categories

Use these as a starting template for full batch mode. Adjust based on user's actual star composition — skip empty categories, merge small ones, split large ones (>40 repos).

| Category           | Description                                          | Typical repos                       |
| ------------------ | ---------------------------------------------------- | ----------------------------------- |
| AI                 | LLMs, ML frameworks, AI apps, agents                 | langchain, ollama, stable-diffusion |
| React              | React ecosystem: frameworks, hooks, state management | next.js, react, zustand             |
| React Native       | React Native core, navigation, UI libs               | react-navigation, expo              |
| Vue                | Vue ecosystem: frameworks, plugins, tools            | nuxt, vueuse, element-plus          |
| Flutter            | Flutter/Dart packages and apps                       | flutter, riverpod                   |
| Mobile Native      | iOS/Android native development                       | Kotlin/Swift libs, Jetpack          |
| WeChat             | Mini programs, WeChat SDK, WePY                      | wepy, vant-weapp                    |
| Backend            | Server frameworks, databases, APIs                   | express, fastapi, prisma            |
| Build & DX         | Bundlers, linters, dev tools, monorepo               | vite, eslint, turborepo             |
| CLI & Tools        | Desktop apps, CLI utilities, productivity            | homebrew, raycast, warp             |
| UI & Design        | Component libraries, CSS, animation                  | tailwindcss, shadcn, framer-motion  |
| Network & Proxy    | HTTP clients, proxies, VPN, network tools            | clash, axios, nginx                 |
| DevOps & Docker    | CI/CD, containers, infra, monitoring                 | docker, k8s, terraform              |
| Low-Code & Admin   | Admin panels, low-code platforms, CMS                | strapi, appsmith, refine            |
| Awesome & Learning | Curated lists, tutorials, books, courses             | awesome-xxx, free-programming-books |
| Misc               | Repos that don't fit elsewhere                       |                                     |

#### Category Guidelines

- **Respect existing lists**: Keep lists that already have items. Prefer assigning to existing lists when they match.
- **Generate new categories**: Only for repos that don't fit any existing list.
- **Total lists cap**: Stay within GitHub's 32-list limit.
- **Full batch**: Target 15-25 total lists.
- **Selective**: Prefer assigning to existing lists; only propose new lists if truly needed.

Present the plan as a table. Wait for user confirmation or adjustments.

### Step 3: Execute

After user confirms:

1. Create new lists: `bash scripts/manage_lists.sh create "<name>" "<description>"`
2. Collect all list IDs (existing + new)
3. Add repos to lists: `bash scripts/manage_lists.sh add <repo_node_id> <list_id>`

**Critical**: The `add` command calls `updateUserListsForItem` which **replaces** all list memberships for a repo. The `listIds` param is the **complete** set of lists the repo should belong to. To preserve existing membership, include ALL list IDs (old + new) in a single call.

Full batch: process in batches, report progress every 50 repos.
Selective: process all at once.

### Step 4: Summary

Run `bash scripts/manage_lists.sh get` and present a summary table showing list name, repo count, and whether each list is new or existing.

Files in this skill

  • SKILL.md7.7 KB
  • scripts/fetch_stars.sh941 B
  • scripts/manage_lists.sh2.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.