| name | review-skills |
| description | Page through the discovered-skills queue 25 at a time — keep the good ones into the verified registry, reject the rest so they never re-appear. Resumes where you left off. |
| version | 1.0.0 |
| author | veekunth217 |
| tags | ["review","triage","registry","discovery","maintainer","curation"] |
| platforms | ["claude-code","cursor","codex"] |
/review-skills — Triage the Discovery Queue
The weekly scraper drops every Claude Code skill it finds into registry/discovered.json, sorted by quality score. This skill walks you through that queue 25 at a time, so you can decide per skill: keep (→ verified registry) or reject (→ never shown again). Your decisions persist between sessions — next run picks up where you stopped.
RULE: Never modify registry/skills.json or registry/rejected.json without showing the user the exact change and getting GO.
Phase 1 — Where Are We
Run silently:
[ -f registry/discovered.json ] && echo "HERE=local" || \
([ -f ~/.claude/skills/claude-scaffold-skill/registry/discovered.json ] && echo "HERE=installed" || echo "HERE=missing")
python scripts/review-queue.py --status 2>/dev/null || \
python ~/.claude/skills/claude-scaffold-skill/scripts/review-queue.py --status 2>/dev/null
If HERE=missing:
No discovery queue found. Run the scraper first:
cd ~/.claude/skills/claude-scaffold-skill && make discover
(or trigger the weekly GitHub Action manually)
Then stop.
Otherwise, show the status block to the user:
Review queue
────────────
In discovered.json: [N]
Already accepted: [N] (in skills.json)
Already rejected: [N]
Still pending: [N] → [pages] pages of 25 left
Ready to review the next page? (yes / set page <n> / status / quit)
Phase 2 — Show a Page
Run python scripts/review-queue.py --page <n> --size 25 and present the output as a clean numbered list. For each candidate show:
[ 1] ⭐ 17,127 score 100 zarazhangrui/frontend-slides
Create beautiful slides on the web using Claude's frontend skills
→ github.com/zarazhangrui/frontend-slides · SKILL.md ↗
flags: (none)
[ 2] ⭐ 1,046 score 100 eugeniughelbur/obsidian-second-brain
Claude Code skill for Obsidian — turn your vault into an AI-first second brain
→ github.com/eugeniughelbur/obsidian-second-brain · SKILL.md ↗
flags: (none)
...up to 25...
If a candidate has flags (low_stars, stale, thin_desc, non_canonical_topic, archived, thin_fork), surface them — they're hints to lean toward reject.
Then ask:
For this page (1–25), tell me your decisions. Examples:
"keep 1 3 7, reject the rest"
"keep 2, skip the others for now"
"reject all"
"open 4" → I'll fetch and summarize that repo's SKILL.md so you can judge
"next" → move on without deciding (they stay in the queue)
Support open <n> — fetch https://github.com/<repo>/blob/HEAD/SKILL.md (raw), summarize what it does, whether it follows confirm-before-generate, scope, and any red flags in the install command. Then re-ask for decisions.
Default for anything not mentioned: leave it pending (no decision). Never auto-reject silently.
Phase 3 — Confirm the Batch
Before writing anything, show exactly what will change:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PROPOSED CHANGES — page [n]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
KEEP → registry/skills.json (verified=true):
+ zarazhangrui/frontend-slides
+ dpconde/claude-android-skill
REJECT → registry/rejected.json (scraper skips forever):
− some/low-effort-repo
− another/archived-thing
...
LEFT PENDING (no change):
[count] — will show up again next time
NOTHING is written until you type GO.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Type GO to apply, EDIT to change decisions, or CANCEL.
Phase 4 — Apply
On GO, run the persistence tool:
python scripts/review-queue.py --accept owner/repo --accept owner/repo2 ...
python scripts/review-queue.py --reject owner/bad1,owner/bad2 ...
Then validate:
python scripts/validate-registry.py
If validation fails (e.g. a description over 150 chars, a tag with spaces), fix the offending entry in skills.json and re-validate. Common fixes:
- Trim description to ≤ 150 chars
- Lowercase + hyphenate tags, cap at 10
- Ensure
added is YYYY-MM-DD
Phase 5 — Continue or Stop
✓ Page [n] done.
Accepted this page: [N]
Rejected this page: [N]
Remaining pending: [N] ([pages] pages left)
Next? (next page / set page <n> / status / commit / quit)
Notes
- Rejected ≠ deleted. Rejected repos live in
registry/rejected.json. The scraper skips anything listed there, so they won't clutter discovered.json on the next run. Un-reject by removing the slug (or by --accepting it later — that auto-removes it from rejected).
- Accepted skills get
verified: true — that's the human-review stamp. The CI 404-check still runs on the PR.
discovered.json is regenerated every scrape. Pending items persist because the scraper re-finds them; accepted/rejected ones drop out because the scraper skips repos in skills.json and rejected.json.
- This skill is the interactive front-end for
scripts/review-queue.py — you can also drive that script directly (--page, --accept, --reject, --status, --all).