skill-finder
skill-finder — Discover & Install Community Skills
Search the skills.sh ecosystem, evaluate candidates, and install to your local addons repo.
Environment
# Addons repo root (contains skills/ directory)
ADDONS_DIR="${ADDONS_DIR:-$HOME/dev/github.com/fancive/claude-code-addons}"
Workflow
Step 1: Search
Run search and parse results:
npx skills@latest find "<query>" 2>&1 | sed 's/\x1b\[[0-9;]*m//g' | grep -E '(installs|skills\.sh)'
Output format (after stripping ANSI):
owner/repo@skill-name N installs
└ https://skills.sh/owner/repo/skill-name
Parse each result into structured fields:
owner: GitHub ownerrepo: GitHub repo nameskill: skill name (after @)installs: install count (number before "installs")url: skills.sh URL
Step 2: Present Candidates
Show candidates as a numbered table to the user:
Search results for "rss":
| # | Skill | Installs | Source |
|---|-------|----------|--------|
| 1 | rss-agent-viewer | 91 | brooksy4503/rss-agent-viewer |
| 2 | rss-aggregator | 47 | zephyrwang6/myskill |
| 3 | rss-agent-discovery | 42 | brooksy4503/rss-agent-discovery |
| 4 | ai-tech-rss-fetch | 42 | tiangong-ai/skills |
| 5 | rss-digest | 20 | odysseus0/feed |
Use AskUserQuestion with multiSelect: true to let user pick multiple candidates for detailed review.
Step 3: Deep Evaluation
For each selected candidate, fetch the full SKILL.md from GitHub using this fallback chain:
# Try paths in order, use first that returns 200
curl -sf "https://raw.githubusercontent.com/{owner}/{repo}/main/skills/{skill}/SKILL.md" \
|| curl -sf "https://raw.githubusercontent.com/{owner}/{repo}/main/{skill}/SKILL.md" \
|| curl -sf "https://raw.githubusercontent.com/{owner}/{repo}/main/SKILL.md"
For each candidate, analyze and summarize:
- What it does: core functionality in 1-2 sentences
- How it works: key tools/dependencies (npx packages, APIs, local DB, etc.)
- Quality signals: SKILL.md completeness, install count, repo activity
- Overlap: any overlap with user's existing skills
- Concerns: security, heavy dependencies, auth requirements
Step 4: Recommendation
Present a comparison table with recommendation:
## Evaluation Summary
| Skill | What it does | Quality | Dependencies | Recommendation |
|-------|-------------|---------|-------------|----------------|
| rss-agent-viewer | CLI RSS reader + OPML | Good SKILL.md, 91 installs | npx rss-agent-viewer | ⭐ Recommended |
| rss-aggregator | RSS to SQLite | Sparse docs, 47 installs | Python feedparser | Skip |
| ai-tech-rss-fetch | AI RSS to SQLite | Decent, 42 installs | Python feedparser + sqlite3 | Alternative |
### Recommendation
Install **rss-agent-viewer** — most mature, good docs, lightweight npx tool.
Skip **rss-aggregator** — sparse SKILL.md, unclear value.
Use AskUserQuestion to let user confirm which to actually install (can be different from initial selection).
Step 5: Download to Addons Repo
For each confirmed skill:
ADDONS_DIR="${ADDONS_DIR:-$HOME/dev/github.com/fancive/claude-code-addons}"
SKILL_DIR="$ADDONS_DIR/skills/{skill-name}"
# Create directory
mkdir -p "$SKILL_DIR"
# Download SKILL.md (same fallback chain as Step 3)
curl -sf "https://raw.githubusercontent.com/{owner}/{repo}/main/skills/{skill}/SKILL.md" \
-o "$SKILL_DIR/SKILL.md" \
|| curl -sf "https://raw.githubusercontent.com/{owner}/{repo}/main/{skill}/SKILL.md" \
-o "$SKILL_DIR/SKILL.md" \
|| curl -sf "https://raw.githubusercontent.com/{owner}/{repo}/main/SKILL.md" \
-o "$SKILL_DIR/SKILL.md"
Report download results:
Downloaded to addons repo:
✓ rss-agent-viewer → skills/rss-agent-viewer/SKILL.md
✓ ai-tech-rss-fetch → skills/ai-tech-rss-fetch/SKILL.md
Step 6: Install via skill-link
Ask user if they want to install now. If yes, run skill-link workflow:
CLAUDE_HOME="${CLAUDE_HOME:-$HOME/.claude}"
CODEX_HOME="${CODEX_HOME:-$HOME/.codex}"
for skill in <downloaded-skills>; do
src="$(realpath "$ADDONS_DIR/skills/$skill")"
ln -sfn "$src" "$CLAUDE_HOME/skills/$skill"
ln -sfn "$src" "$CODEX_HOME/skills/$skill"
done
Report:
Installed:
✓ rss-agent-viewer → ~/.claude/skills/ + ~/.codex/skills/
✓ ai-tech-rss-fetch → ~/.claude/skills/ + ~/.codex/skills/
Done. Skills available in next session.
Conflict Handling
- If
$ADDONS_DIR/skills/{name}/already exists → warn and ask: overwrite / skip / rename - If target symlink is a real directory (not symlink) → skip and warn (same as skill-link)
Example Session
User: /skill-finder rss
Agent:
Searching skills.sh for "rss"...
| # | Skill | Installs | Source |
|---|-------|----------|--------|
| 1 | rss-agent-viewer | 91 | brooksy4503/rss-agent-viewer |
| 2 | rss-aggregator | 47 | zephyrwang6/myskill |
| 3 | rss-agent-discovery | 42 | brooksy4503/rss-agent-discovery |
| 4 | ai-tech-rss-fetch | 42 | tiangong-ai/skills |
| 5 | rss-digest | 20 | odysseus0/feed |
Which ones to evaluate in detail? (multi-select)
User: 1, 3, 4
Agent:
Fetching SKILL.md for 3 candidates...
## rss-agent-viewer (brooksy4503)
- CLI RSS/Atom viewer with discovery, search, OPML import/export
- Uses: `npx rss-agent-viewer` (self-contained Node CLI)
- Quality: Detailed SKILL.md, clear commands, 91 installs
- ⭐ Recommended
## rss-agent-discovery (brooksy4503)
- Discover RSS feeds from any URL
- Uses: `npx rss-agent-discovery` (self-contained)
- Quality: Good docs, 42 installs
- Good companion to rss-agent-viewer
## ai-tech-rss-fetch (tiangong-ai)
- Subscribe + sync RSS to SQLite
- Uses: Python feedparser + sqlite3
- Quality: Decent, 42 installs, requires Python
- Alternative approach (heavier)
### Recommendation
Install **rss-agent-viewer** + **rss-agent-discovery** (lightweight, complementary).
Skip ai-tech-rss-fetch (Python dependency, overlaps with viewer).
Confirm which to install?
User: viewer and discovery
Agent:
Downloaded:
✓ rss-agent-viewer → addons/skills/rss-agent-viewer/SKILL.md
✓ rss-agent-discovery → addons/skills/rss-agent-discovery/SKILL.md
Install via symlink now?
User: Yes
Agent:
✓ rss-agent-viewer → ~/.claude/skills/ + ~/.codex/skills/
✓ rss-agent-discovery → ~/.claude/skills/ + ~/.codex/skills/
Done. Available in next session.