Initial commit
This commit is contained in:
12
.claude-plugin/plugin.json
Normal file
12
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "skill-finder",
|
||||
"description": "Skill: Find and evaluate Claude skills using semantic search and quality assessment",
|
||||
"version": "0.0.0-2025.11.28",
|
||||
"author": {
|
||||
"name": "Misha Kolesnik",
|
||||
"email": "misha@kolesnik.io"
|
||||
},
|
||||
"skills": [
|
||||
"./skills/skill"
|
||||
]
|
||||
}
|
||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# skill-finder
|
||||
|
||||
Skill: Find and evaluate Claude skills using semantic search and quality assessment
|
||||
64
plugin.lock.json
Normal file
64
plugin.lock.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||
"pluginId": "gh:tenequm/claude-plugins:skill-finder",
|
||||
"normalized": {
|
||||
"repo": null,
|
||||
"ref": "refs/tags/v20251128.0",
|
||||
"commit": "efb66c3f54600ce350d1b59295c8776171cb858f",
|
||||
"treeHash": "267a2e7a01ac22d21e891419f49a49698217cf9feb64672322ac64ec72f426e8",
|
||||
"generatedAt": "2025-11-28T10:28:37.672867Z",
|
||||
"toolVersion": "publish_plugins.py@0.2.0"
|
||||
},
|
||||
"origin": {
|
||||
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||
"branch": "master",
|
||||
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||
},
|
||||
"manifest": {
|
||||
"name": "skill-finder",
|
||||
"description": "Skill: Find and evaluate Claude skills using semantic search and quality assessment"
|
||||
},
|
||||
"content": {
|
||||
"files": [
|
||||
{
|
||||
"path": "README.md",
|
||||
"sha256": "87685b1c58e4a0268e06113aad66a4a42c46e96f2f0290ee5c239b64dfda9024"
|
||||
},
|
||||
{
|
||||
"path": ".claude-plugin/plugin.json",
|
||||
"sha256": "f23d41eb01d7e4066362fc3a494160c3d8914d3c88e44795d7eee802df393b8a"
|
||||
},
|
||||
{
|
||||
"path": "skills/skill/SKILL.md",
|
||||
"sha256": "195c829bcf55918348890947fda850a6ea1db2d543386b66898a11542770b49c"
|
||||
},
|
||||
{
|
||||
"path": "skills/skill/references/ranking-algorithm.md",
|
||||
"sha256": "1cb1daebb5df8dafbf61d1d0b8982dedc728b483b17322f0a2ae5b0a2a1556c7"
|
||||
},
|
||||
{
|
||||
"path": "skills/skill/references/installation-workflow.md",
|
||||
"sha256": "a294ee88ed66d5b2496d61ce0820efcf3545a0749e0c5adbd76838f39d761e47"
|
||||
},
|
||||
{
|
||||
"path": "skills/skill/references/best-practices-checklist.md",
|
||||
"sha256": "c06f36afa05bbbd1ddab1558885e377e839edee1f026384702abc9d5845da1a3"
|
||||
},
|
||||
{
|
||||
"path": "skills/skill/references/search-strategies.md",
|
||||
"sha256": "00f518d15ba28300644ecac3467058369c86e0373014501cfd82bd6bf40e8f80"
|
||||
},
|
||||
{
|
||||
"path": "skills/skill/examples/sample-output.md",
|
||||
"sha256": "8033affd13ed553833c284f32a0fd0aeb90a57626c10940b237ac77cd36f52d9"
|
||||
}
|
||||
],
|
||||
"dirSha256": "267a2e7a01ac22d21e891419f49a49698217cf9feb64672322ac64ec72f426e8"
|
||||
},
|
||||
"security": {
|
||||
"scannedAt": null,
|
||||
"scannerVersion": null,
|
||||
"flags": []
|
||||
}
|
||||
}
|
||||
529
skills/skill/SKILL.md
Normal file
529
skills/skill/SKILL.md
Normal file
@@ -0,0 +1,529 @@
|
||||
---
|
||||
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.
|
||||
530
skills/skill/examples/sample-output.md
Normal file
530
skills/skill/examples/sample-output.md
Normal file
@@ -0,0 +1,530 @@
|
||||
# Sample Output Examples
|
||||
|
||||
Expected output format for skill-finder searches with fitness-based evaluation.
|
||||
|
||||
## Example 1: Specific Use Case Query
|
||||
|
||||
**User Query:** "Find me a skill for creating pitch decks"
|
||||
|
||||
**Output:**
|
||||
|
||||
```
|
||||
🔍 Searching for skills matching: "pitch deck creation"
|
||||
Semantic terms: pitch deck, presentation, slides, powerpoint, keynote
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
🎯 Skills for: "creating pitch decks"
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🏆 #1 presentation-builder ⭐ 245 🔥 | FITNESS: 9.2/10
|
||||
|
||||
Quality Assessment:
|
||||
✅ Description: Excellent (2.0/2.0)
|
||||
"Create presentations and pitch decks with templates, charts, and data visualization"
|
||||
✅ Structure: Well organized (0.9/1.0)
|
||||
✅ Examples: Comprehensive workflows (1.0/1.0)
|
||||
⚠️ Length: 520 lines (slightly over 500 recommended)
|
||||
✅ Progressive disclosure: Excellent use of reference files
|
||||
|
||||
Overall Quality: 8.7/10 (Excellent)
|
||||
|
||||
Why it fits your request:
|
||||
• Specifically designed for pitch deck creation
|
||||
• Mentions "pitch deck" 8 times in SKILL.md
|
||||
• Has pitch deck templates and examples
|
||||
• Includes business presentation workflows
|
||||
• Supports PowerPoint and Google Slides
|
||||
• Has data visualization helpers
|
||||
|
||||
Why it's high quality:
|
||||
• Follows all Anthropic best practices
|
||||
• Clear, concise instructions
|
||||
• Comprehensive examples with workflows
|
||||
• Well-tested and actively maintained
|
||||
• Good error handling and validation
|
||||
|
||||
📎 https://github.com/user/presentation-builder/blob/main/SKILL.md
|
||||
|
||||
[Preview Full Analysis] [Install]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🏆 #2 office-automation ⭐ 450 📅 | FITNESS: 6.5/10
|
||||
|
||||
Quality Assessment:
|
||||
✅ Well-documented with examples
|
||||
✅ Good structure and organization
|
||||
⚠️ Description too broad ("office automation")
|
||||
⚠️ Not focused on presentations specifically
|
||||
❌ Missing pitch deck specific features
|
||||
|
||||
Overall Quality: 7.2/10 (Good)
|
||||
|
||||
Why it partially fits:
|
||||
• Includes PowerPoint/Slides capabilities
|
||||
• Has slide creation examples
|
||||
• Can handle basic presentations
|
||||
|
||||
Why it's not ideal:
|
||||
• Generic "office automation" scope
|
||||
• No pitch deck templates
|
||||
• Lacks business presentation focus
|
||||
• No data visualization specific to decks
|
||||
• Lower semantic match (only 2 relevant mentions)
|
||||
|
||||
📎 https://github.com/user/office-automation/blob/main/SKILL.md
|
||||
|
||||
[Preview] [Install]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🏆 #3 document-creator ⭐ 180 🔥 | FITNESS: 4.8/10
|
||||
|
||||
Quality Assessment:
|
||||
✅ Clear description and examples
|
||||
⚠️ Mixed focus (documents + presentations)
|
||||
❌ No progressive disclosure
|
||||
❌ Very long SKILL.md (850 lines)
|
||||
|
||||
Overall Quality: 5.5/10 (Fair)
|
||||
|
||||
Why it's a weak match:
|
||||
• Primarily focused on documents, not presentations
|
||||
• Mentions "presentation" only once
|
||||
• No pitch deck specific content
|
||||
• Would need significant adaptation
|
||||
|
||||
📎 https://github.com/user/document-creator/blob/main/SKILL.md
|
||||
|
||||
[Review] [Skip]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📚 From Awesome Lists:
|
||||
|
||||
Found in awesome-claude-skills (BehiSecc):
|
||||
• pptx-generator (FITNESS: 7.2/10) - Good for basic slides
|
||||
• slide-master (FITNESS: 8.1/10) - Strong presentation focus
|
||||
|
||||
Found in awesome-claude-skills (travisvn):
|
||||
• deck-builder (FITNESS: 7.8/10) - Pitch deck oriented
|
||||
|
||||
[Evaluate These] [Show All]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
💡 Recommendation: presentation-builder (FITNESS: 9.2/10) ⭐⭐⭐⭐⭐
|
||||
|
||||
Best match for your needs. Specifically designed for pitch decks,
|
||||
high quality, follows best practices, and actively maintained.
|
||||
|
||||
Alternative: slide-master from awesome-list (FITNESS: 8.1/10)
|
||||
if you need different templates or workflow.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
```
|
||||
|
||||
## Example 2: Data Analysis Query
|
||||
|
||||
**User Query:** "What's the best skill for automated data analysis?"
|
||||
|
||||
**Output:**
|
||||
|
||||
```
|
||||
🔍 Searching for skills matching: "automated data analysis"
|
||||
Semantic terms: data analysis, automation, analytics, statistics, visualization
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
🎯 Skills for: "automated data analysis"
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🏆 #1 data-analyzer ⭐ 312 🔥 | FITNESS: 9.5/10
|
||||
|
||||
Quality Assessment:
|
||||
✅ Description: Perfect specificity (2.0/2.0)
|
||||
✅ Concise: 380 lines with excellent references
|
||||
✅ Examples: Multiple workflows with validation
|
||||
✅ Progressive disclosure: Exemplary
|
||||
✅ Error handling: Comprehensive
|
||||
|
||||
Overall Quality: 9.3/10 (Excellent)
|
||||
|
||||
Why it's perfect for your need:
|
||||
• Explicitly designed for automated data analysis
|
||||
• Mentions "automation" and "analysis" throughout
|
||||
• Has complete analysis workflows
|
||||
• Includes validation and feedback loops
|
||||
• Supports multiple data formats
|
||||
• Has statistical analysis helpers
|
||||
|
||||
Key Features:
|
||||
• CSV, Excel, JSON analysis
|
||||
• Automated statistical tests
|
||||
• Visualization generation
|
||||
• Report automation
|
||||
• Quality checks and validation
|
||||
|
||||
📎 https://github.com/user/data-analyzer/blob/main/SKILL.md
|
||||
|
||||
[Preview Full Analysis] [Install]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🏆 #2 excel-master ⭐ 456 📅 | FITNESS: 7.8/10
|
||||
|
||||
Quality Assessment:
|
||||
✅ Good quality, well-maintained
|
||||
⚠️ Excel-specific (limited to one format)
|
||||
⚠️ Less automation focus
|
||||
|
||||
Overall Quality: 7.5/10 (Good)
|
||||
|
||||
Why it's good but not perfect:
|
||||
• Strong Excel analysis capabilities
|
||||
• Has some automation features
|
||||
• But limited to Excel format only
|
||||
• Less comprehensive than data-analyzer
|
||||
|
||||
📎 https://github.com/user/excel-master/blob/main/SKILL.md
|
||||
|
||||
[Preview] [Install]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
💡 Recommendation: data-analyzer (FITNESS: 9.5/10) ⭐⭐⭐⭐⭐
|
||||
|
||||
Exactly what you need. Purpose-built for automated data analysis,
|
||||
excellent quality, comprehensive features.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
```
|
||||
|
||||
## Example 3: No Strong Match Found
|
||||
|
||||
**User Query:** "Find me a skill for quantum computing simulations"
|
||||
|
||||
**Output:**
|
||||
|
||||
```
|
||||
🔍 Searching for skills matching: "quantum computing simulations"
|
||||
Semantic terms: quantum, computing, simulation, qubit, circuit
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
⚠️ No Strong Matches Found
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Searched 47 skills, but none strongly match your query.
|
||||
|
||||
Best partial matches:
|
||||
|
||||
🏆 #1 scientific-computing ⭐ 123 📅 | FITNESS: 4.2/10
|
||||
|
||||
Quality: 7.0/10 (Good)
|
||||
|
||||
Partial match because:
|
||||
• General scientific computing
|
||||
• Mentions "simulation" a few times
|
||||
• No quantum-specific content
|
||||
• Would need significant adaptation
|
||||
|
||||
📎 https://github.com/user/scientific-computing/blob/main/SKILL.md
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🏆 #2 python-automation ⭐ 89 🔥 | FITNESS: 3.1/10
|
||||
|
||||
Quality: 6.5/10 (Good)
|
||||
|
||||
Weak match:
|
||||
• Python scripting focus
|
||||
• Could theoretically run quantum libraries
|
||||
• But no quantum-specific guidance
|
||||
|
||||
📎 https://github.com/user/python-automation/blob/main/SKILL.md
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
💡 Recommendations:
|
||||
|
||||
None of these skills are strong matches for quantum computing.
|
||||
|
||||
Consider:
|
||||
• Searching awesome-lists directly for quantum skills
|
||||
• Requesting a quantum skill from curators
|
||||
• Creating a custom skill for your specific need
|
||||
• Broaden search: "scientific computing" or "physics simulations"
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
```
|
||||
|
||||
## Example 4: Full Analysis Details
|
||||
|
||||
**User Action:** Clicks [Preview Full Analysis] on presentation-builder
|
||||
|
||||
**Output:**
|
||||
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
📊 Full Analysis: presentation-builder
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🏢 Repository Info:
|
||||
Owner: presentation-tools
|
||||
Stars: ⭐ 245
|
||||
Updated: 🔥 2 days ago (very active)
|
||||
URL: https://github.com/presentation-tools/presentation-builder
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
📊 Quality Breakdown (Anthropic Best Practices)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Description Quality: 2.0/2.0 ✅
|
||||
✅ Highly specific: "Create presentations and pitch decks"
|
||||
✅ Includes what: presentation/pitch deck creation
|
||||
✅ Includes when: "Use when creating business presentations"
|
||||
✅ Written in third person
|
||||
✅ Contains key trigger terms
|
||||
✅ Under 1024 characters
|
||||
|
||||
Name Convention: 0.5/0.5 ✅
|
||||
✅ Follows naming rules (lowercase, hyphens)
|
||||
✅ Descriptive gerund form
|
||||
✅ Clear and specific
|
||||
✅ No reserved words
|
||||
|
||||
Conciseness: 1.3/1.5 ⚠️
|
||||
⚠️ 520 lines (slightly over 500 recommended)
|
||||
✅ No unnecessary fluff
|
||||
✅ Gets to the point quickly
|
||||
✅ Additional details in separate files
|
||||
|
||||
Progressive Disclosure: 1.0/1.0 ✅
|
||||
✅ SKILL.md serves as excellent overview
|
||||
✅ References 4 additional files appropriately:
|
||||
• templates.md (pitch deck templates)
|
||||
• charts.md (data visualization guide)
|
||||
• workflows.md (presentation creation flows)
|
||||
• examples.md (real-world examples)
|
||||
✅ All references are 1 level deep
|
||||
✅ Well-organized by feature
|
||||
|
||||
Examples & Workflows: 1.0/1.0 ✅
|
||||
✅ Concrete pitch deck example
|
||||
✅ Step-by-step workflow
|
||||
✅ Input/output pairs shown
|
||||
✅ Code snippets included
|
||||
✅ Real patterns, not placeholders
|
||||
|
||||
Degree of Freedom: 0.5/0.5 ✅
|
||||
✅ Appropriate for task type
|
||||
✅ Flexible for creative tasks
|
||||
✅ Structured for technical steps
|
||||
✅ Good balance
|
||||
|
||||
Dependencies: 0.5/0.5 ✅
|
||||
✅ All dependencies listed (python-pptx, matplotlib)
|
||||
✅ Installation instructions clear
|
||||
✅ Verified available in environment
|
||||
|
||||
Structure: 0.9/1.0 ✅
|
||||
✅ Excellent organization
|
||||
✅ Clear section headings
|
||||
✅ Logical flow
|
||||
⚠️ Minor: One inconsistent heading style
|
||||
|
||||
Error Handling: 0.5/0.5 ✅
|
||||
✅ Scripts handle errors explicitly
|
||||
✅ Validation loops for quality
|
||||
✅ Clear error messages
|
||||
✅ Feedback loops implemented
|
||||
|
||||
Anti-Patterns: 0.9/1.0 ✅
|
||||
✅ No time-sensitive information
|
||||
✅ Consistent terminology
|
||||
✅ Unix-style paths throughout
|
||||
⚠️ One instance: offers 2 template choices (minor)
|
||||
|
||||
Testing: 0.5/0.5 ✅
|
||||
✅ Clear testing approach documented
|
||||
✅ Example evaluations included
|
||||
✅ Success criteria defined
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Total Quality Score: 8.7/10 (Excellent Tier)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🎯 Semantic Match Analysis
|
||||
|
||||
User Query: "creating pitch decks"
|
||||
|
||||
Extracted terms: pitch deck, presentation, slides, powerpoint, keynote
|
||||
|
||||
Skill Content Analysis:
|
||||
✅ "pitch deck" - 8 occurrences
|
||||
✅ "presentation" - 15 occurrences
|
||||
✅ "slides" - 12 occurrences
|
||||
✅ "powerpoint" - 4 occurrences
|
||||
✅ "business" - 6 occurrences (contextually relevant)
|
||||
✅ Has "templates" section with pitch deck examples
|
||||
✅ Has "data visualization" section for charts
|
||||
✅ Has complete workflow for deck creation
|
||||
|
||||
Key Features Found:
|
||||
• Pitch deck template library
|
||||
• Business presentation workflows
|
||||
• Data chart integration
|
||||
• Multi-format export (PPTX, Google Slides)
|
||||
• Automated layout suggestions
|
||||
|
||||
Semantic Match Score: 9.5/10
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Fitness Score Calculation
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
semantic_match * 0.4 = 9.5 * 0.4 = 3.8
|
||||
quality_score * 0.3 = 8.7 * 0.3 = 2.61
|
||||
(stars/100) * 0.2 = 2.45 * 0.2 = 0.49
|
||||
freshness * 0.1 = 10 * 0.1 = 1.0
|
||||
------
|
||||
Final FITNESS Score: 8.9/10
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
✅ Recommendation: Highly Recommended ⭐⭐⭐⭐⭐
|
||||
|
||||
This skill is an excellent match for your needs:
|
||||
|
||||
Strengths:
|
||||
• Purpose-built for pitch deck creation
|
||||
• Follows Anthropic best practices closely
|
||||
• Well-maintained and actively developed
|
||||
• Comprehensive features and workflows
|
||||
• High semantic alignment with your query
|
||||
|
||||
Minor considerations:
|
||||
• Slightly over 500 lines (520) - still very good
|
||||
• One minor heading inconsistency
|
||||
|
||||
Overall: This is the best available skill for creating pitch decks.
|
||||
Install with confidence.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[Install Now] [View SKILL.md] [Back to Results]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
```
|
||||
|
||||
## Example 5: Multiple Good Matches
|
||||
|
||||
**User Query:** "Find skills for git commit messages"
|
||||
|
||||
**Output:**
|
||||
|
||||
```
|
||||
🔍 Searching for skills matching: "git commit messages"
|
||||
Semantic terms: git, commit, message, changelog, version control
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
🎯 Skills for: "git commit messages"
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Found 3 excellent matches!
|
||||
|
||||
🏆 #1 commit-helper ⭐ 89 🔥 | FITNESS: 9.1/10
|
||||
|
||||
Quality: 8.9/10 (Excellent)
|
||||
|
||||
Perfect for:
|
||||
• Generating commit messages from diffs
|
||||
• Following conventional commit format
|
||||
• Analyzing changes semantically
|
||||
|
||||
📎 https://github.com/user/commit-helper/blob/main/SKILL.md
|
||||
[Preview] [Install]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🏆 #2 git-automation ⭐ 156 🔥 | FITNESS: 8.7/10
|
||||
|
||||
Quality: 8.2/10 (Excellent)
|
||||
|
||||
Good for:
|
||||
• Broader git workflows
|
||||
• Includes commit message generation
|
||||
• Plus branching and PR helpers
|
||||
|
||||
📎 https://github.com/user/git-automation/blob/main/SKILL.md
|
||||
[Preview] [Install]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🏆 #3 changelog-generator ⭐ 67 📅 | FITNESS: 7.4/10
|
||||
|
||||
Quality: 7.8/10 (Good)
|
||||
|
||||
Alternative approach:
|
||||
• Focused on changelog generation
|
||||
• Can help with commit message consistency
|
||||
• Different workflow than #1 and #2
|
||||
|
||||
📎 https://github.com/user/changelog-generator/blob/main/SKILL.md
|
||||
[Preview] [Install]
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
💡 Recommendation:
|
||||
|
||||
All three are high quality! Choose based on your workflow:
|
||||
|
||||
• commit-helper (FITNESS: 9.1/10) - Best if you ONLY need commit messages
|
||||
• git-automation (FITNESS: 8.7/10) - Best if you want broader git help
|
||||
• changelog-generator (FITNESS: 7.4/10) - Best if you maintain changelogs
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
```
|
||||
|
||||
## Key Differences from Old Output
|
||||
|
||||
### Old Approach (Popularity-Based):
|
||||
```
|
||||
🏆 #1 awesome-claude-skills ⭐ 1703 🔥
|
||||
BehiSecc/awesome-claude-skills • Updated 6 days ago
|
||||
A curated list of Claude Skills.
|
||||
📎 https://github.com/BehiSecc/awesome-claude-skills
|
||||
```
|
||||
|
||||
Problems:
|
||||
- Just shows star count
|
||||
- No quality assessment
|
||||
- No fitness to user query
|
||||
- Awesome-lists mixed with actual skills
|
||||
- No explanation of WHY it's ranked #1
|
||||
|
||||
### New Approach (Fitness-Based):
|
||||
```
|
||||
🏆 #1 presentation-builder ⭐ 245 🔥 | FITNESS: 9.2/10
|
||||
|
||||
Quality Assessment: 8.7/10 (Excellent)
|
||||
|
||||
Why it fits your request:
|
||||
• Specifically designed for pitch decks
|
||||
• Mentions your key terms 8 times
|
||||
• Has templates and workflows
|
||||
|
||||
Why it's high quality:
|
||||
• Follows Anthropic best practices
|
||||
• Well-tested and maintained
|
||||
```
|
||||
|
||||
Benefits:
|
||||
- Shows FITNESS to specific query
|
||||
- Explains WHY it's a good match
|
||||
- Evaluates against best practices
|
||||
- Separates awesome-lists
|
||||
- Actionable quality assessment
|
||||
|
||||
---
|
||||
|
||||
**Remember:** The goal is finding the RIGHT skill for the SPECIFIC need, not just what's popular.
|
||||
292
skills/skill/references/best-practices-checklist.md
Normal file
292
skills/skill/references/best-practices-checklist.md
Normal file
@@ -0,0 +1,292 @@
|
||||
# Anthropic Best Practices Checklist
|
||||
|
||||
Evaluation criteria for assessing Claude Skill quality based on official Anthropic guidelines.
|
||||
|
||||
## Purpose
|
||||
|
||||
Use this checklist to evaluate skills found on GitHub. Each criterion contributes to the overall quality score (0-10).
|
||||
|
||||
## Evaluation Criteria
|
||||
|
||||
### 1. Description Quality (Weight: 2.0)
|
||||
|
||||
**What to check:**
|
||||
- [ ] Description is specific, not vague
|
||||
- [ ] Includes what the skill does
|
||||
- [ ] Includes when to use it (trigger conditions)
|
||||
- [ ] Contains key terms users would mention
|
||||
- [ ] Written in third person
|
||||
- [ ] Under 1024 characters
|
||||
- [ ] No XML tags
|
||||
|
||||
**Scoring:**
|
||||
- 2.0: All criteria met, very clear and specific
|
||||
- 1.5: Most criteria met, good clarity
|
||||
- 1.0: Basic description, somewhat vague
|
||||
- 0.5: Very vague or generic
|
||||
- 0.0: Missing or completely unclear
|
||||
|
||||
**Examples:**
|
||||
|
||||
**Good (2.0):**
|
||||
```yaml
|
||||
description: Analyze Excel spreadsheets, create pivot tables, generate charts. Use when working with Excel files, spreadsheets, tabular data, or .xlsx files.
|
||||
```
|
||||
|
||||
**Bad (0.5):**
|
||||
```yaml
|
||||
description: Helps with documents
|
||||
```
|
||||
|
||||
### 2. Name Convention (Weight: 0.5)
|
||||
|
||||
**What to check:**
|
||||
- [ ] Uses lowercase letters, numbers, hyphens only
|
||||
- [ ] Under 64 characters
|
||||
- [ ] Follows naming pattern (gerund form preferred)
|
||||
- [ ] Descriptive, not vague
|
||||
- [ ] No reserved words ("anthropic", "claude")
|
||||
|
||||
**Scoring:**
|
||||
- 0.5: Follows all conventions
|
||||
- 0.25: Minor issues (e.g., not gerund but still clear)
|
||||
- 0.0: Violates conventions or very vague
|
||||
|
||||
**Good:** `processing-pdfs`, `analyzing-spreadsheets`
|
||||
**Bad:** `helper`, `utils`, `claude-tool`
|
||||
|
||||
### 3. Conciseness (Weight: 1.5)
|
||||
|
||||
**What to check:**
|
||||
- [ ] SKILL.md body under 500 lines
|
||||
- [ ] No unnecessary explanations
|
||||
- [ ] Assumes Claude's intelligence
|
||||
- [ ] Gets to the point quickly
|
||||
- [ ] Additional content in separate files if needed
|
||||
|
||||
**Scoring:**
|
||||
- 1.5: Very concise, well-edited, <300 lines
|
||||
- 1.0: Reasonable length, <500 lines
|
||||
- 0.5: Long but not excessive, 500-800 lines
|
||||
- 0.0: Very verbose, >800 lines
|
||||
|
||||
### 4. Progressive Disclosure (Weight: 1.0)
|
||||
|
||||
**What to check:**
|
||||
- [ ] SKILL.md serves as overview/table of contents
|
||||
- [ ] Additional details in separate files
|
||||
- [ ] Clear references to other files
|
||||
- [ ] Files organized by domain/feature
|
||||
- [ ] No deeply nested references (max 1 level deep)
|
||||
|
||||
**Scoring:**
|
||||
- 1.0: Excellent use of progressive disclosure
|
||||
- 0.75: Good organization with some references
|
||||
- 0.5: Some separation, could be better
|
||||
- 0.25: All content in SKILL.md, no references
|
||||
- 0.0: Poorly organized or deeply nested
|
||||
|
||||
### 5. Examples and Workflows (Weight: 1.0)
|
||||
|
||||
**What to check:**
|
||||
- [ ] Has concrete examples (not abstract)
|
||||
- [ ] Includes code snippets
|
||||
- [ ] Shows input/output pairs
|
||||
- [ ] Has clear workflows for complex tasks
|
||||
- [ ] Examples use real patterns, not placeholders
|
||||
|
||||
**Scoring:**
|
||||
- 1.0: Excellent examples and clear workflows
|
||||
- 0.75: Good examples, some workflows
|
||||
- 0.5: Basic examples, no workflows
|
||||
- 0.25: Few or abstract examples
|
||||
- 0.0: No examples
|
||||
|
||||
### 6. Appropriate Degree of Freedom (Weight: 0.5)
|
||||
|
||||
**What to check:**
|
||||
- [ ] Instructions match task fragility
|
||||
- [ ] High freedom for flexible tasks (text instructions)
|
||||
- [ ] Low freedom for fragile tasks (specific scripts)
|
||||
- [ ] Clear when to use exact commands vs adapt
|
||||
|
||||
**Scoring:**
|
||||
- 0.5: Perfect match of freedom to task type
|
||||
- 0.25: Reasonable but could be better
|
||||
- 0.0: Inappropriate level (too rigid or too loose)
|
||||
|
||||
### 7. Dependencies Documentation (Weight: 0.5)
|
||||
|
||||
**What to check:**
|
||||
- [ ] Required packages listed
|
||||
- [ ] Installation instructions provided
|
||||
- [ ] Dependencies verified as available
|
||||
- [ ] No assumption of pre-installed packages
|
||||
|
||||
**Scoring:**
|
||||
- 0.5: All dependencies documented and verified
|
||||
- 0.25: Dependencies mentioned but not fully documented
|
||||
- 0.0: Dependencies assumed or not mentioned
|
||||
|
||||
### 8. Structure and Organization (Weight: 1.0)
|
||||
|
||||
**What to check:**
|
||||
- [ ] Clear section headings
|
||||
- [ ] Logical flow of information
|
||||
- [ ] Table of contents for long files
|
||||
- [ ] Consistent formatting
|
||||
- [ ] Unix-style paths (forward slashes)
|
||||
|
||||
**Scoring:**
|
||||
- 1.0: Excellently organized
|
||||
- 0.75: Well organized with minor issues
|
||||
- 0.5: Basic organization
|
||||
- 0.25: Poor organization
|
||||
- 0.0: No clear structure
|
||||
|
||||
### 9. Error Handling (Weight: 0.5)
|
||||
|
||||
**What to check (for skills with scripts):**
|
||||
- [ ] Scripts handle errors explicitly
|
||||
- [ ] Clear error messages
|
||||
- [ ] Fallback strategies provided
|
||||
- [ ] Validation loops for critical operations
|
||||
- [ ] No "voodoo constants"
|
||||
|
||||
**Scoring:**
|
||||
- 0.5: Excellent error handling
|
||||
- 0.25: Basic error handling
|
||||
- 0.0: No error handling or punts to Claude
|
||||
|
||||
### 10. Avoids Anti-Patterns (Weight: 1.0)
|
||||
|
||||
**What to avoid:**
|
||||
- [ ] Time-sensitive information
|
||||
- [ ] Inconsistent terminology
|
||||
- [ ] Windows-style paths
|
||||
- [ ] Offering too many options without guidance
|
||||
- [ ] Deeply nested references
|
||||
- [ ] Vague or generic content
|
||||
|
||||
**Scoring:**
|
||||
- 1.0: No anti-patterns
|
||||
- 0.75: 1-2 minor anti-patterns
|
||||
- 0.5: Multiple anti-patterns
|
||||
- 0.0: Severe anti-patterns
|
||||
|
||||
### 11. Testing and Validation (Weight: 0.5)
|
||||
|
||||
**What to check:**
|
||||
- [ ] Evidence of testing mentioned
|
||||
- [ ] Evaluation examples provided
|
||||
- [ ] Clear success criteria
|
||||
- [ ] Feedback loops for quality
|
||||
|
||||
**Scoring:**
|
||||
- 0.5: Clear testing approach
|
||||
- 0.25: Some testing mentioned
|
||||
- 0.0: No testing mentioned
|
||||
|
||||
## Scoring System
|
||||
|
||||
**Total possible: 10.0 points**
|
||||
|
||||
Calculate weighted score:
|
||||
```
|
||||
quality_score = (
|
||||
description_score * 2.0 +
|
||||
name_score * 0.5 +
|
||||
conciseness_score * 1.5 +
|
||||
progressive_disclosure_score * 1.0 +
|
||||
examples_score * 1.0 +
|
||||
freedom_score * 0.5 +
|
||||
dependencies_score * 0.5 +
|
||||
structure_score * 1.0 +
|
||||
error_handling_score * 0.5 +
|
||||
anti_patterns_score * 1.0 +
|
||||
testing_score * 0.5
|
||||
)
|
||||
```
|
||||
|
||||
## Quality Tiers
|
||||
|
||||
**Excellent (8.0-10.0):**
|
||||
- Follows all best practices
|
||||
- Clearly professional
|
||||
- Ready for production use
|
||||
- **Recommendation:** Strongly recommended
|
||||
|
||||
**Good (6.0-7.9):**
|
||||
- Follows most best practices
|
||||
- Minor improvements needed
|
||||
- Usable but not perfect
|
||||
- **Recommendation:** Recommended with minor notes
|
||||
|
||||
**Fair (4.0-5.9):**
|
||||
- Follows some best practices
|
||||
- Several improvements needed
|
||||
- May work but needs review
|
||||
- **Recommendation:** Consider with caution
|
||||
|
||||
**Poor (0.0-3.9):**
|
||||
- Violates many best practices
|
||||
- Significant issues
|
||||
- High risk of problems
|
||||
- **Recommendation:** Not recommended
|
||||
|
||||
## Quick Evaluation Process
|
||||
|
||||
For rapid assessment during search:
|
||||
|
||||
1. **Read SKILL.md frontmatter** (30 sec)
|
||||
- Check description quality (most important)
|
||||
- Check name convention
|
||||
|
||||
2. **Scan SKILL.md body** (1-2 min)
|
||||
- Check length (<500 lines?)
|
||||
- Look for examples
|
||||
- Check for references to other files
|
||||
- Note any obvious anti-patterns
|
||||
|
||||
3. **Check file structure** (30 sec)
|
||||
- Look for reference files
|
||||
- Check for scripts/utilities
|
||||
- Verify organization
|
||||
|
||||
4. **Calculate quick score** (30 sec)
|
||||
- Focus on weighted criteria
|
||||
- Estimate tier (Excellent/Good/Fair/Poor)
|
||||
|
||||
**Total time per skill: ~3-4 minutes**
|
||||
|
||||
## Automation Tips
|
||||
|
||||
When evaluating multiple skills:
|
||||
|
||||
```bash
|
||||
# Check SKILL.md length
|
||||
wc -l SKILL.md
|
||||
|
||||
# Count reference files
|
||||
find . -name "*.md" -not -name "SKILL.md" | wc -l
|
||||
|
||||
# Check for common anti-patterns
|
||||
grep -i "claude can help\|I can help\|you can use" SKILL.md
|
||||
|
||||
# Verify Unix paths
|
||||
grep -E '\\\|\\\\' SKILL.md
|
||||
|
||||
# Check description length
|
||||
head -10 SKILL.md | grep "description:" | wc -c
|
||||
```
|
||||
|
||||
## Reference
|
||||
|
||||
Based on official Anthropic documentation:
|
||||
- [Agent Skills Overview](https://docs.anthropic.com/en/docs/agents-and-tools/agent-skills/overview)
|
||||
- [Best Practices Guide](https://docs.anthropic.com/en/docs/agents-and-tools/agent-skills/best-practices)
|
||||
- [Claude Code Skills](https://docs.anthropic.com/en/docs/claude-code/skills)
|
||||
|
||||
---
|
||||
|
||||
**Usage:** Use this checklist when evaluating skills found through skill-finder to provide quality scores and recommendations to users.
|
||||
547
skills/skill/references/installation-workflow.md
Normal file
547
skills/skill/references/installation-workflow.md
Normal file
@@ -0,0 +1,547 @@
|
||||
# Installation Workflow for Claude Skills
|
||||
|
||||
Complete guide to previewing, downloading, and installing Claude skills from GitHub.
|
||||
|
||||
## Installation Process Overview
|
||||
|
||||
1. **Preview** - Show skill details and requirements
|
||||
2. **Confirm** - Get user approval
|
||||
3. **Download** - Fetch skill files from GitHub
|
||||
4. **Install** - Place in correct directory structure
|
||||
5. **Verify** - Confirm installation success
|
||||
6. **Setup** - Run any required setup steps
|
||||
|
||||
## Step 1: Preview Skill
|
||||
|
||||
### Fetch SKILL.md Content
|
||||
|
||||
```bash
|
||||
# Get direct link to SKILL.md
|
||||
skill_url="https://github.com/OWNER/REPO/blob/main/PATH/SKILL.md"
|
||||
skill_path="PATH/SKILL.md"
|
||||
|
||||
# Fetch content (first 50 lines for preview)
|
||||
gh api repos/OWNER/REPO/contents/$skill_path | \
|
||||
jq -r '.content' | base64 -d | head -50
|
||||
```
|
||||
|
||||
### Extract Key Information
|
||||
|
||||
```bash
|
||||
# Parse SKILL.md for important details
|
||||
skill_content=$(gh api repos/OWNER/REPO/contents/$skill_path | jq -r '.content' | base64 -d)
|
||||
|
||||
# Extract name (first # heading)
|
||||
skill_name=$(echo "$skill_content" | grep -m1 '^# ' | sed 's/^# //')
|
||||
|
||||
# Extract description (first paragraph after title)
|
||||
description=$(echo "$skill_content" | sed -n '/^# /,/^$/p' | grep -v '^#' | head -1)
|
||||
|
||||
# Extract dependencies
|
||||
dependencies=$(echo "$skill_content" | grep -A10 -i "dependencies\|requirements\|prerequisites" | head -10)
|
||||
|
||||
# Extract usage examples
|
||||
examples=$(echo "$skill_content" | grep -A10 -i "usage\|example\|quick start" | head -15)
|
||||
```
|
||||
|
||||
### Display Preview
|
||||
|
||||
```bash
|
||||
cat <<EOF
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
📦 Skill Preview: $skill_name
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📝 Description:
|
||||
$description
|
||||
|
||||
⭐ Repository: $repo_full_name
|
||||
🌟 Stars: $stars
|
||||
🔄 Last Updated: $days_ago days ago
|
||||
|
||||
📋 Dependencies:
|
||||
$dependencies
|
||||
|
||||
💡 Usage Example:
|
||||
$examples
|
||||
|
||||
📎 Full Documentation:
|
||||
$skill_url
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
EOF
|
||||
```
|
||||
|
||||
## Step 2: Confirm Installation
|
||||
|
||||
### Check Existing Installation
|
||||
|
||||
```bash
|
||||
# Determine skill directory name
|
||||
skill_dir_name=$(echo "$skill_name" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
|
||||
skill_dir=".claude/skills/$skill_dir_name"
|
||||
|
||||
# Check if already installed
|
||||
if [ -d "$skill_dir" ]; then
|
||||
echo "⚠️ Skill '$skill_name' is already installed at: $skill_dir"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " [U] Update (overwrite existing)"
|
||||
echo " [K] Keep existing (cancel)"
|
||||
echo " [B] Backup and install new"
|
||||
echo ""
|
||||
read -p "Choose option [U/K/B]: " choice
|
||||
|
||||
case $choice in
|
||||
[Uu])
|
||||
echo "Overwriting existing installation..."
|
||||
;;
|
||||
[Kk])
|
||||
echo "Keeping existing installation. Cancelled."
|
||||
exit 0
|
||||
;;
|
||||
[Bb])
|
||||
backup_dir="${skill_dir}.backup.$(date +%s)"
|
||||
mv "$skill_dir" "$backup_dir"
|
||||
echo "✅ Backed up to: $backup_dir"
|
||||
;;
|
||||
*)
|
||||
echo "Invalid option. Cancelled."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
```
|
||||
|
||||
### Get User Confirmation
|
||||
|
||||
```bash
|
||||
echo ""
|
||||
echo "Install '$skill_name' to $skill_dir?"
|
||||
echo ""
|
||||
read -p "Continue? [y/N]: " confirm
|
||||
|
||||
if [[ ! "$confirm" =~ ^[Yy] ]]; then
|
||||
echo "Installation cancelled."
|
||||
exit 0
|
||||
fi
|
||||
```
|
||||
|
||||
## Step 3: Download Skill Files
|
||||
|
||||
### Determine Skill Structure
|
||||
|
||||
Skills can have different structures:
|
||||
|
||||
1. **Simple** - Single SKILL.md file
|
||||
2. **Standard** - SKILL.md + reference files
|
||||
3. **Plugin** - Nested in `skills/` subdirectory
|
||||
4. **Complex** - Multiple files, scripts, dependencies
|
||||
|
||||
```bash
|
||||
# Detect structure type
|
||||
structure_type=$(detect_skill_structure "$repo" "$skill_path")
|
||||
|
||||
case $structure_type in
|
||||
"simple")
|
||||
download_simple_skill "$repo" "$skill_path" "$skill_dir"
|
||||
;;
|
||||
"standard")
|
||||
download_standard_skill "$repo" "$skill_path" "$skill_dir"
|
||||
;;
|
||||
"plugin")
|
||||
download_plugin_skill "$repo" "$skill_path" "$skill_dir"
|
||||
;;
|
||||
"complex")
|
||||
download_complex_skill "$repo" "$skill_path" "$skill_dir"
|
||||
;;
|
||||
esac
|
||||
```
|
||||
|
||||
### Download Simple Skill (SKILL.md only)
|
||||
|
||||
```bash
|
||||
download_simple_skill() {
|
||||
local repo=$1
|
||||
local skill_path=$2
|
||||
local dest_dir=$3
|
||||
|
||||
echo "📥 Downloading simple skill..."
|
||||
|
||||
# Create destination directory
|
||||
mkdir -p "$dest_dir"
|
||||
|
||||
# Download SKILL.md
|
||||
gh api "repos/$repo/contents/$skill_path" | \
|
||||
jq -r '.content' | base64 -d > "$dest_dir/SKILL.md"
|
||||
|
||||
if [ -f "$dest_dir/SKILL.md" ]; then
|
||||
echo "✅ Downloaded SKILL.md"
|
||||
else
|
||||
echo "❌ Failed to download SKILL.md"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
```
|
||||
|
||||
### Download Standard Skill (with references)
|
||||
|
||||
```bash
|
||||
download_standard_skill() {
|
||||
local repo=$1
|
||||
local skill_path=$2
|
||||
local dest_dir=$3
|
||||
|
||||
echo "📥 Downloading standard skill..."
|
||||
|
||||
# Get skill directory path from SKILL.md path
|
||||
skill_dir_path=$(dirname "$skill_path")
|
||||
|
||||
# Get all files in skill directory
|
||||
gh api "repos/$repo/contents/$skill_dir_path?recursive=1" | \
|
||||
jq -r '.tree[] | select(.type == "blob") | .path' | \
|
||||
while read file_path; do
|
||||
# Calculate relative path
|
||||
rel_path=${file_path#$skill_dir_path/}
|
||||
dest_file="$dest_dir/$rel_path"
|
||||
|
||||
# Create subdirectories
|
||||
mkdir -p "$(dirname "$dest_file")"
|
||||
|
||||
# Download file
|
||||
gh api "repos/$repo/contents/$file_path" | \
|
||||
jq -r '.content' | base64 -d > "$dest_file"
|
||||
|
||||
echo " ✓ $rel_path"
|
||||
done
|
||||
|
||||
echo "✅ Downloaded all skill files"
|
||||
}
|
||||
```
|
||||
|
||||
### Download Plugin Skill (nested structure)
|
||||
|
||||
```bash
|
||||
download_plugin_skill() {
|
||||
local repo=$1
|
||||
local skill_path=$2
|
||||
local dest_dir=$3
|
||||
|
||||
echo "📥 Downloading plugin skill..."
|
||||
echo " (This may take a moment...)"
|
||||
|
||||
# Clone repository to temporary location
|
||||
temp_dir=$(mktemp -d)
|
||||
gh repo clone "$repo" "$temp_dir" -- --depth 1 --quiet
|
||||
|
||||
# Extract skill directory from SKILL.md path
|
||||
# Example: skills/playwright-skill/SKILL.md -> skills/playwright-skill
|
||||
skill_subdir=$(dirname "$skill_path")
|
||||
|
||||
# Copy skill directory to destination
|
||||
if [ -d "$temp_dir/$skill_subdir" ]; then
|
||||
cp -r "$temp_dir/$skill_subdir/"* "$dest_dir/"
|
||||
echo "✅ Copied skill from $skill_subdir"
|
||||
else
|
||||
echo "❌ Skill directory not found: $skill_subdir"
|
||||
rm -rf "$temp_dir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
rm -rf "$temp_dir"
|
||||
}
|
||||
```
|
||||
|
||||
### Download Complex Skill (with setup)
|
||||
|
||||
```bash
|
||||
download_complex_skill() {
|
||||
local repo=$1
|
||||
local skill_path=$2
|
||||
local dest_dir=$3
|
||||
|
||||
echo "📥 Downloading complex skill..."
|
||||
|
||||
# Use plugin download method
|
||||
download_plugin_skill "$repo" "$skill_path" "$dest_dir"
|
||||
|
||||
# Check for dependencies
|
||||
if [ -f "$dest_dir/package.json" ]; then
|
||||
echo ""
|
||||
echo "📦 This skill has npm dependencies."
|
||||
echo " Run: cd $dest_dir && npm install"
|
||||
fi
|
||||
|
||||
if [ -f "$dest_dir/requirements.txt" ]; then
|
||||
echo ""
|
||||
echo "🐍 This skill has Python dependencies."
|
||||
echo " Run: cd $dest_dir && pip install -r requirements.txt"
|
||||
fi
|
||||
|
||||
if [ -f "$dest_dir/setup.sh" ]; then
|
||||
echo ""
|
||||
echo "🔧 This skill has a setup script."
|
||||
read -p " Run setup.sh now? [y/N]: " run_setup
|
||||
if [[ "$run_setup" =~ ^[Yy] ]]; then
|
||||
(cd "$dest_dir" && bash setup.sh)
|
||||
fi
|
||||
fi
|
||||
}
|
||||
```
|
||||
|
||||
## Step 4: Verify Installation
|
||||
|
||||
### Check Required Files
|
||||
|
||||
```bash
|
||||
verify_installation() {
|
||||
local skill_dir=$1
|
||||
local errors=0
|
||||
|
||||
echo ""
|
||||
echo "🔍 Verifying installation..."
|
||||
|
||||
# Check SKILL.md exists
|
||||
if [ ! -f "$skill_dir/SKILL.md" ]; then
|
||||
echo " ❌ Missing SKILL.md"
|
||||
((errors++))
|
||||
else
|
||||
echo " ✅ SKILL.md present"
|
||||
fi
|
||||
|
||||
# Check file permissions
|
||||
if [ ! -r "$skill_dir/SKILL.md" ]; then
|
||||
echo " ❌ SKILL.md not readable"
|
||||
((errors++))
|
||||
else
|
||||
echo " ✅ File permissions OK"
|
||||
fi
|
||||
|
||||
# Check for reference files (optional but good)
|
||||
if [ -d "$skill_dir/references" ]; then
|
||||
ref_count=$(find "$skill_dir/references" -type f | wc -l)
|
||||
echo " ✅ Found $ref_count reference files"
|
||||
fi
|
||||
|
||||
# Check for examples (optional)
|
||||
if [ -d "$skill_dir/examples" ]; then
|
||||
example_count=$(find "$skill_dir/examples" -type f | wc -l)
|
||||
echo " ✅ Found $example_count example files"
|
||||
fi
|
||||
|
||||
return $errors
|
||||
}
|
||||
```
|
||||
|
||||
### Validate SKILL.md Content
|
||||
|
||||
```bash
|
||||
validate_skill_content() {
|
||||
local skill_file=$1
|
||||
|
||||
# Check for required sections
|
||||
local has_title=$(grep -q '^# ' "$skill_file" && echo "yes" || echo "no")
|
||||
local has_description=$(grep -qi 'description\|what.*does' "$skill_file" && echo "yes" || echo "no")
|
||||
local has_usage=$(grep -qi 'usage\|example\|how.*use' "$skill_file" && echo "yes" || echo "no")
|
||||
|
||||
if [ "$has_title" = "yes" ] && [ "$has_description" = "yes" ]; then
|
||||
echo " ✅ SKILL.md structure valid"
|
||||
return 0
|
||||
else
|
||||
echo " ⚠️ SKILL.md may be incomplete (missing title or description)"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
```
|
||||
|
||||
## Step 5: Post-Installation
|
||||
|
||||
### Run Setup Scripts
|
||||
|
||||
```bash
|
||||
# Check for and run setup
|
||||
if [ -f "$skill_dir/setup.sh" ]; then
|
||||
echo ""
|
||||
echo "🔧 Running setup script..."
|
||||
(cd "$skill_dir" && bash setup.sh)
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Setup completed successfully"
|
||||
else
|
||||
echo "⚠️ Setup script had warnings (check above)"
|
||||
fi
|
||||
fi
|
||||
```
|
||||
|
||||
### Install Dependencies
|
||||
|
||||
```bash
|
||||
# npm dependencies
|
||||
if [ -f "$skill_dir/package.json" ]; then
|
||||
echo ""
|
||||
echo "📦 Installing npm dependencies..."
|
||||
(cd "$skill_dir" && npm install --silent)
|
||||
echo "✅ npm dependencies installed"
|
||||
fi
|
||||
|
||||
# Python dependencies
|
||||
if [ -f "$skill_dir/requirements.txt" ]; then
|
||||
echo ""
|
||||
echo "🐍 Installing Python dependencies..."
|
||||
pip install -q -r "$skill_dir/requirements.txt"
|
||||
echo "✅ Python dependencies installed"
|
||||
fi
|
||||
```
|
||||
|
||||
### Create Usage Instructions
|
||||
|
||||
```bash
|
||||
cat <<EOF
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
✅ Installation Complete!
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📁 Installed to: $skill_dir
|
||||
|
||||
🚀 Usage:
|
||||
Invoke the skill by typing: /$skill_dir_name
|
||||
Or let Claude auto-invoke when relevant
|
||||
|
||||
📖 Documentation:
|
||||
Read: $skill_dir/SKILL.md
|
||||
Examples: $skill_dir/examples/ (if available)
|
||||
|
||||
🔄 Update:
|
||||
Re-run installation to update to latest version
|
||||
|
||||
❌ Uninstall:
|
||||
rm -rf $skill_dir
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
EOF
|
||||
```
|
||||
|
||||
## Complete Installation Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
install_skill() {
|
||||
local repo=$1
|
||||
local skill_path=$2
|
||||
local skill_name=$3
|
||||
|
||||
# 1. Determine destination
|
||||
skill_dir_name=$(echo "$skill_name" | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
|
||||
skill_dir=".claude/skills/$skill_dir_name"
|
||||
|
||||
# 2. Preview
|
||||
echo "Fetching skill preview..."
|
||||
skill_content=$(gh api "repos/$repo/contents/$skill_path" | jq -r '.content' | base64 -d)
|
||||
description=$(echo "$skill_content" | sed -n '/^# /,/^$/p' | grep -v '^#' | head -1)
|
||||
|
||||
echo ""
|
||||
echo "📦 $skill_name"
|
||||
echo "📝 $description"
|
||||
echo "📁 Will install to: $skill_dir"
|
||||
echo ""
|
||||
|
||||
# 3. Confirm
|
||||
read -p "Install this skill? [y/N]: " confirm
|
||||
[[ ! "$confirm" =~ ^[Yy] ]] && { echo "Cancelled."; return 1; }
|
||||
|
||||
# 4. Check existing
|
||||
if [ -d "$skill_dir" ]; then
|
||||
read -p "Skill exists. Overwrite? [y/N]: " overwrite
|
||||
[[ ! "$overwrite" =~ ^[Yy] ]] && { echo "Cancelled."; return 1; }
|
||||
rm -rf "$skill_dir"
|
||||
fi
|
||||
|
||||
# 5. Download
|
||||
mkdir -p "$skill_dir"
|
||||
|
||||
# Detect if plugin format or simple
|
||||
if [[ "$skill_path" == *"/skills/"* ]]; then
|
||||
# Plugin format - clone and extract
|
||||
temp_dir=$(mktemp -d)
|
||||
gh repo clone "$repo" "$temp_dir" -- --depth 1 --quiet
|
||||
skill_subdir=$(dirname "$skill_path")
|
||||
cp -r "$temp_dir/$skill_subdir/"* "$skill_dir/"
|
||||
rm -rf "$temp_dir"
|
||||
else
|
||||
# Simple format - direct download
|
||||
gh api "repos/$repo/contents/$skill_path" | \
|
||||
jq -r '.content' | base64 -d > "$skill_dir/SKILL.md"
|
||||
fi
|
||||
|
||||
# 6. Verify
|
||||
if [ -f "$skill_dir/SKILL.md" ]; then
|
||||
echo "✅ Installation successful!"
|
||||
echo "📁 Location: $skill_dir"
|
||||
echo "🚀 Use: /$skill_dir_name"
|
||||
else
|
||||
echo "❌ Installation failed"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Usage:
|
||||
# install_skill "lackeyjb/playwright-skill" "skills/playwright-skill/SKILL.md" "playwright-skill"
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Issue: Repository not found**
|
||||
```bash
|
||||
if ! gh api "repos/$repo" &>/dev/null; then
|
||||
echo "❌ Repository not found or not accessible: $repo"
|
||||
echo " Check if the repository exists and is public"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
**Issue: SKILL.md not found**
|
||||
```bash
|
||||
if ! gh api "repos/$repo/contents/$skill_path" &>/dev/null; then
|
||||
echo "❌ SKILL.md not found at: $skill_path"
|
||||
echo " Searching for SKILL.md in repository..."
|
||||
|
||||
# Try to find it
|
||||
found_paths=$(gh api "repos/$repo/git/trees/main?recursive=1" | \
|
||||
jq -r '.tree[] | select(.path | contains("SKILL.md")) | .path')
|
||||
|
||||
if [ -n "$found_paths" ]; then
|
||||
echo " Found SKILL.md at:"
|
||||
echo "$found_paths" | sed 's/^/ /'
|
||||
else
|
||||
echo " No SKILL.md found in repository"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
**Issue: Permission denied**
|
||||
```bash
|
||||
if [ ! -w ".claude/skills" ]; then
|
||||
echo "❌ Cannot write to .claude/skills directory"
|
||||
echo " Check permissions: ls -la .claude/skills"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
**Issue: Network/API error**
|
||||
```bash
|
||||
if ! ping -c 1 api.github.com &>/dev/null; then
|
||||
echo "❌ Cannot reach GitHub API"
|
||||
echo " Check your internet connection"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Summary:** The installation workflow ensures safe, verified installation of Claude skills with proper error handling, user confirmation, and post-installation setup.
|
||||
359
skills/skill/references/ranking-algorithm.md
Normal file
359
skills/skill/references/ranking-algorithm.md
Normal file
@@ -0,0 +1,359 @@
|
||||
# Ranking Algorithm for Claude Skills
|
||||
|
||||
Comprehensive scoring system to rank skills by popularity, freshness, and quality.
|
||||
|
||||
## Core Ranking Formula
|
||||
|
||||
```
|
||||
final_score = (base_stars * freshness_multiplier * quality_bonus)
|
||||
```
|
||||
|
||||
## Component 1: Base Stars
|
||||
|
||||
Direct indicator of community validation and popularity.
|
||||
|
||||
```bash
|
||||
base_stars = repository.stargazers_count
|
||||
|
||||
# Minimum threshold: 10 stars (filter out experiments)
|
||||
if [ $base_stars -lt 10 ]; then
|
||||
skip_result=true
|
||||
fi
|
||||
```
|
||||
|
||||
## Component 2: Freshness Multiplier
|
||||
|
||||
Recent updates indicate active maintenance and modern practices.
|
||||
|
||||
### Calculate Days Since Last Update
|
||||
|
||||
```bash
|
||||
# Get pushed_at timestamp from repository
|
||||
pushed_at="2025-10-28T12:00:00Z"
|
||||
|
||||
# Calculate days old (macOS)
|
||||
days_old=$(( ($(date +%s) - $(date -j -f "%Y-%m-%dT%H:%M:%SZ" "$pushed_at" +%s)) / 86400 ))
|
||||
|
||||
# Calculate days old (Linux)
|
||||
days_old=$(( ($(date +%s) - $(date -d "$pushed_at" +%s)) / 86400 ))
|
||||
```
|
||||
|
||||
### Apply Freshness Multiplier
|
||||
|
||||
```bash
|
||||
if [ $days_old -lt 30 ]; then
|
||||
freshness_multiplier=1.5
|
||||
freshness_badge="🔥"
|
||||
freshness_label="Hot"
|
||||
elif [ $days_old -lt 90 ]; then
|
||||
freshness_multiplier=1.2
|
||||
freshness_badge="📅"
|
||||
freshness_label="Recent"
|
||||
elif [ $days_old -lt 180 ]; then
|
||||
freshness_multiplier=1.0
|
||||
freshness_badge="📆"
|
||||
freshness_label="Active"
|
||||
else
|
||||
freshness_multiplier=0.5
|
||||
freshness_badge="⏰"
|
||||
freshness_label="Older"
|
||||
fi
|
||||
```
|
||||
|
||||
### Freshness Tiers
|
||||
|
||||
| Age Range | Multiplier | Badge | Label | Reasoning |
|
||||
|-----------|------------|-------|-------|-----------|
|
||||
| < 30 days | 1.5x | 🔥 | Hot | Very active, likely works with latest Claude |
|
||||
| 30-90 days | 1.2x | 📅 | Recent | Active maintenance |
|
||||
| 90-180 days | 1.0x | 📆 | Active | Stable, still maintained |
|
||||
| > 180 days | 0.5x | ⏰ | Older | May be outdated or abandoned |
|
||||
|
||||
## Component 3: Quality Bonus (Optional)
|
||||
|
||||
Additional signals of skill quality beyond stars and freshness.
|
||||
|
||||
### Quality Signals
|
||||
|
||||
```bash
|
||||
quality_bonus=1.0 # Start at neutral
|
||||
|
||||
# Has comprehensive description
|
||||
if [ ${#description} -gt 100 ]; then
|
||||
quality_bonus=$(echo "$quality_bonus + 0.1" | bc)
|
||||
fi
|
||||
|
||||
# Has reference files
|
||||
reference_count=$(gh api "repos/$repo/contents" | jq '[.[] | select(.name | test("references|docs|examples"))] | length')
|
||||
if [ $reference_count -gt 0 ]; then
|
||||
quality_bonus=$(echo "$quality_bonus + 0.1" | bc)
|
||||
fi
|
||||
|
||||
# Has dependencies documentation
|
||||
if gh api "repos/$repo/contents" | jq -e '.[] | select(.name == "package.json")' > /dev/null; then
|
||||
quality_bonus=$(echo "$quality_bonus + 0.05" | bc)
|
||||
fi
|
||||
|
||||
# Active issues/PRs indicate engagement
|
||||
open_issues=$(gh api "repos/$repo" | jq '.open_issues_count')
|
||||
if [ $open_issues -gt 0 ] && [ $open_issues -lt 20 ]; then
|
||||
quality_bonus=$(echo "$quality_bonus + 0.05" | bc)
|
||||
fi
|
||||
|
||||
# Has recent commits (beyond just pushed_at)
|
||||
recent_commits=$(gh api "repos/$repo/commits?per_page=10" | jq 'length')
|
||||
if [ $recent_commits -ge 5 ]; then
|
||||
quality_bonus=$(echo "$quality_bonus + 0.1" | bc)
|
||||
fi
|
||||
|
||||
# Cap quality bonus at 1.5x
|
||||
if (( $(echo "$quality_bonus > 1.5" | bc -l) )); then
|
||||
quality_bonus=1.5
|
||||
fi
|
||||
```
|
||||
|
||||
### Quality Tier Examples
|
||||
|
||||
| Quality Bonus | Characteristics |
|
||||
|---------------|-----------------|
|
||||
| 1.0x (baseline) | Basic SKILL.md only |
|
||||
| 1.1x | + Good description |
|
||||
| 1.2x | + Reference files |
|
||||
| 1.3x | + Dependencies documented |
|
||||
| 1.4x | + Active community (issues/PRs) |
|
||||
| 1.5x (max) | All of the above |
|
||||
|
||||
## Complete Scoring Implementation
|
||||
|
||||
### Bash Implementation
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
calculate_score() {
|
||||
local repo=$1
|
||||
local stars=$2
|
||||
local pushed_at=$3
|
||||
|
||||
# Calculate days since last update
|
||||
days_old=$(( ($(date +%s) - $(date -j -f "%Y-%m-%dT%H:%M:%SZ" "$pushed_at" +%s)) / 86400 ))
|
||||
|
||||
# Freshness multiplier
|
||||
if [ $days_old -lt 30 ]; then
|
||||
freshness=1.5
|
||||
badge="🔥"
|
||||
elif [ $days_old -lt 90 ]; then
|
||||
freshness=1.2
|
||||
badge="📅"
|
||||
elif [ $days_old -lt 180 ]; then
|
||||
freshness=1.0
|
||||
badge="📆"
|
||||
else
|
||||
freshness=0.5
|
||||
badge="⏰"
|
||||
fi
|
||||
|
||||
# Calculate final score
|
||||
score=$(echo "$stars * $freshness" | bc)
|
||||
|
||||
echo "$score|$badge|$days_old"
|
||||
}
|
||||
|
||||
# Example usage
|
||||
result=$(calculate_score "lackeyjb/playwright-skill" 612 "2025-10-28T12:00:00Z")
|
||||
score=$(echo "$result" | cut -d'|' -f1)
|
||||
badge=$(echo "$result" | cut -d'|' -f2)
|
||||
days=$(echo "$result" | cut -d'|' -f3)
|
||||
|
||||
echo "Score: $score, Badge: $badge, Days: $days"
|
||||
# Output: Score: 918.0, Badge: 🔥, Days: 2
|
||||
```
|
||||
|
||||
### JQ Implementation (More Portable)
|
||||
|
||||
```bash
|
||||
gh search repos "claude skills" --json name,stargazersCount,pushedAt --limit 20 | \
|
||||
jq -r --arg now "$(date -u +%s)" '.[] |
|
||||
. as $repo |
|
||||
($repo.pushedAt | fromdateiso8601) as $pushed |
|
||||
(($now | tonumber) - $pushed) / 86400 | floor as $days |
|
||||
(if $days < 30 then 1.5 elif $days < 90 then 1.2 elif $days < 180 then 1.0 else 0.5 end) as $multiplier |
|
||||
(if $days < 30 then "🔥" elif $days < 90 then "📅" elif $days < 180 then "📆" else "⏰" end) as $badge |
|
||||
($repo.stargazersCount * $multiplier) as $score |
|
||||
"\($score)|\($repo.name)|\($repo.stargazersCount)|\($badge)|\($days)"
|
||||
' | sort -t'|' -k1 -nr | head -10
|
||||
```
|
||||
|
||||
## Ranking Examples
|
||||
|
||||
### Real-World Scores
|
||||
|
||||
| Skill | Stars | Days Old | Freshness | Multiplier | Final Score | Rank |
|
||||
|-------|-------|----------|-----------|------------|-------------|------|
|
||||
| playwright-skill | 612 | 2 | 🔥 | 1.5x | **918** | #1 |
|
||||
| agent-skill-creator | 96 | 5 | 🔥 | 1.5x | **144** | #2 |
|
||||
| skill-codex | 153 | 9 | 🔥 | 1.5x | **229.5** | Would be #2, but bumped by age |
|
||||
| ios-simulator-skill | 77 | 2 | 🔥 | 1.5x | **115.5** | #3 |
|
||||
| claude-skills-mcp | 85 | 2 | 🔥 | 1.5x | **127.5** | #4 |
|
||||
|
||||
*With hot multiplier, even 77 stars beats 96 stars from 30+ days ago*
|
||||
|
||||
### Score Comparison Scenarios
|
||||
|
||||
**Scenario 1: Fresh skill vs. Popular old skill**
|
||||
- Skill A: 50 stars, 10 days old → 50 × 1.5 = **75 points** 🔥
|
||||
- Skill B: 100 stars, 200 days old → 100 × 0.5 = **50 points** ⏰
|
||||
- **Winner: Skill A** (freshness wins)
|
||||
|
||||
**Scenario 2: Very popular but older skill**
|
||||
- Skill A: 1000 stars, 365 days old → 1000 × 0.5 = **500 points** ⏰
|
||||
- Skill B: 200 stars, 15 days old → 200 × 1.5 = **300 points** 🔥
|
||||
- **Winner: Skill A** (massive popularity overcomes age)
|
||||
|
||||
**Scenario 3: Moderate skill, regularly updated**
|
||||
- Skill A: 50 stars, 85 days old → 50 × 1.2 = **60 points** 📅
|
||||
- Skill B: 60 stars, 95 days old → 60 × 1.0 = **60 points** 📆
|
||||
- **Tie** (freshness threshold matters)
|
||||
|
||||
## Handling Edge Cases
|
||||
|
||||
### Newly Created Skills (< 7 days old)
|
||||
|
||||
```bash
|
||||
# New skills may have inflated scores, add small penalty
|
||||
if [ $days_old -lt 7 ]; then
|
||||
new_skill_penalty=0.9
|
||||
score=$(echo "$score * $new_skill_penalty" | bc)
|
||||
note="⚠️ Very new skill - limited validation"
|
||||
fi
|
||||
```
|
||||
|
||||
### Archived or Deprecated Skills
|
||||
|
||||
```bash
|
||||
# Check if repository is archived
|
||||
is_archived=$(gh api "repos/$repo" | jq -r '.archived')
|
||||
|
||||
if [ "$is_archived" = "true" ]; then
|
||||
score=0 # Exclude from results
|
||||
note="🔒 Archived - no longer maintained"
|
||||
fi
|
||||
```
|
||||
|
||||
### Fork vs. Original
|
||||
|
||||
```bash
|
||||
# Check if repository is a fork
|
||||
is_fork=$(gh api "repos/$repo" | jq -r '.fork')
|
||||
|
||||
if [ "$is_fork" = "true" ]; then
|
||||
# Check if fork has more stars than parent
|
||||
parent_stars=$(gh api "repos/$repo" | jq -r '.parent.stargazers_count')
|
||||
if [ $stars -gt $parent_stars ]; then
|
||||
# Fork is more popular, keep it
|
||||
note="🍴 Popular fork"
|
||||
else
|
||||
# Prefer original
|
||||
score=$(echo "$score * 0.8" | bc)
|
||||
note="🍴 Fork - see original"
|
||||
fi
|
||||
fi
|
||||
```
|
||||
|
||||
## Sorting and Display
|
||||
|
||||
### Final Sort Order
|
||||
|
||||
```bash
|
||||
# Sort by score (descending), then by stars (descending)
|
||||
results | sort -t'|' -k1,1nr -k3,3nr | head -10
|
||||
```
|
||||
|
||||
### Ties
|
||||
|
||||
When scores are identical:
|
||||
1. Sort by stars (higher first)
|
||||
2. If still tied, sort by freshness (newer first)
|
||||
3. If still tied, sort alphabetically
|
||||
|
||||
```bash
|
||||
# Multi-level sort
|
||||
jq -r '.[] | "\(.score)|\(.stars)|\(.days_old)|\(.name)"' | \
|
||||
sort -t'|' -k1,1nr -k2,2nr -k3,3n -k4,4
|
||||
```
|
||||
|
||||
## Performance Optimization
|
||||
|
||||
### Bulk Scoring
|
||||
|
||||
```bash
|
||||
# Score all repos in one pass
|
||||
gh search repos "claude skills" --json name,stargazersCount,pushedAt,fullName --limit 50 | \
|
||||
jq -r --arg now "$(date -u +%s)" '
|
||||
.[] |
|
||||
. as $repo |
|
||||
($repo.pushedAt | fromdateiso8601) as $pushed |
|
||||
(($now | tonumber) - $pushed) / 86400 | floor as $days |
|
||||
(if $days < 30 then 1.5 elif $days < 90 then 1.2 elif $days < 180 then 1.0 else 0.5 end) as $mult |
|
||||
($repo.stargazersCount * $mult) as $score |
|
||||
{
|
||||
name: $repo.name,
|
||||
full_name: $repo.fullName,
|
||||
stars: $repo.stargazersCount,
|
||||
days_old: $days,
|
||||
score: $score
|
||||
}
|
||||
' | jq -s 'sort_by(-.score) | .[0:10]'
|
||||
```
|
||||
|
||||
### Caching Scores
|
||||
|
||||
```bash
|
||||
# Cache scores to avoid recalculation
|
||||
score_cache=".skill-scores.json"
|
||||
|
||||
# Generate or load cache
|
||||
if [ ! -f "$score_cache" ] || [ $(($(date +%s) - $(stat -f %m "$score_cache"))) -gt 3600 ]; then
|
||||
# Regenerate cache (older than 1 hour)
|
||||
calculate_all_scores > "$score_cache"
|
||||
fi
|
||||
|
||||
# Use cached scores
|
||||
cat "$score_cache" | jq '.[] | select(.score > 50)'
|
||||
```
|
||||
|
||||
## Customization
|
||||
|
||||
### User-Defined Weights
|
||||
|
||||
Allow users to adjust ranking preferences:
|
||||
|
||||
```bash
|
||||
# Default weights
|
||||
STAR_WEIGHT=1.0
|
||||
FRESHNESS_WEIGHT=1.0
|
||||
QUALITY_WEIGHT=0.5
|
||||
|
||||
# Calculate weighted score
|
||||
weighted_score=$(echo "$stars * $STAR_WEIGHT + $freshness_score * $FRESHNESS_WEIGHT + $quality_score * $QUALITY_WEIGHT" | bc)
|
||||
```
|
||||
|
||||
### Category-Specific Ranking
|
||||
|
||||
Different categories may value different factors:
|
||||
|
||||
```bash
|
||||
# For automation skills: prioritize quality (working code)
|
||||
if [ "$category" = "automation" ]; then
|
||||
QUALITY_WEIGHT=1.5
|
||||
fi
|
||||
|
||||
# For research skills: prioritize freshness (up-to-date sources)
|
||||
if [ "$category" = "research" ]; then
|
||||
FRESHNESS_WEIGHT=1.5
|
||||
fi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Summary:** The ranking algorithm balances popularity (stars) with recency (freshness), ensuring users see both well-established skills and cutting-edge new capabilities. Quality signals provide additional nuance for edge cases.
|
||||
334
skills/skill/references/search-strategies.md
Normal file
334
skills/skill/references/search-strategies.md
Normal file
@@ -0,0 +1,334 @@
|
||||
# Search Strategies for Finding Claude Skills
|
||||
|
||||
Comprehensive guide to searching GitHub for Claude skills using multiple approaches.
|
||||
|
||||
## Overview
|
||||
|
||||
Use a **multi-method approach** combining repository search, code search, and pattern matching to find the maximum number of relevant skills.
|
||||
|
||||
## Method 1: Repository Search
|
||||
|
||||
Find repositories dedicated to Claude skills.
|
||||
|
||||
### Basic Repository Search
|
||||
|
||||
```bash
|
||||
gh search repos "claude skills" --sort stars --order desc --limit 20 \
|
||||
--json name,stargazersCount,description,url,createdAt,pushedAt,owner
|
||||
```
|
||||
|
||||
### Advanced Repository Queries
|
||||
|
||||
```bash
|
||||
# Skills specifically for Claude Code
|
||||
gh search repos "claude code skills" --sort stars --limit 20 --json name,stargazersCount,url,pushedAt
|
||||
|
||||
# Recent skills (last 30 days)
|
||||
gh search repos "claude skills" "created:>$(date -v-30d +%Y-%m-%d)" --sort stars --limit 20
|
||||
|
||||
# Highly starred skills
|
||||
gh search repos "claude skills" "stars:>50" --sort stars --limit 20
|
||||
|
||||
# Active repositories (recently updated)
|
||||
gh search repos "claude skills" --sort updated --limit 20
|
||||
|
||||
# Repositories with specific topics
|
||||
gh search repos "topic:claude topic:skills" --sort stars --limit 20
|
||||
```
|
||||
|
||||
### Filter Out Noise
|
||||
|
||||
```bash
|
||||
# Exclude awesome-lists and collections
|
||||
gh search repos "claude skills" --sort stars --limit 30 | \
|
||||
jq '[.[] | select(.name | test("awesome|collection|curated") | not)]'
|
||||
```
|
||||
|
||||
## Method 2: Code Search for SKILL.md
|
||||
|
||||
Directly find SKILL.md files across all repositories.
|
||||
|
||||
### Basic Code Search
|
||||
|
||||
```bash
|
||||
gh search code "filename:SKILL.md" --limit 30 \
|
||||
--json repository,path,url,sha
|
||||
```
|
||||
|
||||
### Path-Specific Searches
|
||||
|
||||
```bash
|
||||
# Skills in .claude/skills directory
|
||||
gh search code "path:.claude/skills" "filename:SKILL.md" --limit 30
|
||||
|
||||
# Skills in skills/ subdirectory (plugin format)
|
||||
gh search code "path:skills/" "filename:SKILL.md" --limit 30
|
||||
|
||||
# Root-level SKILL.md files
|
||||
gh search code "filename:SKILL.md" "NOT path:/" --limit 30
|
||||
```
|
||||
|
||||
### Content-Based Search
|
||||
|
||||
```bash
|
||||
# Find skills mentioning specific capabilities
|
||||
gh search code "browser automation" "filename:SKILL.md" --limit 20
|
||||
|
||||
# Find MCP-related skills
|
||||
gh search code "MCP server" "filename:SKILL.md" --limit 20
|
||||
|
||||
# Find research/analysis skills
|
||||
gh search code "web search OR data analysis" "filename:SKILL.md" --limit 20
|
||||
```
|
||||
|
||||
## Method 3: Skill-Specific Pattern Matching
|
||||
|
||||
Search for known skill patterns and structures.
|
||||
|
||||
### Known Skill Repositories
|
||||
|
||||
```bash
|
||||
# Check popular skill collections
|
||||
repos=(
|
||||
"BehiSecc/awesome-claude-skills"
|
||||
"travisvn/awesome-claude-skills"
|
||||
"simonw/claude-skills"
|
||||
"mrgoonie/claudekit-skills"
|
||||
)
|
||||
|
||||
for repo in "${repos[@]}"; do
|
||||
gh api "repos/$repo/git/trees/main?recursive=1" | \
|
||||
jq -r '.tree[] | select(.path | contains("SKILL.md")) | .path'
|
||||
done
|
||||
```
|
||||
|
||||
### Plugin Format Detection
|
||||
|
||||
```bash
|
||||
# Repositories following .claude-plugin structure
|
||||
gh search code "filename:.claude-plugin" --limit 20 | \
|
||||
jq -r '.[] | .repository.full_name' | \
|
||||
while read repo; do
|
||||
# Check for skills subdirectory
|
||||
gh api "repos/$repo/contents/skills" 2>/dev/null | \
|
||||
jq -r '.[].name'
|
||||
done
|
||||
```
|
||||
|
||||
## Method 4: Organization/User-Based Search
|
||||
|
||||
Find skills from known skill creators.
|
||||
|
||||
### Popular Skill Authors
|
||||
|
||||
```bash
|
||||
# Search by user
|
||||
users=(
|
||||
"lackeyjb" # playwright-skill
|
||||
"FrancyJGLisboa" # agent-skill-creator
|
||||
"alirezarezvani" # skill factory
|
||||
)
|
||||
|
||||
for user in "${users[@]}"; do
|
||||
gh search repos "user:$user" "SKILL.md" --limit 10
|
||||
done
|
||||
```
|
||||
|
||||
### Organization Search
|
||||
|
||||
```bash
|
||||
# Search within organizations
|
||||
gh search repos "org:anthropics" "skills" --limit 20
|
||||
gh search repos "org:skills-directory" --limit 20
|
||||
```
|
||||
|
||||
## Combining Results
|
||||
|
||||
### Deduplication Strategy
|
||||
|
||||
```bash
|
||||
# Collect all results
|
||||
all_repos=()
|
||||
|
||||
# From repository search
|
||||
repos1=$(gh search repos "claude skills" --json name,owner | jq -r '.[] | "\(.owner.login)/\(.name)"')
|
||||
|
||||
# From code search
|
||||
repos2=$(gh search code "filename:SKILL.md" --json repository | jq -r '.[].repository.full_name' | sort -u)
|
||||
|
||||
# Combine and deduplicate
|
||||
all_repos=($(echo "$repos1 $repos2" | tr ' ' '\n' | sort -u))
|
||||
|
||||
# Fetch metadata for unique repos
|
||||
for repo in "${all_repos[@]}"; do
|
||||
gh api "repos/$repo" --jq '{
|
||||
name: .name,
|
||||
full_name: .full_name,
|
||||
stars: .stargazers_count,
|
||||
updated: .pushed_at,
|
||||
description: .description
|
||||
}'
|
||||
done
|
||||
```
|
||||
|
||||
## Search Optimization
|
||||
|
||||
### Parallel Execution
|
||||
|
||||
```bash
|
||||
# Run all searches in parallel for speed
|
||||
{
|
||||
gh search repos "claude skills" --limit 20 > repos.json &
|
||||
gh search code "filename:SKILL.md" --limit 30 > code.json &
|
||||
gh search code "path:.claude/skills" --limit 20 > paths.json &
|
||||
wait
|
||||
}
|
||||
|
||||
# Merge results
|
||||
jq -s 'add | unique_by(.repository.full_name)' repos.json code.json paths.json
|
||||
```
|
||||
|
||||
### Caching Results
|
||||
|
||||
```bash
|
||||
# Cache results to avoid hitting rate limits
|
||||
cache_file=".skill-finder-cache.json"
|
||||
cache_ttl=3600 # 1 hour
|
||||
|
||||
if [ -f "$cache_file" ] && [ $(($(date +%s) - $(stat -f %m "$cache_file"))) -lt $cache_ttl ]; then
|
||||
# Use cached results
|
||||
cat "$cache_file"
|
||||
else
|
||||
# Fetch fresh results and cache
|
||||
gh search repos "claude skills" --limit 50 > "$cache_file"
|
||||
cat "$cache_file"
|
||||
fi
|
||||
```
|
||||
|
||||
## Category-Specific Searches
|
||||
|
||||
### Automation Skills
|
||||
|
||||
```bash
|
||||
gh search code "playwright OR selenium OR puppeteer" "filename:SKILL.md"
|
||||
gh search code "browser automation OR web automation" "filename:SKILL.md"
|
||||
```
|
||||
|
||||
### Research Skills
|
||||
|
||||
```bash
|
||||
gh search code "web search OR research OR analysis" "filename:SKILL.md"
|
||||
gh search code "data collection OR scraping" "filename:SKILL.md"
|
||||
```
|
||||
|
||||
### Development Skills
|
||||
|
||||
```bash
|
||||
gh search code "git OR github OR code review" "filename:SKILL.md"
|
||||
gh search code "testing OR linting OR formatting" "filename:SKILL.md"
|
||||
```
|
||||
|
||||
### Integration Skills
|
||||
|
||||
```bash
|
||||
gh search code "MCP server OR API integration" "filename:SKILL.md"
|
||||
gh search code "webhook OR external service" "filename:SKILL.md"
|
||||
```
|
||||
|
||||
## Quality Filters
|
||||
|
||||
### Star-Based Filtering
|
||||
|
||||
```bash
|
||||
# Only repos with 10+ stars
|
||||
gh search repos "claude skills" "stars:>=10" --limit 20
|
||||
|
||||
# Trending (many stars, recently created)
|
||||
gh search repos "claude skills" "stars:>50" "created:>2025-01-01" --limit 20
|
||||
```
|
||||
|
||||
### Activity-Based Filtering
|
||||
|
||||
```bash
|
||||
# Updated in last 30 days
|
||||
gh search repos "claude skills" "pushed:>$(date -v-30d +%Y-%m-%d)" --limit 20
|
||||
|
||||
# Active development (multiple commits recently)
|
||||
gh api graphql -f query='
|
||||
{
|
||||
search(query: "claude skills sort:updated", type: REPOSITORY, first: 20) {
|
||||
nodes {
|
||||
... on Repository {
|
||||
name
|
||||
stargazerCount
|
||||
pushedAt
|
||||
defaultBranchRef {
|
||||
target {
|
||||
... on Commit {
|
||||
history(first: 10) {
|
||||
totalCount
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Rate Limit Checking
|
||||
|
||||
```bash
|
||||
# Check remaining API calls
|
||||
gh api rate_limit | jq '.rate.remaining'
|
||||
|
||||
# If low, wait or authenticate
|
||||
if [ $(gh api rate_limit | jq '.rate.remaining') -lt 10 ]; then
|
||||
echo "⚠️ Low on API calls. Waiting..."
|
||||
sleep 60
|
||||
fi
|
||||
```
|
||||
|
||||
### Fallback Strategies
|
||||
|
||||
```bash
|
||||
# If authenticated search fails, try unauthenticated
|
||||
gh search repos "claude skills" --limit 10 2>/dev/null || \
|
||||
curl -s "https://api.github.com/search/repositories?q=claude+skills&per_page=10"
|
||||
```
|
||||
|
||||
## Performance Benchmarks
|
||||
|
||||
| Method | API Calls | Results | Speed | Best For |
|
||||
|--------|-----------|---------|-------|----------|
|
||||
| Repository search | 1 | 20-30 | Fast | Popular skills |
|
||||
| Code search | 1 | 30-50 | Medium | All skills |
|
||||
| Recursive tree | N repos | 50+ | Slow | Completeness |
|
||||
| Combined | 3-5 | 100+ | Medium | Best coverage |
|
||||
|
||||
## Recommended Workflow
|
||||
|
||||
1. **Quick search** (1 API call, <5 sec):
|
||||
```bash
|
||||
gh search repos "claude skills" --limit 20
|
||||
```
|
||||
|
||||
2. **Comprehensive search** (3 API calls, ~15 sec):
|
||||
```bash
|
||||
# Parallel execution
|
||||
gh search repos "claude skills" &
|
||||
gh search code "filename:SKILL.md" &
|
||||
gh search code "path:.claude/skills" &
|
||||
wait
|
||||
```
|
||||
|
||||
3. **Deep search** (10+ API calls, ~60 sec):
|
||||
- All of the above
|
||||
- Repository tree traversal
|
||||
- Organization searches
|
||||
- Known author searches
|
||||
|
||||
Choose based on user needs and time constraints.
|
||||
Reference in New Issue
Block a user