-
Notifications
You must be signed in to change notification settings - Fork 1.8k
feat(skills): Add skill-finder - Full-featured Agent Skills management tool #520
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR introduces skill-finder, a comprehensive skill for discovering Agent Skills from multiple sources including a curated local index, GitHub API, and web search engines. The implementation provides both PowerShell and Python scripts for cross-platform compatibility, with a pre-populated JSON index containing 35+ skills from 7 different repositories.
Key changes:
- Adds multi-tiered search functionality (local → GitHub → web)
- Implements index management for adding new skill sources
- Provides filtering capabilities by category and source
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
skills/skill-finder/SKILL.md |
Skill definition with front matter, usage guidelines, and documentation; needs minor updates for guidelines compliance |
skills/skill-finder/skill-finder.py |
Python implementation with JSON index loading, GitHub API integration, and web search; has import organization and error handling issues |
skills/skill-finder/skill-finder.ps1 |
PowerShell implementation with equivalent functionality; has URL encoding and error handling issues |
skills/skill-finder/skill-index.json |
Curated index of 35 skills from 7 repositories; contains duplicate skill names |
skills/skill-finder/README.md |
User-facing documentation with bilingual (English/Japanese) quick start guide |
skills/skill-finder/LICENSE |
MIT license file |
skills/skill-finder/SKILL.md
Outdated
| ### 1. Local Index Search | ||
|
|
||
| - Fast, offline-first search from curated index | ||
| - 45+ pre-indexed skills from major repositories |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The documentation states "45+ pre-indexed skills from major repositories" but the actual skill-index.json contains approximately 35 skills. This creates misleading expectations. Please update the count to accurately reflect the current number of skills in the index (e.g., "35+ skills" or keep it as "30+ skills").
| - 45+ pre-indexed skills from major repositories | |
| - 35+ pre-indexed skills from major repositories |
skills/skill-finder/SKILL.md
Outdated
| @@ -0,0 +1,155 @@ | |||
| --- | |||
| name: skill-finder | |||
| description: Toolkit for searching and discovering Agent Skills from local index and external sources. Supports keyword, category, and source filtering with fallback to GitHub API and web search. | |||
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The description field in the front matter should be wrapped in single quotes according to the Agent Skills guide. Please update the description field to use single quotes.
skills/skill-finder/SKILL.md
Outdated
| --- | ||
| name: skill-finder | ||
| description: Toolkit for searching and discovering Agent Skills from local index and external sources. Supports keyword, category, and source filtering with fallback to GitHub API and web search. | ||
| --- | ||
|
|
||
| # Skill Finder | ||
|
|
||
| This skill enables searching and discovering Agent Skills from a curated local index and external sources like GitHub. | ||
|
|
||
| ## When to Use This Skill | ||
|
|
||
| Use this skill when you need to: | ||
|
|
||
| - Find skills for a specific task or domain | ||
| - Discover example skills to learn from | ||
| - Answer "Is there a skill for X?" | ||
| - Explore skill repositories and collections | ||
| - Add new skill sources to your index | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| - PowerShell 7+ OR Python 3.8+ | ||
| - GitHub CLI (`gh`) installed for external search | ||
| - Internet connection for GitHub API and web search | ||
|
|
||
| ## Core Capabilities | ||
|
|
||
| ### 1. Local Index Search | ||
|
|
||
| - Fast, offline-first search from curated index | ||
| - 45+ pre-indexed skills from major repositories | ||
| - Category and source filtering | ||
|
|
||
| ### 2. External Search | ||
|
|
||
| - GitHub Code Search API integration | ||
| - Searches `SKILL.md` files across GitHub | ||
| - Automatic fallback when local results insufficient | ||
|
|
||
| ### 3. Web Search | ||
|
|
||
| - Provides search URLs for manual exploration | ||
| - Google, Bing, and DuckDuckGo links | ||
|
|
||
| ### 4. Index Management | ||
|
|
||
| - Add new repositories as sources | ||
| - Register individual skills | ||
| - Auto-discover skills from repository structure | ||
|
|
||
| ## Usage Examples | ||
|
|
||
| ### Example 1: Basic Search | ||
|
|
||
| ```powershell | ||
| # PowerShell - Search by keyword | ||
| pwsh skill-finder.ps1 -Query "pdf" | ||
| ``` | ||
|
|
||
| ```python | ||
| # Python - Search by keyword | ||
| python skill-finder.py "pdf" | ||
| ``` | ||
|
|
||
| ### Example 2: Filter by Category | ||
|
|
||
| ```powershell | ||
| # PowerShell - List available categories | ||
| pwsh skill-finder.ps1 -ListCategories | ||
|
|
||
| # PowerShell - Search by category | ||
| pwsh skill-finder.ps1 -Category "development" | ||
| ``` | ||
|
|
||
| ```python | ||
| # Python - List and search categories | ||
| python skill-finder.py --list-categories | ||
| python skill-finder.py --category development | ||
| ``` | ||
|
|
||
| ### Example 3: Search with External Fallback | ||
|
|
||
| ```powershell | ||
| # PowerShell - Search local + GitHub | ||
| pwsh skill-finder.ps1 -Query "terraform" -SearchExternal | ||
| ``` | ||
|
|
||
| ```python | ||
| # Python - Search local + GitHub | ||
| python skill-finder.py "terraform" --external | ||
| ``` | ||
|
|
||
| ### Example 4: Add New Source | ||
|
|
||
| ```powershell | ||
| # PowerShell - Add a new repository | ||
| pwsh skill-finder.ps1 -AddSource -RepoUrl "https://github.com/owner/repo" | ||
| ``` | ||
|
|
||
| ```python | ||
| # Python - Add a new repository | ||
| python skill-finder.py --add-source https://github.com/owner/repo | ||
| ``` | ||
|
|
||
| ## Guidelines | ||
|
|
||
| 1. **Start with local search** - Local index is fast and works offline | ||
| 2. **Use categories for discovery** - Categories help narrow down results | ||
| 3. **Enable external search** - Use `-SearchExternal` for comprehensive results | ||
| 4. **Grow your index** - Add useful repositories with `-AddSource` | ||
| 5. **Check multiple sources** - Use `-ListSources` to see available sources | ||
| 6. **Update regularly** - Re-run `-AddSource` to update skill listings | ||
|
|
||
| ## Search Flow | ||
|
|
||
| ``` | ||
| 1. Local Index (fast, offline) | ||
| ↓ not found | ||
| 2. GitHub Code Search API | ||
| ↓ not found | ||
| 3. Web Search URLs | ||
| ↓ found good repo | ||
| 4. Add to index with --add-source | ||
| ``` | ||
|
|
||
| ## Indexed Sources | ||
|
|
||
| | Repository | Description | | ||
| | --------------------------------------------------------------------------------------------- | ------------------------------------- | | ||
| | [anthropics/skills](https://github.com/anthropics/skills) | Official Claude Skills by Anthropic | | ||
| | [github/awesome-copilot](https://github.com/github/awesome-copilot) | Official Copilot resources by GitHub | | ||
| | [obra/superpowers](https://github.com/obra/superpowers) | High-quality skills, agents, commands | | ||
| | [ComposioHQ/awesome-claude-skills](https://github.com/ComposioHQ/awesome-claude-skills) | Curated Claude Skills list | | ||
| | [K-Dense-AI/claude-scientific-skills](https://github.com/K-Dense-AI/claude-scientific-skills) | Scientific research skills | | ||
| | [lackeyjb/playwright-skill](https://github.com/lackeyjb/playwright-skill) | Browser automation skill | | ||
|
|
||
| ## Categories | ||
|
|
||
| | ID | Description | | ||
| | ----------- | ------------------------------------ | | ||
| | development | Software development tools | | ||
| | testing | Testing & QA automation | | ||
| | document | Document processing & conversion | | ||
| | office | Microsoft Office file handling | | ||
| | web | Web development & browser automation | | ||
| | git | Git & version control | | ||
| | agents | AI agents & orchestration | | ||
| | mcp | Model Context Protocol | | ||
|
|
||
| ## Limitations | ||
|
|
||
| - GitHub API rate limits may affect external search | ||
| - Web search only provides URLs (manual browsing required) | ||
| - Some skills may not follow standard SKILL.md format | ||
| - Index updates require manual `-AddSource` calls |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The bundled asset 'skill-index.json' is not referenced in the SKILL.md instructions. According to the Agent Skills guide, all bundled assets should be referenced in the documentation. Please add a mention of the skill-index.json file in the documentation, explaining its purpose and structure.
skills/skill-finder/skill-index.json
Outdated
| "skills": [ | ||
| { | ||
| "name": "algorithmic-art", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/algorithmic-art", | ||
| "categories": ["creative", "art"], | ||
| "description": "Generate algorithmic art" | ||
| }, | ||
| { | ||
| "name": "brand-guidelines", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/brand-guidelines", | ||
| "categories": ["design", "branding"], | ||
| "description": "Create and manage brand guidelines" | ||
| }, | ||
| { | ||
| "name": "canvas-design", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/canvas-design", | ||
| "categories": ["design", "creative"], | ||
| "description": "Create canvas designs" | ||
| }, | ||
| { | ||
| "name": "doc-coauthoring", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/doc-coauthoring", | ||
| "categories": ["document", "collaboration"], | ||
| "description": "Document co-authoring" | ||
| }, | ||
| { | ||
| "name": "docx", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/docx", | ||
| "categories": ["document", "office"], | ||
| "description": "Process Word documents (.docx)" | ||
| }, | ||
| { | ||
| "name": "pdf", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/pdf", | ||
| "categories": ["document"], | ||
| "description": "Process PDF files" | ||
| }, | ||
| { | ||
| "name": "pptx", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/pptx", | ||
| "categories": ["document", "office", "presentation"], | ||
| "description": "Process PowerPoint files (.pptx)" | ||
| }, | ||
| { | ||
| "name": "xlsx", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/xlsx", | ||
| "categories": ["document", "office", "data"], | ||
| "description": "Process Excel files (.xlsx)" | ||
| }, | ||
| { | ||
| "name": "frontend-design", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/frontend-design", | ||
| "categories": ["web", "design", "frontend"], | ||
| "description": "Create frontend designs" | ||
| }, | ||
| { | ||
| "name": "web-artifacts-builder", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/web-artifacts-builder", | ||
| "categories": ["web", "frontend"], | ||
| "description": "Build web artifacts" | ||
| }, | ||
| { | ||
| "name": "webapp-testing", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/webapp-testing", | ||
| "categories": ["web", "testing"], | ||
| "description": "Test web applications" | ||
| }, | ||
| { | ||
| "name": "mcp-builder", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/mcp-builder", | ||
| "categories": ["mcp", "development"], | ||
| "description": "Build MCP servers" | ||
| }, | ||
| { | ||
| "name": "skill-creator", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/skill-creator", | ||
| "categories": ["meta", "development"], | ||
| "description": "Guide for creating new skills" | ||
| }, | ||
| { | ||
| "name": "slack-gif-creator", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/slack-gif-creator", | ||
| "categories": ["creative", "communication"], | ||
| "description": "Create GIFs for Slack" | ||
| }, | ||
| { | ||
| "name": "theme-factory", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/theme-factory", | ||
| "categories": ["design", "theming"], | ||
| "description": "Create themes" | ||
| }, | ||
| { | ||
| "name": "internal-comms", | ||
| "source": "anthropics-skills", | ||
| "path": "skills/internal-comms", | ||
| "categories": ["communication", "business"], | ||
| "description": "Internal communications" | ||
| }, | ||
| { | ||
| "name": "brainstorming", | ||
| "source": "obra-superpowers", | ||
| "path": "skills/brainstorming", | ||
| "categories": ["planning", "ideation"], | ||
| "description": "Conduct brainstorming sessions" | ||
| }, | ||
| { | ||
| "name": "writing-plans", | ||
| "source": "obra-superpowers", | ||
| "path": "skills/writing-plans", | ||
| "categories": ["planning", "documentation"], | ||
| "description": "Write planning documents" | ||
| }, | ||
| { | ||
| "name": "executing-plans", | ||
| "source": "obra-superpowers", | ||
| "path": "skills/executing-plans", | ||
| "categories": ["planning", "execution"], | ||
| "description": "Execute plans" | ||
| }, | ||
| { | ||
| "name": "test-driven-development", | ||
| "source": "obra-superpowers", | ||
| "path": "skills/test-driven-development", | ||
| "categories": ["development", "testing", "tdd"], | ||
| "description": "Test-driven development workflow" | ||
| }, | ||
| { | ||
| "name": "implementing-features", | ||
| "source": "obra-superpowers", | ||
| "path": "skills/implementing-features", | ||
| "categories": ["development"], | ||
| "description": "Implement features" | ||
| }, | ||
| { | ||
| "name": "bug-fixing", | ||
| "source": "obra-superpowers", | ||
| "path": "skills/bug-fixing", | ||
| "categories": ["development", "debugging"], | ||
| "description": "Fix bugs" | ||
| }, | ||
| { | ||
| "name": "refactoring-code", | ||
| "source": "obra-superpowers", | ||
| "path": "skills/refactoring-code", | ||
| "categories": ["development", "refactoring"], | ||
| "description": "Refactor code" | ||
| }, | ||
| { | ||
| "name": "git-commit-best-practices", | ||
| "source": "obra-superpowers", | ||
| "path": "skills/git-commit-best-practices", | ||
| "categories": ["git", "development"], | ||
| "description": "Git commit best practices" | ||
| }, | ||
| { | ||
| "name": "code-review", | ||
| "source": "obra-superpowers", | ||
| "path": "skills/code-review", | ||
| "categories": ["development", "review"], | ||
| "description": "Code review" | ||
| }, | ||
| { | ||
| "name": "writing-documentation", | ||
| "source": "obra-superpowers", | ||
| "path": "skills/writing-documentation", | ||
| "categories": ["documentation"], | ||
| "description": "Write documentation" | ||
| }, | ||
| { | ||
| "name": "webapp-testing", | ||
| "source": "github-awesome-copilot", | ||
| "path": "skills/webapp-testing", | ||
| "categories": ["web", "testing"], | ||
| "description": "Test web applications with Playwright" | ||
| }, | ||
| { | ||
| "name": "scholarly-research", | ||
| "source": "claude-scientific-skills", | ||
| "path": "skills/scholarly-research", | ||
| "categories": ["research", "scientific"], | ||
| "description": "Scholarly research assistance" | ||
| }, | ||
| { | ||
| "name": "data-analysis", | ||
| "source": "claude-scientific-skills", | ||
| "path": "skills/data-analysis", | ||
| "categories": ["data", "scientific"], | ||
| "description": "Data analysis for research" | ||
| }, | ||
| { | ||
| "name": "literature-review", | ||
| "source": "claude-scientific-skills", | ||
| "path": "skills/literature-review", | ||
| "categories": ["research", "documentation"], | ||
| "description": "Conduct literature reviews" | ||
| }, | ||
| { | ||
| "name": "statistical-analysis", | ||
| "source": "claude-scientific-skills", | ||
| "path": "skills/statistical-analysis", | ||
| "categories": ["data", "scientific", "statistics"], | ||
| "description": "Statistical analysis" | ||
| }, | ||
| { | ||
| "name": "playwright-automation", | ||
| "source": "playwright-skill", | ||
| "path": ".", | ||
| "categories": ["web", "testing", "automation"], | ||
| "description": "Browser automation with Playwright" | ||
| }, | ||
| { | ||
| "name": "azure-env-builder", | ||
| "source": "aktsmm-agent-skills", | ||
| "path": "azure-env-builder", | ||
| "categories": ["development", "azure", "infrastructure"], | ||
| "description": "Build Azure environments with Bicep" | ||
| }, | ||
| { | ||
| "name": "skill-creator", | ||
| "source": "aktsmm-agent-skills", | ||
| "path": "skill-creator", | ||
| "categories": ["meta", "development"], | ||
| "description": "Create new Agent Skills" | ||
| }, | ||
| { | ||
| "name": "skill-finder", | ||
| "source": "aktsmm-agent-skills", | ||
| "path": "skill-finder", | ||
| "categories": ["meta", "discovery"], | ||
| "description": "Search and discover Agent Skills" | ||
| } |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Duplicate skill names found in the index. The skill name "webapp-testing" appears twice (from "anthropics-skills" on line 145 and from "github-awesome-copilot" on line 257), and "skill-creator" appears twice (from "anthropics-skills" on line 159 and from "aktsmm-agent-skills" on line 306). While skills from different sources can have the same name, this may cause confusion. Consider using more unique names or adding source information to distinguish them clearly.
skills/skill-finder/skill-finder.py
Outdated
| return | ||
|
|
||
| # Parse owner/repo from URL | ||
| import re |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The import statement for the 're' module is placed inside the function. In Python, it's a best practice to place all imports at the top of the file, not inside functions, unless there's a specific reason for lazy loading. Move the 're' import to the top of the file with the other imports.
| except Exception: | ||
| pass |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Broad exception handling with a bare 'pass' statement silently suppresses all exceptions. This could hide important errors like network issues, permission errors, or unexpected API responses. Consider catching specific exceptions (e.g., subprocess.CalledProcessError, subprocess.TimeoutExpired, FileNotFoundError) and logging or reporting them to help users understand what went wrong.
| except Exception: | |
| pass | |
| except subprocess.TimeoutExpired: | |
| print(f" Warning: timed out while checking skills in '{path}' via GitHub CLI.", file=sys.stderr) | |
| except FileNotFoundError: | |
| print(" Error: GitHub CLI 'gh' not found. Please install it and ensure it is on your PATH.", file=sys.stderr) | |
| break | |
| except Exception as e: | |
| print(f" Warning: unexpected error while checking skills in '{path}': {e}", file=sys.stderr) |
| } | ||
| } | ||
| } | ||
| catch { } |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Empty catch block silently suppresses all exceptions without any error reporting. This could hide important errors like network issues, permission errors, or API failures. Consider catching specific exception types and providing meaningful feedback to users about what went wrong, or at minimum log that an error occurred while checking this path.
| catch { } | |
| catch { | |
| Write-Warning "Failed to query skills from path '$path' in repository '$repoFullName': $($_.Exception.Message)" | |
| } |
| "claude skills SKILL.md github" | ||
| } | ||
|
|
||
| $encodedQuery = [System.Web.HttpUtility]::UrlEncode($searchTerms) |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The Search-Web function uses [System.Web.HttpUtility]::UrlEncode which requires loading the System.Web assembly. This may not be available in all PowerShell environments and could fail. Consider using the more portable [uri]::EscapeDataString() method instead, which is built into PowerShell and doesn't require additional assemblies.
| $encodedQuery = [System.Web.HttpUtility]::UrlEncode($searchTerms) | |
| $encodedQuery = [uri]::EscapeDataString($searchTerms) |
| import argparse | ||
| import json | ||
| import subprocess | ||
| import sys |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Import of 'sys' is not used.
| import sys |
skills/skill-finder/skill-finder.py
Outdated
| except subprocess.TimeoutExpired: | ||
| print(" Warning: GitHub search timed out.") | ||
| except json.JSONDecodeError: | ||
| pass |
Copilot
AI
Dec 24, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
'except' clause does nothing but pass and there is no explanatory comment.
| pass | |
| # Received invalid JSON from GitHub CLI; ignore these results and fall back to empty list. | |
| print(" Warning: Received invalid JSON from GitHub search; ignoring results.") |
|
Hi maintainers! 👋 I noticed that the CONTRIBUTING.md doesn't include guidelines for adding skills to the \skills/\ directory, though the directory exists with \webapp-testing\ as an example. I followed the structure of the existing \webapp-testing\ skill and addressed all Copilot AI review comments in the second commit. A few questions:
Happy to make any adjustments needed. Thanks! |
CI Failure NoteThe Root CauseThe
On Windows: Japanese (ア) comes before Korean (애) EvidenceThis issue exists in the Suggested FixConsider using locale-independent sorting in files.sort((a, b) => a.localeCompare(b, 'en', { sensitivity: 'base' }))The skill-finder files themselves have no issues and are ready for review. 🙏 |
✅ CI FixedRan This confirms the root cause: locale-dependent sorting of non-ASCII characters (Japanese/Korean) in Workaround for Windows Contributors# Use WSL to generate README files
wsl -d Ubuntu-20.04 -- bash -c "cd /mnt/d/path/to/awesome-copilot && npm start"This ensures the generated files match the CI environment (Linux). The skill-finder PR is now ready for review! 🎉 |
67320f9 to
3c4bd71
Compare
|
Closing to create a fresh PR with updated file structure. |
Pull Request Checklist
npm startand verified that README is up to date.Description
Add skill-finder - a full-featured Agent Skills management tool with:
Core Features
#azure #bicepNew Features (v2)
--install)--star/--unstar)--stats)--update)--similar)--check)Implementation
Type of Contribution
Additional Notes
gh), curl