diff --git a/.schemas/collection.schema.json b/.schemas/collection.schema.json index d69ea69..6757c86 100644 --- a/.schemas/collection.schema.json +++ b/.schemas/collection.schema.json @@ -50,13 +50,13 @@ "path": { "type": "string", "description": "Relative path from repository root to the item file", - "pattern": "^(prompts|instructions|chatmodes)/[^/]+\\.(prompt|instructions|chatmode)\\.md$", + "pattern": "^(prompts|instructions|chatmodes|agents)/[^/]+\\.(prompt|instructions|chatmode|agent)\\.md$", "minLength": 1 }, "kind": { "type": "string", "description": "Type of the item", - "enum": ["prompt", "instruction", "chat-mode"] + "enum": ["prompt", "instruction", "chat-mode", "agent"] }, "usage": { "type": "string", @@ -82,9 +82,9 @@ "description": "Whether to show collection badge on items", "default": false }, - "promoted": { + "featured": { "type": "boolean", - "description": "Whether this collection is promoted on the main page", + "description": "Whether this collection is featured on the main page", "default": false } } diff --git a/README.agents.md b/README.agents.md new file mode 100644 index 0000000..33003d1 --- /dev/null +++ b/README.agents.md @@ -0,0 +1,24 @@ +# 🤖 Custom Agents + +Custom GitHub Copilot agents that integrate with MCP servers to provide enhanced capabilities for specific workflows and tools. +### How to Use Custom Agents + +**To Install:** +- Click the **VS Code** or **VS Code Insiders** install button for the agent you want to use +- Download the `*.agent.md` file and manually add it to your repository + +**MCP Server Setup:** +- Each agent may require one or more MCP servers to function +- Click the MCP server to view it on the GitHub MCP registry +- Agents will automatically install the MCP servers they need when activated + +**To Activate/Use:** +- Access installed agents through the VS Code Chat interface, through Copilot CLI, or assign them in Coding Agent +- Agents will have access to tools from configured MCP servers +- Follow agent-specific instructions for optimal usage + +| Title | Description | MCP Servers | +| ----- | ----------- | ----------- | +| [Amplitude Experiment Implementation](agents/amplitude-experiment-implementation.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md) | This custom agent uses Amplitude's MCP tools to deploy new experiments inside of Amplitude, enabling seamless variant testing capabilities and rollout of product features. | | +| [Launchdarkly Flag Cleanup](agents/launchdarkly-flag-cleanup.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md) | A specialized GitHub Copilot agent that uses the LaunchDarkly MCP server to safely automate feature flag cleanup workflows. This agent determines removal readiness, identifies the correct forward value, and creates PRs that preserve production behavior while removing obsolete flags and updating stale defaults. | [launchdarkly](https://github.com/mcp/launchdarkly/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode:mcp/by-name/launchdarkly/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode-insiders:mcp/by-name/launchdarkly/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio?vscode:mcp/by-name/launchdarkly/mcp-server) | +| [Stackhawk Security Onboarding](agents/stackhawk-security-onboarding.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fstackhawk-security-onboarding.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fstackhawk-security-onboarding.agent.md) | Automatically set up StackHawk security testing for your repository with generated configuration and GitHub Actions workflow | [stackhawk-mcp](https://github.com/mcp/stackhawk-mcp/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode:mcp/by-name/stackhawk-mcp/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode-insiders:mcp/by-name/stackhawk-mcp/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio?vscode:mcp/by-name/stackhawk-mcp/mcp-server) | diff --git a/README.chatmodes.md b/README.chatmodes.md index 5dae26a..2268a29 100644 --- a/README.chatmodes.md +++ b/README.chatmodes.md @@ -35,7 +35,7 @@ Custom chat modes define specific behaviors and tools for GitHub Copilot Chat, e | [Create PRD Chat Mode](chatmodes/prd.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fprd.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fprd.chatmode.md) | Generate a comprehensive Product Requirements Document (PRD) in Markdown, detailing user stories, acceptance criteria, technical considerations, and metrics. Optionally create GitHub issues upon user confirmation. | | [Critical thinking mode instructions](chatmodes/critical-thinking.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fcritical-thinking.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fcritical-thinking.chatmode.md) | Challenge assumptions and encourage critical thinking to ensure the best possible solution and outcomes. | | [Debug Mode Instructions](chatmodes/debug.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdebug.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdebug.chatmode.md) | Debug your application to find and fix a bug | -| [Declarative Agents Architect](chatmodes/declarative-agents-architect.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdeclarative-agents-architect.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdeclarative-agents-architect.chatmode.md) | | | +| [Declarative Agents Architect](chatmodes/declarative-agents-architect.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdeclarative-agents-architect.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdeclarative-agents-architect.chatmode.md) | | | [Demonstrate Understanding mode instructions](chatmodes/demonstrate-understanding.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdemonstrate-understanding.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fdemonstrate-understanding.chatmode.md) | Validate user understanding of code, design patterns, and implementation details through guided questioning. | | [Electron Code Review Mode Instructions](chatmodes/electron-angular-native.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Felectron-angular-native.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Felectron-angular-native.chatmode.md) | Code Review Mode tailored for Electron app with Node.js backend (main), Angular frontend (render), and native integration layer (e.g., AppleScript, shell, or native tooling). Services in other repos are not reviewed here. | | [Expert .NET software engineer mode instructions](chatmodes/expert-dotnet-software-engineer.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fexpert-dotnet-software-engineer.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fexpert-dotnet-software-engineer.chatmode.md) | Provide expert .NET software engineering guidance using modern software design patterns. | diff --git a/README.collections.md b/README.collections.md index d6a1824..87774c2 100644 --- a/README.collections.md +++ b/README.collections.md @@ -16,7 +16,7 @@ Curated collections of related prompts, instructions, and chat modes organized a | Name | Description | Items | Tags | | ---- | ----------- | ----- | ---- | -| [⭐ Partners](collections/partners.md) | Custom agents that have been created by GitHub partners | 10 items | tag1, tag2, tag3 | +| [⭐ Partners](collections/partners.md) | Custom agents that have been created by GitHub partners | 3 items | tag1, tag2, tag3 | | [Azure & Cloud Development](collections/azure-cloud-development.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 | | [C# .NET Development](collections/csharp-dotnet-development.md) | Essential prompts, instructions, and chat modes for C# and .NET development including testing, documentation, and best practices. | 7 items | csharp, dotnet, aspnet, testing | | [C# MCP Server Development](collections/csharp-mcp-development.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 | @@ -26,18 +26,18 @@ Curated collections of related prompts, instructions, and chat modes organized a | [Frontend Web Development](collections/frontend-web-dev.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 | | [Go MCP Server Development](collections/go-mcp-development.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](collections/java-development.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 Server Development](collections/java-mcp-development.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 | +| [Java MCP Server Development](collections/java-mcp-development.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 Server Development](collections/kotlin-mcp-development.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 | -| [PHP MCP Server Development](collections/php-mcp-development.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 | +| [PHP MCP Server Development](collections/php-mcp-development.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 | | [Power Apps Code Apps Development](collections/power-apps-code-apps.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](collections/power-bi-development.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](collections/power-platform-mcp-connector-development.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 & Management](collections/project-planning.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 Server Development](collections/python-mcp-development.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 Server Development](collections/ruby-mcp-development.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 | +| [Ruby MCP Server Development](collections/ruby-mcp-development.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 | | [Rust MCP Server Development](collections/rust-mcp-development.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 & Code Quality](collections/security-best-practices.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 | -| [Swift MCP Server Development](collections/swift-mcp-development.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 | +| [Swift MCP Server Development](collections/swift-mcp-development.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 | | [Tasks by microsoft/edge-ai](collections/edge-ai-tasks.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 | | [Technical Spike](collections/technical-spike.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 & Test Automation](collections/testing-automation.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 | diff --git a/README.instructions.md b/README.instructions.md index 029ca51..db87f11 100644 --- a/README.instructions.md +++ b/README.instructions.md @@ -15,8 +15,8 @@ Team and project-specific instructions to enhance GitHub Copilot's behavior for | Title | Description | | ----- | ----------- | | [.NET Framework Development](instructions/dotnet-framework.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-framework.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-framework.instructions.md) | Guidance for working with .NET Framework projects. Includes project structure, C# language version, NuGet management, and best practices. | +| [.NET Framework Upgrade Specialist](instructions/dotnet-upgrade.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-upgrade.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-upgrade.instructions.md) | Specialized agent for comprehensive .NET framework upgrades with progressive tracking and validation | | [.NET MAUI](instructions/dotnet-maui.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-maui.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-maui.instructions.md) | .NET MAUI component and application patterns | -| [.NET Project Upgrade Instructions](instructions/dotnet-upgrade.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-upgrade.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fdotnet-upgrade.instructions.md) | Specialized agent for comprehensive .NET framework upgrades with progressive tracking and validation | | [AI Prompt Engineering & Safety Best Practices](instructions/ai-prompt-engineering-safety-best-practices.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fai-prompt-engineering-safety-best-practices.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fai-prompt-engineering-safety-best-practices.instructions.md) | Comprehensive best practices for AI prompt engineering, safety frameworks, bias mitigation, and responsible AI usage for Copilot and LLMs. | | [Angular Development Instructions](instructions/angular.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fangular.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fangular.instructions.md) | Angular-specific coding standards and best practices | | [Ansible Conventions and Best Practices](instructions/ansible.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fansible.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fansible.instructions.md) | Ansible conventions and best practices | @@ -40,7 +40,6 @@ Team and project-specific instructions to enhance GitHub Copilot's behavior for | [ColdFusion Coding Standards for CFC Files](instructions/coldfusion-cfc.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcoldfusion-cfc.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcoldfusion-cfc.instructions.md) | ColdFusion Coding Standards for CFC component and application patterns | | [Collections Development](instructions/collections.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcollections.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcollections.instructions.md) | Guidelines for creating and managing awesome-copilot collections | | [Containerization & Docker Best Practices](instructions/containerization-docker-best-practices.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcontainerization-docker-best-practices.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcontainerization-docker-best-practices.instructions.md) | Comprehensive best practices for creating optimized, secure, and efficient Docker images and managing containers. Covers multi-stage builds, image layer optimization, security scanning, and runtime best practices. | -| [Conventional Commit](instructions/conventional-commit.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fconventional-commit.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fconventional-commit.prompt.md) | Prompt and workflow for generating conventional commit messages using a structured XML format. Guides users to create standardized, descriptive commit messages in line with the Conventional Commits specification, including instructions, examples, and validation. | | [Convert Spring JPA project to Spring Data Cosmos](instructions/convert-jpa-to-spring-data-cosmos.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fconvert-jpa-to-spring-data-cosmos.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fconvert-jpa-to-spring-data-cosmos.instructions.md) | Step-by-step guide for converting Spring Boot JPA applications to use Azure Cosmos DB with Spring Data Cosmos | | [Copilot Process tracking Instructions](instructions/copilot-thought-logging.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcopilot-thought-logging.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcopilot-thought-logging.instructions.md) | See process Copilot is following where you can edit this to reshape the interaction or save when follow up may be needed | | [Copilot Prompt Files Guidelines](instructions/prompt.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fprompt.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fprompt.instructions.md) | Guidelines for creating high-quality prompt files for GitHub Copilot | diff --git a/README.md b/README.md index 6c74922..6d97e89 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ A curated collection of prompts, instructions, and chat modes to supercharge you This repository provides a comprehensive toolkit for enhancing GitHub Copilot with specialized: - **[![Awesome Prompts](https://img.shields.io/badge/Awesome-Prompts-blue?logo=githubcopilot)](README.prompts.md)** - Focused, task-specific prompts for generating code, documentation, and solving specific problems +- **[![Awesome Custom Agents](https://img.shields.io/badge/Awesome-Agents-blue?logo=githubcopilot)](README.agents.md)** - Specialized GitHub Copilot agents that integrate with MCP servers to provide enhanced capabilities for specific workflows and tools - **[![Awesome Instructions](https://img.shields.io/badge/Awesome-Instructions-blue?logo=githubcopilot)](README.instructions.md)** - Comprehensive coding standards and best practices that apply to specific file patterns or entire projects - **[![Awesome Chat Modes](https://img.shields.io/badge/Awesome-Chat_Modes-blue?logo=githubcopilot)](README.chatmodes.md)** - Specialized AI personas and conversation modes for different roles and contexts - **[![Awesome Collections](https://img.shields.io/badge/Awesome-Collections-blue?logo=githubcopilot)](README.collections.md)** - Curated collections of related prompts, instructions, and chat modes organized around specific themes and workflows @@ -22,7 +23,7 @@ Discover our curated collections of prompts, instructions, and chat modes organi | Name | Description | Items | Tags | | ---- | ----------- | ----- | ---- | -| [Partners](collections/partners.md) | Custom agents that have been created by GitHub partners | 10 items | tag1, tag2, tag3 | +| [Partners](collections/partners.md) | Custom agents that have been created by GitHub partners | 3 items | tag1, tag2, tag3 | ## MCP Server diff --git a/README.prompts.md b/README.prompts.md index 45b9abb..86847ca 100644 --- a/README.prompts.md +++ b/README.prompts.md @@ -101,7 +101,7 @@ Ready-to-use prompt templates for specific development scenarios and tasks, defi | [Repo Story Time](prompts/repo-story-time.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frepo-story-time.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frepo-story-time.prompt.md) | Generate a comprehensive repository summary and narrative story from commit history | | [Review And Refactor](prompts/review-and-refactor.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Freview-and-refactor.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Freview-and-refactor.prompt.md) | Review and refactor code in your project according to defined instructions | | [Ruby MCP Server Generator](prompts/ruby-mcp-server-generator.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fruby-mcp-server-generator.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fruby-mcp-server-generator.prompt.md) | Generate a complete Model Context Protocol server project in Ruby using the official MCP Ruby SDK gem. | -| [Rust MCP Server Generator](prompts/rust-mcp-server-generator.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md) | Generate a complete Rust Model Context Protocol server project with tools, prompts, resources, and tests using the official rmcp SDK | +| [Rust Mcp Server Generator](prompts/rust-mcp-server-generator.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md) | Generate a complete Rust Model Context Protocol server project with tools, prompts, resources, and tests using the official rmcp SDK | | [Shuffle JSON Data](prompts/shuffle-json-data.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fshuffle-json-data.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fshuffle-json-data.prompt.md) | Shuffle repetitive JSON objects safely by validating schema consistency before randomising entries. | | [Spring Boot Best Practices](prompts/java-springboot.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-springboot.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-springboot.prompt.md) | Get best practices for developing applications with Spring Boot. | | [Spring Boot with Kotlin Best Practices](prompts/kotlin-springboot.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fkotlin-springboot.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fkotlin-springboot.prompt.md) | Get best practices for developing applications with Spring Boot and Kotlin. | diff --git a/agents/amplitude-experiment-implementation.agent.md b/agents/amplitude-experiment-implementation.agent.md new file mode 100644 index 0000000..4fcedd8 --- /dev/null +++ b/agents/amplitude-experiment-implementation.agent.md @@ -0,0 +1,34 @@ +--- +name: Amplitude Experiment Implementation +description: This custom agent uses Amplitude's MCP tools to deploy new experiments inside of Amplitude, enabling seamless variant testing capabilities and rollout of product features. +--- + +### Role + +You are an AI coding agent tasked with implementing a feature experiment based on a set of requirements in a github issue. + +### Instructions + +1. Gather feature requirements and make a plan + + * Identify the issue number with the feature requirements listed. If the user does not provide one, ask the user to provide one and HALT. + * Read through the feature requirements from the issue. Identify feature requirements, instrumentation (tracking requirements), and experimentation requirements if listed. + * Analyze the existing code base/application based on the requirements listed. Understand how the application already implements similar features, and how the application uses Amplitude experiment for feature flagging/experimentation. + * Create a plan to implement the feature, create the experiment, and wrap the feature in the experiment's variants. + +2. Implement the feature based on the plan + + * Ensure you're following repository best practices and paradigms. + +3. Create an experiment using Amplitude MCP. + + * Ensure you follow the tool directions and schema. + * Create the experiment using the create_experiment Amplitude MCP tool. + * Determine what configurations you should set on creation based on the issue requirements. + +4. Wrap the new feature you just implemented in the new experiment. + + * Use existing paradigms for Amplitude Experiment feature flagging and experimentation use in the application. + * Ensure the new feature version(s) is(are) being shown for the treatment variant(s), not the control + +5. Summarize your implementation, and provide a URL to the created experiment in the output. diff --git a/collections/edge-ai-tasks.md b/collections/edge-ai-tasks.md index b2ba42b..27981d8 100644 --- a/collections/edge-ai-tasks.md +++ b/collections/edge-ai-tasks.md @@ -8,62 +8,12 @@ Task Researcher and Task Planner for intermediate to expert users and large code | Title | Type | Description | | ----- | ---- | ----------- | -| [Task Researcher Instructions](../chatmodes/task-researcher.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-researcher.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-researcher.chatmode.md) | Chat Mode | Task research specialist for comprehensive project analysis - Brought to you by microsoft/edge-ai [see usage](#task-researcher-instructions) | -| [Task Planner Instructions](../chatmodes/task-planner.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-planner.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-planner.chatmode.md) | Chat Mode | Task planner for creating actionable implementation plans - Brought to you by microsoft/edge-ai [see usage](#task-planner-instructions) | | [Task Plan Implementation Instructions](../instructions/task-implementation.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Ftask-implementation.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Ftask-implementation.instructions.md) | Instruction | Instructions for implementing task plans with progressive tracking and change record - Brought to you by microsoft/edge-ai [see usage](#task-plan-implementation-instructions) | +| [Task Planner Instructions](../chatmodes/task-planner.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-planner.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-planner.chatmode.md) | Chat Mode | Task planner for creating actionable implementation plans - Brought to you by microsoft/edge-ai [see usage](#task-planner-instructions) | +| [Task Researcher Instructions](../chatmodes/task-researcher.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-researcher.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Ftask-researcher.chatmode.md) | Chat Mode | Task research specialist for comprehensive project analysis - Brought to you by microsoft/edge-ai [see usage](#task-researcher-instructions) | ## Collection Usage -### Task Researcher Instructions - -Now you can iterate on research for your tasks! - -```markdown, research.prompt.md ---- -mode: task-researcher -title: Research microsoft fabric realtime intelligence terraform support ---- -Review the microsoft documentation for fabric realtime intelligence -and come up with ideas on how to implement this support into our terraform components. -``` - -Research 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. - -Also, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on. - ---- - -### Task Planner Instructions - -Also, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on. - -```markdown, task-plan.prompt.md ---- -mode: task-planner -title: Plan microsoft fabric realtime intelligence terraform support ---- -#file: .copilot-tracking/research/*-fabric-rti-blueprint-modification-research.md -Build a plan to support adding fabric rti to this project -``` - -`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. - -`task-planner` will produce three (3) files that will be used by `task-implementation.instructions.md`. - -* `.copilot-tracking/plan/*-plan.instructions.md` - - * A newly generated instructions file that has the plan as a checklist of Phases and Tasks. -* `.copilot-tracking/details/*-details.md` - - * The details for the implementation, the plan file refers to this file for specific details (important if you have a big plan). -* `.copilot-tracking/prompts/implement-*.prompt.md` - - * A newly generated prompt file that will create a `.copilot-tracking/changes/*-changes.md` file and proceed to implement the changes. - -Continue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase. - ---- - ### Task Plan Implementation Instructions Continue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase. @@ -97,4 +47,53 @@ To use these generated instructions and prompts, you'll need to update your `set --- -*This collection includes 3 curated items for **Tasks by microsoft/edge-ai**.* \ No newline at end of file +### Task Planner Instructions + +Also, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on. + +```markdown, task-plan.prompt.md +--- +mode: task-planner +title: Plan microsoft fabric realtime intelligence terraform support +--- +#file: .copilot-tracking/research/*-fabric-rti-blueprint-modification-research.md +Build a plan to support adding fabric rti to this project +``` + +`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. + +`task-planner` will produce three (3) files that will be used by `task-implementation.instructions.md`. + +* `.copilot-tracking/plan/*-plan.instructions.md` + + * A newly generated instructions file that has the plan as a checklist of Phases and Tasks. +* `.copilot-tracking/details/*-details.md` + + * The details for the implementation, the plan file refers to this file for specific details (important if you have a big plan). +* `.copilot-tracking/prompts/implement-*.prompt.md` + + * A newly generated prompt file that will create a `.copilot-tracking/changes/*-changes.md` file and proceed to implement the changes. + +Continue to use `task-planner` to iterate on the plan until you have exactly what you want done to your codebase. + +--- + +### Task Researcher Instructions + +Now you can iterate on research for your tasks! + +```markdown, research.prompt.md +--- +mode: task-researcher +title: Research microsoft fabric realtime intelligence terraform support +--- +Review the microsoft documentation for fabric realtime intelligence +and come up with ideas on how to implement this support into our terraform components. +``` + +Research 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. + +Also, task-researcher will provide additional ideas for implementation which you can work with GitHub Copilot on selecting the right one to focus on. + +--- + diff --git a/collections/java-mcp-development.md b/collections/java-mcp-development.md index ccfc63b..2844797 100644 --- a/collections/java-mcp-development.md +++ b/collections/java-mcp-development.md @@ -1,6 +1,6 @@ # Java MCP Server Development -'Complete toolkit for building Model Context Protocol servers in Java using the official MCP Java SDK with reactive streams and Spring Boot integration.' +Complete toolkit for building Model Context Protocol servers in Java using the official MCP Java SDK with reactive streams and Spring Boot integration. **Tags:** java, mcp, model-context-protocol, server-development, sdk, reactive-streams, spring-boot, reactor diff --git a/collections/partners.collection.yml b/collections/partners.collection.yml index c72789c..38487ea 100644 --- a/collections/partners.collection.yml +++ b/collections/partners.collection.yml @@ -7,7 +7,9 @@ items: kind: agent - path: agents/stackhawk-security-onboarding.agent.md kind: agent + - path: agents/amplitude-experiment-implementation.agent.md + kind: agent display: ordering: alpha show_badge: true - promoted: true + featured: true diff --git a/collections/partners.md b/collections/partners.md index bde0171..b9d4900 100644 --- a/collections/partners.md +++ b/collections/partners.md @@ -6,18 +6,11 @@ Custom agents that have been created by GitHub partners ## Items in this Collection -| Title | Type | Description | -| ----- | ---- | ----------- | -| [API Architect mode instructions](../chatmodes/api-architect.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fapi-architect.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fapi-architect.chatmode.md) | Chat Mode | Your role is that of an API architect. Help mentor the engineer by providing guidance, support, and working code. | -| [Azure Logic Apps Expert Mode](../chatmodes/azure-logic-apps-expert.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fazure-logic-apps-expert.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fazure-logic-apps-expert.chatmode.md) | Chat Mode | Expert guidance for Azure Logic Apps development focusing on workflow design, integration patterns, and JSON-based Workflow Definition Language. | -| [Blueprint Mode Codex v1](../chatmodes/blueprint-mode-codex.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fblueprint-mode-codex.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fblueprint-mode-codex.chatmode.md) | Chat Mode | Executes structured workflows with strict correctness and maintainability. Enforces a minimal tool usage policy, never assumes facts, prioritizes reproducible solutions, self-correction, and edge-case handling. | -| [Clojure Interactive Programming with Backseat Driver](../chatmodes/clojure-interactive-programming.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fclojure-interactive-programming.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fclojure-interactive-programming.chatmode.md) | Chat Mode | Expert Clojure pair programmer with REPL-first methodology, architectural oversight, and interactive problem-solving. Enforces quality standards, prevents workarounds, and develops solutions incrementally through live REPL evaluation before file modifications. | -| [Expert C++ software engineer mode instructions](../chatmodes/expert-cpp-software-engineer.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fexpert-cpp-software-engineer.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fexpert-cpp-software-engineer.chatmode.md) | Chat Mode | Provide expert C++ software engineering guidance using modern C++ and industry best practices. | -| [Gilfoyle Code Review Mode](../chatmodes/gilfoyle.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fgilfoyle.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fgilfoyle.chatmode.md) | Chat Mode | Code review and analysis with the sardonic wit and technical elitism of Bertram Gilfoyle from Silicon Valley. Prepare for brutal honesty about your code. | -| [Java MCP Expert](../chatmodes/java-mcp-expert.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fjava-mcp-expert.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fjava-mcp-expert.chatmode.md) | Chat Mode | Expert assistance for building Model Context Protocol servers in Java using reactive streams, the official MCP Java SDK, and Spring Boot integration. | -| [Meta Agentic Project Scaffold](../chatmodes/meta-agentic-project-scaffold.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fmeta-agentic-project-scaffold.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fmeta-agentic-project-scaffold.chatmode.md) | Chat Mode | Meta agentic project creation assistant to help users create and manage project workflows effectively. | -| [Power Platform Expert](../chatmodes/power-platform-expert.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fpower-platform-expert.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fpower-platform-expert.chatmode.md) | Chat Mode | Power Platform expert providing guidance on Code Apps, canvas apps, Dataverse, connectors, and Power Platform best practices | -| [Ruby MCP Expert](../chatmodes/ruby-mcp-expert.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fruby-mcp-expert.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fruby-mcp-expert.chatmode.md) | Chat Mode | Expert assistance for building Model Context Protocol servers in Ruby using the official MCP Ruby SDK gem with Rails integration. | +| Title | Type | Description | MCP Servers | +| ----- | ---- | ----------- | ----------- | +| [Amplitude Experiment Implementation](../agents/amplitude-experiment-implementation.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md) | Agent | This custom agent uses Amplitude's MCP tools to deploy new experiments inside of Amplitude, enabling seamless variant testing capabilities and rollout of product features. | | +| [Launchdarkly Flag Cleanup](../agents/launchdarkly-flag-cleanup.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md) | Agent | A specialized GitHub Copilot agent that uses the LaunchDarkly MCP server to safely automate feature flag cleanup workflows. This agent determines removal readiness, identifies the correct forward value, and creates PRs that preserve production behavior while removing obsolete flags and updating stale defaults. | [launchdarkly](https://github.com/mcp/launchdarkly/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode:mcp/by-name/launchdarkly/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode-insiders:mcp/by-name/launchdarkly/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio?vscode:mcp/by-name/launchdarkly/mcp-server) | +| [Stackhawk Security Onboarding](../agents/stackhawk-security-onboarding.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fstackhawk-security-onboarding.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fstackhawk-security-onboarding.agent.md) | Agent | Automatically set up StackHawk security testing for your repository with generated configuration and GitHub Actions workflow | [stackhawk-mcp](https://github.com/mcp/stackhawk-mcp/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode:mcp/by-name/stackhawk-mcp/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?vscode-insiders:mcp/by-name/stackhawk-mcp/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install_MCP-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio?vscode:mcp/by-name/stackhawk-mcp/mcp-server) | --- -*This collection includes 10 curated items for **Partners**.* \ No newline at end of file +*This collection includes 3 curated items for **Partners**.* \ No newline at end of file diff --git a/collections/php-mcp-development.md b/collections/php-mcp-development.md index 5294f02..d115f82 100644 --- a/collections/php-mcp-development.md +++ b/collections/php-mcp-development.md @@ -1,6 +1,6 @@ # PHP MCP Server Development -'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' +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 **Tags:** php, mcp, model-context-protocol, server-development, sdk, attributes, composer diff --git a/collections/ruby-mcp-development.md b/collections/ruby-mcp-development.md index f483f42..bc37a04 100644 --- a/collections/ruby-mcp-development.md +++ b/collections/ruby-mcp-development.md @@ -1,6 +1,6 @@ # Ruby MCP Server Development -'Complete toolkit for building Model Context Protocol servers in Ruby using the official MCP Ruby SDK gem with Rails integration support.' +Complete toolkit for building Model Context Protocol servers in Ruby using the official MCP Ruby SDK gem with Rails integration support. **Tags:** ruby, mcp, model-context-protocol, server-development, sdk, rails, gem diff --git a/collections/rust-mcp-development.md b/collections/rust-mcp-development.md index 7085158..70e1c69 100644 --- a/collections/rust-mcp-development.md +++ b/collections/rust-mcp-development.md @@ -9,7 +9,7 @@ Build high-performance Model Context Protocol servers in Rust using the official | Title | Type | Description | | ----- | ---- | ----------- | | [Rust MCP Server Development Best Practices](../instructions/rust-mcp-server.instructions.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Frust-mcp-server.instructions.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/instructions?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Frust-mcp-server.instructions.md) | Instruction | Best practices for building Model Context Protocol servers in Rust using the official rmcp SDK with async/await patterns | -| [Rust MCP Server Generator](../prompts/rust-mcp-server-generator.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md) | Prompt | Generate a complete Rust Model Context Protocol server project with tools, prompts, resources, and tests using the official rmcp SDK | +| [Rust Mcp Server Generator](../prompts/rust-mcp-server-generator.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Frust-mcp-server-generator.prompt.md) | Prompt | Generate a complete Rust Model Context Protocol server project with tools, prompts, resources, and tests using the official rmcp SDK | | [Rust MCP Expert](../chatmodes/rust-mcp-expert.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Frust-mcp-expert.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Frust-mcp-expert.chatmode.md) | Chat Mode | Expert assistant for Rust MCP server development using the rmcp SDK with tokio async runtime [see usage](#rust-mcp-expert) | ## Collection Usage diff --git a/collections/swift-mcp-development.md b/collections/swift-mcp-development.md index 66c08c9..5fd8da1 100644 --- a/collections/swift-mcp-development.md +++ b/collections/swift-mcp-development.md @@ -1,6 +1,6 @@ # Swift MCP Server Development -'Comprehensive collection for building Model Context Protocol servers in Swift using the official MCP Swift SDK with modern concurrency features.' +Comprehensive collection for building Model Context Protocol servers in Swift using the official MCP Swift SDK with modern concurrency features. **Tags:** swift, mcp, model-context-protocol, server-development, sdk, ios, macos, concurrency, actor, async-await diff --git a/collections/technical-spike.md b/collections/technical-spike.md index 88d6f89..389c853 100644 --- a/collections/technical-spike.md +++ b/collections/technical-spike.md @@ -8,8 +8,5 @@ Tools for creation, management and research of technical spikes to reduce unknow | Title | Type | Description | | ----- | ---- | ----------- | -| [Technical spike research mode](../chatmodes/research-technical-spike.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fresearch-technical-spike.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fresearch-technical-spike.chatmode.md) | Chat Mode | Systematically research and validate technical spike documents through exhaustive investigation and controlled experimentation. | | [Create Technical Spike Document](../prompts/create-technical-spike.prompt.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcreate-technical-spike.prompt.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/prompt?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fcreate-technical-spike.prompt.md) | Prompt | Create time-boxed technical spike documents for researching and resolving critical development decisions before implementation. | - ---- -*This collection includes 2 curated items for **Technical Spike**.* \ No newline at end of file +| [Technical spike research mode](../chatmodes/research-technical-spike.chatmode.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fresearch-technical-spike.chatmode.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/chatmode?url=vscode-insiders%3Achat-mode%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fchatmodes%2Fresearch-technical-spike.chatmode.md) | Chat Mode | Systematically research and validate technical spike documents through exhaustive investigation and controlled experimentation. | diff --git a/create-collection.js b/create-collection.js index f95f292..125c405 100755 --- a/create-collection.js +++ b/create-collection.js @@ -6,7 +6,7 @@ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, - output: process.stdout + output: process.stdout, }); function prompt(question) { @@ -22,20 +22,20 @@ function parseArgs() { // simple long/short option parsing for (let i = 0; i < args.length; i++) { const a = args[i]; - if (a === '--id' || a === '-i') { + if (a === "--id" || a === "-i") { out.id = args[i + 1]; i++; - } else if (a.startsWith('--id=')) { - out.id = a.split('=')[1]; - } else if (a === '--tags' || a === '-t') { + } else if (a.startsWith("--id=")) { + out.id = a.split("=")[1]; + } else if (a === "--tags" || a === "-t") { out.tags = args[i + 1]; i++; - } else if (a.startsWith('--tags=')) { - out.tags = a.split('=')[1]; - } else if (!a.startsWith('-') && !out.id) { + } else if (a.startsWith("--tags=")) { + out.tags = a.split("=")[1]; + } else if (!a.startsWith("-") && !out.id) { // first positional -> id out.id = a; - } else if (!a.startsWith('-') && out.id && !out.tags) { + } else if (!a.startsWith("-") && out.id && !out.tags) { // second positional -> tags out.tags = a; } @@ -43,7 +43,7 @@ function parseArgs() { // normalize tags to string (comma separated) or undefined if (Array.isArray(out.tags)) { - out.tags = out.tags.join(','); + out.tags = out.tags.join(","); } return out; @@ -69,16 +69,23 @@ async function createCollectionTemplate() { } if (!/^[a-z0-9-]+$/.test(collectionId)) { - console.error("❌ Collection ID must contain only lowercase letters, numbers, and hyphens"); + console.error( + "❌ Collection ID must contain only lowercase letters, numbers, and hyphens" + ); process.exit(1); } const collectionsDir = path.join(__dirname, "collections"); - const filePath = path.join(collectionsDir, `${collectionId}.collection.yml`); + const filePath = path.join( + collectionsDir, + `${collectionId}.collection.yml` + ); // Check if file already exists if (fs.existsSync(filePath)) { - console.log(`⚠️ Collection ${collectionId} already exists at ${filePath}`); + console.log( + `⚠️ Collection ${collectionId} already exists at ${filePath}` + ); console.log("💡 Please edit that file instead or choose a different ID."); process.exit(1); } @@ -91,17 +98,21 @@ async function createCollectionTemplate() { // Get collection name const defaultName = collectionId .split("-") - .map(word => word.charAt(0).toUpperCase() + word.slice(1)) + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join(" "); - let collectionName = await prompt(`Collection name (default: ${defaultName}): `); + let collectionName = await prompt( + `Collection name (default: ${defaultName}): ` + ); if (!collectionName.trim()) { collectionName = defaultName; } // Get description const defaultDescription = `A collection of related prompts, instructions, and chat modes for ${collectionName.toLowerCase()}.`; - let description = await prompt(`Description (default: ${defaultDescription}): `); + let description = await prompt( + `Description (default: ${defaultDescription}): ` + ); if (!description.trim()) { description = defaultDescription; } @@ -110,11 +121,17 @@ async function createCollectionTemplate() { let tags = []; let tagInput = parsed.tags; if (!tagInput) { - tagInput = await prompt("Tags (comma-separated, or press Enter for defaults): "); + tagInput = await prompt( + "Tags (comma-separated, or press Enter for defaults): " + ); } if (tagInput && tagInput.toString().trim()) { - tags = tagInput.toString().split(",").map(tag => tag.trim()).filter(tag => tag); + tags = tagInput + .toString() + .split(",") + .map((tag) => tag.trim()) + .filter((tag) => tag); } else { // Generate some default tags from the collection ID tags = collectionId.split("-").slice(0, 3); @@ -134,6 +151,11 @@ items: # kind: instruction # - path: chatmodes/example.chatmode.md # kind: chat-mode + # - path: agents/example.agent.md + # kind: agent + # usage: | + # This agent requires the example MCP server to be installed. + # Configure any required environment variables (e.g., EXAMPLE_API_KEY). display: ordering: alpha # or "manual" to preserve the order above show_badge: false # set to true to show collection badge on items @@ -148,7 +170,6 @@ display: console.log("4. Run 'node update-readme.js' to generate documentation"); console.log("\n📄 Collection template contents:"); console.log(template); - } catch (error) { console.error(`❌ Error creating collection template: ${error.message}`); process.exit(1); diff --git a/package-lock.json b/package-lock.json index 8a1c6d4..dc97dee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "awesome-copilot", "version": "1.0.0", "license": "MIT", + "dependencies": { + "js-yaml": "^4.1.0" + }, "devDependencies": { "all-contributors-cli": "^6.26.1" } @@ -92,6 +95,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -335,6 +344,18 @@ "node": ">=8" } }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/json-fixer": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/json-fixer/-/json-fixer-1.6.15.tgz", diff --git a/package.json b/package.json index e37dca1..d575e26 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,9 @@ "version": "1.0.0", "description": "Enhance your GitHub Copilot experience with community-contributed instructions, prompts, and chat modes", "main": "update-readme.js", + "private": true, "scripts": { + "start": "node run build", "build": "node update-readme.js", "contributors:add": "all-contributors add", "contributors:generate": "all-contributors generate", @@ -24,5 +26,8 @@ "license": "MIT", "devDependencies": { "all-contributors-cli": "^6.26.1" + }, + "dependencies": { + "js-yaml": "^4.1.0" } } diff --git a/update-readme.js b/update-readme.js index bc9f8f1..5ba0197 100755 --- a/update-readme.js +++ b/update-readme.js @@ -2,7 +2,11 @@ const fs = require("fs"); const path = require("path"); -const { parseCollectionYaml } = require("./yaml-parser"); +const { + parseCollectionYaml, + extractMcpServers, + parseAgentFrontmatter, +} = require("./yaml-parser"); // Template sections for the README const TEMPLATES = { @@ -68,9 +72,29 @@ Curated collections of related prompts, instructions, and chat modes organized a - Or browse to the individual files to copy content manually - Collections help you discover related customizations you might have missed`, - promotedCollectionsSection: `## 🌟 Featured Collections + featuredCollectionsSection: `## 🌟 Featured Collections Discover our curated collections of prompts, instructions, and chat modes organized around specific themes and workflows.`, + + agentsSection: `## 🤖 Custom Agents + +Custom GitHub Copilot agents that integrate with MCP servers to provide enhanced capabilities for specific workflows and tools.`, + + agentsUsage: `### How to Use Custom Agents + +**To Install:** +- Click the **VS Code** or **VS Code Insiders** install button for the agent you want to use +- Download the \`*.agent.md\` file and manually add it to your repository + +**MCP Server Setup:** +- Each agent may require one or more MCP servers to function +- Click the MCP server to view it on the GitHub MCP registry +- Agents will automatically install the MCP servers they need when activated + +**To Activate/Use:** +- Access installed agents through the VS Code Chat interface, through Copilot CLI, or assign them in Coding Agent +- Agents will have access to tools from configured MCP servers +- Follow agent-specific instructions for optimal usage`, }; // Add error handling utility @@ -120,6 +144,19 @@ function extractTitle(filePath) { const cleanTitle = afterTitle.replace(/^['"]|['"]$/g, ""); return cleanTitle; } + + // Look for name field in frontmatter + if (line.includes("name:")) { + // Extract everything after 'name:' + const afterName = line.substring(line.indexOf("name:") + 5).trim(); + // Remove quotes if present + const cleanName = afterName.replace(/^['"]|['"]$/g, ""); + // Convert hyphenated lowercase to title case + return cleanName + .split("-") + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(" "); + } } } @@ -222,6 +259,15 @@ function extractTitle(filePath) { function extractDescription(filePath) { return safeFileOperation( () => { + // Special handling for agent files + if (filePath.endsWith(".agent.md")) { + const agent = parseAgentFrontmatter(filePath); + if (agent && agent.description) { + return agent.description; + } + return null; + } + const content = fs.readFileSync(filePath, "utf8"); // Parse frontmatter for description (for both prompts and instructions) @@ -316,6 +362,7 @@ const AKA_INSTALL_URLS = { instructions: "https://aka.ms/awesome-copilot/install/instructions", prompt: "https://aka.ms/awesome-copilot/install/prompt", mode: "https://aka.ms/awesome-copilot/install/chatmode", + agent: "https://aka.ms/awesome-copilot/install/agent", }; function makeBadges(link, type) { @@ -343,7 +390,7 @@ function generateInstructionsSection(instructionsDir) { // Get all instruction files const instructionFiles = fs .readdirSync(instructionsDir) - .filter((file) => file.endsWith(".md")); + .filter((file) => file.endsWith(".instructions.md")); // Map instruction files to objects with title for sorting const instructionEntries = instructionFiles.map((file) => { @@ -449,56 +496,146 @@ function generatePromptsSection(promptsDir) { * Generate the chat modes section with a table of all chat modes */ function generateChatModesSection(chatmodesDir) { - // Check if chatmodes directory exists - if (!fs.existsSync(chatmodesDir)) { - console.log("Chat modes directory does not exist"); + return generateUnifiedModeSection({ + dir: chatmodesDir, + extension: ".chatmode.md", + linkPrefix: "chatmodes", + badgeType: "mode", + includeMcpServers: false, + sectionTemplate: TEMPLATES.chatmodesSection, + usageTemplate: TEMPLATES.chatmodesUsage, + }); +} + +/** + * Generate MCP server links for an agent + * @param {string[]} servers - Array of MCP server names + * @returns {string} - Formatted MCP server links with badges + */ +function generateMcpServerLinks(servers) { + if (!servers || servers.length === 0) { return ""; } - // Get all chat mode files - const chatmodeFiles = fs - .readdirSync(chatmodesDir) - .filter((file) => file.endsWith(".chatmode.md")); + const badges = [ + { + type: "vscode", + url: "https://img.shields.io/badge/Install_MCP-VS_Code-0098FF?style=flat-square", + badgeUrl: (serverName) => + `https://aka.ms/awesome-copilot/install/mcp-vscode?vscode:mcp/by-name/${serverName}/mcp-server`, + }, + { + type: "insiders", + url: "https://img.shields.io/badge/Install_MCP-VS_Code_Insiders-24bfa5?style=flat-square", + badgeUrl: (serverName) => + `https://aka.ms/awesome-copilot/install/mcp-vscode?vscode-insiders:mcp/by-name/${serverName}/mcp-server`, + }, + { + type: "visualstudio", + url: "https://img.shields.io/badge/Install_MCP-Visual_Studio-C16FDE?style=flat-square", + badgeUrl: (serverName) => + `https://aka.ms/awesome-copilot/install/mcp-visualstudio?vscode:mcp/by-name/${serverName}/mcp-server`, + }, + ]; - // Map chat mode files to objects with title for sorting - const chatmodeEntries = chatmodeFiles.map((file) => { - const filePath = path.join(chatmodesDir, file); - const title = extractTitle(filePath); - return { file, filePath, title }; + return servers + .map((serverName) => { + const registryUrl = `https://github.com/mcp/${serverName}/mcp-server`; + const badgeUrls = badges + .map( + (badge) => + `[![Install MCP](${badge.url})](${badge.badgeUrl(serverName)})` + ) + .join("
"); + return `[${serverName}](${registryUrl})
${badgeUrls}`; + }) + .join("
"); +} + +/** + * Generate the agents section with a table of all agents + */ +function generateAgentsSection(agentsDir) { + return generateUnifiedModeSection({ + dir: agentsDir, + extension: ".agent.md", + linkPrefix: "agents", + badgeType: "agent", + includeMcpServers: true, + sectionTemplate: TEMPLATES.agentsSection, + usageTemplate: TEMPLATES.agentsUsage, + }); +} + +/** + * Unified generator for chat modes & agents (future consolidation) + * @param {Object} cfg + * @param {string} cfg.dir - Directory path + * @param {string} cfg.extension - File extension to match (e.g. .chatmode.md, .agent.md) + * @param {string} cfg.linkPrefix - Link prefix folder name + * @param {string} cfg.badgeType - Badge key (mode, agent) + * @param {boolean} cfg.includeMcpServers - Whether to include MCP server column + * @param {string} cfg.sectionTemplate - Section heading template + * @param {string} cfg.usageTemplate - Usage subheading template + */ +function generateUnifiedModeSection(cfg) { + const { + dir, + extension, + linkPrefix, + badgeType, + includeMcpServers, + sectionTemplate, + usageTemplate, + } = cfg; + + if (!fs.existsSync(dir)) { + console.log(`Directory missing for unified mode section: ${dir}`); + return ""; + } + + const files = fs.readdirSync(dir).filter((f) => f.endsWith(extension)); + + const entries = files.map((file) => { + const filePath = path.join(dir, file); + return { file, filePath, title: extractTitle(filePath) }; }); - // Sort by title alphabetically - chatmodeEntries.sort((a, b) => a.title.localeCompare(b.title)); + entries.sort((a, b) => a.title.localeCompare(b.title)); + console.log( + `Unified mode generator: ${entries.length} files for extension ${extension}` + ); + if (entries.length === 0) return ""; - console.log(`Found ${chatmodeEntries.length} chat mode files`); + let header = "| Title | Description |"; + if (includeMcpServers) header += " MCP Servers |"; + let separator = "| ----- | ----------- |"; + if (includeMcpServers) separator += " ----------- |"; - // If no chat modes, return empty string - if (chatmodeEntries.length === 0) { - return ""; - } + let content = `${header}\n${separator}\n`; - // Create table header - let chatmodesContent = "| Title | Description |\n| ----- | ----------- |\n"; + for (const { file, filePath, title } of entries) { + const link = encodeURI(`${linkPrefix}/${file}`); + const description = extractDescription(filePath); + const badges = makeBadges(link, badgeType); + let mcpServerCell = ""; + if (includeMcpServers) { + const servers = extractMcpServers(filePath); + mcpServerCell = generateMcpServerLinks(servers); + } - // Generate table rows for each chat mode file - for (const entry of chatmodeEntries) { - const { file, filePath, title } = entry; - const link = encodeURI(`chatmodes/${file}`); - - // Check if there's a description in the frontmatter - const customDescription = extractDescription(filePath); - - // Create badges for installation links - const badges = makeBadges(link, "mode"); - - if (customDescription && customDescription !== "null") { - chatmodesContent += `| [${title}](${link})
${badges} | ${customDescription} |\n`; + if (includeMcpServers) { + content += `| [${title}](${link})
${badges} | ${ + description && description !== "null" ? description : "" + } | ${mcpServerCell} |\n`; } else { - chatmodesContent += `| [${title}](${link})
${badges} | | |\n`; + content += `| [${title}](${link})
${badges} | ${ + description && description !== "null" ? description : "" + } |\n`; } } - return `${TEMPLATES.chatmodesSection}\n${TEMPLATES.chatmodesUsage}\n\n${chatmodesContent}`; + return `${sectionTemplate}\n${usageTemplate}\n\n${content}`; } /** @@ -530,28 +667,28 @@ function generateCollectionsSection(collectionsDir) { const collectionId = collection.id || path.basename(file, ".collection.yml"); const name = collection.name || collectionId; - const isPromoted = collection.display?.promoted === true; - return { file, filePath, collection, collectionId, name, isPromoted }; + const isFeatured = collection.display?.featured === true; + return { file, filePath, collection, collectionId, name, isFeatured }; }) .filter((entry) => entry !== null); // Remove failed parses - // Separate promoted and regular collections - const promotedCollections = collectionEntries.filter( - (entry) => entry.isPromoted + // Separate featured and regular collections + const featuredCollections = collectionEntries.filter( + (entry) => entry.isFeatured ); const regularCollections = collectionEntries.filter( - (entry) => !entry.isPromoted + (entry) => !entry.isFeatured ); // Sort each group alphabetically by name - promotedCollections.sort((a, b) => a.name.localeCompare(b.name)); + featuredCollections.sort((a, b) => a.name.localeCompare(b.name)); regularCollections.sort((a, b) => a.name.localeCompare(b.name)); - // Combine: promoted first, then regular - const sortedEntries = [...promotedCollections, ...regularCollections]; + // Combine: featured first, then regular + const sortedEntries = [...featuredCollections, ...regularCollections]; console.log( - `Found ${collectionEntries.length} collection files (${promotedCollections.length} promoted)` + `Found ${collectionEntries.length} collection files (${featuredCollections.length} featured)` ); // If no collections, return empty string @@ -565,13 +702,13 @@ function generateCollectionsSection(collectionsDir) { // Generate table rows for each collection file for (const entry of sortedEntries) { - const { collection, collectionId, name, isPromoted } = entry; + const { collection, collectionId, name, isFeatured } = entry; const description = collection.description || "No description"; const itemCount = collection.items ? collection.items.length : 0; const tags = collection.tags ? collection.tags.join(", ") : ""; const link = `collections/${collectionId}.md`; - const displayName = isPromoted ? `⭐ ${name}` : name; + const displayName = isFeatured ? `⭐ ${name}` : name; collectionsContent += `| [${displayName}](${link}) | ${description} | ${itemCount} items | ${tags} |\n`; } @@ -580,9 +717,9 @@ function generateCollectionsSection(collectionsDir) { } /** - * Generate the promoted collections section for the main README + * Generate the featured collections section for the main README */ -function generatePromotedCollectionsSection(collectionsDir) { +function generateFeaturedCollectionsSection(collectionsDir) { // Check if collections directory exists if (!fs.existsSync(collectionsDir)) { return ""; @@ -593,8 +730,8 @@ function generatePromotedCollectionsSection(collectionsDir) { .readdirSync(collectionsDir) .filter((file) => file.endsWith(".collection.yml")); - // Map collection files to objects with name for sorting, filter for promoted - const promotedCollections = collectionFiles + // Map collection files to objects with name for sorting, filter for featured + const featuredCollections = collectionFiles .map((file) => { const filePath = path.join(collectionsDir, file); return safeFileOperation( @@ -602,8 +739,8 @@ function generatePromotedCollectionsSection(collectionsDir) { const collection = parseCollectionYaml(filePath); if (!collection) return null; - // Only include collections with promoted: true - if (!collection.display?.promoted) return null; + // Only include collections with featured: true + if (!collection.display?.featured) return null; const collectionId = collection.id || path.basename(file, ".collection.yml"); @@ -626,31 +763,31 @@ function generatePromotedCollectionsSection(collectionsDir) { null ); }) - .filter((entry) => entry !== null); // Remove non-promoted and failed parses + .filter((entry) => entry !== null); // Remove non-featured and failed parses // Sort by name alphabetically - promotedCollections.sort((a, b) => a.name.localeCompare(b.name)); + featuredCollections.sort((a, b) => a.name.localeCompare(b.name)); - console.log(`Found ${promotedCollections.length} promoted collection(s)`); + console.log(`Found ${featuredCollections.length} featured collection(s)`); - // If no promoted collections, return empty string - if (promotedCollections.length === 0) { + // If no featured collections, return empty string + if (featuredCollections.length === 0) { return ""; } // Create table header - let promotedContent = + let featuredContent = "| Name | Description | Items | Tags |\n| ---- | ----------- | ----- | ---- |\n"; - // Generate table rows for each promoted collection - for (const entry of promotedCollections) { + // Generate table rows for each featured collection + for (const entry of featuredCollections) { const { collectionId, name, description, tags, itemCount } = entry; const readmeLink = `collections/${collectionId}.md`; - promotedContent += `| [${name}](${readmeLink}) | ${description} | ${itemCount} items | ${tags} |\n`; + featuredContent += `| [${name}](${readmeLink}) | ${description} | ${itemCount} items | ${tags} |\n`; } - return `${TEMPLATES.promotedCollectionsSection}\n\n${promotedContent}`; + return `${TEMPLATES.featuredCollectionsSection}\n\n${featuredContent}`; } /** @@ -672,7 +809,16 @@ function generateCollectionReadme(collection, collectionId) { } content += `## Items in this Collection\n\n`; - content += `| Title | Type | Description |\n| ----- | ---- | ----------- |\n`; + + // Check if collection has any agents to determine table structure (future: chatmodes may migrate) + const hasAgents = collection.items.some((item) => item.kind === "agent"); + + // Generate appropriate table header + if (hasAgents) { + content += `| Title | Type | Description | MCP Servers |\n| ----- | ---- | ----------- | ----------- |\n`; + } else { + content += `| Title | Type | Description |\n| ----- | ---- | ----------- |\n`; + } let collectionUsageHeader = "## Collection Usage\n\n"; let collectionUsageContent = []; @@ -697,6 +843,8 @@ function generateCollectionReadme(collection, collectionId) { ? "Chat Mode" : item.kind === "instruction" ? "Instruction" + : item.kind === "agent" + ? "Agent" : "Prompt"; const link = `../${item.path}`; @@ -707,6 +855,8 @@ function generateCollectionReadme(collection, collectionId) { ? "instructions" : item.kind === "chat-mode" ? "mode" + : item.kind === "agent" + ? "agent" : "prompt" ); @@ -716,7 +866,17 @@ function generateCollectionReadme(collection, collectionId) { .toLowerCase()})` : description; - content += `| [${title}](${link})
${badges} | ${typeDisplay} | ${usageDescription} |\n`; + // Generate MCP server column if collection has agents + content += buildCollectionRow({ + hasAgents, + title, + link, + badges, + typeDisplay, + usageDescription, + filePath, + kind: item.kind, + }); // Generate Usage section for each collection if (item.usage && item.usage.trim()) { collectionUsageContent.push( @@ -740,6 +900,30 @@ function generateCollectionReadme(collection, collectionId) { return content; } +/** + * Build a single markdown table row for a collection item. + * Handles optional MCP server column when agents are present. + */ +function buildCollectionRow({ + hasAgents, + title, + link, + badges, + typeDisplay, + usageDescription, + filePath, + kind, +}) { + if (hasAgents) { + // Only agents currently have MCP servers; future migration may extend to chat modes. + const mcpServers = kind === "agent" ? extractMcpServers(filePath) : []; + const mcpServerCell = + mcpServers.length > 0 ? generateMcpServerLinks(mcpServers) : ""; + return `| [${title}](${link})
${badges} | ${typeDisplay} | ${usageDescription} | ${mcpServerCell} |\n`; + } + return `| [${title}](${link})
${badges} | ${typeDisplay} | ${usageDescription} |\n`; +} + // Utility: write file only if content changed function writeFileIfChanged(filePath, content) { const exists = fs.existsSync(filePath); @@ -776,6 +960,7 @@ try { const instructionsDir = path.join(__dirname, "instructions"); const promptsDir = path.join(__dirname, "prompts"); const chatmodesDir = path.join(__dirname, "chatmodes"); + const agentsDir = path.join(__dirname, "agents"); const collectionsDir = path.join(__dirname, "collections"); // Compose headers for standalone files by converting section headers to H1 @@ -785,6 +970,7 @@ try { ); const promptsHeader = TEMPLATES.promptsSection.replace(/^##\s/m, "# "); const chatmodesHeader = TEMPLATES.chatmodesSection.replace(/^##\s/m, "# "); + const agentsHeader = TEMPLATES.agentsSection.replace(/^##\s/m, "# "); const collectionsHeader = TEMPLATES.collectionsSection.replace( /^##\s/m, "# " @@ -809,6 +995,14 @@ try { TEMPLATES.chatmodesUsage ); + // Generate agents README + const agentsReadme = buildCategoryReadme( + generateAgentsSection, + agentsDir, + agentsHeader, + TEMPLATES.agentsUsage + ); + // Generate collections README const collectionsReadme = buildCategoryReadme( generateCollectionsSection, @@ -827,6 +1021,7 @@ try { path.join(__dirname, "README.chatmodes.md"), chatmodesReadme ); + writeFileIfChanged(path.join(__dirname, "README.agents.md"), agentsReadme); writeFileIfChanged( path.join(__dirname, "README.collections.md"), collectionsReadme @@ -857,17 +1052,17 @@ try { } } - // Generate promoted collections section and update main README.md - console.log("Updating main README.md with promoted collections..."); - const promotedSection = generatePromotedCollectionsSection(collectionsDir); + // Generate featured collections section and update main README.md + console.log("Updating main README.md with featured collections..."); + const featuredSection = generateFeaturedCollectionsSection(collectionsDir); - if (promotedSection) { + if (featuredSection) { const mainReadmePath = path.join(__dirname, "README.md"); if (fs.existsSync(mainReadmePath)) { let readmeContent = fs.readFileSync(mainReadmePath, "utf8"); - // Define markers to identify where to insert the promoted collections + // Define markers to identify where to insert the featured collections const startMarker = "## 🌟 Featured Collections"; const endMarker = "## MCP Server"; @@ -882,7 +1077,7 @@ try { const beforeSection = readmeContent.substring(0, startIndex); const afterSection = readmeContent.substring(endIndex); readmeContent = - beforeSection + promotedSection + "\n\n" + afterSection; + beforeSection + featuredSection + "\n\n" + afterSection; } } else { // Section doesn't exist, insert it before "## MCP Server" @@ -890,17 +1085,17 @@ try { if (mcpIndex !== -1) { const beforeMcp = readmeContent.substring(0, mcpIndex); const afterMcp = readmeContent.substring(mcpIndex); - readmeContent = beforeMcp + promotedSection + "\n\n" + afterMcp; + readmeContent = beforeMcp + featuredSection + "\n\n" + afterMcp; } } writeFileIfChanged(mainReadmePath, readmeContent); - console.log("Main README.md updated with promoted collections"); + console.log("Main README.md updated with featured collections"); } else { - console.warn("README.md not found, skipping promoted collections update"); + console.warn("README.md not found, skipping featured collections update"); } } else { - console.log("No promoted collections found to add to README.md"); + console.log("No featured collections found to add to README.md"); } } catch (error) { console.error(`Error generating category README files: ${error.message}`); diff --git a/validate-collections.js b/validate-collections.js index 498911b..a0fa376 100755 --- a/validate-collections.js +++ b/validate-collections.js @@ -2,7 +2,7 @@ const fs = require("fs"); const path = require("path"); -const { parseCollectionYaml } = require("./yaml-parser"); +const { parseCollectionYaml, parseAgentFrontmatter } = require("./yaml-parser"); // Maximum number of items allowed in a collection const MAX_COLLECTION_ITEMS = 50; @@ -72,6 +72,98 @@ function validateCollectionTags(tags) { return null; } +function validateAgentFile(filePath, itemNumber) { + try { + const agent = parseAgentFrontmatter(filePath); + + if (!agent) { + return `Item ${filePath} agent file could not be parsed`; + } + + // Validate name field + if (!agent.name || typeof agent.name !== "string") { + return `Item ${filePath} agent must have a 'name' field`; + } + if (!/^[a-z0-9-]+$/.test(agent.name)) { + return `Item ${filePath} agent name must contain only lowercase letters, numbers, and hyphens`; + } + if (agent.name.length < 1 || agent.name.length > 50) { + return `Item ${filePath} agent name must be between 1 and 50 characters`; + } + + // Validate description field + if (!agent.description || typeof agent.description !== "string") { + return `Item ${filePath} agent must have a 'description' field`; + } + if (agent.description.length < 1 || agent.description.length > 500) { + return `Item ${filePath} agent description must be between 1 and 500 characters`; + } + + // Validate tools field (optional) + if (agent.tools !== undefined && !Array.isArray(agent.tools)) { + return `Item ${filePath} agent 'tools' must be an array`; + } + + // Validate mcp-servers field (optional) + if (agent["mcp-servers"]) { + if ( + typeof agent["mcp-servers"] !== "object" || + Array.isArray(agent["mcp-servers"]) + ) { + return `Item ${filePath} agent 'mcp-servers' must be an object`; + } + + // Validate each MCP server configuration + for (const [serverName, serverConfig] of Object.entries( + agent["mcp-servers"] + )) { + if (!serverConfig || typeof serverConfig !== "object") { + return `Item ${filePath} agent MCP server '${serverName}' must be an object`; + } + + if (!serverConfig.type || typeof serverConfig.type !== "string") { + return `Item ${filePath} agent MCP server '${serverName}' must have a 'type' field`; + } + + // For local type servers, command is required + if (serverConfig.type === "local" && !serverConfig.command) { + return `Item ${filePath} agent MCP server '${serverName}' with type 'local' must have a 'command' field`; + } + + // Validate args if present + if ( + serverConfig.args !== undefined && + !Array.isArray(serverConfig.args) + ) { + return `Item ${filePath} agent MCP server '${serverName}' 'args' must be an array`; + } + + // Validate tools if present + if ( + serverConfig.tools !== undefined && + !Array.isArray(serverConfig.tools) + ) { + return `Item ${filePath} agent MCP server '${serverName}' 'tools' must be an array`; + } + + // Validate env if present + if (serverConfig.env !== undefined) { + if ( + typeof serverConfig.env !== "object" || + Array.isArray(serverConfig.env) + ) { + return `Item ${filePath} agent MCP server '${serverName}' 'env' must be an object`; + } + } + } + } + + return null; // All validations passed + } catch (error) { + return `Item ${filePath} agent file validation failed: ${error.message}`; + } +} + function validateCollectionItems(items) { if (!items || !Array.isArray(items)) { return "Items is required and must be an array"; @@ -94,8 +186,10 @@ function validateCollectionItems(items) { if (!item.kind || typeof item.kind !== "string") { return `Item ${i + 1} must have a kind string`; } - if (!["prompt", "instruction", "chat-mode"].includes(item.kind)) { - return `Item ${i + 1} kind must be one of: prompt, instruction, chat-mode`; + if (!["prompt", "instruction", "chat-mode", "agent"].includes(item.kind)) { + return `Item ${ + i + 1 + } kind must be one of: prompt, instruction, chat-mode, agent`; } // Validate file path exists @@ -106,13 +200,35 @@ function validateCollectionItems(items) { // Validate path pattern matches kind if (item.kind === "prompt" && !item.path.endsWith(".prompt.md")) { - return `Item ${i + 1} kind is "prompt" but path doesn't end with .prompt.md`; + return `Item ${ + i + 1 + } kind is "prompt" but path doesn't end with .prompt.md`; } - if (item.kind === "instruction" && !item.path.endsWith(".instructions.md")) { - return `Item ${i + 1} kind is "instruction" but path doesn't end with .instructions.md`; + if ( + item.kind === "instruction" && + !item.path.endsWith(".instructions.md") + ) { + return `Item ${ + i + 1 + } kind is "instruction" but path doesn't end with .instructions.md`; } if (item.kind === "chat-mode" && !item.path.endsWith(".chatmode.md")) { - return `Item ${i + 1} kind is "chat-mode" but path doesn't end with .chatmode.md`; + return `Item ${ + i + 1 + } kind is "chat-mode" but path doesn't end with .chatmode.md`; + } + if (item.kind === "agent" && !item.path.endsWith(".agent.md")) { + return `Item ${ + i + 1 + } kind is "agent" but path doesn't end with .agent.md`; + } + + // Validate agent-specific frontmatter + if (item.kind === "agent") { + const agentValidation = validateAgentFile(filePath, i + 1); + if (agentValidation) { + return agentValidation; + } } } return null; @@ -125,14 +241,17 @@ function validateCollectionDisplay(display) { if (display) { // Normalize ordering and show_badge in case the YAML parser left inline comments const normalize = (val) => { - if (typeof val !== 'string') return val; + if (typeof val !== "string") return val; // Strip any inline comment starting with '#' - const hashIndex = val.indexOf('#'); + const hashIndex = val.indexOf("#"); if (hashIndex !== -1) { val = val.substring(0, hashIndex).trim(); } // Also strip surrounding quotes if present - if ((val.startsWith("\"") && val.endsWith("\"")) || (val.startsWith("'") && val.endsWith("'"))) { + if ( + (val.startsWith('"') && val.endsWith('"')) || + (val.startsWith("'") && val.endsWith("'")) + ) { val = val.substring(1, val.length - 1); } return val.trim(); @@ -149,11 +268,11 @@ function validateCollectionDisplay(display) { const raw = display.show_badge; const normalizedBadge = normalize(raw); // Accept boolean or string boolean values - if (typeof normalizedBadge === 'string') { - if (!['true', 'false'].includes(normalizedBadge.toLowerCase())) { + if (typeof normalizedBadge === "string") { + if (!["true", "false"].includes(normalizedBadge.toLowerCase())) { return "Display show_badge must be boolean"; } - } else if (typeof normalizedBadge !== 'boolean') { + } else if (typeof normalizedBadge !== "boolean") { return "Display show_badge must be boolean"; } } @@ -224,7 +343,7 @@ function validateCollections() { if (errors.length > 0) { console.error(`❌ Validation errors in ${file}:`); - errors.forEach(error => console.error(` - ${error}`)); + errors.forEach((error) => console.error(` - ${error}`)); hasErrors = true; } else { console.log(`✅ ${file} is valid`); @@ -233,7 +352,9 @@ function validateCollections() { // Check for duplicate IDs if (collection.id) { if (usedIds.has(collection.id)) { - console.error(`❌ Duplicate collection ID "${collection.id}" found in ${file}`); + console.error( + `❌ Duplicate collection ID "${collection.id}" found in ${file}` + ); hasErrors = true; } else { usedIds.add(collection.id); diff --git a/yaml-parser.js b/yaml-parser.js index 40ede78..cc00164 100644 --- a/yaml-parser.js +++ b/yaml-parser.js @@ -1,5 +1,6 @@ -// Simple YAML parser for collection files +// YAML parser for collection files and agent frontmatter const fs = require("fs"); +const yaml = require("js-yaml"); function safeFileOperation(operation, filePath, defaultValue = null) { try { @@ -10,159 +11,132 @@ function safeFileOperation(operation, filePath, defaultValue = null) { } } +/** + * Parse a collection YAML file (.collection.yml) + * Collections are pure YAML files without frontmatter delimiters + * @param {string} filePath - Path to the collection file + * @returns {object|null} Parsed collection object or null on error + */ function parseCollectionYaml(filePath) { return safeFileOperation( () => { const content = fs.readFileSync(filePath, "utf8"); - const lines = content.split("\n"); - const result = {}; - let currentKey = null; - let currentArray = null; - let currentObject = null; - const readLiteralBlock = (startIndex, parentIndent) => { - const blockLines = []; - let blockIndent = null; - let index = startIndex; - - for (; index < lines.length; index++) { - const rawLine = lines[index]; - const trimmedLine = rawLine.trimEnd(); - const contentOnly = trimmedLine.trim(); - const lineIndent = rawLine.length - rawLine.trimLeft().length; - - if (contentOnly === "" && blockIndent === null) { - // Preserve leading blank lines inside the literal block - blockLines.push(""); - continue; - } - - if (contentOnly !== "" && lineIndent <= parentIndent) { - break; - } - - if (contentOnly === "") { - blockLines.push(""); - continue; - } - - if (blockIndent === null) { - blockIndent = lineIndent; - } - - blockLines.push(rawLine.slice(blockIndent)); - } - - return { - content: blockLines.join("\n").replace(/\r/g, "").trimEnd(), - nextIndex: index - 1, - }; - }; - - for (let i = 0; i < lines.length; i++) { - const line = lines[i]; - const trimmed = line.trim(); - - if (!trimmed || trimmed.startsWith("#")) continue; - - const leadingSpaces = line.length - line.trimLeft().length; - - // Handle array items starting with - - if (trimmed.startsWith("- ")) { - if (currentKey === "items") { - if (!currentArray) { - currentArray = []; - result[currentKey] = currentArray; - } - - // Parse item object - const item = {}; - currentArray.push(item); - currentObject = item; - - // Handle inline properties on same line as - - const restOfLine = trimmed.substring(2).trim(); - if (restOfLine) { - const colonIndex = restOfLine.indexOf(":"); - if (colonIndex > -1) { - const key = restOfLine.substring(0, colonIndex).trim(); - const value = restOfLine.substring(colonIndex + 1).trim(); - item[key] = value; - } - } - } else if (currentKey === "tags") { - if (!currentArray) { - currentArray = []; - result[currentKey] = currentArray; - } - const value = trimmed.substring(2).trim(); - currentArray.push(value); - } - } - // Handle key-value pairs - else if (trimmed.includes(":")) { - const colonIndex = trimmed.indexOf(":"); - const key = trimmed.substring(0, colonIndex).trim(); - let value = trimmed.substring(colonIndex + 1).trim(); - - if (leadingSpaces === 0) { - // Top-level property - currentKey = key; - currentArray = null; - currentObject = null; - - if (value) { - // Handle array format [item1, item2, item3] - if (value.startsWith("[") && value.endsWith("]")) { - const arrayContent = value.slice(1, -1); - if (arrayContent.trim()) { - result[key] = arrayContent.split(",").map(item => item.trim()); - } else { - result[key] = []; - } - currentKey = null; // Reset since we handled the array - } else if (value === "|" || value === ">") { - const { content: blockContent, nextIndex } = readLiteralBlock(i + 1, leadingSpaces); - result[key] = blockContent; - i = nextIndex; - } else { - result[key] = value; - } - } else if (key === "items" || key === "tags") { - // Will be populated by array items - result[key] = []; - currentArray = result[key]; - } else if (key === "display") { - result[key] = {}; - currentObject = result[key]; - } - } else if (currentObject && leadingSpaces > 0) { - // Property of current object (e.g., display properties) - if (value === "|" || value === ">") { - const { content: blockContent, nextIndex } = readLiteralBlock(i + 1, leadingSpaces); - currentObject[key] = blockContent; - i = nextIndex; - } else { - currentObject[key] = value === "true" ? true : value === "false" ? false : value; - } - } else if (currentArray && currentObject && leadingSpaces > 2) { - // Property of array item object - if (value === "|" || value === ">") { - const { content: blockContent, nextIndex } = readLiteralBlock(i + 1, leadingSpaces); - currentObject[key] = blockContent; - i = nextIndex; - } else { - currentObject[key] = value; - } - } - } - } - - return result; + // Collections are pure YAML files, parse directly with js-yaml + return yaml.load(content, { schema: yaml.JSON_SCHEMA }); }, filePath, null ); } -module.exports = { parseCollectionYaml, safeFileOperation }; +/** + * Parse agent frontmatter from an agent markdown file (.agent.md) + * Agent files use standard markdown frontmatter with --- delimiters + * @param {string} filePath - Path to the agent file + * @returns {object|null} Parsed agent frontmatter or null on error + */ +function parseAgentFrontmatter(filePath) { + return safeFileOperation( + () => { + const content = fs.readFileSync(filePath, "utf8"); + const lines = content.split("\n"); + + // Agent files use standard markdown frontmatter format + // Find the YAML frontmatter between --- delimiters + let yamlStart = -1; + let yamlEnd = -1; + let delimiterCount = 0; + + for (let i = 0; i < lines.length; i++) { + const trimmed = lines[i].trim(); + + if (trimmed === "---") { + delimiterCount++; + if (delimiterCount === 1) { + yamlStart = i + 1; + } else if (delimiterCount === 2) { + yamlEnd = i; + break; + } + } + } + + if (yamlStart === -1 || yamlEnd === -1) { + throw new Error( + "Could not find YAML frontmatter delimiters (---) in agent file" + ); + } + + // Extract YAML content between delimiters + const yamlContent = lines.slice(yamlStart, yamlEnd).join("\n"); + + // Parse YAML directly with js-yaml + const frontmatter = yaml.load(yamlContent, { schema: yaml.JSON_SCHEMA }); + + // Normalize string fields that can accumulate trailing newlines/spaces + if (frontmatter) { + if (typeof frontmatter.name === "string") { + frontmatter.name = frontmatter.name.replace(/[\r\n]+$/g, "").trim(); + } + if (typeof frontmatter.description === "string") { + // Remove only trailing whitespace/newlines; preserve internal formatting + frontmatter.description = frontmatter.description.replace( + /[\s\r\n]+$/g, + "" + ); + } + } + + return frontmatter; + }, + filePath, + null + ); +} + +/** + * Extract agent metadata including MCP server information + * @param {string} filePath - Path to the agent file + * @returns {object|null} Agent metadata object with name, description, tools, and mcp-servers + */ +function extractAgentMetadata(filePath) { + const frontmatter = parseAgentFrontmatter(filePath); + + if (!frontmatter) { + return null; + } + + return { + name: typeof frontmatter.name === "string" ? frontmatter.name : null, + description: + typeof frontmatter.description === "string" + ? frontmatter.description + : null, + tools: frontmatter.tools || [], + mcpServers: frontmatter["mcp-servers"] || {}, + }; +} + +/** + * Extract MCP server names from an agent file + * @param {string} filePath - Path to the agent file + * @returns {string[]} Array of MCP server names + */ +function extractMcpServers(filePath) { + const metadata = extractAgentMetadata(filePath); + + if (!metadata || !metadata.mcpServers) { + return []; + } + + return Object.keys(metadata.mcpServers); +} + +module.exports = { + parseCollectionYaml, + parseAgentFrontmatter, + extractAgentMetadata, + extractMcpServers, + safeFileOperation, +};