530 lines
15 KiB
Markdown
530 lines
15 KiB
Markdown
---
|
|
name: skill-finder
|
|
description: Find and evaluate Claude skills for specific use cases using semantic search, Anthropic best practices assessment, and fitness scoring. Use when the user asks to find skills for a particular task (e.g., "find me a skill for pitch decks"), not for generic "show all skills" requests.
|
|
---
|
|
|
|
# Skill Finder
|
|
|
|
Find and evaluate Claude skills for your specific needs with intelligent semantic search, quality assessment, and fitness scoring.
|
|
|
|
## What This Skill Does
|
|
|
|
Skill-finder is a query-driven evaluation engine that:
|
|
- Searches GitHub for skills matching your specific use case
|
|
- Fetches and reads actual SKILL.md content
|
|
- Evaluates skills against Anthropic's best practices
|
|
- Scores fitness to your exact request
|
|
- Provides actionable quality assessments and recommendations
|
|
|
|
This is NOT a "show me popular skills" tool - it's a semantic matcher that finds the RIGHT skill for YOUR specific need.
|
|
|
|
## When to Use
|
|
|
|
- User asks to find skills for a **specific purpose**: "find me a skill for creating pitch decks"
|
|
- User needs help choosing between similar skills
|
|
- User wants quality-assessed recommendations, not just popularity rankings
|
|
- User asks "what's the best skill for [specific task]"
|
|
|
|
## Quick Start Examples
|
|
|
|
```bash
|
|
# Find skills for specific use case
|
|
"Find me a skill for creating pitch decks"
|
|
"What's the best skill for automated data analysis"
|
|
"Find skills that help with git commit messages"
|
|
|
|
# NOT: "Show me popular skills" (too generic)
|
|
# NOT: "List all skills" (use skill list command instead)
|
|
```
|
|
|
|
## Core Workflow
|
|
|
|
### Phase 1: Query Understanding
|
|
|
|
**Extract semantic terms from user query:**
|
|
|
|
User: "Find me a skill for creating pitch decks"
|
|
|
|
Extract terms:
|
|
- Primary: "pitch deck", "presentation"
|
|
- Secondary: "slides", "powerpoint", "keynote"
|
|
- Related: "business", "template"
|
|
|
|
### Phase 2: Multi-Source Search
|
|
|
|
**Search Strategy:**
|
|
|
|
```bash
|
|
# 1. Repository search with semantic terms
|
|
gh search repos "claude skills pitch deck OR presentation OR slides" \
|
|
--sort stars --limit 20 --json name,stargazersCount,description,url,pushedAt,owner
|
|
|
|
# 2. Code search for SKILL.md with keywords
|
|
gh search code "pitch deck OR presentation" "filename:SKILL.md" \
|
|
--limit 20 --json repository,path,url
|
|
|
|
# 3. Search awesome-lists separately
|
|
gh search repos "awesome-claude-skills" --sort stars --limit 5 \
|
|
--json name,url,owner
|
|
```
|
|
|
|
**Deduplication:**
|
|
Collect all unique repositories from search results.
|
|
|
|
### Phase 3: Content Fetching
|
|
|
|
**For each candidate skill:**
|
|
|
|
```bash
|
|
# 1. Find SKILL.md location
|
|
gh api repos/OWNER/REPO/git/trees/main?recursive=1 | \
|
|
jq -r '.tree[] | select(.path | contains("SKILL.md")) | .path'
|
|
|
|
# 2. Fetch full SKILL.md content
|
|
gh api repos/OWNER/REPO/contents/PATH/TO/SKILL.md | \
|
|
jq -r '.content' | base64 -d > temp_skill.md
|
|
|
|
# 3. Fetch repository metadata
|
|
gh api repos/OWNER/REPO --jq '{
|
|
stars: .stargazers_count,
|
|
updated: .pushed_at,
|
|
description: .description
|
|
}'
|
|
```
|
|
|
|
**IMPORTANT:** Actually READ the SKILL.md content. Don't just use metadata.
|
|
|
|
### Phase 4: Quality Evaluation
|
|
|
|
**Use [best-practices-checklist.md](references/best-practices-checklist.md) to evaluate:**
|
|
|
|
For each skill, assess:
|
|
|
|
1. **Description Quality (2.0 points)**
|
|
- Specific vs vague?
|
|
- Includes what + when to use?
|
|
- Third person?
|
|
|
|
2. **Name Convention (0.5 points)**
|
|
- Follows naming rules?
|
|
- Descriptive?
|
|
|
|
3. **Conciseness (1.5 points)**
|
|
- Under 500 lines?
|
|
- No fluff?
|
|
|
|
4. **Progressive Disclosure (1.0 points)**
|
|
- Uses reference files?
|
|
- Good organization?
|
|
|
|
5. **Examples and Workflows (1.0 points)**
|
|
- Has concrete examples?
|
|
- Clear workflows?
|
|
|
|
6. **Appropriate Degree of Freedom (0.5 points)**
|
|
- Matches task complexity?
|
|
|
|
7. **Dependencies (0.5 points)**
|
|
- Documented?
|
|
- Verified available?
|
|
|
|
8. **Structure (1.0 points)**
|
|
- Well organized?
|
|
- Clear sections?
|
|
|
|
9. **Error Handling (0.5 points)**
|
|
- Scripts handle errors?
|
|
- Validation loops?
|
|
|
|
10. **Avoids Anti-Patterns (1.0 points)**
|
|
- No time-sensitive info?
|
|
- Consistent terminology?
|
|
- Unix paths?
|
|
|
|
11. **Testing (0.5 points)**
|
|
- Evidence of testing?
|
|
|
|
**Calculate quality_score (0-10):**
|
|
See [best-practices-checklist.md](references/best-practices-checklist.md) for detailed scoring.
|
|
|
|
### Phase 5: Fitness Scoring
|
|
|
|
**Semantic match calculation:**
|
|
|
|
```python
|
|
# Pseudo-code for semantic matching
|
|
user_query_terms = ["pitch", "deck", "presentation"]
|
|
skill_content = read_skill_md(skill_path)
|
|
|
|
# Check occurrences of user terms in skill
|
|
matches = []
|
|
for term in user_query_terms:
|
|
if term.lower() in skill_content.lower():
|
|
matches.append(term)
|
|
|
|
semantic_match_score = len(matches) / len(user_query_terms) * 10
|
|
```
|
|
|
|
**Fitness formula:**
|
|
```
|
|
fitness_score = (
|
|
semantic_match * 0.4 + # How well does it solve the problem?
|
|
quality_score * 0.3 + # Follows best practices?
|
|
(stars/100) * 0.2 + # Community validation
|
|
freshness_multiplier * 0.1 # Recent updates
|
|
)
|
|
|
|
Where:
|
|
- semantic_match: 0-10 (keyword matching in SKILL.md content)
|
|
- quality_score: 0-10 (from evaluation checklist)
|
|
- stars: repository star count
|
|
- freshness_multiplier: 0-10 based on days since update
|
|
```
|
|
|
|
**Freshness multiplier:**
|
|
```bash
|
|
days_old=$(( ($(date +%s) - $(date -j -f "%Y-%m-%dT%H:%M:%SZ" "$pushed_at" +%s)) / 86400 ))
|
|
|
|
if [ $days_old -lt 30 ]; then
|
|
freshness_score=10
|
|
freshness_badge="🔥"
|
|
elif [ $days_old -lt 90 ]; then
|
|
freshness_score=7
|
|
freshness_badge="📅"
|
|
elif [ $days_old -lt 180 ]; then
|
|
freshness_score=5
|
|
freshness_badge="📆"
|
|
else
|
|
freshness_score=2
|
|
freshness_badge="⏰"
|
|
fi
|
|
```
|
|
|
|
### Phase 6: Awesome-List Processing
|
|
|
|
**Extract skills from awesome-lists:**
|
|
|
|
```bash
|
|
# For each awesome-list found
|
|
for repo in awesome_lists; do
|
|
# Fetch README or main content
|
|
gh api repos/$repo/readme | jq -r '.content' | base64 -d > readme.md
|
|
|
|
# Extract GitHub links to potential skills
|
|
grep -oE 'https://github.com/[^/]+/[^/)]+' readme.md | sort -u
|
|
|
|
# For each linked repo, check if it contains SKILL.md
|
|
# If yes, evaluate same as other skills
|
|
done
|
|
```
|
|
|
|
**Display awesome-list skills separately** in results for comparison.
|
|
|
|
### Phase 7: Result Ranking and Display
|
|
|
|
**Sort by fitness_score (descending)**
|
|
|
|
**Output format:**
|
|
|
|
```
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
🎯 Skills for: "[USER QUERY]"
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
🏆 #1 skill-name ⭐ STARS FRESHNESS | FITNESS: X.X/10
|
|
|
|
Quality Assessment:
|
|
✅ Description: Excellent (2.0/2.0)
|
|
✅ Structure: Well organized (0.9/1.0)
|
|
⚠️ Length: 520 lines (over recommended 500)
|
|
✅ Examples: Clear workflows included
|
|
|
|
Overall Quality: 8.5/10 (Excellent)
|
|
|
|
Why it fits your request:
|
|
• Specifically designed for [relevant aspect]
|
|
• Mentions [user's key terms] 3 times
|
|
• Has [relevant feature]
|
|
• Includes [useful capability]
|
|
|
|
Why it's high quality:
|
|
• Follows Anthropic best practices
|
|
• Has comprehensive examples
|
|
• Clear workflows and validation
|
|
• Well-tested and maintained
|
|
|
|
📎 https://github.com/OWNER/REPO/blob/main/PATH/SKILL.md
|
|
|
|
[Preview Full Analysis] [Install]
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
🏆 #2 another-skill ⭐ STARS FRESHNESS | FITNESS: Y.Y/10
|
|
|
|
Quality Assessment:
|
|
✅ Good description and examples
|
|
⚠️ Some best practices not followed
|
|
❌ No progressive disclosure
|
|
|
|
Overall Quality: 6.2/10 (Good)
|
|
|
|
Why it fits your request:
|
|
• Partially addresses [need]
|
|
• Has [some relevant feature]
|
|
|
|
Why it's not ideal:
|
|
• Not specifically focused on [user's goal]
|
|
• Quality could be better
|
|
• Missing [important feature]
|
|
|
|
📎 https://github.com/OWNER/REPO/blob/main/SKILL.md
|
|
|
|
[Preview] [Install]
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
📚 From Awesome Lists:
|
|
|
|
Found in awesome-claude-skills (BehiSecc):
|
|
• related-skill-1 (FITNESS: 7.5/10) - Good match
|
|
• related-skill-2 (FITNESS: 5.2/10) - Partial match
|
|
|
|
Found in awesome-claude-skills (travisvn):
|
|
• another-option (FITNESS: 6.8/10) - Consider this
|
|
|
|
[Evaluate All] [Show Details]
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
💡 Recommendation: skill-name (FITNESS: 8.7/10)
|
|
|
|
Best match for your needs. High quality, well-maintained,
|
|
and specifically designed for [user's goal].
|
|
|
|
Next best: another-skill (FITNESS: 7.2/10) if you need [alternative approach]
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
```
|
|
|
|
## Key Differences from Generic Search
|
|
|
|
**Generic/Bad approach:**
|
|
- "Show me top 10 popular skills"
|
|
- Ranks only by stars
|
|
- No evaluation of actual content
|
|
- No fitness to user's specific need
|
|
|
|
**Query-Driven/Good approach:**
|
|
- "Find skills for [specific use case]"
|
|
- Reads actual SKILL.md content
|
|
- Evaluates against best practices
|
|
- Scores fitness to user's query
|
|
- Explains WHY it's a good match
|
|
|
|
## Evaluation Workflow
|
|
|
|
### Quick Evaluation (per skill ~3-4 min)
|
|
|
|
1. **Fetch SKILL.md** (30 sec)
|
|
2. **Read frontmatter** (30 sec)
|
|
- Check description quality
|
|
- Check name convention
|
|
3. **Scan body** (1-2 min)
|
|
- Check length
|
|
- Look for examples
|
|
- Check for references
|
|
- Note anti-patterns
|
|
4. **Check structure** (30 sec)
|
|
- Reference files?
|
|
- Scripts/utilities?
|
|
5. **Calculate scores** (30 sec)
|
|
- Quality score
|
|
- Semantic match
|
|
- Fitness score
|
|
|
|
### Full Evaluation (for top candidates)
|
|
|
|
For the top 3-5 candidates by fitness score, provide detailed analysis:
|
|
|
|
```
|
|
Full Analysis for: [skill-name]
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
📊 Quality Breakdown
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Description Quality: 2.0/2.0 ✅
|
|
• Specific and clear
|
|
• Includes what and when to use
|
|
• Written in third person
|
|
|
|
Name Convention: 0.5/0.5 ✅
|
|
• Follows naming rules
|
|
• Descriptive gerund form
|
|
|
|
Conciseness: 1.3/1.5 ⚠️
|
|
• 520 lines (over 500 recommended)
|
|
• Could be more concise
|
|
|
|
Progressive Disclosure: 1.0/1.0 ✅
|
|
• Excellent use of reference files
|
|
• Well-organized structure
|
|
|
|
Examples & Workflows: 1.0/1.0 ✅
|
|
• Clear concrete examples
|
|
• Step-by-step workflows
|
|
|
|
Degree of Freedom: 0.5/0.5 ✅
|
|
• Appropriate for task type
|
|
|
|
Dependencies: 0.5/0.5 ✅
|
|
• All documented
|
|
• Verified available
|
|
|
|
Structure: 0.9/1.0 ✅
|
|
• Well organized
|
|
• Minor heading inconsistencies
|
|
|
|
Error Handling: 0.4/0.5 ⚠️
|
|
• Good scripts
|
|
• Could improve validation
|
|
|
|
Anti-Patterns: 0.9/1.0 ✅
|
|
• Mostly clean
|
|
• One instance of inconsistent terminology
|
|
|
|
Testing: 0.5/0.5 ✅
|
|
• Clear testing approach
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
Total Quality Score: 8.5/10 (Excellent)
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
🎯 Semantic Match Analysis
|
|
|
|
User Query: "pitch deck creation"
|
|
Skill Content Analysis:
|
|
✅ "pitch deck" mentioned 5 times
|
|
✅ "presentation" mentioned 12 times
|
|
✅ "slides" mentioned 8 times
|
|
✅ Has templates section
|
|
✅ Has business presentation examples
|
|
|
|
Semantic Match Score: 9.2/10
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
Final FITNESS Score: 8.8/10
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
Recommendation: Highly Recommended ⭐⭐⭐⭐⭐
|
|
```
|
|
|
|
## Reference Files
|
|
|
|
- [best-practices-checklist.md](references/best-practices-checklist.md) - Anthropic's best practices evaluation criteria
|
|
- [search-strategies.md](references/search-strategies.md) - Advanced search patterns
|
|
- [ranking-algorithm.md](references/ranking-algorithm.md) - Detailed scoring algorithms
|
|
- [installation-workflow.md](references/installation-workflow.md) - Installation process
|
|
|
|
## Example Usage
|
|
|
|
See [examples/sample-output.md](examples/sample-output.md) for complete output examples.
|
|
|
|
## Error Handling
|
|
|
|
**No results found:**
|
|
```
|
|
No skills found for: "[user query]"
|
|
|
|
Suggestions:
|
|
• Try broader search terms
|
|
• Check if query is too specific
|
|
• Search awesome-lists directly
|
|
• Consider creating a custom skill
|
|
```
|
|
|
|
**Low fitness scores (all < 5.0):**
|
|
```
|
|
⚠️ Found skills but none are a strong match.
|
|
|
|
Best partial matches:
|
|
1. [skill-name] (FITNESS: 4.2/10) - Missing [key feature]
|
|
2. [skill-name] (FITNESS: 3.8/10) - Different focus
|
|
|
|
Consider:
|
|
• Combine multiple skills
|
|
• Request skill from awesome-list curators
|
|
• Create custom skill for your specific need
|
|
```
|
|
|
|
**GitHub API rate limit:**
|
|
```
|
|
⚠️ GitHub API rate limit reached.
|
|
|
|
Current: 0/60 requests remaining (unauthenticated)
|
|
Resets: in 42 minutes
|
|
|
|
Solution:
|
|
export GH_TOKEN="your_github_token"
|
|
|
|
This increases limit to 5000/hour.
|
|
```
|
|
|
|
## Performance Optimization
|
|
|
|
**Parallel execution:**
|
|
```bash
|
|
# Run searches in parallel
|
|
{
|
|
gh search repos "claude skills $QUERY" > repos.json &
|
|
gh search code "$QUERY" "filename:SKILL.md" > code.json &
|
|
gh search repos "awesome-claude-skills" > awesome.json &
|
|
wait
|
|
}
|
|
```
|
|
|
|
**Caching:**
|
|
```bash
|
|
# Cache skill evaluations for 1 hour
|
|
cache_file=".skill-eval-cache/$repo_owner-$repo_name.json"
|
|
if [ -f "$cache_file" ] && [ $(($(date +%s) - $(stat -f %m "$cache_file"))) -lt 3600 ]; then
|
|
cat "$cache_file"
|
|
else
|
|
evaluate_skill | tee "$cache_file"
|
|
fi
|
|
```
|
|
|
|
## Quality Tiers
|
|
|
|
Based on fitness score:
|
|
|
|
- **9.0-10.0:** Perfect match - Highly Recommended ⭐⭐⭐⭐⭐
|
|
- **7.0-8.9:** Excellent match - Recommended ⭐⭐⭐⭐
|
|
- **5.0-6.9:** Good match - Consider ⭐⭐⭐
|
|
- **3.0-4.9:** Partial match - Review carefully ⭐⭐
|
|
- **0.0-2.9:** Poor match - Not recommended ⭐
|
|
|
|
## Important Notes
|
|
|
|
### This is NOT:
|
|
- A "show popular skills" tool
|
|
- A generic ranking by stars
|
|
- A list of all skills
|
|
|
|
### This IS:
|
|
- A query-driven semantic matcher
|
|
- A quality evaluator against Anthropic best practices
|
|
- A fitness scorer for your specific need
|
|
- A recommendation engine
|
|
|
|
### Always:
|
|
- Read actual SKILL.md content (don't just use metadata)
|
|
- Evaluate against best practices checklist
|
|
- Score fitness to user's specific query
|
|
- Explain WHY a skill fits or doesn't fit
|
|
- Show quality assessment, not just stars
|
|
|
|
---
|
|
|
|
**Remember:** The goal is to find the RIGHT skill for the user's SPECIFIC need, not just show what's popular.
|