inm-skill-finder
npx skills add https://github.com/innomad-io/inm-skill-finder --skill inm-skill-finder
Agent 安装分布
Skill 文档
Skill Finder
Search and install Claude Code skills from multiple sources.
Workflow
Follow these steps in order when the user invokes this skill.
Step 1: Detect Language and Parse Keywords
Take the search keywords from $ARGUMENTS.
- If no keywords provided, use AskUserQuestion to ask the user what kind of skill they’re looking for.
- Detect the primary language of the user’s keywords:
- If keywords contain CJK characters (Chinese/Japanese/Korean), primary language is CJK
- If keywords contain non-ASCII characters (e.g., Spanish, French, German), detect that language
- Otherwise, primary language is English
- Store the detected language for later use in result presentation (Step 3)
- If keywords are not in English, translate them to English while keeping the originals. Generate 2-4 English keyword variants for broader matching.
- Example: “æ°æ®åºç®¡ç” â detected: Chinese â keywords: [“database”, “db”, “management”, “sql”]
- Example: “æä»¶å¤ç” â detected: Chinese â keywords: [“file”, “processing”, “document”, “handler”]
- Example: “Slack é祔 â detected: Chinese â keywords: [“slack”, “notification”, “messaging”]
- If keywords are in English, still consider adding 1-2 synonyms/related terms.
- Remove common stop words (automation, tool, plugin, skill) from matching but keep them for display.
Step 2: Search Multiple Sources
Run the following searches in parallel to maximize speed.
Source A: skills.sh Leaderboard (via skills CLI)
Run for each primary keyword (up to 3):
npx skills find <keyword> 2>&1 | head -60
Parse the output to extract:
- Skill identifier:
owner/repo@skill-name - Install count
- URL
Source B: GitHub Skill Registries (via search script)
Locate and run the TypeScript search script included with this skill (runs via npx -y bun):
SKILL_DIR=$(find ~/.claude/skills .claude/skills -name "search_github.ts" -path "*/inm-skill-finder/*" -exec dirname {} \; 2>/dev/null | head -1)
SKILL_DIR=$(dirname "$SKILL_DIR") # go up from scripts/ to skill root
npx -y bun run "$SKILL_DIR/scripts/search_github.ts" keyword1 keyword2 --descriptions
This searches all enabled registries. Registries are configured in:
- config.yaml (recommended) â unified YAML configuration with simplified registry format
- registries.json + registries.local.json (legacy) â still supported for backward compatibility
Preferred: Edit config.yaml directly
Users can simply add GitHub repo URLs to config.yaml:
registries:
- url: https://github.com/your-org/your-skills
enabled: true
- url: owner/repo # Short format also works
enabled: true
Copy config.example.yaml to config.yaml to get started.
Alternative: CLI commands (creates registries.local.json):
# List all registries and their status
npx -y bun run "$SKILL_DIR/scripts/search_github.ts" --list-registries
# Add a custom registry
npx -y bun run "$SKILL_DIR/scripts/search_github.ts" --add-registry owner/repo --name "My Skills"
# Remove a custom registry
npx -y bun run "$SKILL_DIR/scripts/search_github.ts" --remove-registry owner/repo
# Disable/enable a registry
npx -y bun run "$SKILL_DIR/scripts/search_github.ts" --disable-registry composio
npx -y bun run "$SKILL_DIR/scripts/search_github.ts" --enable-registry composio
If the script is not found, fall back to the skills find CLI command from Source A.
Source C: General Web Search (supplementary)
Use WebSearch to find additional skills:
[keyword] claude code skill site:github.com
Extract any GitHub repos that contain SKILL.md files and are relevant.
Step 3: Deduplicate and Present Results
- Merge results from all sources, removing duplicates (same skill name from same repo).
- Sort by relevance: exact matches first, then by install count (if available), then by fuzzy score.
- Localize the presentation based on the detected language from Step 1:
- If user used Chinese keywords: Present UI text in Chinese (table headers, prompts, instructions)
- If user used other non-English keywords: Present in that language if you can, otherwise English
- If user used English keywords: Present in English (default)
- Skill names and descriptions remain in their original language (typically English from GitHub)
- Present results in a clear numbered table format:
Example (Chinese input):
## æç´¢ç»æï¼"æ°æ®åºç®¡ç" â [database, db, management, sql]
| # | æè½åç§° | æ¥æº | å®è£
æ° | æè¿° |
|----|----------------------------|-------------------|----------|----------------------|
| 1 | postgres-automation | skills.sh | 5.2K | Automate Postgres... |
| 2 | mysql-manager | awesome-claude... | - | MySQL management... |
Example (English input):
## Search Results for: database management â [database, db, management, sql]
| # | Skill Name | Source | Installs | Description |
|----|----------------------------|-------------------|----------|----------------------|
| 1 | postgres-automation | skills.sh | 5.2K | Automate Postgres... |
| 2 | mysql-manager | awesome-claude... | - | MySQL management... |
- Use AskUserQuestion with
multiSelect: trueto let the user choose which skills to install.- List top 4 options (or fewer if less results)
- Each option:
"[name] (from [source])" - Question text should be localized based on detected language
Step 4: Check User Preferences and Ask Installation Options
FIRST: Check if user has predefined preferences in config.yaml:
SKILL_DIR=$(find ~/.claude/skills .claude/skills -name "search_github.ts" -path "*/inm-skill-finder/*" -exec dirname {} \; 2>/dev/null | head -1)
SKILL_DIR=$(dirname "$SKILL_DIR")
PREFS=$(npx -y bun run "$SKILL_DIR/scripts/search_github.ts" --show-preferences 2>/dev/null)
Parse the JSON output to extract install_method and install_location:
- If
install_methodis not ‘ask’: Use that method directly, skip Question 1 - If
install_locationis not ‘ask’: Use that location directly, skip Question 2 - If both are ‘ask’ or undefined: Ask both questions
If questions are needed, use AskUserQuestion and localize based on detected language from Step 1:
Question 1 – Installation Method (ask only if preference is ‘ask’):
npx skills add(Recommended) â Uses the skills.sh CLI tool. Easiest and most standard method. Works for skills.sh listings and GitHub repos.- Direct download â Downloads SKILL.md (and supporting files) directly via curl. Lightweight, no extra tools needed.
git cloneâ Clones the full repository, then copies the skill directory. Best for skills with many supporting files.
Question 2 – Installation Level (ask only if preference is ‘ask’):
- Project-level (Recommended) â Installs to
.claude/skills/in the current project. Only available in this project. - User-level (global) â Installs to
~/.claude/skills/. Available across all your projects.
Example localized questions (Chinese):
- Question 1: “éæ©å®è£ æ¹å¼” with options like “npx skills addï¼æ¨èï¼”, “ç´æ¥ä¸è½½”, “git clone”
- Question 2: “éæ©å®è£ 级嫔 with options like “项ç®çº§å«ï¼æ¨èï¼”, “ç¨æ·çº§å«ï¼å ¨å±ï¼”
Step 5: Execute Installation
Based on user choices, execute the appropriate installation command.
Method: npx skills add
# For skills.sh listings (owner/repo@skill format):
npx skills add owner/repo --skill skill-name # project-level
npx skills add owner/repo --skill skill-name -g # user-level (global)
# For standalone repos:
npx skills add owner/repo # project-level
npx skills add owner/repo -g # user-level (global)
For skills from ComposioHQ/awesome-claude-skills:
npx skills add ComposioHQ/awesome-claude-skills --skill skill-name
npx skills add ComposioHQ/awesome-claude-skills --skill skill-name -g
Method: Direct Download
# Determine target directory
TARGET="$HOME/.claude/skills/SKILL_NAME" # user-level
TARGET=".claude/skills/SKILL_NAME" # project-level
mkdir -p "$TARGET"
# Download SKILL.md
curl -sL "RAW_SKILL_URL" -o "$TARGET/SKILL.md"
# If there are additional files (scripts/, resources/), download those too
# Check the repo for extra files first
Method: git clone
# Determine target directory
TARGET="$HOME/.claude/skills/SKILL_NAME" # user-level
TARGET=".claude/skills/SKILL_NAME" # project-level
TEMP=$(mktemp -d)
git clone --depth 1 --filter=blob:none --sparse \
"https://github.com/OWNER/REPO.git" "$TEMP/repo"
cd "$TEMP/repo"
git sparse-checkout set "SKILL_PATH"
mkdir -p "$TARGET"
cp -r "SKILL_PATH/." "$TARGET/"
rm -rf "$TEMP"
Step 6: Verify and Report
After installation:
- Verify the SKILL.md file exists at the target location.
- Read the installed SKILL.md and display:
- Skill name
- Description
- How to invoke it (e.g.,
/skill-nameor automatic invocation)
- If
user-invocableis notfalsein the skill’s frontmatter, inform the user they can invoke it with/skill-name. - If the skill has
requiresin frontmatter (e.g., MCP servers), warn the user about prerequisites. - Localize the completion message based on the detected language from Step 1:
- Chinese user â report in Chinese
- Other language user â report in that language or English
- English user â report in English
Error Handling
- No results found: Suggest the user try different keywords, broader terms, or browse https://skills.sh directly.
- GitHub API rate limit: Advise setting
GITHUB_TOKENenvironment variable. Fall back toskills findCLI. - Installation failure: Show the error, suggest alternative installation method.
- Network issues: Suggest checking internet connection and trying again.
Notes
- The
skillsCLI (npx skills) is the primary tool from https://skills.sh and supports search, install, update, and removal. - The search script uses a configurable registry system (
registries.json+registries.local.json) with 6 default repos including ComposioHQ, Anthropic, VoltAgent, Antigravity, and more. - READMEs are fetched via
raw.githubusercontent.com(no API quota consumed). If a README can’t be parsed, the script falls back to the GitHub Trees API. - Search matches against both skill names and descriptions, so searching “email” will find skills like
sendgrid-automationwhose description mentions email. - Skills installed at project-level (
.claude/skills/) are auto-discovered by Claude Code with live reload. - Skills installed at user-level (
~/.claude/skills/) work across all projects.