Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component...
npx skills add prgrmrwy/ai-tools --skill "skill-get"
Install specific skill from multi-skill repository
# Description
Unified installer for Claude Code Skills from multiple sources. Triggered when users request to install skills, search for skills, list installed skills, update skills, query supported marketplaces/sources, skill-get help, package skills, compile skills, or mention skill names/URLs. Supports: (1) Official repository github.com/anthropics/skills, (2) Third-party marketplaces (skillsmp.com, prompts.chat, skillhub.club, smithery.ai, etc.), (3) GitHub search, (4) Direct Git/HTTP URLs, (5) Local paths, (6) Packaging skills as .skill files, (7) Updating installed skills.
# SKILL.md
name: skill-get
description: Unified installer for Claude Code Skills from multiple sources. Triggered when users request to install skills, search for skills, list installed skills, update skills, query supported marketplaces/sources, skill-get help, package skills, compile skills, or mention skill names/URLs. Supports: (1) Official repository github.com/anthropics/skills, (2) Third-party marketplaces (skillsmp.com, prompts.chat, skillhub.club, smithery.ai, etc.), (3) GitHub search, (4) Direct Git/HTTP URLs, (5) Local paths, (6) Packaging skills as .skill files, (7) Updating installed skills.
Language Preference / 语言偏好
IMPORTANT: Detect user's language preference and respond accordingly.
| User Language | Response Language | Reference Document |
|---|---|---|
| Chinese (中文) | Chinese | SKILL_ZH_CN.md |
| English | English | This document |
| Other | Match user's language | This document (adapt) |
Detection methods:
1. User's message language (highest priority)
2. Previous conversation language
3. System locale if available
Example:
- User says "安装 playwright" → Respond in Chinese, use Chinese prompts
- User says "install playwright" → Respond in English, use English prompts
Skill Get
Install skills from any source with a single command.
Installation Locations
| Type | Path | Description |
|---|---|---|
| User-level | ~/.claude/skills/ |
Available to all projects |
| Project-level | .claude/skills/ |
Only for current project |
Prompts user to choose installation location by default.
Workflows
Scenario A: User provides explicit address
Execute installation directly:
# Git repository
scripts/install_skill.sh "https://github.com/anthropics/skills" ~/.claude/skills docx
# HTTP URL (SKILL.md)
scripts/install_skill.sh "https://example.com/skill/SKILL.md" ~/.claude/skills/my-skill
# Local path
scripts/install_skill.sh /path/to/skill ~/.claude/skills
Scenario B: User provides only skill name
Search and install by priority.
⚠️ Search Constraints (must follow)
- Search strictly in priority order: Must search from priority 1 through 9 in sequence, no skipping
- Never skip any source: Even if a source is unlikely to have results, must execute the search
- Show search progress in real-time: Display the current source name being searched to the user
- Stop on first match: Once a match is found in any source, stop searching and show results
- Report "not found" only after all searches: Only report "not found" after all 9 sources have been searched
- GitHub search as fallback: GitHub search is last (step 9), prioritize third-party marketplaces for precise results
Search Progress Display Format
🔍 Searching for "skill-name"...
[1/9] Searching github.com/anthropics/skills ... ❌ Not found
[2/9] Searching prompts.chat (MCP API) ... ✅ Match found!
Note: GitHub search is at step 9 (last) as a fallback to avoid name collisions.
Search Steps (sorted by effectiveness, GitHub as fallback)
Design Principle: Prioritize precise searches from third-party marketplaces, with GitHub search as a fallback to avoid name collisions.
Step 1/9: Official Repository (github.com/anthropics/skills) ⭐ Official priority
echo "[1/9] Searching github.com/anthropics/skills ..."
curl -s "https://api.github.com/repos/anthropics/skills/contents/skills" | jq -r '.[] | select(.type=="dir") | .name' | grep -i "{keyword}"
Step 2/9: Prompts.chat Skills (prompts.chat/skills) ⭐⭐ Best MCP API
prompts.chat provides MCP API, prioritize using MCP tools:
Method 1: MCP API (Recommended)
Call MCP endpoint directly:
echo "[2/9] Searching prompts.chat (MCP API) ..."
curl -sL -X POST "https://prompts.chat/api/mcp" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"search_skills","arguments":{"query":"{skill-name}","limit":10}},"id":1}'
If MCP server is configured (prompts.chat: https://prompts.chat/api/mcp), use:
- search_skills - Search skills
- get_skill - Get complete skill content (including all files)
# Search
search_skills(query="{skill-name}", limit=10)
# Get complete content
get_skill(id="{skill-id}")
Method 2: Page Scraping (Backup)
curl -sL -A "Mozilla/5.0" "https://prompts.chat/skills?q={skill-name}" | grep -oE '/prompts/[a-zA-Z0-9_-]+'
Installation Flow:
1. Call get_skill(id) to get all file contents
2. Create directory .claude/skills/{slug}/
3. Save SKILL.md and other files to corresponding locations
Step 3/9: Skills.sh (skills.sh) ⭐⭐ REST API + npx
Vercel official Agent Skills directory:
echo "[3/9] Searching skills.sh ..."
# REST API to get skills list
curl -sL "https://skills.sh/api/skills" | jq -r '.skills[] | select(.name | test("{keyword}"; "i")) | "\(.name) (⭐\(.installs)) - \(.topSource)"'
Installation:
npx skills add {owner}/{repo}
npx skills add vercel-labs/agent-skills
Step 4/9: mcpservers.org/claude-skills ⭐ Structured directory
echo "[4/9] Searching mcpservers.org/claude-skills ..."
curl -sL -A "Mozilla/5.0" "https://mcpservers.org/claude-skills" | grep -oE 'href="/claude-skills/[^"]+' | grep -i "{keyword}"
Step 5/9: SkillHub (skillhub.club) ⭐ Category browsing
echo "[5/9] Searching skillhub.club ..."
curl -sL -A "Mozilla/5.0" "https://skillhub.club" | grep -oE 'href="/skills/[^"]+' | grep -i "{keyword}"
Step 6/9: Claude Marketplaces (claudemarketplaces.com) ⚠️ Partially available
echo "[6/9] Searching claudemarketplaces.com ..."
curl -sL -A "Mozilla/5.0" "https://claudemarketplaces.com" | grep -oE 'github\.com/[a-zA-Z0-9_/-]+'
Step 7/9: SkillsMP (skillsmp.com) ❌ Cloudflare protected
Cloudflare 403 protected, prioritize direct npx installation:
echo "[7/9] Searching skillsmp.com ..."
# Try npx installation directly (no search needed)
npx skills add {skill-name}
# Or curl probe (may be blocked)
curl -sL -A "Mozilla/5.0" "https://skillsmp.com/skills/{skill-name}" | grep -oE 'npx skills add [a-zA-Z0-9_-]+'
Step 8/9: Smithery (smithery.ai/skills) ❌ Heavy rate limiting
echo "[8/9] Searching smithery.ai/skills ..."
# Note: This site has severe HTTP 429 rate limiting, may fail
curl -sL -A "Mozilla/5.0" "https://smithery.ai/skills/{skill-name}" | grep -oE 'github\.com/[a-zA-Z0-9_/-]+'
Step 9/9: GitHub Search (Fallback) ⭐ Last search, avoids name collision
echo "[9/9] Searching GitHub (fallback) ..."
curl -s "https://api.github.com/search/repositories?q=claude+skill+{keyword}&sort=stars&per_page=5" | jq -r '.items[] | "\(.full_name) ⭐\(.stargazers_count)"'
Note: GitHub search is last because search results may contain many irrelevant projects with name collisions. Searching third-party marketplaces first yields more precise results.
See references/marketplaces.md for details.
Show results after finding, confirm before installing.
Scenario C: List Installed Skills
scripts/list_skills.sh
Scenario D: Query Supported Marketplaces / skill-get help
When user asks "which marketplaces are supported", "what skill sources exist", "skill-get help", etc., show supported sources list and configuration:
Default Search Order (sorted by effectiveness, GitHub as fallback)
| Priority | Source | Effectiveness | Description |
|---|---|---|---|
| 1 | github.com/anthropics/skills | ⭐ Official | Official skill repository, stable API |
| 2 | prompts.chat/skills | ⭐⭐ Best | MCP API, full content retrieval |
| 3 | skills.sh | ⭐⭐ Excellent | Vercel official, REST API + npx |
| 4 | mcpservers.org/claude-skills | ⭐ Effective | Structured directory, page scraping |
| 5 | skillhub.club | ⭐ Effective | Category browsing, page scraping |
| 6 | claudemarketplaces.com | ⚠️ Partial | Homepage accessible, /skills 404 |
| 7 | skillsmp.com | ❌ Difficult | Cloudflare 403 protected, requires npx |
| 8 | smithery.ai/skills | ❌ Hardest | HTTP 429 rate limiting |
| 9 | GitHub Search | ⭐ Fallback | Last, avoids name collision |
| - | Direct Git/HTTP URL | - | User provides full address |
| - | Local path | - | Copy local folder |
Custom Search Order
Users can customize marketplace search order in ~/.claude/skill-get-config.json:
{
"marketplaces": [
"github.com/anthropics/skills",
"prompts.chat/skills",
"skills.sh",
"mcpservers.org/claude-skills",
"skillhub.club",
"claudemarketplaces.com",
"skillsmp.com",
"smithery.ai/skills",
"github-search"
]
}
Note:
github-searchshould be last as a fallback.
Notes:
- Array order determines search priority
- Remove an item to skip that source
- github-search represents GitHub public repository search
- Direct URLs and local paths are always supported, no configuration needed
Read configuration:
cat ~/.claude/skill-get-config.json 2>/dev/null || echo "Using default configuration"
Scenario E: Update Skill
When user says "update skill", "upgrade skill", etc., check and update specified skill based on installation record.
Important: User must specify the skill name to update.
Installation Record File
When installing a skill, automatically generate .skill-meta.json in the installation directory:
{
"name": "playwright-testing",
"installed_at": "2025-01-24T12:00:00Z",
"source": {
"type": "git",
"url": "https://github.com/anthropics/skills",
"path": "skills/playwright-testing",
"commit": "abc1234",
"branch": "main"
},
"marketplace": "github.com/anthropics/skills"
}
Source types:
- git: Git repository, records commit hash
- npm: npx installation, records version number
- http: HTTP URL, records ETag or Last-Modified
- local: Local path, records file modification time
Update Flow
# User must specify skill name
User: update playwright-testing
Step 1: Read installation record
cat ~/.claude/skills/playwright-testing/.skill-meta.json
# or
cat .claude/skills/playwright-testing/.skill-meta.json
Step 2: Check remote version
# Git repository: get latest commit
git ls-remote {url} {branch} | cut -f1
# npm: check latest version
npm view {package-name} version
Step 3: Compare versions
- If remote commit/version matches local record: prompt "Already up to date"
- If different: show update content, confirm before updating
Step 4: Execute update
# Backup current version (optional)
cp -r {skill-path} {skill-path}.bak
# Reinstall
scripts/install_skill.sh {source-url} {install-path} {skill-name}
# Update commit/version in record file
Batch Update Check
# List all updatable skills
User: check all skill updates
AI: Checking installed skills...
| Skill | Current Version | Latest Version | Status |
|-------|-----------------|----------------|--------|
| playwright-testing | abc1234 | def5678 | Updatable |
| docx-converter | v1.0.0 | v1.0.0 | Up to date |
| my-local-skill | - | - | Local install, skip |
Scenario F: Package Skill
When user says "package skill", "compile skill", "generate .skill file", etc., package skill directory into distributable .skill file.
python3 scripts/package_skill.py pack <skill-folder> [output-directory]
Examples:
# Package skill-get, output to current directory
python3 scripts/package_skill.py pack .claude/skills/skill-get
# Package to specified directory
python3 scripts/package_skill.py pack .claude/skills/skill-get ./dist
Output: <skill-name>.skill file (zip format)
Auto-validates before packaging:
- SKILL.md exists
- YAML frontmatter format is correct
- name and description fields exist
.skillignore Support
Create .skillignore file in skill directory to exclude files from packaging:
# .skillignore example
*.log
*.tmp
tests/
node_modules/
.env
Default ignores (no configuration needed):
- .git/, __pycache__/, *.pyc, *.pyo
- .DS_Store, Thumbs.db
- .skillignore itself
Scenario G: Unpack Skill
When user says "unpack skill", "extract skill", "extract .skill file", etc., extract .skill file to specified directory.
python3 scripts/package_skill.py unpack <skill-file> [output-directory]
Examples:
# Unpack to current directory
python3 scripts/package_skill.py unpack my-skill.skill
# Unpack to skills directory
python3 scripts/package_skill.py unpack my-skill.skill ~/.claude/skills/
Scenario H: Update Strategy Database (Auto)
Important: After each successful retrieval and installation, check and update references/marketplaces.md.
Trigger Conditions
Auto-execute strategy database update when:
1. Successfully found and installed a skill from a marketplace
2. Used a new search method (e.g., discovered new API endpoint)
3. Found existing strategy failed or better alternative exists
Update Flow
Step 1: Check if current strategy is recorded
grep -q "{marketplace-name}" references/marketplaces.md && echo "Exists" || echo "New source"
Step 2: If new or improved strategy, append/update to references/marketplaces.md
Step 3: Record content includes:
- Marketplace name and URL
- Available API endpoints
- Search methods and example commands
- Installation methods
- Special handling (e.g., Cloudflare bypass)
Update Format Example
## N. {Marketplace Name} ({domain})
**Features**: {description}
**URL formats**:
- Search: `{search-url}`
- Details: `{detail-url}`
- API: `{api-url}` (if available)
**Data retrieval**:
\`\`\`bash
{retrieval command}
\`\`\`
**Installation**: `{install command}`
**Discovery date**: {date}
**Discovery method**: {how this strategy was discovered}
Strategy Priority Adjustment
If a strategy proves more effective than existing ones:
1. Update that source's search step number
2. Update search order in SKILL.md
3. Update Default Search Order table
Installation Validation
Pre-installation check:
test -f <path>/SKILL.md && echo "valid" || echo "invalid"
Error Handling
| Scenario | Handling |
|---|---|
| Source doesn't exist | Prompt to check address |
| No SKILL.md | Prompt incorrect format |
| Name already exists | Ask: overwrite/rename/cancel |
| Network error | Prompt to retry |
| Cloudflare 403 | Use curl + User-Agent, or try npx install directly |
| npx install failed | Fallback to curl scraping GitHub link then git clone |
Installation Complete Prompt
After installation, must highlight the installation source.
Important: Links must be full URLs, no ellipsis (...) truncation!
Format:
✅ Installation complete: <installation-path>
┌────────────────────────────────────────────────────────────────────────────┐
│ 📦 Source: <source-name> │
│ 🔗 https://github.com/<owner>/<repo>/path/to/skill │
└────────────────────────────────────────────────────────────────────────────┘
Example Dialogs
Example 1: Install skill
User: install playwright-testing
AI: 🔍 Searching for "playwright-testing"...
[1/8] Searching github.com/anthropics/skills ... ❌ Not found
[2/8] Searching skillsmp.com ... ✅ Match found!
Found results:
- playwright-browser-automation (⭐ 234)
Description: Model-invoked Playwright automation
Install to?
[1] Project-level (.claude/skills/)
[2] User-level (~/.claude/skills/)
User: 2
AI: Installing...
✅ Installation complete: ~/.claude/skills/playwright-browser-automation
┌──────────────────────────────────────────────────────────────────────────────────┐
│ 📦 Source: skillsmp.com │
│ 🔗 https://github.com/anthropics/skills/tree/main/skills/playwright │
└──────────────────────────────────────────────────────────────────────────────────┘
Example 1.1: Skill not found
User: install nonexistent-skill
AI: 🔍 Searching for "nonexistent-skill"...
[1/9] Searching github.com/anthropics/skills ... ❌ Not found
[2/9] Searching prompts.chat (MCP API) ... ❌ Not found
[3/9] Searching skills.sh ... ❌ Not found
[4/9] Searching mcpservers.org/claude-skills ... ❌ Not found
[5/9] Searching skillhub.club ... ❌ Not found
[6/9] Searching claudemarketplaces.com ... ❌ Not found
[7/9] Searching skillsmp.com (npx) ... ❌ Not found
[8/9] Searching smithery.ai/skills ... ❌ Not found
[9/9] Searching GitHub (fallback) ... ❌ Not found
❌ "nonexistent-skill" not found in all 9 sources
You can:
1. Check skill name spelling
2. Provide skill's full URL
3. Create a new skill
Example 2: skill-get help
User: skill-get help
AI: ## skill-get Help
Unified Claude Code Skill installer, supports installing, updating, and packaging skills from multiple sources.
### Supported Commands
| Command | Description |
|---------|-------------|
| install {name/url} | Install skill |
| update {name} | Update installed skill |
| list installed | Show all installed skills |
| package {path} | Package skill as .skill file |
| unpack {file} | Extract .skill file |
| help | Show this help |
### Search Order (sorted by effectiveness, GitHub as fallback)
| Priority | Source | Effectiveness | Description |
|----------|--------|---------------|-------------|
| 1 | github.com/anthropics/skills | ⭐ | Official repository, stable API |
| 2 | prompts.chat/skills | ⭐⭐ | Best MCP API |
| 3 | skills.sh | ⭐⭐ | REST API + npx |
| 4 | mcpservers.org | ⭐ | Structured directory |
| 5 | skillhub.club | ⭐ | Category browsing |
| 6 | claudemarketplaces.com | ⚠️ | Partially available |
| 7 | skillsmp.com | ❌ | Cloudflare protected |
| 8 | smithery.ai | ❌ | Heavy rate limiting |
| 9 | GitHub Search | ⭐ | **Fallback**, avoids name collision |
### Custom Search Order
Edit `~/.claude/skill-get-config.json`:
\`\`\`json
{
"marketplaces": ["github.com/anthropics/skills", "prompts.chat/skills", "skills.sh", ..., "github-search"]
}
\`\`\`
> **Recommendation**: Keep `github-search` last as a fallback.
Example 3: Update skill
User: update playwright-testing
AI: 🔍 Checking playwright-testing for updates...
📦 Current version: abc1234 (2025-01-20)
📦 Latest version: def5678 (2025-01-24)
New version available! Update?
[1] Update
[2] Cancel
User: 1
AI: Updating...
✅ Update complete: ~/.claude/skills/playwright-testing
┌──────────────────────────────────────────────────────────────────────────────────┐
│ 📦 Source: github.com/anthropics/skills │
│ 🔗 https://github.com/anthropics/skills/tree/main/skills/playwright-testing │
│ 📝 abc1234 → def5678 │
└──────────────────────────────────────────────────────────────────────────────────┘
Example 4: Check all updates
User: check all skill updates
AI: 🔍 Checking installed skills...
| Skill | Current Version | Latest Version | Status |
|-------|-----------------|----------------|--------|
| playwright-testing | abc1234 | def5678 | ⬆️ Updatable |
| docx-converter | v1.0.0 | v1.0.0 | ✅ Up to date |
| my-local-skill | - | - | ⏭️ Local install |
Found 1 updatable skill, update all?
Example 5: Package skill
User: package skill-get
AI: 📦 Packaging skill-get...
🔍 Validating skill...
✅ Skill is valid!
Added: skill-get/SKILL.md
Added: skill-get/scripts/install_skill.sh
Added: skill-get/scripts/list_skills.sh
Added: skill-get/scripts/package_skill.py
Added: skill-get/references/marketplaces.md
✅ Package complete: ./skill-get.skill
5 files added, 0 files ignored
Example 6: Unpack skill
User: unpack my-skill.skill to ~/.claude/skills/
AI: 📂 Unpacking my-skill.skill...
📂 Extracted to: /home/user/.claude/skills/my-skill
my-skill/SKILL.md
my-skill/scripts/helper.py
✅ Unpack complete: 2 files
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.