Skill fetch
Multi-registry skill discovery and installation for AI coding agents — search 9 sources, score, paginate, and install agent skills with security labels
npx -y skills add girofu/skill-fetch --skill skill-fetchAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
This skill should be used when the user asks to "fetch skill", "install skill", "search for a skill", or when a hook outputs "MISSING EXTERNAL SKILL". Searches 9 registries (SkillsMP, GitHub, Anthropic Skills, ClawSkillHub, skills.sh, PolySkill, SkillHub, Skills Directory) with multi-variant search, quality scoring, security labels, pagination, and local/global installation.
SKILL.md
12.5 KB, as published. Nobody here has run it
Skill Fetch
Search, score, and install agent skills from multiple registries in parallel.
When to Use
- A skill-eval hook outputs "MISSING EXTERNAL SKILL"
- The current task requires domain expertise not available locally
- The user asks to "fetch skill", "search for a skill", or "install a skill"
Critical Rules
- Never use
skillsmp_get_skill_contentto preview before deciding — search descriptions are sufficient. Only use as a fallback if installation fails. - Stop on first results, continue only on zero (max 5 rounds) — any round with ≥1 result proceeds to analysis.
- Only the user can decide to skip — the LLM must never skip installation on its own.
- Always use plain-text interaction — do not use AskUserQuestion. Output analysis and wait for the user to reply with a number or command.
- Show up to 5 results per page — with full analysis (content, pros, cons, repo URL) so the user can make an informed decision.
Platform Compatibility
This skill works across 6+ AI coding agents (Claude Code, Cursor, Codex, Gemini CLI, Windsurf, Amp). Tool names adapt automatically. See references/platform-adapters.md for the full mapping table.
Procedure
Step 0: SkillsMP MCP Self-Check (Claude Code only)
Before searching, verify that the SkillsMP MCP server is available:
- First, try loading deferred tools: Run
ToolSearch("skillsmp")to load any deferred SkillsMP MCP tools. In Claude Code, MCP tools are often deferred (not loaded until requested) and have namespaced names likemcp__skillsmp__skillsmp_search. TheToolSearchcall resolves these. - After ToolSearch, check if any
skillsmp_*ormcp__skillsmp__*tool is now available - If available → proceed to Step 1
- If still not available → run:
claude mcp add --scope user skillsmp -- npx -y skillsmp-mcp-server - Inform the user: "SkillsMP MCP server has been registered. It will be available after restarting the session. Continuing search with the remaining 7 sources for now."
- Proceed to Step 1 (SkillsMP sources will be skipped this session, but available in future sessions)
Tool name note: SkillsMP tools may appear with MCP namespace prefix:
mcp__skillsmp__skillsmp_searchinstead ofskillsmp_search. Both forms work — use whichever is available.
Non-Claude Code agents: Skip this step. SkillsMP tools are Claude Code-specific.
Step 0.5: Load API Keys (MANDATORY — execute before Step 2)
Sources 8-9 require API keys. Read the config file to determine availability:
- Read
~/.claude/skills/.fetch-config.jsonNOW — do not assume keys are absent without reading the file - Expected format:
{ "SKILLHUB_API_KEY": "sk-sh-...", "SKILLS_DIRECTORY_API_KEY": "sk_live_..." } - Record the result — set two flags for use in Step 2b:
HAS_SKILLHUB_KEY: true/falseHAS_SKILLS_DIR_KEY: true/false
- If config file does not exist → both flags = false, inform user they can create the file
- If config file exists but a specific key is missing → that flag = false
⚠️ COMMON FAILURE MODE: LLM skips reading the config file and assumes "no key". This causes Sources 8-9 to be incorrectly skipped even when keys ARE configured. Always read the file first.
Step 1: Determine Search Keywords and Source
URL mode: If $ARGUMENTS is a URL (starts with https://github.com/... or any https://), skip directly to Step 3 installation flow.
Search mode:
- Has
$ARGUMENTS: Use directly as search terms - No search terms (auto-triggered): Prefer
Suggested search termsfrom hook output, otherwise extract 2-3 queries from task context
Step 2: Parallel Search — ALL 9 Sources (mandatory)
⚠️ MANDATORY: You MUST fire ALL 9 sources. Do NOT proceed to scoring until all 9 sources have returned or failed.
⚠️ COMMON FAILURE MODE: LLM fires sources 1-2 (SkillsMP), gets results, then skips sources 3-9. This is WRONG. SkillsMP results alone are insufficient — GitHub, ClawhHub, skills.sh, and PolySkill contain different skills not indexed by SkillsMP.
⚠️ EXECUTION ORDER: You MUST complete BOTH Step 2a AND Step 2b before proceeding to Step 2.5. Step 2a alone is NOT sufficient.
Step 2a: Fire SkillsMP sources (1-2)
| # | Source | Tool Call | Fallback |
|---|---|---|---|
| 1 | SkillsMP AI | skillsmp_ai_search × 3 query variants (parallel) | Skip if MCP unavailable |
| 2 | SkillsMP keyword | skillsmp_search(query) | Skip if MCP unavailable |
Step 2b: Fire non-SkillsMP sources (3-9) — DO NOT SKIP
⚠️ You MUST fire these sources even if Step 2a already returned results. These sources contain skills NOT in SkillsMP.
| # | Source | Tool Call | Fallback |
|---|---|---|---|
| 3 | GitHub repos | gh search repos "{query}" --json name,description,url,stargazersCount,updatedAt --limit 5 --sort stars (do NOT append "skill SKILL.md") | gh search code "{query}" --filename SKILL.md --limit 5 |
| 4 | Anthropic Skills | gh search code "{query}" --repo anthropics/skills --filename SKILL.md --limit 5 | gh api tree fallback |
| 5 | ClawhHub | npx -y clawhub search "{query}" | Skip on failure |
| 6 | skills.sh | WebFetch("https://skills.sh/api/search?q={query}&limit=5") | curl -s via Bash |
| 7 | PolySkill | npx -y @polyskill/cli search "{single_keyword}" --limit 5 (extract most specific single keyword from query — multi-word queries return 0) | Skip on failure (no REST API) |
| 8 | SkillHub | If HAS_SKILLHUB_KEY = true (from Step 0.5): bash {SKILL_BASE_DIR}/scripts/fetch-skillhub.sh "{query}". If false: npx -y @skill-hub/cli search "{query}" --limit 5 (timeout: 10000) | CLI fallback on failure |
| 9 | Skills Directory | If HAS_SKILLS_DIR_KEY = true (from Step 0.5): bash {SKILL_BASE_DIR}/scripts/fetch-skills-directory.sh "{query}". If false: skip. Never use curl directly or WebFetch. | Skip only if key is confirmed absent in Step 0.5 |
⚠️ Sources 8-9 REQUIRE Step 0.5 to have been executed. If Step 0.5 was skipped, go back and read
~/.claude/skills/.fetch-config.jsonNOW before marking Sources 8-9 as skipped.{SKILL_BASE_DIR}= the base directory of this skill (shown at the top when skill loads).
See
references/search-sources.mdfor detailed parameters, response formats, query variant examples, and curl fallback commands.
⚠️ POST-SEARCH CHECKLIST (mandatory before proceeding to Step 2.5):
Before scoring, output this checklist with actual status for EVERY source:
Step 0.5 config: HAS_SKILLHUB_KEY={true/false} HAS_SKILLS_DIR_KEY={true/false}
Sources queried: [1] SkillsMP AI ✅ [2] SkillsMP KW ✅ [3] GitHub ✅/❌ [4] Anthropic ✅/❌ [5] ClawhHub ✅/❌ [6] skills.sh ✅/❌ [7] PolySkill ✅/❌ [8] SkillHub ✅/❌ [9] Skills Dir ✅/❌
Validation rules — go back and fix before proceeding:
- If sources 3-7 are ALL ❌ → re-execute sources 3-7 NOW
- If
HAS_SKILLHUB_KEY=truebut [8] is ❌ → executebash {SKILL_BASE_DIR}/scripts/fetch-skillhub.shNOW - If
HAS_SKILLS_DIR_KEY=truebut [9] is ❌ → executebash {SKILL_BASE_DIR}/scripts/fetch-skills-directory.shNOW - If Step 0.5 was never executed (no config line above) → read
~/.claude/skills/.fetch-config.jsonNOW, then re-evaluate sources 8-9
After ALL sources return → deduplicate (see references/search-sources.md) → proceed to Step 2.5.
Round strategy (max 5 rounds): The "≥1 result → stop" rule applies to rounds, not individual sources. Within a single round, ALL 9 sources must be queried. Only if ALL 9 sources return 0 results in a round should you proceed to the next round with broader keywords. If any source returns ≥1 result in a round, proceed to scoring (do NOT start another round).
Step 2.5: Scoring and Ranking
Calculate a quality score (0-100) for each deduplicated result. See references/quality-signals.md for details.
Scoring formula: Total = Relevance(0-40) + Freshness(0-25) + Community(0-20) + Trust(0-15) + External Bonus(0-5)
Supplementary lookup: For the top 5 results, use gh api repos/{owner}/{repo} --jq '{pushed_at,stargazers_count}' to get update time and GitHub stars. Skip lookup for high-star (≥50) results with precisely matching descriptions. Maximum 3 gh api calls.
Grade labels: 🟢 85+ Strongly Recommended | 🟢 70-84 Recommended | 🟡 55-69 Worth Considering | 🟡 40-54 Marginal | 🔴 <40 Not Recommended
Step 3: Analyze, Select, Install
See references/installation-guide.md for the complete installation workflow.
Quick reference — flow:
- 3a. Display sorted results (5 per page, score + pros/cons)
- 3b. Wait for user reply (number to install,
cfor next page,skipto end) - 3c. Ask installation location (G=global, L=local) — MANDATORY
- 3d. Execute installation (SkillsMP → trust-but-verify, GitHub → fetch the full bundle, not just SKILL.md, then pre-install scan every file). Use
scripts/fetch-skill-bundle.shfor GitHub URLs. - 3e. Post-install verification (file existence, frontmatter, conflict check, bundle completeness, SHA-256 on every installed file)
- 3f. Update
~/.claude/skills/.fetch-metadata.json - 3g. Activate and confirm with user
⚠️ Critical: When installing from GitHub, the skill is its entire directory —
SKILL.mdplusreferences/,scripts/,assets/,templates/,prompts/,data/, etc. Downloading onlySKILL.mdwill produce a broken install for any skill that delegates to those files. Always fetch the complete bundle.
Step 4: Digest the Installed Bundle
An installed skill is a directory, not a single SKILL.md. Many skills split their content across subdirectories — references/ (docs), scripts/ (helpers), assets/, templates/, prompts/, data/, examples/, etc. If you only read SKILL.md you may miss instructions the skill author expects you to load on demand.
- Use Glob to list the full installed tree:
{install-path}/{skill-name}/**/*. - Verify bundle completeness. If SKILL.md references relative paths (
bash scripts/foo.sh,See references/bar.md,Load assets/template.json) and those files are missing, the install is incomplete — re-run the GitHub bundle fetch (seereferences/installation-guide.md§3d). - Read files directly relevant to the current task (check the first 30 lines for relevance). Don't limit this to
references/— the relevant file may live underprompts/,templates/, or another subdir. - Summarize key knowledge for use in subsequent planning.
After completion, output: External skill installed successfully: {skill-name}
Completion Phrases
- Success:
External skill installed successfully: {name} - Skipped:
External skill fetch: user chose to skip installation.
Additional Resources
Rationalization Table and Red Flags are in
references/interaction-patterns.md. Consult when rationalizing skipping steps.
references/interaction-patterns.md— Output templates, user reply handling, security reviewreferences/quality-signals.md— Quality assessment dimensions, lookup methods, ranking algorithmreferences/search-sources.md— Source-specific commands, error handling, deduplication rulesreferences/platform-adapters.md— Cross-platform tool mapping, installation paths, fallback strategiesreferences/installation-guide.md— Complete Step 3 installation workflow (3a-3g)references/local-index.md— Local skill/plugin scan implementation for pre-search deduplicationscripts/fetch-skillhub.sh— SkillHub API search (reads key from~/.claude/skills/.fetch-config.json)scripts/fetch-skills-directory.sh— Skills Directory API search (reads key from config)scripts/fetch-skill-bundle.sh— Download a complete skill bundle (SKILL.md + all sibling files/subdirs) from any GitHubblob/tree/rawURL, preserving directory layout