A Deno script that automatically discovers and mirrors AI agent skill repositories from GitHub.
agent-skills-mirror runs GitHub search queries to find repositories that contain AI agent skills, coding assistant instructions, Claude skills, Copilot instructions, MCP tool integrations, and related configuration files. For each discovered repository it performs a sparse checkout — pulling only the specific files relevant to skill/prompt/instruction consumption — and writes the results to a local mirrors/ directory.
The AI coding assistant ecosystem (Claude Code, GitHub Copilot, Cursor, Continue, Windsurf, MCP tools, etc.) has produced hundreds of high-signal skill and instruction repositories scattered across GitHub. This project aggregates them into one place so that:
The search queries target repositories that contain:
SKILL.md, skills/**, skill/** files for Claude Code, GitHub Copilot agent mode, or custom coding agents..github/instructions/**, .github/prompts/**, copilot-instructions.md.CLAUDE.md, AGENTS.md, GEMINI.md, LLMs.txt..cursorrules, .cursor/rules/**, .windsurfrules, .continue/**..mcp/**, mcp/** directories.prompts/**, prompt/**.Non-GitHub sources (e.g. docs.stripe.com, open.feishu.cn, smithery.ai) are not indexed by this tool and should be consulted separately.
deno run -A src/main.ts
# Using gh CLI
GH_TOKEN=$(gh auth token) deno run -A src/main.ts
# Or exporting directly
export GH_TOKEN=ghp_...
deno run -A src/main.ts
# GITHUB_TOKEN is also accepted
export GITHUB_TOKEN=ghp_...
deno run -A src/main.ts
Without a token, GitHub search is unauthenticated and heavily rate-limited (10 requests/min). With a token the limit is 30 requests/min for search.
deno task mirror
deno task test
MIRROR_CONCURRENCY=4 deno run -A src/main.ts
Default concurrency is 8 parallel repo checkouts.
Mirrored files are written under mirrors/repos/<owner>@<name>/ — for example:
mirrors/repos/vercel-labs@agent-skills/
skills/
vercel-v0/SKILL.md
.github/prompts/
...
manifest.json
Each directory contains:
manifest.json describing the repo, ref, patterns used, and file index.The cache/ directory holds bare git clones and per-repo state files used to avoid redundant fetches between runs.
Instead of cloning full repositories, the tool uses git sparse-checkout to pull only the files that match the configured include patterns. The global patterns are:
| Pattern | Purpose |
|---|---|
**/AGENTS.md, **/CLAUDE.md, **/GEMINI.md | Top-level agent/LLM config |
**/SKILL.md, **/skills.md | Skill definition files |
**/LLMs.txt, **/llms.txt | LLM compatibility hints |
**/copilot-instructions.md | Copilot instruction files |
**/.cursorrules, **/.cursor/rules/** | Cursor editor rules |
**/.windsurfrules | Windsurf editor rules |
**/.continue/** | Continue extension config |
.github/instructions/**, .github/prompts/** | GitHub Copilot agent instructions |
.agents/**, agents/** | Agent-level instruction dirs |
skills/**, skill/** | Skill directories |
prompts/**, prompt/** | Prompt directories |
.cursor/**, .continue/**, .mcp/**, mcp/** | Tool-specific config |
Additionally, the markdown-follow feature (follow.linkedFromMarkdown: true) discovers additional files linked from Markdown documents and adds them to the checkout.
The tool keeps a persistent bare-clone cache at cache/repos/ and per-repo state files at cache/state/. On each run:
reuse-if-current mode).mirrors/.This means reruns are fast — only changed or newly-discovered repos are re-exported. To force a full refresh, set materialization.mode to "always-refresh" in the config, or delete cache/.
Search queries are defined in REAL_SEARCH_QUERIES in src/main.ts. Each query is a standard GitHub repository search query string.
Guidelines:
OR, AND, NOT) per query.stars:>N to filter noise. Tune N based on the target population.pushed:>YYYY-MM-DD to exclude stale repositories.fork:false archived:false to exclude forks and archived repos.in:name to target repos where the keyword appears in the repo name.topic:X to target repos with a specific GitHub topic label.Example of adding a new query:
// Find repos with "my-skill" in the name
"my-skill in:name stars:>1 pushed:>2024-01-01 fork:false archived:false",
fork:false archived:false is recommended but means forked skill collections are skipped.A coverage test is included in src/eval-coverage.test.ts. It compares a reference target list of known high-signal repositories against the set of currently mirrored repositories.
deno task test
The test reports:
The coverage report is informational — it does not assert a specific threshold because coverage depends on running the mirror with a live GitHub token first.
To run coverage evaluation without running all tests:
deno test src/eval-coverage.test.ts
You can also check coverage manually:
# List all currently mirrored repos
ls mirrors/repos/ | sed 's/@/\//'
# Compare against a reference list
comm -23 <(sort reference.txt) <(ls mirrors/repos/ | sed 's/@/\//;s/.*/\L&/' | sort)
# 1. Clone the repo
git clone https://github.com/gabrielmoreira/agent-skills-mirror
cd agent-skills-mirror
# 2. Run the mirror with your GitHub token
GH_TOKEN=$(gh auth token) deno run -A src/main.ts
# 3. Browse the mirrored files
ls mirrors/repos/
# 4. Check a specific skill repo
cat mirrors/repos/vercel-labs@agent-skills/skills/vercel-v0/SKILL.md
# 5. Run coverage evaluation
deno task test
The workflow runs nightly via GitHub Actions (.github/workflows/mirror.yml) and commits updated mirrors to the main branch automatically.
Python
49.6%
JavaScript
15.2%
Stata
6.7%
HTML
4.9%
Shell
4.3%
TypeScript
3.9%
TeX
3.0%
GDScript
2.9%
Kotlin
2.3%
Go
1.7%
A Deno script that automatically discovers and mirrors AI agent skill repositories from GitHub.
agent-skills-mirror runs GitHub search queries to find repositories that contain AI agent skills, coding assistant instructions, Claude skills, Copilot instructions, MCP tool integrations, and related configuration files. For each discovered repository it performs a sparse checkout — pulling only the specific files relevant to skill/prompt/instruction consumption — and writes the results to a local mirrors/ directory.
The AI coding assistant ecosystem (Claude Code, GitHub Copilot, Cursor, Continue, Windsurf, MCP tools, etc.) has produced hundreds of high-signal skill and instruction repositories scattered across GitHub. This project aggregates them into one place so that:
The search queries target repositories that contain:
SKILL.md, skills/**, skill/** files for Claude Code, GitHub Copilot agent mode, or custom coding agents..github/instructions/**, .github/prompts/**, copilot-instructions.md.CLAUDE.md, AGENTS.md, GEMINI.md, LLMs.txt..cursorrules, .cursor/rules/**, .windsurfrules, .continue/**..mcp/**, mcp/** directories.prompts/**, prompt/**.Non-GitHub sources (e.g. docs.stripe.com, open.feishu.cn, smithery.ai) are not indexed by this tool and should be consulted separately.
deno run -A src/main.ts
# Using gh CLI
GH_TOKEN=$(gh auth token) deno run -A src/main.ts
# Or exporting directly
export GH_TOKEN=ghp_...
deno run -A src/main.ts
# GITHUB_TOKEN is also accepted
export GITHUB_TOKEN=ghp_...
deno run -A src/main.ts
Without a token, GitHub search is unauthenticated and heavily rate-limited (10 requests/min). With a token the limit is 30 requests/min for search.
deno task mirror
deno task test
MIRROR_CONCURRENCY=4 deno run -A src/main.ts
Default concurrency is 8 parallel repo checkouts.
Mirrored files are written under mirrors/repos/<owner>@<name>/ — for example:
mirrors/repos/vercel-labs@agent-skills/
skills/
vercel-v0/SKILL.md
.github/prompts/
...
manifest.json
Each directory contains:
manifest.json describing the repo, ref, patterns used, and file index.The cache/ directory holds bare git clones and per-repo state files used to avoid redundant fetches between runs.
Instead of cloning full repositories, the tool uses git sparse-checkout to pull only the files that match the configured include patterns. The global patterns are:
| Pattern | Purpose |
|---|---|
**/AGENTS.md, **/CLAUDE.md, **/GEMINI.md | Top-level agent/LLM config |
**/SKILL.md, **/skills.md | Skill definition files |
**/LLMs.txt, **/llms.txt | LLM compatibility hints |
**/copilot-instructions.md | Copilot instruction files |
**/.cursorrules, **/.cursor/rules/** | Cursor editor rules |
**/.windsurfrules | Windsurf editor rules |
**/.continue/** | Continue extension config |
.github/instructions/**, .github/prompts/** | GitHub Copilot agent instructions |
.agents/**, agents/** | Agent-level instruction dirs |
skills/**, skill/** | Skill directories |
prompts/**, prompt/** | Prompt directories |
.cursor/**, .continue/**, .mcp/**, mcp/** | Tool-specific config |
Additionally, the markdown-follow feature (follow.linkedFromMarkdown: true) discovers additional files linked from Markdown documents and adds them to the checkout.
The tool keeps a persistent bare-clone cache at cache/repos/ and per-repo state files at cache/state/. On each run:
reuse-if-current mode).mirrors/.This means reruns are fast — only changed or newly-discovered repos are re-exported. To force a full refresh, set materialization.mode to "always-refresh" in the config, or delete cache/.
Search queries are defined in REAL_SEARCH_QUERIES in src/main.ts. Each query is a standard GitHub repository search query string.
Guidelines:
OR, AND, NOT) per query.stars:>N to filter noise. Tune N based on the target population.pushed:>YYYY-MM-DD to exclude stale repositories.fork:false archived:false to exclude forks and archived repos.in:name to target repos where the keyword appears in the repo name.topic:X to target repos with a specific GitHub topic label.Example of adding a new query:
// Find repos with "my-skill" in the name
"my-skill in:name stars:>1 pushed:>2024-01-01 fork:false archived:false",
fork:false archived:false is recommended but means forked skill collections are skipped.A coverage test is included in src/eval-coverage.test.ts. It compares a reference target list of known high-signal repositories against the set of currently mirrored repositories.
deno task test
The test reports:
The coverage report is informational — it does not assert a specific threshold because coverage depends on running the mirror with a live GitHub token first.
To run coverage evaluation without running all tests:
deno test src/eval-coverage.test.ts
You can also check coverage manually:
# List all currently mirrored repos
ls mirrors/repos/ | sed 's/@/\//'
# Compare against a reference list
comm -23 <(sort reference.txt) <(ls mirrors/repos/ | sed 's/@/\//;s/.*/\L&/' | sort)
# 1. Clone the repo
git clone https://github.com/gabrielmoreira/agent-skills-mirror
cd agent-skills-mirror
# 2. Run the mirror with your GitHub token
GH_TOKEN=$(gh auth token) deno run -A src/main.ts
# 3. Browse the mirrored files
ls mirrors/repos/
# 4. Check a specific skill repo
cat mirrors/repos/vercel-labs@agent-skills/skills/vercel-v0/SKILL.md
# 5. Run coverage evaluation
deno task test
The workflow runs nightly via GitHub Actions (.github/workflows/mirror.yml) and commits updated mirrors to the main branch automatically.
Python
49.6%
JavaScript
15.2%
Stata
6.7%
HTML
4.9%
Shell
4.3%
TypeScript
3.9%
TeX
3.0%
GDScript
2.9%
Kotlin
2.3%
Go
1.7%