7.9 KiB
7.9 KiB
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
gh search repos "claude skills" --sort stars --order desc --limit 20 \
--json name,stargazersCount,description,url,createdAt,pushedAt,owner
Advanced Repository Queries
# 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
# 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
gh search code "filename:SKILL.md" --limit 30 \
--json repository,path,url,sha
Path-Specific Searches
# 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
# 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
# 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
# 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
# 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
# Search within organizations
gh search repos "org:anthropics" "skills" --limit 20
gh search repos "org:skills-directory" --limit 20
Combining Results
Deduplication Strategy
# 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
# 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
# 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
gh search code "playwright OR selenium OR puppeteer" "filename:SKILL.md"
gh search code "browser automation OR web automation" "filename:SKILL.md"
Research Skills
gh search code "web search OR research OR analysis" "filename:SKILL.md"
gh search code "data collection OR scraping" "filename:SKILL.md"
Development Skills
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
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
# 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
# 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
# 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
# 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
-
Quick search (1 API call, <5 sec):
gh search repos "claude skills" --limit 20 -
Comprehensive search (3 API calls, ~15 sec):
# Parallel execution gh search repos "claude skills" & gh search code "filename:SKILL.md" & gh search code "path:.claude/skills" & wait -
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.