Merge pull request #750 from github/plugin-migration

refactor: migrate plugins to Claude Code spec format
This commit is contained in:
Aaron Powell
2026-02-19 15:11:15 +11:00
committed by GitHub
245 changed files with 921 additions and 1836 deletions

View File

@@ -2,9 +2,9 @@ name: Check Line Endings
on:
push:
branches: [main]
branches: [staged]
pull_request:
branches: [main]
branches: [staged]
permissions:
contents: read

View File

@@ -0,0 +1,129 @@
name: Check Plugin Structure
on:
pull_request:
branches: [staged]
paths:
- "plugins/**"
permissions:
contents: read
pull-requests: write
jobs:
check-materialized-files:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check for materialized files in plugin directories
uses: actions/github-script@v7
with:
script: |
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const pluginsDir = 'plugins';
const errors = [];
if (!fs.existsSync(pluginsDir)) {
console.log('No plugins directory found');
return;
}
const pluginDirs = fs.readdirSync(pluginsDir, { withFileTypes: true })
.filter(d => d.isDirectory())
.map(d => d.name);
for (const plugin of pluginDirs) {
const pluginPath = path.join(pluginsDir, plugin);
// Check for materialized agent/command/skill files
for (const subdir of ['agents', 'commands', 'skills']) {
const subdirPath = path.join(pluginPath, subdir);
if (!fs.existsSync(subdirPath)) continue;
const stat = fs.lstatSync(subdirPath);
if (stat.isSymbolicLink()) {
errors.push(`${pluginPath}/${subdir} is a symlink — symlinks should not exist in plugin directories`);
continue;
}
if (stat.isDirectory()) {
const files = fs.readdirSync(subdirPath);
if (files.length > 0) {
errors.push(
`${pluginPath}/${subdir}/ contains ${files.length} file(s): ${files.join(', ')}. ` +
`Plugin directories on staged should only contain .github/plugin/plugin.json and README.md. ` +
`Agent, command, and skill files are materialized automatically during publish to main.`
);
}
}
}
// Check for symlinks anywhere in the plugin directory
try {
const allFiles = execSync(`find "${pluginPath}" -type l`, { encoding: 'utf-8' }).trim();
if (allFiles) {
errors.push(`${pluginPath} contains symlinks:\n${allFiles}`);
}
} catch (e) {
// find returns non-zero if no matches, ignore
}
}
if (errors.length > 0) {
const prBranch = context.payload.pull_request.head.ref;
const prRepo = context.payload.pull_request.head.repo.full_name;
const isFork = context.payload.pull_request.head.repo.fork;
const body = [
'⚠️ **Materialized files or symlinks detected in plugin directories**',
'',
'Plugin directories on the `staged` branch should only contain:',
'- `.github/plugin/plugin.json` (metadata)',
'- `README.md`',
'',
'Agent, command, and skill files are copied in automatically when publishing to `main`.',
'',
'**Issues found:**',
...errors.map(e => `- ${e}`),
'',
'---',
'',
'### How to fix',
'',
'It looks like your branch may be based on `main` (which contains materialized files). Here are two options:',
'',
'**Option 1: Rebase onto `staged`** (recommended if you have few commits)',
'```bash',
`git fetch origin staged`,
`git rebase --onto origin/staged origin/main ${prBranch}`,
`git push --force-with-lease`,
'```',
'',
'**Option 2: Remove the extra files manually**',
'```bash',
'# Remove materialized files from plugin directories',
'find plugins/ -mindepth 2 -maxdepth 2 -type d \\( -name agents -o -name commands -o -name skills \\) -exec rm -rf {} +',
'# Remove any symlinks',
'find plugins/ -type l -delete',
'git add -A && git commit -m "fix: remove materialized plugin files"',
'git push',
'```',
].join('\n');
await github.rest.pulls.createReview({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
event: 'REQUEST_CHANGES',
body
});
core.setFailed('Plugin directories contain materialized files or symlinks that should not be on staged');
} else {
console.log('✅ All plugin directories are clean');
}

35
.github/workflows/check-pr-target.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
name: Check PR Target Branch
on:
pull_request:
branches: [main]
types: [opened]
permissions:
pull-requests: write
jobs:
check-target:
runs-on: ubuntu-latest
steps:
- name: Reject PR targeting main
uses: actions/github-script@v7
with:
script: |
const body = [
'⚠️ **This PR targets `main`, but PRs should target `staged`.**',
'',
'The `main` branch is auto-published from `staged` and should not receive direct PRs.',
'Please close this PR and re-open it against the `staged` branch.',
'',
'You can change the base branch using the **Edit** button at the top of this PR,',
'or run: `gh pr edit ${{ github.event.pull_request.number }} --base staged`'
].join('\n');
await github.rest.pulls.createReview({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.issue.number,
event: 'REQUEST_CHANGES',
body
});

View File

@@ -2,9 +2,9 @@ name: Check Spelling
on:
push:
branches: [main]
branches: [staged]
pull_request:
branches: [main]
branches: [staged]
permissions:
contents: read

53
.github/workflows/publish.yml vendored Normal file
View File

@@ -0,0 +1,53 @@
name: Publish to main
on:
push:
branches: [staged]
concurrency:
group: publish-to-main
cancel-in-progress: true
permissions:
contents: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout staged branch
uses: actions/checkout@v4
with:
ref: staged
fetch-depth: 0
- name: Extract Node version from package.json
id: node-version
run: |
NODE_VERSION=$(jq -r '.engines.node // "22"' package.json)
echo "version=${NODE_VERSION}" >> "$GITHUB_OUTPUT"
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ steps.node-version.outputs.version }}
- name: Install dependencies
run: npm ci
- name: Materialize plugin files
run: node eng/materialize-plugins.mjs
- name: Build generated files
run: npm run build
- name: Fix line endings
run: bash scripts/fix-line-endings.sh
- name: Publish to main
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add -A
git commit -m "chore: publish from staged [skip ci]" --allow-empty
git push origin HEAD:main --force

View File

@@ -2,6 +2,7 @@ name: Validate README.md
on:
pull_request:
branches: [staged]
types: [opened, synchronize, reopened]
paths:
- "instructions/**"

View File

@@ -9,7 +9,7 @@ The Awesome GitHub Copilot repository is a community-driven collection of custom
- **Instructions** - Coding standards and best practices applied to specific file patterns
- **Skills** - Self-contained folders with instructions and bundled resources for specialized tasks
- **Hooks** - Automated workflows triggered by specific events during development
- **Plugins** - Installable packages that group related agents, prompts, and skills around specific themes
- **Plugins** - Installable packages that group related agents, commands, and skills around specific themes
## Repository Structure
@@ -101,7 +101,7 @@ All agent files (`*.agent.md`), prompt files (`*.prompt.md`), and instruction fi
- plugin.json must have `name` field (matching the folder name)
- plugin.json must have `description` field (describing the plugin's purpose)
- plugin.json must have `version` field (semantic version, e.g., "1.0.0")
- Plugin folders can contain any combination of agents, prompts, instructions, skills, and hooks
- Plugin content is defined declaratively in plugin.json using Claude Code spec fields (`agents`, `commands`, `skills`). Source files live in top-level directories and are materialized into plugins by CI.
- The `marketplace.json` file is automatically generated from all plugins during build
- Plugins are discoverable and installable via GitHub Copilot CLI
@@ -135,7 +135,7 @@ When adding a new agent, prompt, instruction, skill, hook, or plugin:
**For Plugins:**
1. Run `npm run plugin:create -- --name <plugin-name>` to scaffold a new plugin
2. Add agents, prompts, skills, or hooks to the plugin folder
2. Define agents, commands, and skills in `plugin.json` using Claude Code spec fields
3. Edit the generated `plugin.json` with your metadata
4. Run `npm run plugin:validate` to validate the plugin structure
5. Run `npm run build` to update README.md and marketplace.json
@@ -179,6 +179,8 @@ Before committing:
When creating a pull request:
> **Important:** All pull requests should target the **`staged`** branch, not `main`.
1. **README updates**: New files should automatically be added to the README when you run `npm run build`
2. **Front matter validation**: Ensure all markdown files have the required front matter fields
3. **File naming**: Verify all new files follow the lower-case-with-hyphens naming convention
@@ -246,9 +248,8 @@ For plugins (plugins/*/):
- [ ] `plugin.json` has non-empty `description` field
- [ ] `plugin.json` has `version` field (semantic version, e.g., "1.0.0")
- [ ] Directory name is lower case with hyphens
- [ ] If `tags` is present, it is an array of lowercase hyphenated strings
- [ ] If `items` is present, each item has `path` and `kind` fields
- [ ] The `kind` field value is one of: `prompt`, `agent`, `instruction`, `skill`, or `hook`
- [ ] If `keywords` is present, it is an array of lowercase hyphenated strings
- [ ] If `agents`, `commands`, or `skills` arrays are present, each entry is a valid relative path
- [ ] The plugin does not reference non-existent files
- [ ] Run `npm run build` to verify marketplace.json is updated correctly

View File

@@ -2,31 +2,6 @@
Thank you for your interest in contributing to the Awesome GitHub Copilot repository! We welcome contributions from the community to help expand our collection of custom instructions and prompts.
## Prerequisites
### Windows Users: Enable Symlinks
This repository uses symbolic links for plugins. On Windows, you need to enable symlink support before cloning:
1. **Enable Developer Mode** (recommended):
- Open **Settings****Update & Security****For developers**
- Enable **Developer Mode**
- This allows creating symlinks without administrator privileges
2. **Configure Git to use symlinks**:
```bash
git config --global core.symlinks true
```
3. **Clone the repository** (after enabling the above):
```bash
git clone https://github.com/github/awesome-copilot.git
```
> **Note:** If you cloned the repository before enabling symlinks, the symlinks will appear as plain text files containing the target path. You'll need to delete the local repository and re-clone after enabling symlink support.
**Alternative for older Windows versions:** If Developer Mode is not available, you can run Git Bash as Administrator, or grant your user the "Create symbolic links" privilege via Local Security Policy (`secpol.msc` → Local Policies → User Rights Assignment → Create symbolic links).
## How to Contribute
### Adding Instructions
@@ -138,11 +113,11 @@ Skills are self-contained folders in the `skills/` directory that include a `SKI
### Adding Plugins
Plugins group related prompts, agents, and skills around specific themes or workflows, making it easy for users to install comprehensive toolkits via GitHub Copilot CLI.
Plugins group related agents, commands (prompts), and skills around specific themes or workflows, making it easy for users to install comprehensive toolkits via GitHub Copilot CLI.
1. **Create your plugin**: Run `npm run plugin:create` to scaffold a new plugin
2. **Follow the naming convention**: Use descriptive, lowercase folder names with hyphens (e.g., `python-web-development`)
3. **Add your content**: Add agents, commands (prompts), and skills to the plugin folder using symlinks to existing repo files
3. **Define your content**: List agents, commands, and skills in `plugin.json` using the Claude Code spec fields
4. **Test your plugin**: Run `npm run plugin:validate` to verify your plugin structure
#### Creating a plugin
@@ -155,41 +130,37 @@ npm run plugin:create -- --name my-plugin-id
```
plugins/my-plugin-id/
├── .github/plugin/plugin.json # Plugin metadata
── README.md # Plugin documentation
├── commands/ # Symlinked prompt files
├── agents/ # Symlinked agent files
└── skills/ # Symlinked skill folders
├── .github/plugin/plugin.json # Plugin metadata (Claude Code spec format)
── README.md # Plugin documentation
```
> **Note:** Plugin content is defined declaratively in plugin.json using Claude Code spec fields (`agents`, `commands`, `skills`). Source files live in top-level directories and are materialized into plugins by CI.
#### plugin.json example
```json
{
"name": "my-plugin-id",
"description": "Plugin description",
"version": "1.0.0",
"keywords": [],
"author": { "name": "Awesome Copilot Community" },
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"agents": ["./agents/my-agent.md"],
"commands": ["./commands/my-command.md"],
"skills": ["./skills/my-skill/"]
}
```
#### Plugin Guidelines
- **Use symlinks**: Plugin content should be symlinks to source files in agents/, prompts/, skills/ directories
- **Valid references**: All items referenced in plugin.json must exist in the repository
- **Declarative content**: Plugin content is specified via `agents`, `commands`, and `skills` arrays in plugin.json — source files live in top-level directories and are materialized into plugins by CI
- **Valid references**: All paths referenced in plugin.json must point to existing source files in the repository
- **Instructions excluded**: Instructions are standalone resources and are not part of plugins
- **Clear purpose**: The plugin should solve a specific problem or workflow
- **Validate before submitting**: Run `npm run plugin:validate` to ensure your plugin is valid
### Working with Plugins
Plugins are installable packages that contain symlinked agents, commands (prompts), and skills organized around a specific theme or workflow.
#### Plugin Structure
```plaintext
plugins/<plugin-name>/
├── .github/plugin/plugin.json # Plugin metadata
├── README.md # Plugin documentation
├── agents/ # Symlinks to agent files (.md)
├── commands/ # Symlinks to prompt files (.md)
└── skills/ # Symlinks to skill folders
```
#### Plugin Guidelines
- **Symlinks, not copies**: Plugin files are symlinks to the source files, avoiding duplication
- **Instructions excluded**: Instructions are not currently supported in plugins
- **Validate before submitting**: Run `npm run plugin:validate` to ensure your plugin is valid
## Submitting Your Contribution
1. **Fork this repository**
@@ -198,11 +169,14 @@ plugins/<plugin-name>/
4. **Run the update script**: `npm start` to update the README with your new file (make sure you run `npm install` first if you haven't already)
- A GitHub Actions workflow will verify that this step was performed correctly
- If the README.md would be modified by running the script, the PR check will fail with a comment showing the required changes
5. **Submit a pull request** with:
5. **Submit a pull request** targeting the `staged` branch with:
- A clear title describing your contribution
- A brief description of what your instruction/prompt does
- Any relevant context or usage notes
> [!IMPORTANT]
> All pull requests should target the **`staged`** branch, not `main`.
> [!NOTE]
> We use [all-contributors](https://github.com/all-contributors/all-contributors) to recognize all types of contributions to the project. Jump to [Contributors Recognition](#contributor-recognition) to learn more!

View File

@@ -16,48 +16,48 @@ Curated plugins of related prompts, agents, and skills organized around specific
| Name | Description | Items | Tags |
| ---- | ----------- | ----- | ---- |
| [awesome-copilot](../plugins/awesome-copilot/README.md) | Meta prompts that help you discover and generate curated GitHub Copilot agents, instructions, prompts, and skills. | 5 items | github-copilot, discovery, meta, prompt-engineering, agents |
| [⭐ copilot-sdk](../plugins/copilot-sdk/README.md) | Build applications with the GitHub Copilot SDK across multiple programming languages. Includes comprehensive instructions for C#, Go, Node.js/TypeScript, and Python to help you create AI-powered applications. | 5 items | copilot-sdk, sdk, csharp, go, nodejs, typescript, python, ai, github-copilot |
| [⭐ partners](../plugins/partners/README.md) | Custom agents that have been created by GitHub partners | 20 items | devops, security, database, cloud, infrastructure, observability, feature-flags, cicd, migration, performance |
| [azure-cloud-development](../plugins/azure-cloud-development/README.md) | Comprehensive Azure cloud development tools including Infrastructure as Code, serverless functions, architecture patterns, and cost optimization for building scalable cloud applications. | 18 items | azure, cloud, infrastructure, bicep, terraform, serverless, architecture, devops |
| [awesome-copilot](../plugins/awesome-copilot/README.md) | Meta prompts that help you discover and generate curated GitHub Copilot agents, instructions, prompts, and skills. | 5 items | github-copilot, discovery, meta, prompt-engineering, agents |
| [azure-cloud-development](../plugins/azure-cloud-development/README.md) | Comprehensive Azure cloud development tools including Infrastructure as Code, serverless functions, architecture patterns, and cost optimization for building scalable cloud applications. | 9 items | azure, cloud, infrastructure, bicep, terraform, serverless, architecture, devops |
| [cast-imaging](../plugins/cast-imaging/README.md) | A comprehensive collection of specialized agents for software analysis, impact assessment, structural quality advisories, and architectural review using CAST Imaging. | 3 items | cast-imaging, software-analysis, architecture, quality, impact-analysis, devops |
| [clojure-interactive-programming](../plugins/clojure-interactive-programming/README.md) | Tools for REPL-first Clojure workflows featuring Clojure instructions, the interactive programming chat mode and supporting guidance. | 3 items | clojure, repl, interactive-programming |
| [context-engineering](../plugins/context-engineering/README.md) | Tools and techniques for maximizing GitHub Copilot effectiveness through better context management. Includes guidelines for structuring code, an agent for planning multi-file changes, and prompts for context-aware development. | 5 items | context, productivity, refactoring, best-practices, architecture |
| [csharp-dotnet-development](../plugins/csharp-dotnet-development/README.md) | Essential prompts, instructions, and chat modes for C# and .NET development including testing, documentation, and best practices. | 11 items | csharp, dotnet, aspnet, testing |
| [csharp-mcp-development](../plugins/csharp-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in C# using the official SDK. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 3 items | csharp, mcp, model-context-protocol, dotnet, server-development |
| [database-data-management](../plugins/database-data-management/README.md) | Database administration, SQL optimization, and data management tools for PostgreSQL, SQL Server, and general database development best practices. | 8 items | database, sql, postgresql, sql-server, dba, optimization, queries, data-management |
| [dataverse-sdk-for-python](../plugins/dataverse-sdk-for-python/README.md) | Comprehensive collection for building production-ready Python integrations with Microsoft Dataverse. Includes official documentation, best practices, advanced features, file operations, and code generation prompts. | 17 items | dataverse, python, integration, sdk |
| [devops-oncall](../plugins/devops-oncall/README.md) | A focused set of prompts, instructions, and a chat mode to help triage incidents and respond quickly with DevOps tools and Azure resources. | 5 items | devops, incident-response, oncall, azure |
| [edge-ai-tasks](../plugins/edge-ai-tasks/README.md) | Task Researcher and Task Planner for intermediate to expert users and large codebases - Brought to you by microsoft/edge-ai | 3 items | architecture, planning, research, tasks, implementation |
| [frontend-web-dev](../plugins/frontend-web-dev/README.md) | Essential prompts, instructions, and chat modes for modern frontend web development including React, Angular, Vue, TypeScript, and CSS frameworks. | 11 items | frontend, web, react, typescript, javascript, css, html, angular, vue |
| [clojure-interactive-programming](../plugins/clojure-interactive-programming/README.md) | Tools for REPL-first Clojure workflows featuring Clojure instructions, the interactive programming chat mode and supporting guidance. | 2 items | clojure, repl, interactive-programming |
| [context-engineering](../plugins/context-engineering/README.md) | Tools and techniques for maximizing GitHub Copilot effectiveness through better context management. Includes guidelines for structuring code, an agent for planning multi-file changes, and prompts for context-aware development. | 4 items | context, productivity, refactoring, best-practices, architecture |
| [copilot-sdk](../plugins/copilot-sdk/README.md) | Build applications with the GitHub Copilot SDK across multiple programming languages. Includes comprehensive instructions for C#, Go, Node.js/TypeScript, and Python to help you create AI-powered applications. | 1 items | copilot-sdk, sdk, csharp, go, nodejs, typescript, python, ai, github-copilot |
| [csharp-dotnet-development](../plugins/csharp-dotnet-development/README.md) | Essential prompts, instructions, and chat modes for C# and .NET development including testing, documentation, and best practices. | 9 items | csharp, dotnet, aspnet, testing |
| [csharp-mcp-development](../plugins/csharp-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in C# using the official SDK. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | csharp, mcp, model-context-protocol, dotnet, server-development |
| [database-data-management](../plugins/database-data-management/README.md) | Database administration, SQL optimization, and data management tools for PostgreSQL, SQL Server, and general database development best practices. | 6 items | database, sql, postgresql, sql-server, dba, optimization, queries, data-management |
| [dataverse-sdk-for-python](../plugins/dataverse-sdk-for-python/README.md) | Comprehensive collection for building production-ready Python integrations with Microsoft Dataverse. Includes official documentation, best practices, advanced features, file operations, and code generation prompts. | 4 items | dataverse, python, integration, sdk |
| [devops-oncall](../plugins/devops-oncall/README.md) | A focused set of prompts, instructions, and a chat mode to help triage incidents and respond quickly with DevOps tools and Azure resources. | 3 items | devops, incident-response, oncall, azure |
| [edge-ai-tasks](../plugins/edge-ai-tasks/README.md) | Task Researcher and Task Planner for intermediate to expert users and large codebases - Brought to you by microsoft/edge-ai | 2 items | architecture, planning, research, tasks, implementation |
| [frontend-web-dev](../plugins/frontend-web-dev/README.md) | Essential prompts, instructions, and chat modes for modern frontend web development including React, Angular, Vue, TypeScript, and CSS frameworks. | 4 items | frontend, web, react, typescript, javascript, css, html, angular, vue |
| [gem-team](../plugins/gem-team/README.md) | A modular multi-agent team for complex project execution with DAG-based planning, parallel execution, TDD verification, and automated testing. | 8 items | multi-agent, orchestration, dag-planning, parallel-execution, tdd, verification, automation, security |
| [go-mcp-development](../plugins/go-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Go using the official github.com/modelcontextprotocol/go-sdk. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 3 items | go, golang, mcp, model-context-protocol, server-development, sdk |
| [java-development](../plugins/java-development/README.md) | Comprehensive collection of prompts and instructions for Java development including Spring Boot, Quarkus, testing, documentation, and best practices. | 12 items | java, springboot, quarkus, jpa, junit, javadoc |
| [java-mcp-development](../plugins/java-mcp-development/README.md) | Complete toolkit for building Model Context Protocol servers in Java using the official MCP Java SDK with reactive streams and Spring Boot integration. | 3 items | java, mcp, model-context-protocol, server-development, sdk, reactive-streams, spring-boot, reactor |
| [kotlin-mcp-development](../plugins/kotlin-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Kotlin using the official io.modelcontextprotocol:kotlin-sdk library. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 3 items | kotlin, mcp, model-context-protocol, kotlin-multiplatform, server-development, ktor |
| [mcp-m365-copilot](../plugins/mcp-m365-copilot/README.md) | Comprehensive collection for building declarative agents with Model Context Protocol integration for Microsoft 365 Copilot | 5 items | mcp, m365-copilot, declarative-agents, api-plugins, model-context-protocol, adaptive-cards |
| [openapi-to-application-csharp-dotnet](../plugins/openapi-to-application-csharp-dotnet/README.md) | Generate production-ready .NET applications from OpenAPI specifications. Includes ASP.NET Core project scaffolding, controller generation, entity framework integration, and C# best practices. | 3 items | openapi, code-generation, api, csharp, dotnet, aspnet |
| [openapi-to-application-go](../plugins/openapi-to-application-go/README.md) | Generate production-ready Go applications from OpenAPI specifications. Includes project scaffolding, handler generation, middleware setup, and Go best practices for REST APIs. | 3 items | openapi, code-generation, api, go, golang |
| [openapi-to-application-java-spring-boot](../plugins/openapi-to-application-java-spring-boot/README.md) | Generate production-ready Spring Boot applications from OpenAPI specifications. Includes project scaffolding, REST controller generation, service layer organization, and Spring Boot best practices. | 3 items | openapi, code-generation, api, java, spring-boot |
| [openapi-to-application-nodejs-nestjs](../plugins/openapi-to-application-nodejs-nestjs/README.md) | Generate production-ready NestJS applications from OpenAPI specifications. Includes project scaffolding, controller and service generation, TypeScript best practices, and enterprise patterns. | 3 items | openapi, code-generation, api, nodejs, typescript, nestjs |
| [openapi-to-application-python-fastapi](../plugins/openapi-to-application-python-fastapi/README.md) | Generate production-ready FastAPI applications from OpenAPI specifications. Includes project scaffolding, route generation, dependency injection, and Python best practices for async APIs. | 3 items | openapi, code-generation, api, python, fastapi |
| [ospo-sponsorship](../plugins/ospo-sponsorship/README.md) | Tools and resources for Open Source Program Offices (OSPOs) to identify, evaluate, and manage sponsorship of open source dependencies through GitHub Sponsors, Open Collective, and other funding platforms. | 0 items | |
| [pcf-development](../plugins/pcf-development/README.md) | Complete toolkit for developing custom code components using Power Apps Component Framework for model-driven and canvas apps | 17 items | power-apps, pcf, component-framework, typescript, power-platform |
| [php-mcp-development](../plugins/php-mcp-development/README.md) | Comprehensive resources for building Model Context Protocol servers using the official PHP SDK with attribute-based discovery, including best practices, project generation, and expert assistance | 3 items | php, mcp, model-context-protocol, server-development, sdk, attributes, composer |
| [polyglot-test-agent](../plugins/polyglot-test-agent/README.md) | Multi-agent pipeline for generating comprehensive unit tests across any programming language. Orchestrates research, planning, and implementation phases using specialized agents to produce tests that compile, pass, and follow project conventions. | 10 items | testing, unit-tests, polyglot, test-generation, multi-agent, tdd, csharp, typescript, python, go |
| [power-apps-code-apps](../plugins/power-apps-code-apps/README.md) | Complete toolkit for Power Apps Code Apps development including project scaffolding, development standards, and expert guidance for building code-first applications with Power Platform integration. | 3 items | power-apps, power-platform, typescript, react, code-apps, dataverse, connectors |
| [power-bi-development](../plugins/power-bi-development/README.md) | Comprehensive Power BI development resources including data modeling, DAX optimization, performance tuning, visualization design, security best practices, and DevOps/ALM guidance for building enterprise-grade Power BI solutions. | 14 items | power-bi, dax, data-modeling, performance, visualization, security, devops, business-intelligence |
| [power-platform-mcp-connector-development](../plugins/power-platform-mcp-connector-development/README.md) | Complete toolkit for developing Power Platform custom connectors with Model Context Protocol integration for Microsoft Copilot Studio | 4 items | power-platform, mcp, copilot-studio, custom-connector, json-rpc |
| [project-planning](../plugins/project-planning/README.md) | Tools and guidance for software project planning, feature breakdown, epic management, implementation planning, and task organization for development teams. | 17 items | planning, project-management, epic, feature, implementation, task, architecture, technical-spike |
| [python-mcp-development](../plugins/python-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Python using the official SDK with FastMCP. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 3 items | python, mcp, model-context-protocol, fastmcp, server-development |
| [ruby-mcp-development](../plugins/ruby-mcp-development/README.md) | Complete toolkit for building Model Context Protocol servers in Ruby using the official MCP Ruby SDK gem with Rails integration support. | 3 items | ruby, mcp, model-context-protocol, server-development, sdk, rails, gem |
| [go-mcp-development](../plugins/go-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Go using the official github.com/modelcontextprotocol/go-sdk. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | go, golang, mcp, model-context-protocol, server-development, sdk |
| [java-development](../plugins/java-development/README.md) | Comprehensive collection of prompts and instructions for Java development including Spring Boot, Quarkus, testing, documentation, and best practices. | 4 items | java, springboot, quarkus, jpa, junit, javadoc |
| [java-mcp-development](../plugins/java-mcp-development/README.md) | Complete toolkit for building Model Context Protocol servers in Java using the official MCP Java SDK with reactive streams and Spring Boot integration. | 2 items | java, mcp, model-context-protocol, server-development, sdk, reactive-streams, spring-boot, reactor |
| [kotlin-mcp-development](../plugins/kotlin-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Kotlin using the official io.modelcontextprotocol:kotlin-sdk library. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | kotlin, mcp, model-context-protocol, kotlin-multiplatform, server-development, ktor |
| [mcp-m365-copilot](../plugins/mcp-m365-copilot/README.md) | Comprehensive collection for building declarative agents with Model Context Protocol integration for Microsoft 365 Copilot | 4 items | mcp, m365-copilot, declarative-agents, api-plugins, model-context-protocol, adaptive-cards |
| [openapi-to-application-csharp-dotnet](../plugins/openapi-to-application-csharp-dotnet/README.md) | Generate production-ready .NET applications from OpenAPI specifications. Includes ASP.NET Core project scaffolding, controller generation, entity framework integration, and C# best practices. | 2 items | openapi, code-generation, api, csharp, dotnet, aspnet |
| [openapi-to-application-go](../plugins/openapi-to-application-go/README.md) | Generate production-ready Go applications from OpenAPI specifications. Includes project scaffolding, handler generation, middleware setup, and Go best practices for REST APIs. | 2 items | openapi, code-generation, api, go, golang |
| [openapi-to-application-java-spring-boot](../plugins/openapi-to-application-java-spring-boot/README.md) | Generate production-ready Spring Boot applications from OpenAPI specifications. Includes project scaffolding, REST controller generation, service layer organization, and Spring Boot best practices. | 2 items | openapi, code-generation, api, java, spring-boot |
| [openapi-to-application-nodejs-nestjs](../plugins/openapi-to-application-nodejs-nestjs/README.md) | Generate production-ready NestJS applications from OpenAPI specifications. Includes project scaffolding, controller and service generation, TypeScript best practices, and enterprise patterns. | 2 items | openapi, code-generation, api, nodejs, typescript, nestjs |
| [openapi-to-application-python-fastapi](../plugins/openapi-to-application-python-fastapi/README.md) | Generate production-ready FastAPI applications from OpenAPI specifications. Includes project scaffolding, route generation, dependency injection, and Python best practices for async APIs. | 2 items | openapi, code-generation, api, python, fastapi |
| [ospo-sponsorship](../plugins/ospo-sponsorship/README.md) | Tools and resources for Open Source Program Offices (OSPOs) to identify, evaluate, and manage sponsorship of open source dependencies through GitHub Sponsors, Open Collective, and other funding platforms. | 1 items | |
| [partners](../plugins/partners/README.md) | Custom agents that have been created by GitHub partners | 20 items | devops, security, database, cloud, infrastructure, observability, feature-flags, cicd, migration, performance |
| [pcf-development](../plugins/pcf-development/README.md) | Complete toolkit for developing custom code components using Power Apps Component Framework for model-driven and canvas apps | 0 items | power-apps, pcf, component-framework, typescript, power-platform |
| [php-mcp-development](../plugins/php-mcp-development/README.md) | Comprehensive resources for building Model Context Protocol servers using the official PHP SDK with attribute-based discovery, including best practices, project generation, and expert assistance | 2 items | php, mcp, model-context-protocol, server-development, sdk, attributes, composer |
| [polyglot-test-agent](../plugins/polyglot-test-agent/README.md) | Multi-agent pipeline for generating comprehensive unit tests across any programming language. Orchestrates research, planning, and implementation phases using specialized agents to produce tests that compile, pass, and follow project conventions. | 9 items | testing, unit-tests, polyglot, test-generation, multi-agent, tdd, csharp, typescript, python, go |
| [power-apps-code-apps](../plugins/power-apps-code-apps/README.md) | Complete toolkit for Power Apps Code Apps development including project scaffolding, development standards, and expert guidance for building code-first applications with Power Platform integration. | 2 items | power-apps, power-platform, typescript, react, code-apps, dataverse, connectors |
| [power-bi-development](../plugins/power-bi-development/README.md) | Comprehensive Power BI development resources including data modeling, DAX optimization, performance tuning, visualization design, security best practices, and DevOps/ALM guidance for building enterprise-grade Power BI solutions. | 8 items | power-bi, dax, data-modeling, performance, visualization, security, devops, business-intelligence |
| [power-platform-mcp-connector-development](../plugins/power-platform-mcp-connector-development/README.md) | Complete toolkit for developing Power Platform custom connectors with Model Context Protocol integration for Microsoft Copilot Studio | 3 items | power-platform, mcp, copilot-studio, custom-connector, json-rpc |
| [project-planning](../plugins/project-planning/README.md) | Tools and guidance for software project planning, feature breakdown, epic management, implementation planning, and task organization for development teams. | 15 items | planning, project-management, epic, feature, implementation, task, architecture, technical-spike |
| [python-mcp-development](../plugins/python-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Python using the official SDK with FastMCP. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | python, mcp, model-context-protocol, fastmcp, server-development |
| [ruby-mcp-development](../plugins/ruby-mcp-development/README.md) | Complete toolkit for building Model Context Protocol servers in Ruby using the official MCP Ruby SDK gem with Rails integration support. | 2 items | ruby, mcp, model-context-protocol, server-development, sdk, rails, gem |
| [rug-agentic-workflow](../plugins/rug-agentic-workflow/README.md) | Three-agent workflow for orchestrated software delivery with an orchestrator plus implementation and QA subagents. | 3 items | agentic-workflow, orchestration, subagents, software-engineering, qa |
| [rust-mcp-development](../plugins/rust-mcp-development/README.md) | Build high-performance Model Context Protocol servers in Rust using the official rmcp SDK with async/await, procedural macros, and type-safe implementations. | 3 items | rust, mcp, model-context-protocol, server-development, sdk, tokio, async, macros, rmcp |
| [security-best-practices](../plugins/security-best-practices/README.md) | Security frameworks, accessibility guidelines, performance optimization, and code quality best practices for building secure, maintainable, and high-performance applications. | 6 items | security, accessibility, performance, code-quality, owasp, a11y, optimization, best-practices |
| [rust-mcp-development](../plugins/rust-mcp-development/README.md) | Build high-performance Model Context Protocol servers in Rust using the official rmcp SDK with async/await, procedural macros, and type-safe implementations. | 2 items | rust, mcp, model-context-protocol, server-development, sdk, tokio, async, macros, rmcp |
| [security-best-practices](../plugins/security-best-practices/README.md) | Security frameworks, accessibility guidelines, performance optimization, and code quality best practices for building secure, maintainable, and high-performance applications. | 1 items | security, accessibility, performance, code-quality, owasp, a11y, optimization, best-practices |
| [software-engineering-team](../plugins/software-engineering-team/README.md) | 7 specialized agents covering the full software development lifecycle from UX design and architecture to security and DevOps. | 7 items | team, enterprise, security, devops, ux, architecture, product, ai-ethics |
| [structured-autonomy](../plugins/structured-autonomy/README.md) | Premium planning, thrifty implementation | 0 items | |
| [swift-mcp-development](../plugins/swift-mcp-development/README.md) | Comprehensive collection for building Model Context Protocol servers in Swift using the official MCP Swift SDK with modern concurrency features. | 3 items | swift, mcp, model-context-protocol, server-development, sdk, ios, macos, concurrency, actor, async-await |
| [structured-autonomy](../plugins/structured-autonomy/README.md) | Premium planning, thrifty implementation | 3 items | |
| [swift-mcp-development](../plugins/swift-mcp-development/README.md) | Comprehensive collection for building Model Context Protocol servers in Swift using the official MCP Swift SDK with modern concurrency features. | 2 items | swift, mcp, model-context-protocol, server-development, sdk, ios, macos, concurrency, actor, async-await |
| [technical-spike](../plugins/technical-spike/README.md) | Tools for creation, management and research of technical spikes to reduce unknowns and assumptions before proceeding to specification and implementation of solutions. | 2 items | technical-spike, assumption-testing, validation, research |
| [testing-automation](../plugins/testing-automation/README.md) | Comprehensive collection for writing tests, test automation, and test-driven development including unit tests, integration tests, and end-to-end testing strategies. | 11 items | testing, tdd, automation, unit-tests, integration, playwright, jest, nunit |
| [typescript-mcp-development](../plugins/typescript-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in TypeScript/Node.js using the official SDK. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 3 items | typescript, mcp, model-context-protocol, nodejs, server-development |
| [typespec-m365-copilot](../plugins/typespec-m365-copilot/README.md) | Comprehensive collection of prompts, instructions, and resources for building declarative agents and API plugins using TypeSpec for Microsoft 365 Copilot extensibility. | 4 items | typespec, m365-copilot, declarative-agents, api-plugins, agent-development, microsoft-365 |
| [testing-automation](../plugins/testing-automation/README.md) | Comprehensive collection for writing tests, test automation, and test-driven development including unit tests, integration tests, and end-to-end testing strategies. | 9 items | testing, tdd, automation, unit-tests, integration, playwright, jest, nunit |
| [typescript-mcp-development](../plugins/typescript-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in TypeScript/Node.js using the official SDK. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | typescript, mcp, model-context-protocol, nodejs, server-development |
| [typespec-m365-copilot](../plugins/typespec-m365-copilot/README.md) | Comprehensive collection of prompts, instructions, and resources for building declarative agents and API plugins using TypeSpec for Microsoft 365 Copilot extensibility. | 3 items | typespec, m365-copilot, declarative-agents, api-plugins, agent-development, microsoft-365 |

View File

@@ -20,7 +20,7 @@ function prompt(question) {
function parseArgs() {
const args = process.argv.slice(2);
const out = { name: undefined, tags: undefined };
const out = { name: undefined, keywords: undefined };
for (let i = 0; i < args.length; i++) {
const a = args[i];
@@ -29,22 +29,22 @@ function parseArgs() {
i++;
} else if (a.startsWith("--name=")) {
out.name = a.split("=")[1];
} else if (a === "--tags" || a === "-t") {
out.tags = args[i + 1];
} else if (a === "--keywords" || a === "--tags" || a === "-t") {
out.keywords = args[i + 1];
i++;
} else if (a.startsWith("--tags=")) {
out.tags = a.split("=")[1];
} else if (a.startsWith("--keywords=") || a.startsWith("--tags=")) {
out.keywords = a.split("=")[1];
} else if (!a.startsWith("-") && !out.name) {
// first positional -> name
out.name = a;
} else if (!a.startsWith("-") && out.name && !out.tags) {
// second positional -> tags
out.tags = a;
} else if (!a.startsWith("-") && out.name && !out.keywords) {
// second positional -> keywords
out.keywords = a;
}
}
if (Array.isArray(out.tags)) {
out.tags = out.tags.join(",");
if (Array.isArray(out.keywords)) {
out.keywords = out.keywords.join(",");
}
return out;
@@ -108,23 +108,23 @@ async function createPlugin() {
description = defaultDescription;
}
// Get tags
let tags = [];
let tagInput = parsed.tags;
if (!tagInput) {
tagInput = await prompt(
"Tags (comma-separated, or press Enter for defaults): "
// Get keywords
let keywords = [];
let keywordInput = parsed.keywords;
if (!keywordInput) {
keywordInput = await prompt(
"Keywords (comma-separated, or press Enter for defaults): "
);
}
if (tagInput && tagInput.toString().trim()) {
tags = tagInput
if (keywordInput && keywordInput.toString().trim()) {
keywords = keywordInput
.toString()
.split(",")
.map((tag) => tag.trim())
.filter((tag) => tag);
.map((kw) => kw.trim())
.filter((kw) => kw);
} else {
tags = pluginId.split("-").slice(0, 3);
keywords = pluginId.split("-").slice(0, 3);
}
// Create directory structure
@@ -136,11 +136,10 @@ async function createPlugin() {
name: pluginId,
description,
version: "1.0.0",
keywords,
author: { name: "Awesome Copilot Community" },
repository: "https://github.com/github/awesome-copilot",
license: "MIT",
tags,
items: [],
};
fs.writeFileSync(
@@ -177,7 +176,7 @@ MIT
console.log(`\n✅ Created plugin: ${pluginDir}`);
console.log("\n📝 Next steps:");
console.log(`1. Add agents, prompts, or instructions to plugins/${pluginId}/`);
console.log(`2. Update plugins/${pluginId}/.github/plugin/plugin.json to list your items`);
console.log(`2. Update plugins/${pluginId}/.github/plugin/plugin.json with your metadata`);
console.log(`3. Edit plugins/${pluginId}/README.md to describe your plugin`);
console.log("4. Run 'npm run build' to regenerate documentation");
} catch (error) {

View File

@@ -5,7 +5,7 @@ import path from "path";
import { ROOT_FOLDER } from "./constants.mjs";
const PLUGINS_DIR = path.join(ROOT_FOLDER, "plugins");
const MARKETPLACE_FILE = path.join(ROOT_FOLDER, ".github", "plugin", "marketplace.json");
const MARKETPLACE_FILE = path.join(ROOT_FOLDER, ".github/plugin", "marketplace.json");
/**
* Read plugin metadata from plugin.json file
@@ -13,7 +13,7 @@ const MARKETPLACE_FILE = path.join(ROOT_FOLDER, ".github", "plugin", "marketplac
* @returns {object|null} - Plugin metadata or null if not found
*/
function readPluginMetadata(pluginDir) {
const pluginJsonPath = path.join(pluginDir, ".github", "plugin", "plugin.json");
const pluginJsonPath = path.join(pluginDir, ".github/plugin", "plugin.json");
if (!fs.existsSync(pluginJsonPath)) {
console.warn(`Warning: No plugin.json found for ${path.basename(pluginDir)}`);

View File

@@ -488,7 +488,7 @@ function generatePluginsData(gitDates) {
const plugins = [];
if (!fs.existsSync(PLUGINS_DIR)) {
return plugins;
return { items: [], filters: { tags: [] } };
}
const pluginDirs = fs.readdirSync(PLUGINS_DIR, { withFileTypes: true })
@@ -496,7 +496,7 @@ function generatePluginsData(gitDates) {
for (const dir of pluginDirs) {
const pluginDir = path.join(PLUGINS_DIR, dir.name);
const jsonPath = path.join(pluginDir, ".github", "plugin", "plugin.json");
const jsonPath = path.join(pluginDir, ".github/plugin", "plugin.json");
if (!fs.existsSync(jsonPath)) continue;
@@ -505,17 +505,25 @@ function generatePluginsData(gitDates) {
const relPath = `plugins/${dir.name}`;
const dates = gitDates[relPath] || gitDates[`${relPath}/`] || {};
// Build items list from spec fields (agents, commands, skills)
const items = [
...(data.agents || []).map(p => ({ kind: "agent", path: p })),
...(data.commands || []).map(p => ({ kind: "prompt", path: p })),
...(data.skills || []).map(p => ({ kind: "skill", path: p })),
];
const tags = data.keywords || data.tags || [];
plugins.push({
id: dir.name,
name: data.name || dir.name,
description: data.description || "",
path: relPath,
tags: data.tags || [],
featured: data.featured || false,
itemCount: data.items ? data.items.length : 0,
items: data.items || [],
tags: tags,
itemCount: items.length,
items: items,
lastUpdated: dates.lastModified || null,
searchText: `${data.name || dir.name} ${data.description || ""} ${(data.tags || []).join(" ")}`.toLowerCase(),
searchText: `${data.name || dir.name} ${data.description || ""} ${tags.join(" ")}`.toLowerCase(),
});
} catch (e) {
console.warn(`Failed to parse plugin: ${dir.name}`, e.message);
@@ -525,11 +533,7 @@ function generatePluginsData(gitDates) {
// Collect all unique tags
const allTags = [...new Set(plugins.flatMap(p => p.tags))].sort();
const sortedPlugins = plugins.sort((a, b) => {
if (a.featured && !b.featured) return -1;
if (!a.featured && b.featured) return 1;
return a.name.localeCompare(b.name);
});
const sortedPlugins = plugins.sort((a, b) => a.name.localeCompare(b.name));
return {
items: sortedPlugins,

167
eng/materialize-plugins.mjs Normal file
View File

@@ -0,0 +1,167 @@
#!/usr/bin/env node
import fs from "fs";
import path from "path";
import { ROOT_FOLDER } from "./constants.mjs";
const PLUGINS_DIR = path.join(ROOT_FOLDER, "plugins");
/**
* Recursively copy a directory.
*/
function copyDirRecursive(src, dest) {
fs.mkdirSync(dest, { recursive: true });
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
const srcPath = path.join(src, entry.name);
const destPath = path.join(dest, entry.name);
if (entry.isDirectory()) {
copyDirRecursive(srcPath, destPath);
} else {
fs.copyFileSync(srcPath, destPath);
}
}
}
/**
* Resolve a plugin-relative path to the repo-root source file.
*
* ./agents/foo.md → ROOT/agents/foo.agent.md
* ./commands/bar.md → ROOT/prompts/bar.prompt.md
* ./skills/baz/ → ROOT/skills/baz/
*/
function resolveSource(relPath) {
const basename = path.basename(relPath, ".md");
if (relPath.startsWith("./agents/")) {
return path.join(ROOT_FOLDER, "agents", `${basename}.agent.md`);
}
if (relPath.startsWith("./commands/")) {
return path.join(ROOT_FOLDER, "prompts", `${basename}.prompt.md`);
}
if (relPath.startsWith("./skills/")) {
// Strip trailing slash and get the skill folder name
const skillName = relPath.replace(/^\.\/skills\//, "").replace(/\/$/, "");
return path.join(ROOT_FOLDER, "skills", skillName);
}
return null;
}
function materializePlugins() {
console.log("Materializing plugin files...\n");
if (!fs.existsSync(PLUGINS_DIR)) {
console.error(`Error: Plugins directory not found at ${PLUGINS_DIR}`);
process.exit(1);
}
const pluginDirs = fs.readdirSync(PLUGINS_DIR, { withFileTypes: true })
.filter(entry => entry.isDirectory())
.map(entry => entry.name)
.sort();
let totalAgents = 0;
let totalCommands = 0;
let totalSkills = 0;
let warnings = 0;
let errors = 0;
for (const dirName of pluginDirs) {
const pluginPath = path.join(PLUGINS_DIR, dirName);
const pluginJsonPath = path.join(pluginPath, ".github/plugin", "plugin.json");
if (!fs.existsSync(pluginJsonPath)) {
continue;
}
let metadata;
try {
metadata = JSON.parse(fs.readFileSync(pluginJsonPath, "utf8"));
} catch (err) {
console.error(`Error: Failed to parse ${pluginJsonPath}: ${err.message}`);
errors++;
continue;
}
const pluginName = metadata.name || dirName;
// Process agents
if (Array.isArray(metadata.agents)) {
for (const relPath of metadata.agents) {
const src = resolveSource(relPath);
if (!src) {
console.warn(`${pluginName}: Unknown path format: ${relPath}`);
warnings++;
continue;
}
if (!fs.existsSync(src)) {
console.warn(`${pluginName}: Source not found: ${src}`);
warnings++;
continue;
}
const dest = path.join(pluginPath, relPath.replace(/^\.\//, ""));
fs.mkdirSync(path.dirname(dest), { recursive: true });
fs.copyFileSync(src, dest);
totalAgents++;
}
}
// Process commands
if (Array.isArray(metadata.commands)) {
for (const relPath of metadata.commands) {
const src = resolveSource(relPath);
if (!src) {
console.warn(`${pluginName}: Unknown path format: ${relPath}`);
warnings++;
continue;
}
if (!fs.existsSync(src)) {
console.warn(`${pluginName}: Source not found: ${src}`);
warnings++;
continue;
}
const dest = path.join(pluginPath, relPath.replace(/^\.\//, ""));
fs.mkdirSync(path.dirname(dest), { recursive: true });
fs.copyFileSync(src, dest);
totalCommands++;
}
}
// Process skills
if (Array.isArray(metadata.skills)) {
for (const relPath of metadata.skills) {
const src = resolveSource(relPath);
if (!src) {
console.warn(`${pluginName}: Unknown path format: ${relPath}`);
warnings++;
continue;
}
if (!fs.existsSync(src) || !fs.statSync(src).isDirectory()) {
console.warn(`${pluginName}: Source directory not found: ${src}`);
warnings++;
continue;
}
const dest = path.join(pluginPath, relPath.replace(/^\.\//, "").replace(/\/$/, ""));
copyDirRecursive(src, dest);
totalSkills++;
}
}
const counts = [];
if (metadata.agents?.length) counts.push(`${metadata.agents.length} agents`);
if (metadata.commands?.length) counts.push(`${metadata.commands.length} commands`);
if (metadata.skills?.length) counts.push(`${metadata.skills.length} skills`);
if (counts.length) {
console.log(`${pluginName}: ${counts.join(", ")}`);
}
}
console.log(`\nDone. Copied ${totalAgents} agents, ${totalCommands} commands, ${totalSkills} skills.`);
if (warnings > 0) {
console.log(`${warnings} warning(s).`);
}
if (errors > 0) {
console.error(`${errors} error(s).`);
process.exit(1);
}
}
materializePlugins();

View File

@@ -710,7 +710,7 @@ function generateUnifiedModeSection(cfg) {
* Read and parse a plugin.json file from a plugin directory.
*/
function readPluginJson(pluginDir) {
const jsonPath = path.join(pluginDir, ".github", "plugin", "plugin.json");
const jsonPath = path.join(pluginDir, ".github/plugin", "plugin.json");
if (!fs.existsSync(jsonPath)) return null;
try {
return JSON.parse(fs.readFileSync(jsonPath, "utf-8"));
@@ -783,13 +783,13 @@ function generatePluginsSection(pluginsDir) {
const description = formatTableCell(
plugin.description || "No description"
);
const itemCount = plugin.items ? plugin.items.length : 0;
const tags = plugin.tags ? plugin.tags.join(", ") : "";
const itemCount = (plugin.agents || []).length + (plugin.commands || []).length + (plugin.skills || []).length;
const keywords = plugin.keywords ? plugin.keywords.join(", ") : "";
const link = `../plugins/${dir}/README.md`;
const displayName = isFeatured ? `${name}` : name;
pluginsContent += `| [${displayName}](${link}) | ${description} | ${itemCount} items | ${tags} |\n`;
pluginsContent += `| [${displayName}](${link}) | ${description} | ${itemCount} items | ${keywords} |\n`;
}
return `${TEMPLATES.pluginsSection}\n${TEMPLATES.pluginsUsage}\n\n${pluginsContent}`;
@@ -826,8 +826,8 @@ function generateFeaturedPluginsSection(pluginsDir) {
const description = formatTableCell(
plugin.description || "No description"
);
const tags = plugin.tags ? plugin.tags.join(", ") : "";
const itemCount = plugin.items ? plugin.items.length : 0;
const keywords = plugin.keywords ? plugin.keywords.join(", ") : "";
const itemCount = (plugin.agents || []).length + (plugin.commands || []).length + (plugin.skills || []).length;
return {
dir,
@@ -835,7 +835,7 @@ function generateFeaturedPluginsSection(pluginsDir) {
pluginId: name,
name,
description,
tags,
keywords,
itemCount,
};
},
@@ -861,10 +861,10 @@ function generateFeaturedPluginsSection(pluginsDir) {
// Generate table rows for each featured plugin
for (const entry of featuredPlugins) {
const { dir, name, description, tags, itemCount } = entry;
const { dir, name, description, keywords, itemCount } = entry;
const readmeLink = `plugins/${dir}/README.md`;
featuredContent += `| [${name}](${readmeLink}) | ${description} | ${itemCount} items | ${tags} |\n`;
featuredContent += `| [${name}](${readmeLink}) | ${description} | ${itemCount} items | ${keywords} |\n`;
}
return `${TEMPLATES.featuredPluginsSection}\n\n${featuredContent}`;

View File

@@ -6,8 +6,6 @@ import { ROOT_FOLDER } from "./constants.mjs";
const PLUGINS_DIR = path.join(ROOT_FOLDER, "plugins");
const VALID_ITEM_KINDS = ["prompt", "agent", "instruction", "skill", "hook"];
// Validation functions
function validateName(name, folderName) {
const errors = [];
@@ -44,82 +42,74 @@ function validateVersion(version) {
return null;
}
function validateTags(tags) {
if (tags === undefined) return null;
if (!Array.isArray(tags)) {
return "tags must be an array";
function validateKeywords(keywords) {
if (keywords === undefined) return null;
if (!Array.isArray(keywords)) {
return "keywords must be an array";
}
if (tags.length > 10) {
return "maximum 10 tags allowed";
if (keywords.length > 10) {
return "maximum 10 keywords allowed";
}
for (const tag of tags) {
if (typeof tag !== "string") {
return "all tags must be strings";
for (const keyword of keywords) {
if (typeof keyword !== "string") {
return "all keywords must be strings";
}
if (!/^[a-z0-9-]+$/.test(tag)) {
return `tag "${tag}" must contain only lowercase letters, numbers, and hyphens`;
if (!/^[a-z0-9-]+$/.test(keyword)) {
return `keyword "${keyword}" must contain only lowercase letters, numbers, and hyphens`;
}
if (tag.length < 1 || tag.length > 30) {
return `tag "${tag}" must be between 1 and 30 characters`;
if (keyword.length < 1 || keyword.length > 30) {
return `keyword "${keyword}" must be between 1 and 30 characters`;
}
}
return null;
}
function validateFeatured(featured) {
if (featured === undefined) return null;
if (typeof featured !== "boolean") {
return "featured must be a boolean";
}
return null;
}
function validateDisplay(display) {
if (display === undefined) return null;
if (typeof display !== "object" || Array.isArray(display) || display === null) {
return "display must be an object";
}
if (display.ordering !== undefined) {
if (!["manual", "alpha"].includes(display.ordering)) {
return "display.ordering must be 'manual' or 'alpha'";
}
}
if (display.show_badge !== undefined) {
if (typeof display.show_badge !== "boolean") {
return "display.show_badge must be a boolean";
}
}
return null;
}
function validateItems(items) {
if (items === undefined) return [];
function validateSpecPaths(plugin) {
const errors = [];
if (!Array.isArray(items)) {
errors.push("items must be an array");
return errors;
}
for (let i = 0; i < items.length; i++) {
const item = items[i];
if (!item || typeof item !== "object") {
errors.push(`items[${i}] must be an object`);
const specs = {
agents: { prefix: "./agents/", suffix: ".md", repoDir: "agents", repoSuffix: ".agent.md" },
commands: { prefix: "./commands/", suffix: ".md", repoDir: "prompts", repoSuffix: ".prompt.md" },
skills: { prefix: "./skills/", suffix: "/", repoDir: "skills", repoFile: "SKILL.md" },
};
for (const [field, spec] of Object.entries(specs)) {
const arr = plugin[field];
if (arr === undefined) continue;
if (!Array.isArray(arr)) {
errors.push(`${field} must be an array`);
continue;
}
if (!item.path || typeof item.path !== "string") {
errors.push(`items[${i}] must have a path string`);
}
if (!item.kind || typeof item.kind !== "string") {
errors.push(`items[${i}] must have a kind string`);
} else if (!VALID_ITEM_KINDS.includes(item.kind)) {
errors.push(
`items[${i}] kind must be one of: ${VALID_ITEM_KINDS.join(", ")}`
);
}
// Validate referenced path exists relative to repo root
if (item.path && typeof item.path === "string") {
const filePath = path.join(ROOT_FOLDER, item.path);
if (!fs.existsSync(filePath)) {
errors.push(`items[${i}] file does not exist: ${item.path}`);
for (let i = 0; i < arr.length; i++) {
const p = arr[i];
if (typeof p !== "string") {
errors.push(`${field}[${i}] must be a string`);
continue;
}
if (!p.startsWith("./")) {
errors.push(`${field}[${i}] must start with "./"`);
continue;
}
if (!p.startsWith(spec.prefix)) {
errors.push(`${field}[${i}] must start with "${spec.prefix}"`);
continue;
}
if (!p.endsWith(spec.suffix)) {
errors.push(`${field}[${i}] must end with "${spec.suffix}"`);
continue;
}
// Validate the source file exists at repo root
const basename = p.slice(spec.prefix.length, p.length - spec.suffix.length);
if (field === "skills") {
const skillDir = path.join(ROOT_FOLDER, spec.repoDir, basename);
const skillFile = path.join(skillDir, spec.repoFile);
if (!fs.existsSync(skillFile)) {
errors.push(`${field}[${i}] source not found: ${spec.repoDir}/${basename}/SKILL.md`);
}
} else {
const srcFile = path.join(ROOT_FOLDER, spec.repoDir, basename + spec.repoSuffix);
if (!fs.existsSync(srcFile)) {
errors.push(`${field}[${i}] source not found: ${spec.repoDir}/${basename}${spec.repoSuffix}`);
}
}
}
}
@@ -131,7 +121,7 @@ function validatePlugin(folderName) {
const errors = [];
// Rule 1: Must have .github/plugin/plugin.json
const pluginJsonPath = path.join(pluginDir, ".github", "plugin", "plugin.json");
const pluginJsonPath = path.join(pluginDir, ".github/plugin", "plugin.json");
if (!fs.existsSync(pluginJsonPath)) {
errors.push("missing required file: .github/plugin/plugin.json");
return errors;
@@ -163,21 +153,13 @@ function validatePlugin(folderName) {
const versionError = validateVersion(plugin.version);
if (versionError) errors.push(versionError);
// Rule 5: tags
const tagsError = validateTags(plugin.tags);
if (tagsError) errors.push(tagsError);
// Rule 5: keywords (or tags for backward compat)
const keywordsError = validateKeywords(plugin.keywords ?? plugin.tags);
if (keywordsError) errors.push(keywordsError);
// Rule 8: featured
const featuredError = validateFeatured(plugin.featured);
if (featuredError) errors.push(featuredError);
// Rule 9: display
const displayError = validateDisplay(plugin.display);
if (displayError) errors.push(displayError);
// Rule 6 & 7: items
const itemErrors = validateItems(plugin.items);
errors.push(...itemErrors);
// Rule 6: agents, commands, skills paths
const specErrors = validateSpecPaths(plugin);
errors.push(...specErrors);
return errors;
}

View File

@@ -7,38 +7,20 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"github-copilot",
"discovery",
"meta",
"prompt-engineering",
"agents"
],
"featured": true,
"display": {
"ordering": "alpha",
"show_badge": true
},
"items": [
{
"path": "prompts/suggest-awesome-github-copilot-skills.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/suggest-awesome-github-copilot-instructions.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/suggest-awesome-github-copilot-prompts.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/suggest-awesome-github-copilot-agents.prompt.md",
"kind": "prompt"
},
{
"path": "agents/meta-agentic-project-scaffold.agent.md",
"kind": "agent"
}
"agents": [
"./agents/meta-agentic-project-scaffold.md"
],
"commands": [
"./commands/suggest-awesome-github-copilot-skills.md",
"./commands/suggest-awesome-github-copilot-instructions.md",
"./commands/suggest-awesome-github-copilot-prompts.md",
"./commands/suggest-awesome-github-copilot-agents.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/meta-agentic-project-scaffold.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/suggest-awesome-github-copilot-agents.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/suggest-awesome-github-copilot-instructions.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/suggest-awesome-github-copilot-prompts.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/suggest-awesome-github-copilot-skills.prompt.md

View File

@@ -7,7 +7,7 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"azure",
"cloud",
"infrastructure",
@@ -17,82 +17,17 @@
"architecture",
"devops"
],
"display": {
"ordering": "alpha",
"show_badge": true
},
"items": [
{
"path": "agents/azure-principal-architect.agent.md",
"kind": "agent"
},
{
"path": "agents/azure-saas-architect.agent.md",
"kind": "agent"
},
{
"path": "agents/azure-logic-apps-expert.agent.md",
"kind": "agent"
},
{
"path": "agents/azure-verified-modules-bicep.agent.md",
"kind": "agent"
},
{
"path": "agents/azure-verified-modules-terraform.agent.md",
"kind": "agent"
},
{
"path": "agents/terraform-azure-planning.agent.md",
"kind": "agent"
},
{
"path": "agents/terraform-azure-implement.agent.md",
"kind": "agent"
},
{
"path": "instructions/bicep-code-best-practices.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/terraform.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/terraform-azure.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/azure-verified-modules-terraform.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/azure-functions-typescript.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/azure-logic-apps-power-automate.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/azure-devops-pipelines.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/containerization-docker-best-practices.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/kubernetes-deployment-best-practices.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/azure-resource-health-diagnose.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/az-cost-optimize.prompt.md",
"kind": "prompt"
}
"agents": [
"./agents/azure-principal-architect.md",
"./agents/azure-saas-architect.md",
"./agents/azure-logic-apps-expert.md",
"./agents/azure-verified-modules-bicep.md",
"./agents/azure-verified-modules-terraform.md",
"./agents/terraform-azure-planning.md",
"./agents/terraform-azure-implement.md"
],
"commands": [
"./commands/azure-resource-health-diagnose.md",
"./commands/az-cost-optimize.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/azure-logic-apps-expert.agent.md

View File

@@ -1 +0,0 @@
../../../agents/azure-principal-architect.agent.md

View File

@@ -1 +0,0 @@
../../../agents/azure-saas-architect.agent.md

View File

@@ -1 +0,0 @@
../../../agents/azure-verified-modules-bicep.agent.md

View File

@@ -1 +0,0 @@
../../../agents/azure-verified-modules-terraform.agent.md

View File

@@ -1 +0,0 @@
../../../agents/terraform-azure-implement.agent.md

View File

@@ -1 +0,0 @@
../../../agents/terraform-azure-planning.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/az-cost-optimize.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/azure-resource-health-diagnose.prompt.md

View File

@@ -7,7 +7,7 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"cast-imaging",
"software-analysis",
"architecture",
@@ -15,25 +15,9 @@
"impact-analysis",
"devops"
],
"display": {
"ordering": "manual",
"show_badge": true
},
"items": [
{
"path": "agents/cast-imaging-software-discovery.agent.md",
"kind": "agent",
"usage": "This agent is designed for comprehensive software application discovery and architectural mapping. It helps users understand code structure, dependencies, and architectural patterns, including database schemas and physical source file locations.\n\nIdeal for:\n- Exploring available applications and getting overviews.\n- Understanding system architecture and component structure.\n- Analyzing dependencies and database schemas (tables/columns).\n- Locating and analyzing physical source files."
},
{
"path": "agents/cast-imaging-impact-analysis.agent.md",
"kind": "agent",
"usage": "This agent specializes in comprehensive change impact assessment and risk analysis. It assists users in understanding ripple effects of code changes, identifying architectural coupling (shared resources), and developing testing strategies.\n\nIdeal for:\n- Assessing potential impacts of code modifications.\n- Identifying architectural coupling and shared code risks.\n- Analyzing impacts spanning multiple applications.\n- Developing targeted testing approaches based on change scope."
},
{
"path": "agents/cast-imaging-structural-quality-advisor.agent.md",
"kind": "agent",
"usage": "This agent focuses on identifying, analyzing, and providing remediation guidance for structural quality issues. It supports specialized standards including Security (CVE), Green IT deficiencies, and ISO-5055 compliance.\n\nIdeal for:\n- Identifying and understanding code quality issues and structural flaws.\n- Checking compliance with Security (CVE), Green IT, and ISO-5055 standards.\n- Prioritizing quality issues based on business impact and risk.\n- Analyzing quality trends and providing remediation guidance."
}
"agents": [
"./agents/cast-imaging-software-discovery.md",
"./agents/cast-imaging-impact-analysis.md",
"./agents/cast-imaging-structural-quality-advisor.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/cast-imaging-impact-analysis.agent.md

View File

@@ -1 +0,0 @@
../../../agents/cast-imaging-software-discovery.agent.md

View File

@@ -1 +0,0 @@
../../../agents/cast-imaging-structural-quality-advisor.agent.md

View File

@@ -7,27 +7,15 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"clojure",
"repl",
"interactive-programming"
],
"display": {
"ordering": "manual",
"show_badge": true
},
"items": [
{
"path": "instructions/clojure.instructions.md",
"kind": "instruction"
},
{
"path": "agents/clojure-interactive-programming.agent.md",
"kind": "agent"
},
{
"path": "prompts/remember-interactive-programming.prompt.md",
"kind": "prompt"
}
"agents": [
"./agents/clojure-interactive-programming.md"
],
"commands": [
"./commands/remember-interactive-programming.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/clojure-interactive-programming.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/remember-interactive-programming.prompt.md

View File

@@ -7,41 +7,19 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"context",
"productivity",
"refactoring",
"best-practices",
"architecture"
],
"display": {
"ordering": "manual",
"show_badge": true
},
"items": [
{
"path": "instructions/context-engineering.instructions.md",
"kind": "instruction"
},
{
"path": "agents/context-architect.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Context Architect agent helps plan multi-file changes by mapping dependencies\nand identifying all relevant files before making modifications.\n\nUse this agent when:\n- Planning refactors that span multiple files\n- Adding features that touch several modules\n- Investigating unfamiliar parts of the codebase\n\nExample usage:\n```\n@context-architect I need to add rate limiting to all API endpoints.\nWhat files are involved and what's the best approach?\n```\n\nFor best results:\n- Describe the high-level goal, not just the immediate task\n- Let the agent search before you provide files\n- Review the context map before approving changes"
},
{
"path": "prompts/context-map.prompt.md",
"kind": "prompt",
"usage": "optional\n\nUse before any significant change to understand the blast radius.\nProduces a structured map of files, dependencies, and tests."
},
{
"path": "prompts/what-context-needed.prompt.md",
"kind": "prompt",
"usage": "optional\n\nUse when Copilot gives a generic or incorrect answer.\nAsks Copilot to explicitly list what files it needs to see."
},
{
"path": "prompts/refactor-plan.prompt.md",
"kind": "prompt",
"usage": "optional\n\nUse for multi-file refactors. Produces a phased plan with\nverification steps and rollback procedures."
}
"agents": [
"./agents/context-architect.md"
],
"commands": [
"./commands/context-map.md",
"./commands/what-context-needed.md",
"./commands/refactor-plan.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/context-architect.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/context-map.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/refactor-plan.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/what-context-needed.prompt.md

View File

@@ -7,7 +7,7 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"copilot-sdk",
"sdk",
"csharp",
@@ -18,31 +18,7 @@
"ai",
"github-copilot"
],
"featured": true,
"display": {
"ordering": "manual",
"show_badge": true
},
"items": [
{
"path": "instructions/copilot-sdk-csharp.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/copilot-sdk-go.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/copilot-sdk-nodejs.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/copilot-sdk-python.instructions.md",
"kind": "instruction"
},
{
"path": "skills/copilot-sdk/SKILL.md",
"kind": "skill"
}
"skills": [
"./skills/copilot-sdk/"
]
}

View File

@@ -1 +0,0 @@
../../../skills/copilot-sdk

View File

@@ -7,55 +7,23 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": ["csharp", "dotnet", "aspnet", "testing"],
"display": {
"ordering": "alpha",
"show_badge": false
},
"items": [
{
"path": "prompts/csharp-async.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/aspnet-minimal-api-openapi.prompt.md",
"kind": "prompt"
},
{
"path": "instructions/csharp.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dotnet-architecture-good-practices.instructions.md",
"kind": "instruction"
},
{
"path": "agents/expert-dotnet-software-engineer.agent.md",
"kind": "agent"
},
{
"path": "prompts/csharp-xunit.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/csharp-nunit.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/csharp-mstest.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/csharp-tunit.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/dotnet-best-practices.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/dotnet-upgrade.prompt.md",
"kind": "prompt"
}
"keywords": [
"csharp",
"dotnet",
"aspnet",
"testing"
],
"agents": [
"./agents/expert-dotnet-software-engineer.md"
],
"commands": [
"./commands/csharp-async.md",
"./commands/aspnet-minimal-api-openapi.md",
"./commands/csharp-xunit.md",
"./commands/csharp-nunit.md",
"./commands/csharp-mstest.md",
"./commands/csharp-tunit.md",
"./commands/dotnet-best-practices.md",
"./commands/dotnet-upgrade.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/expert-dotnet-software-engineer.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/aspnet-minimal-api-openapi.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-async.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-mstest.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-nunit.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-tunit.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-xunit.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/dotnet-best-practices.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/dotnet-upgrade.prompt.md

View File

@@ -7,30 +7,17 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"csharp",
"mcp",
"model-context-protocol",
"dotnet",
"server-development"
],
"display": {
"ordering": "manual",
"show_badge": true
},
"items": [
{
"path": "instructions/csharp-mcp-server.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/csharp-mcp-server-generator.prompt.md",
"kind": "prompt"
},
{
"path": "agents/csharp-mcp-expert.agent.md",
"kind": "agent",
"usage": "recommended\n\nThis chat mode provides expert guidance for building MCP servers in C#.\n\nThis chat mode is ideal for:\n- Creating new MCP server projects\n- Implementing tools and prompts\n- Debugging protocol issues\n- Optimizing server performance\n- Learning MCP best practices\n\nTo get the best results, consider:\n- Using the instruction file to set context for all Copilot interactions\n- Using the prompt to generate initial project structure\n- Switching to the expert chat mode for detailed implementation help\n- Providing specific details about what tools or functionality you need"
}
"agents": [
"./agents/csharp-mcp-expert.md"
],
"commands": [
"./commands/csharp-mcp-server-generator.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/csharp-mcp-expert.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/csharp-mcp-server-generator.prompt.md

View File

@@ -7,7 +7,7 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"database",
"sql",
"postgresql",
@@ -17,42 +17,14 @@
"queries",
"data-management"
],
"display": {
"ordering": "alpha",
"show_badge": true
},
"items": [
{
"path": "agents/postgresql-dba.agent.md",
"kind": "agent"
},
{
"path": "agents/ms-sql-dba.agent.md",
"kind": "agent"
},
{
"path": "instructions/ms-sql-dba.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/sql-sp-generation.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/sql-optimization.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/sql-code-review.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/postgresql-optimization.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/postgresql-code-review.prompt.md",
"kind": "prompt"
}
"agents": [
"./agents/postgresql-dba.md",
"./agents/ms-sql-dba.md"
],
"commands": [
"./commands/sql-optimization.md",
"./commands/sql-code-review.md",
"./commands/postgresql-optimization.md",
"./commands/postgresql-code-review.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/ms-sql-dba.agent.md

View File

@@ -1 +0,0 @@
../../../agents/postgresql-dba.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/postgresql-code-review.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/postgresql-optimization.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/sql-code-review.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/sql-optimization.prompt.md

View File

@@ -7,84 +7,16 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"dataverse",
"python",
"integration",
"sdk"
],
"display": {
"ordering": "alpha",
"show_badge": true
},
"items": [
{
"path": "instructions/dataverse-python-sdk.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-api-reference.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-modules.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-best-practices.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-advanced-features.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-agentic-workflows.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-authentication-security.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-error-handling.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-file-operations.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-pandas-integration.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-performance-optimization.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-real-world-usecases.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/dataverse-python-testing-debugging.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/dataverse-python-quickstart.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/dataverse-python-advanced-patterns.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/dataverse-python-production-code.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/dataverse-python-usecase-builder.prompt.md",
"kind": "prompt"
}
"commands": [
"./commands/dataverse-python-quickstart.md",
"./commands/dataverse-python-advanced-patterns.md",
"./commands/dataverse-python-production-code.md",
"./commands/dataverse-python-usecase-builder.md"
]
}

View File

@@ -1 +0,0 @@
../../../prompts/dataverse-python-advanced-patterns.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/dataverse-python-production-code.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/dataverse-python-quickstart.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/dataverse-python-usecase-builder.prompt.md

View File

@@ -7,36 +7,17 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"devops",
"incident-response",
"oncall",
"azure"
],
"display": {
"ordering": "manual",
"show_badge": true
},
"items": [
{
"path": "prompts/azure-resource-health-diagnose.prompt.md",
"kind": "prompt"
},
{
"path": "instructions/devops-core-principles.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/containerization-docker-best-practices.instructions.md",
"kind": "instruction"
},
{
"path": "agents/azure-principal-architect.agent.md",
"kind": "agent"
},
{
"path": "prompts/multi-stage-dockerfile.prompt.md",
"kind": "prompt"
}
"agents": [
"./agents/azure-principal-architect.md"
],
"commands": [
"./commands/azure-resource-health-diagnose.md",
"./commands/multi-stage-dockerfile.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/azure-principal-architect.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/azure-resource-health-diagnose.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/multi-stage-dockerfile.prompt.md

View File

@@ -7,32 +7,15 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"architecture",
"planning",
"research",
"tasks",
"implementation"
],
"display": {
"ordering": "alpha",
"show_badge": false
},
"items": [
{
"path": "agents/task-researcher.agent.md",
"kind": "agent",
"usage": "Now you can iterate on research for your tasks!\n\n```markdown, research.prompt.md\n---\nmode: task-researcher\ntitle: Research microsoft fabric realtime intelligence terraform support\n---\nReview the microsoft documentation for fabric realtime intelligence\nand come up with ideas on how to implement this support into our terraform components.\n```\n\nResearch is dumped out into a .copilot-tracking/research/*-research.md file and will include discoveries for GHCP along with examples and schema that will be useful during implementation.\n\nAlso, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on."
},
{
"path": "agents/task-planner.agent.md",
"kind": "agent",
"usage": "Also, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on.\n\n```markdown, task-plan.prompt.md\n---\nmode: task-planner\ntitle: Plan microsoft fabric realtime intelligence terraform support\n---\n#file: .copilot-tracking/research/*-fabric-rti-blueprint-modification-research.md\nBuild a plan to support adding fabric rti to this project\n```\n\n`task-planner` will help you create a plan for implementing your task(s). It will use your fully researched ideas or build new research if not already provided.\n\n`task-planner` will produce three (3) files that will be used by `task-implementation.instructions.md`.\n\n* `.copilot-tracking/plan/*-plan.instructions.md`\n\n * A newly generated instructions file that has the plan as a checklist of Phases and Tasks.\n* `.copilot-tracking/details/*-details.md`\n\n * The details for the implementation, the plan file refers to this file for specific details (important if you have a big plan).\n* `.copilot-tracking/prompts/implement-*.prompt.md`\n\n * A newly generated prompt file that will create a `.copilot-tracking/changes/*-changes.md` file and proceed to implement the changes.\n\nContinue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase."
},
{
"path": "instructions/task-implementation.instructions.md",
"kind": "instruction",
"usage": "Continue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase.\n\nWhen you are ready to implement the plan, **create a new chat** and switch to `Agent` mode then fire off the newly generated prompt.\n\n```markdown, implement-fabric-rti-changes.prompt.md\n---\nmode: agent\ntitle: Implement microsoft fabric realtime intelligence terraform support\n---\n/implement-fabric-rti-blueprint-modification phaseStop=true\n```\n\nThis prompt has the added benefit of attaching the plan as instructions, which helps with keeping the plan in context throughout the whole conversation.\n\n**Expert Warning** ->>Use `phaseStop=false` to have Copilot implement the whole plan without stopping. Additionally, you can use `taskStop=true` to have Copilot stop after every Task implementation for finer detail control.\n\nTo use these generated instructions and prompts, you'll need to update your `settings.json` accordingly:\n\n```json\n \"chat.instructionsFilesLocations\": {\n // Existing instructions folders...\n \".copilot-tracking/plans\": true\n },\n \"chat.promptFilesLocations\": {\n // Existing prompts folders...\n \".copilot-tracking/prompts\": true\n },\n```"
}
"agents": [
"./agents/task-researcher.md",
"./agents/task-planner.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/task-planner.agent.md

View File

@@ -1 +0,0 @@
../../../agents/task-researcher.agent.md

View File

@@ -7,7 +7,7 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"frontend",
"web",
"react",
@@ -18,54 +18,12 @@
"angular",
"vue"
],
"display": {
"ordering": "alpha",
"show_badge": true
},
"items": [
{
"path": "agents/expert-react-frontend-engineer.agent.md",
"kind": "agent"
},
{
"path": "agents/electron-angular-native.agent.md",
"kind": "agent"
},
{
"path": "instructions/reactjs.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/angular.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/vuejs3.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/nextjs.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/nextjs-tailwind.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/tanstack-start-shadcn-tailwind.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/nodejs-javascript-vitest.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/playwright-explore-website.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/playwright-generate-test.prompt.md",
"kind": "prompt"
}
"agents": [
"./agents/expert-react-frontend-engineer.md",
"./agents/electron-angular-native.md"
],
"commands": [
"./commands/playwright-explore-website.md",
"./commands/playwright-generate-test.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/electron-angular-native.agent.md

View File

@@ -1 +0,0 @@
../../../agents/expert-react-frontend-engineer.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/playwright-explore-website.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/playwright-generate-test.prompt.md

View File

@@ -7,7 +7,7 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"multi-agent",
"orchestration",
"dag-planning",
@@ -17,50 +17,14 @@
"automation",
"security"
],
"display": {
"ordering": "manual",
"show_badge": true
},
"items": [
{
"path": "agents/gem-orchestrator.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Orchestrator is the coordination hub that coordinates multi-agent workflows, delegates tasks via runSubagent, and synthesizes results. It does not execute tasks directly but manages the overall workflow.\n\nThis agent is ideal for:\n- Coordinating complex multi-agent workflows\n- Managing task delegation and parallel execution\n- Synthesizing results from multiple agents\n- Maintaining plan.yaml state\n\nTo get the best results, consider:\n- Start with the Orchestrator for any complex project\n- Provide clear goals and constraints\n- Review the plan.yaml before execution\n- Use the walkthrough summaries to track progress"
},
{
"path": "agents/gem-researcher.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Researcher gathers codebase context, identifies relevant files/patterns, and returns structured findings. It is typically invoked by the Orchestrator with a specific focus area.\n\nThis agent is ideal for:\n- Understanding codebase structure and patterns\n- Identifying relevant files for a specific feature\n- Gathering context before making changes\n- Researching technical dependencies\n\nTo get the best results, consider:\n- Specify a clear focus area or question\n- Provide context about what you're trying to achieve\n- Use multiple Researchers in parallel for different areas"
},
{
"path": "agents/gem-planner.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Planner creates DAG-based plans with pre-mortem analysis, presents for approval, and iterates on feedback. It synthesizes research findings into a structured plan.\n\nThis agent is ideal for:\n- Breaking down complex goals into atomic tasks\n- Creating task dependencies (DAG)\n- Running pre-mortem analysis to identify risks\n- Getting approval before execution\n\nTo get the best results, consider:\n- Provide clear research findings from the Researcher\n- Review the plan carefully before approving\n- Ask for iterations if the plan is not optimal\n- Use the plan_review tool for collaborative planning"
},
{
"path": "agents/gem-implementer.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Implementer executes TDD code changes, ensures verification, and maintains quality. It follows strict TDD discipline with verification commands.\n\nThis agent is ideal for:\n- Implementing features with TDD discipline\n- Writing tests first, then code\n- Ensuring verification commands pass\n- Maintaining code quality\n\nTo get the best results, consider:\n- Always provide verification commands\n- Follow TDD: red, green, refactor\n- Check get_errors after every edit\n- Keep changes minimal and focused"
},
{
"path": "agents/gem-browser-tester.agent.md",
"kind": "agent",
"usage": "optional\n\nThe Browser Tester automates browser testing, UI/UX validation using browser automation tools and visual verification techniques.\n\nThis agent is ideal for:\n- Automated browser testing\n- UI/UX validation\n- Capturing screenshots and snapshots\n- Testing web applications\n\nTo get the best results, consider:\n- Have browser automation tools installed\n- Provide clear test scenarios\n- Use snapshots for debugging\n- Test on different viewports"
},
{
"path": "agents/gem-devops.agent.md",
"kind": "agent",
"usage": "optional\n\nThe DevOps agent manages containers, CI/CD pipelines, and infrastructure deployment. It handles infrastructure as code and deployment automation.\n\nThis agent is ideal for:\n- Setting up CI/CD pipelines\n- Managing containers (Docker, Kubernetes)\n- Infrastructure deployment\n- DevOps automation\n\nTo get the best results, consider:\n- Provide clear infrastructure requirements\n- Use IaC best practices\n- Test pipelines locally\n- Document deployment processes"
},
{
"path": "agents/gem-reviewer.agent.md",
"kind": "agent",
"usage": "recommended\n\nThe Reviewer is a security gatekeeper for critical tasks. It applies OWASP scanning, secrets detection, and compliance verification.\n\nThis agent is ideal for:\n- Security code reviews\n- OWASP Top 10 scanning\n- Secrets and PII detection\n- Compliance verification\n\nTo get the best results, consider:\n- Use for all critical security changes\n- Review findings carefully\n- Address all security issues\n- Keep documentation updated"
},
{
"path": "agents/gem-documentation-writer.agent.md",
"kind": "agent",
"usage": "optional\n\nThe Documentation Writer generates technical docs, diagrams, and maintains code-documentation parity.\n\nThis agent is ideal for:\n- Generating technical documentation\n- Creating diagrams\n- Keeping docs in sync with code\n- API documentation\n\nTo get the best results, consider:\n- Provide clear context and requirements\n- Review generated docs for accuracy\n- Update docs with code changes\n- Use consistent documentation style"
}
"agents": [
"./agents/gem-orchestrator.md",
"./agents/gem-researcher.md",
"./agents/gem-planner.md",
"./agents/gem-implementer.md",
"./agents/gem-browser-tester.md",
"./agents/gem-devops.md",
"./agents/gem-reviewer.md",
"./agents/gem-documentation-writer.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/gem-browser-tester.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-devops.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-documentation-writer.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-implementer.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-orchestrator.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-planner.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-researcher.agent.md

View File

@@ -1 +0,0 @@
../../../agents/gem-reviewer.agent.md

View File

@@ -7,7 +7,7 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"go",
"golang",
"mcp",
@@ -15,23 +15,10 @@
"server-development",
"sdk"
],
"display": {
"ordering": "manual",
"show_badge": true
},
"items": [
{
"path": "instructions/go-mcp-server.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/go-mcp-server-generator.prompt.md",
"kind": "prompt"
},
{
"path": "agents/go-mcp-expert.agent.md",
"kind": "agent",
"usage": "recommended\n\nThis chat mode provides expert guidance for building MCP servers in Go.\n\nThis chat mode is ideal for:\n- Creating new MCP server projects with Go\n- Implementing type-safe tools with structs and JSON schema tags\n- Setting up stdio or HTTP transports\n- Debugging context handling and error patterns\n- Learning Go MCP best practices with the official SDK\n- Optimizing server performance and concurrency\n\nTo get the best results, consider:\n- Using the instruction file to set context for Go MCP development\n- Using the prompt to generate initial project structure\n- Switching to the expert chat mode for detailed implementation help\n- Specifying whether you need stdio or HTTP transport\n- Providing details about what tools or functionality you need\n- Mentioning if you need resources, prompts, or special capabilities"
}
"agents": [
"./agents/go-mcp-expert.md"
],
"commands": [
"./commands/go-mcp-server-generator.md"
]
}

View File

@@ -1 +0,0 @@
../../../agents/go-mcp-expert.agent.md

View File

@@ -1 +0,0 @@
../../../prompts/go-mcp-server-generator.prompt.md

View File

@@ -7,7 +7,7 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"java",
"springboot",
"quarkus",
@@ -15,58 +15,10 @@
"junit",
"javadoc"
],
"display": {
"ordering": "alpha",
"show_badge": false
},
"items": [
{
"path": "instructions/java.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/springboot.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/quarkus.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/quarkus-mcp-server-sse.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/convert-jpa-to-spring-data-cosmos.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/java-11-to-java-17-upgrade.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/java-17-to-java-21-upgrade.instructions.md",
"kind": "instruction"
},
{
"path": "instructions/java-21-to-java-25-upgrade.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/java-docs.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/java-junit.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/java-springboot.prompt.md",
"kind": "prompt"
},
{
"path": "prompts/create-spring-boot-java-project.prompt.md",
"kind": "prompt"
}
"commands": [
"./commands/java-docs.md",
"./commands/java-junit.md",
"./commands/java-springboot.md",
"./commands/create-spring-boot-java-project.md"
]
}

View File

@@ -1 +0,0 @@
../../../prompts/create-spring-boot-java-project.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/java-docs.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/java-junit.prompt.md

View File

@@ -1 +0,0 @@
../../../prompts/java-springboot.prompt.md

View File

@@ -7,7 +7,7 @@
},
"repository": "https://github.com/github/awesome-copilot",
"license": "MIT",
"tags": [
"keywords": [
"java",
"mcp",
"model-context-protocol",
@@ -17,23 +17,10 @@
"spring-boot",
"reactor"
],
"display": {
"ordering": "manual",
"show_badge": true
},
"items": [
{
"path": "instructions/java-mcp-server.instructions.md",
"kind": "instruction"
},
{
"path": "prompts/java-mcp-server-generator.prompt.md",
"kind": "prompt"
},
{
"path": "agents/java-mcp-expert.agent.md",
"kind": "agent",
"usage": "recommended\n\nThis chat mode provides expert guidance for building MCP servers in Java.\n\nThis chat mode is ideal for:\n- Creating new MCP server projects with Java\n- Implementing reactive handlers with Project Reactor\n- Setting up stdio or HTTP transports\n- Debugging reactive streams and error handling\n- Learning Java MCP best practices with the official SDK\n- Integrating with Spring Boot applications\n\nTo get the best results, consider:\n- Using the instruction file to set context for Java MCP development\n- Using the prompt to generate initial project structure\n- Switching to the expert chat mode for detailed implementation help\n- Specifying whether you need Maven or Gradle\n- Providing details about what tools or functionality you need\n- Mentioning if you need Spring Boot integration"
}
"agents": [
"./agents/java-mcp-expert.md"
],
"commands": [
"./commands/java-mcp-server-generator.md"
]
}

Some files were not shown because too many files have changed in this diff Show More