Skip to content

Conversation

@aktsmm
Copy link

@aktsmm aktsmm commented Dec 24, 2025

Pull Request Checklist

  • I have read and followed the CONTRIBUTING.md guidelines.
  • My contribution adds a new file in the correct directory.
  • The file follows the required naming convention.
  • The content is clearly structured and follows the example format.
  • I have tested my contribution.
  • I have run npm start and verified that README is up to date.

Description

Add skill-finder - a full-featured Agent Skills management tool with:

Core Features

  • 🔍 Local Index Search - Fast offline search from 35+ pre-indexed skills
  • 🏷️ Tag Search - Search by tags like #azure #bicep
  • 🌐 GitHub Search - Fallback to GitHub Code Search API

New Features (v2)

  • 📦 Install Skills - Download skills to local directory (--install)
  • Star Favorites - Mark and manage favorite skills (--star/--unstar)
  • 📊 Statistics - View index stats and category breakdown (--stats)
  • 🔄 Auto Update - Update all sources from GitHub (--update)
  • 💡 Similar Skills - Get recommendations based on categories (--similar)
  • Dependency Check - Verify tool dependencies (--check)

Implementation

  • Python (skill-finder.py) - ~600 lines
  • PowerShell (skill-finder.ps1) - ~650 lines
  • Pre-indexed - 35+ skills from 7 popular repositories

Type of Contribution

  • New feature
  • Bug fix
  • Documentation
  • Other (please specify): New skill file

Additional Notes

  • Bilingual documentation (English/Japanese)
  • MIT License, Author: yamapan (@aktsmm)
  • Requires: GitHub CLI (gh), curl

Copilot AI review requested due to automatic review settings December 24, 2025 09:01
Copy link
Contributor

Copilot AI left a 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

### 1. Local Index Search

- Fast, offline-first search from curated index
- 45+ pre-indexed skills from major repositories
Copy link

Copilot AI Dec 24, 2025

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").

Suggested change
- 45+ pre-indexed skills from major repositories
- 35+ pre-indexed skills from major repositories

Copilot uses AI. Check for mistakes.
@@ -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.
Copy link

Copilot AI Dec 24, 2025

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.

Copilot generated this review using guidance from repository custom instructions.
Comment on lines 1 to 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.
---

# 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
Copy link

Copilot AI Dec 24, 2025

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.

Copilot generated this review using guidance from repository custom instructions.
Comment on lines 73 to 318
"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"
}
Copy link

Copilot AI Dec 24, 2025

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.

Copilot uses AI. Check for mistakes.
return

# Parse owner/repo from URL
import re
Copy link

Copilot AI Dec 24, 2025

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.

Copilot uses AI. Check for mistakes.
Comment on lines 205 to 276
except Exception:
pass
Copy link

Copilot AI Dec 24, 2025

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.

Suggested change
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)

Copilot uses AI. Check for mistakes.
}
}
}
catch { }
Copy link

Copilot AI Dec 24, 2025

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.

Suggested change
catch { }
catch {
Write-Warning "Failed to query skills from path '$path' in repository '$repoFullName': $($_.Exception.Message)"
}

Copilot uses AI. Check for mistakes.
"claude skills SKILL.md github"
}

$encodedQuery = [System.Web.HttpUtility]::UrlEncode($searchTerms)
Copy link

Copilot AI Dec 24, 2025

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.

Suggested change
$encodedQuery = [System.Web.HttpUtility]::UrlEncode($searchTerms)
$encodedQuery = [uri]::EscapeDataString($searchTerms)

Copilot uses AI. Check for mistakes.
import argparse
import json
import subprocess
import sys
Copy link

Copilot AI Dec 24, 2025

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.

Suggested change
import sys

Copilot uses AI. Check for mistakes.
except subprocess.TimeoutExpired:
print(" Warning: GitHub search timed out.")
except json.JSONDecodeError:
pass
Copy link

Copilot AI Dec 24, 2025

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.

Suggested change
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.")

Copilot uses AI. Check for mistakes.
@aktsmm
Copy link
Author

aktsmm commented Dec 24, 2025

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:

  1. Is there any additional format/documentation I should follow for skills?
  2. Should I run
    pm start\ to update the README? (I wasn't sure if it applies to skills)

Happy to make any adjustments needed. Thanks!

@aktsmm aktsmm changed the title feat(skills): Add skill-finder - Search Agent Skills from local index, GitHub, and web feat(skills): Add skill-finder - Full-featured Agent Skills management tool Dec 24, 2025
@aktsmm
Copy link
Author

aktsmm commented Dec 24, 2025

CI Failure Note

The validate-readme CI check is failing due to a pre-existing issue unrelated to this PR.

Root Cause

The update-readme.mjs script sorts instruction files alphabetically, but the sort order for non-ASCII characters (Japanese/Korean) differs between Windows and Linux due to locale settings:

  • csharp-ja.instructions.md (C# アプリケーション開発)
  • csharp-ko.instructions.md (C# 애플리케이션 개발 가이드)

On Windows: Japanese (ア) comes before Korean (애)
On Linux (CI): The order is reversed

Evidence

This issue exists in the main branch and is not introduced by skill-finder changes. The diff only shows reordering of these two existing Japanese/Korean instruction entries.

Suggested Fix

Consider using locale-independent sorting in update-readme.mjs, e.g.:

files.sort((a, b) => a.localeCompare(b, 'en', { sensitivity: 'base' }))

The skill-finder files themselves have no issues and are ready for review. 🙏

@aktsmm
Copy link
Author

aktsmm commented Dec 24, 2025

✅ CI Fixed

Ran npm start in WSL (Ubuntu) instead of Windows PowerShell, and the CI now passes.

This confirms the root cause: locale-dependent sorting of non-ASCII characters (Japanese/Korean) in update-readme.mjs.

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! 🎉

@aktsmm
Copy link
Author

aktsmm commented Dec 24, 2025

Closing to create a fresh PR with updated file structure.

@aktsmm aktsmm closed this Dec 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant