From 0e2685fa43a93e87a812f7fbf0aa5231ccdd99da Mon Sep 17 00:00:00 2001 From: parveen-dotnet Date: Sat, 18 Apr 2026 08:12:59 +0530 Subject: [PATCH 1/6] feat: Add Project Documenter Plugin with agents and skills - Auto-discovers technology stack and project structure - Generates architecture diagrams with draw.io - Creates professional Word (.docx) output with embedded PNG images - Includes agents for orchestration and skills for functionality --- .../.github/plugin/plugin.json | 28 ++ plugins/project-documenter/README.md | 128 +++++ .../agents/project-documenter.md | 300 ++++++++++++ .../docs/agent-workflow.drawio | 133 ++++++ .../docs/agent-workflow.drawio.png | Bin 0 -> 138724 bytes .../project-documenter/skills/drawio/SKILL.md | 96 ++++ .../skills/drawio/drawio-to-png.mjs | 361 ++++++++++++++ .../skills/drawio/package.json | 8 + .../skills/md-to-docx/SKILL.md | 74 +++ .../skills/md-to-docx/md-to-docx.mjs | 440 ++++++++++++++++++ .../skills/md-to-docx/package.json | 9 + 11 files changed, 1577 insertions(+) create mode 100644 plugins/project-documenter/.github/plugin/plugin.json create mode 100644 plugins/project-documenter/README.md create mode 100644 plugins/project-documenter/agents/project-documenter.md create mode 100644 plugins/project-documenter/docs/agent-workflow.drawio create mode 100644 plugins/project-documenter/docs/agent-workflow.drawio.png create mode 100644 plugins/project-documenter/skills/drawio/SKILL.md create mode 100644 plugins/project-documenter/skills/drawio/drawio-to-png.mjs create mode 100644 plugins/project-documenter/skills/drawio/package.json create mode 100644 plugins/project-documenter/skills/md-to-docx/SKILL.md create mode 100644 plugins/project-documenter/skills/md-to-docx/md-to-docx.mjs create mode 100644 plugins/project-documenter/skills/md-to-docx/package.json diff --git a/plugins/project-documenter/.github/plugin/plugin.json b/plugins/project-documenter/.github/plugin/plugin.json new file mode 100644 index 000000000..1b2073761 --- /dev/null +++ b/plugins/project-documenter/.github/plugin/plugin.json @@ -0,0 +1,28 @@ +{ + "name": "project-documenter", + "description": "Generate professional project documentation with draw.io architecture diagrams and Word (.docx) output with embedded images. Automatically discovers any project's technology stack and produces Markdown, diagrams, PNG exports, and a formatted Word document.", + "version": "1.0.0", + "author": { + "name": "Awesome Copilot Community" + }, + "repository": "https://github.com/github/awesome-copilot", + "license": "MIT", + "keywords": [ + "documentation", + "architecture-diagrams", + "drawio", + "word-document", + "docx", + "png-images", + "c4-model", + "project-summary", + "auto-discovery" + ], + "agents": [ + "./agents" + ], + "skills": [ + "./skills/drawio", + "./skills/md-to-docx" + ] +} diff --git a/plugins/project-documenter/README.md b/plugins/project-documenter/README.md new file mode 100644 index 000000000..e34b8e70a --- /dev/null +++ b/plugins/project-documenter/README.md @@ -0,0 +1,128 @@ +# Project Documenter Plugin + +Generate professional project documentation with draw.io architecture diagrams and Word (.docx) output with embedded PNG images. Works on any software project — automatically discovers the technology stack, architecture, and code structure. + +## Installation + +```bash +# Using Copilot CLI +copilot plugin install project-documenter@awesome-copilot +``` + +## What It Does + +Point the **Project Documenter** agent at any repository and it produces: + +1. **Markdown document** — 10-section project summary with embedded diagram references +2. **Draw.io diagrams** — C4 Context, Pipeline, and Component relationship diagrams (`.drawio` + `.drawio.png`) +3. **Word document** — professionally formatted `.docx` with title page, table of contents, and embedded PNG architecture images + +![Agent Workflow](docs/agent-workflow.drawio.png) + +## What's Included + +### Agent + +| Agent | Description | +|-------|-------------| +| `project-documenter` | Generates professional project documentation with draw.io architecture diagrams and Word document output with embedded images. Auto-discovers any project's technology stack and architecture. | + +### Skills + +| Skill | Description | +|-------|-------------| +| `drawio` | Generate draw.io diagrams as `.drawio` files and export to PNG via bundled Node.js script (uses draw.io CLI or headless browser) | +| `md-to-docx` | Convert Markdown to Word (`.docx`) with embedded PNG images — pure JavaScript, no Pandoc required | + +## How It Works + +### Step 1: Discover + +The agent scans your repository to understand: +- Technology stack (`.csproj`, `package.json`, `pom.xml`, `go.mod`, etc.) +- Architecture pattern (API, worker service, CLI, library) +- Design patterns (factory, strategy, repository, pipeline) +- Interfaces, implementations, models, configuration +- Dependencies, Docker setup, CI/CD + +### Step 2: Generate Diagrams + +Creates 3-5 professional draw.io diagrams following the C4 Model: + +| Diagram | C4 Level | Shows | +|---------|----------|-------| +| High-Level Architecture | Context | System in its environment — upstream, downstream, external deps | +| Processing Pipeline | Container | Internal data flow — entry point → stages → output | +| Component Relationships | Component | Interfaces, implementations, factories, DI graph | +| Deployment (optional) | Infrastructure | Docker, Kubernetes, scaling, cloud services | +| Data Model (optional) | Component | Entity/DTO hierarchy (if significant) | + +Each diagram is exported to PNG using the bundled `drawio-to-png.mjs` script. + +### Step 3: Write Markdown + +Produces `docs/project-summary.md` with 10 sections: + +1. Executive Summary +2. Architecture Overview (with embedded diagram) +3. Processing Pipeline (with embedded diagram) +4. Core Components (with embedded diagram) +5. API Contracts / Message Schemas +6. Infrastructure & Deployment +7. Extension Patterns +8. Rules & Anti-Patterns +9. Dependencies +10. Code Structure + +### Step 4: Word Document + +Converts the Markdown to a formatted `.docx` using the bundled `md-to-docx.mjs` script: + +- Title page with project name, date, version, audience +- Auto-generated table of contents +- **PNG diagram images embedded inline** in the Word document +- Calibri font, colored headings, styled tables with alternating rows +- Code blocks in Consolas with shaded background + +### Step 5: Verify + +Spot-checks class names, file paths, and diagram accuracy against the actual codebase. Reports all generated files. + +## Generated Output + +``` +docs/ +├── project-summary.md # Source document (Markdown) +├── project-summary.docx # Word document with embedded images +└── diagrams/ + ├── high-level-architecture.drawio # C4 Context diagram (editable) + ├── high-level-architecture.drawio.png # Rendered PNG + ├── processing-pipeline.drawio # C4 Container diagram + ├── processing-pipeline.drawio.png + ├── component-relationships.drawio # C4 Component diagram + └── component-relationships.drawio.png +``` + +## Prerequisites + +| Requirement | Purpose | Required? | +|-------------|---------|-----------| +| Node.js 18+ | Run bundled export scripts | Yes | +| Edge or Chrome | Headless browser for diagram rendering | One of: this OR draw.io desktop | +| draw.io desktop | CLI diagram export (faster alternative) | Optional (browser fallback available) | + +## Technology Agnostic + +Works with any stack. The agent auto-detects: +- **.NET** (`.csproj`, `.sln`), **Java** (`pom.xml`, `build.gradle`), **Node.js** (`package.json`), **Python** (`pyproject.toml`), **Go** (`go.mod`), **Rust** (`Cargo.toml`) +- Docker, Kubernetes, GitHub Actions, GitLab CI +- Any messaging system (SQS, RabbitMQ, Kafka, Azure Service Bus) +- Any database ORM (EF, Hibernate, Prisma, SQLAlchemy) + +## Source + +This plugin is part of [Awesome Copilot](https://github.com/github/awesome-copilot), a community-driven collection of GitHub Copilot extensions. + +## License + +MIT diff --git a/plugins/project-documenter/agents/project-documenter.md b/plugins/project-documenter/agents/project-documenter.md new file mode 100644 index 000000000..46e8b6ec7 --- /dev/null +++ b/plugins/project-documenter/agents/project-documenter.md @@ -0,0 +1,300 @@ +--- +name: "Project Documenter" +description: "Generates professional MS Word project documentation with draw.io architecture diagrams and embedded PNG images. Automatically discovers any project's technology stack, architecture, and code structure. Produces Markdown, draw.io diagrams, PNG exports, and .docx output." +tools: + [ + "execute/runInTerminal", + "read/readFile", + "read/problems", + "read/terminalSelection", + "read/terminalLastCommand", + "edit/createDirectory", + "edit/createFile", + "edit/editFiles", + "search/codebase", + "search/fileSearch", + "search/listDirectory", + "search/textSearch", + "todo", + ] +--- + +# Project Documentation Agent + +You are a **documentation agent** that generates professional, Confluence-ready project summaries for **any software project**. You automatically discover the project's technology stack, architecture, components, data flow, and deployment model by analyzing the codebase — then produce comprehensive documentation with architecture diagrams and a Word document with embedded images. + +You are **project-agnostic**. You do not assume any specific language, framework, or architecture. You discover everything dynamically from the repository. + +Before starting, check for these optional context sources (read them if they exist, skip if they don't): +- `Agents.md` or `AGENTS.md` at the repository root — may contain authoritative service rules and contracts +- `README.md` — project overview and setup instructions +- `ARCHITECTURE.md`, `docs/architecture.md`, or similar — existing architecture documentation +- `.github/copilot-instructions.md` — project-specific AI instructions + +--- + +## Purpose + +This agent **generates comprehensive project documentation** with professional architecture diagrams and Word document output. It does NOT write, modify, or generate any production code. Its output is: + +1. **Markdown document** (`docs/project-summary.md`) — the source document +2. **Draw.io diagrams** (`docs/diagrams/*.drawio`) — editable architecture diagrams +3. **PNG exports** (`docs/diagrams/*.drawio.png`) — rendered diagram images +4. **Word document** (`docs/project-summary.docx`) — professional `.docx` with embedded diagram images + +This agent is a **standalone utility** — invoke it on any repository to produce or refresh project documentation. + +--- + +## Writing Framework + +### Diátaxis Framework + +The generated document combines two Diátaxis quadrants: +- **Reference** (primary) — information-oriented technical description of the project's machinery, contracts, and structure. +- **Explanation** (secondary) — understanding-oriented discussion of *how* and *why* for pipeline, architecture decisions, and extension patterns. + +### Writing Principles + +- **Clarity first**: Use simple words for complex ideas. Define technical terms on first use. +- **Active voice**: "The service processes requests" not "Requests are processed by the service." +- **Progressive disclosure**: Start with the overview, then drill into details (simple → complex). +- **Direct address**: Use "you" when instructing on extension patterns and how-to sections. +- **One idea per paragraph**: Keep paragraphs focused and scannable. +- **Concrete over abstract**: Use specific class names, file paths, and code patterns discovered from the actual codebase. + +### Audience + +- **Primary**: Senior engineers and architects who need to understand the project quickly. +- **Secondary**: Non-technical stakeholders (Executive Summary section only). +- **Tertiary**: New developers onboarding to the codebase. + +### Architecture Documentation (C4 Model) + +Structure documentation and diagrams using C4 Model abstraction levels: + +| Level | Scope | Maps to | +|-------|-------|---------| +| **Context** | System in its environment | Section 2: Architecture Overview | +| **Container** | Internal components and data flow | Section 3: Processing Pipeline | +| **Component** | Class/module-level relationships | Section 4: Core Components | +| **Infrastructure** | Deployment and runtime | Section 6: Infrastructure | + +--- + +## Workflow + +Execute these steps **in order**. Use the todo list to track progress. + +### Step 1: Discover and Analyze Project Context + +Build a complete understanding of the codebase before writing anything. + +#### 1a. Read Context Sources + +Check for and read (if they exist): +1. `Agents.md` or `AGENTS.md` at the repository root +2. `README.md` +3. `.github/copilot-instructions.md` +4. `ARCHITECTURE.md`, `docs/` directory, `CONTRIBUTING.md` + +#### 1b. Detect Technology Stack + +| Signal | What to Look For | +|--------|-----------------| +| **Language** | `.csproj`/`.sln` (.NET), `pom.xml`/`build.gradle` (Java), `package.json` (Node.js), `requirements.txt`/`pyproject.toml` (Python), `go.mod` (Go), `Cargo.toml` (Rust) | +| **Framework** | ASP.NET, Spring Boot, Express, FastAPI, Django, Gin, etc. | +| **Architecture** | Worker service, Web API, CLI, library, microservice, monolith | +| **Messaging** | SQS, RabbitMQ, Kafka, Azure Service Bus | +| **Database** | Entity Framework, Hibernate, Prisma, SQLAlchemy | +| **Cloud** | AWS SDK, Azure SDK, GCP client libraries | +| **Container** | `Dockerfile`, `docker-compose.yml`, Helm charts | +| **CI/CD** | `.github/workflows/`, `.gitlab-ci.yml`, `Jenkinsfile` | +| **Testing** | xUnit, NUnit, JUnit, Jest, pytest | + +#### 1c. Map the Codebase + +1. List the directory structure (up to 3 levels deep) +2. Find entry points (`Program.cs`, `Main.java`, `index.ts`, `main.py`, etc.) +3. Find configuration files (`appsettings.json`, `application.yml`, `.env`, etc.) +4. Discover interfaces/contracts +5. Map implementations (factories, services, handlers) +6. Find models/entities +7. Read the package manifest for dependencies +8. Review Dockerfile (if present) +9. Read the 10-20 most important source files + +#### 1d. Identify Architecture Patterns + +- **Communication**: HTTP API, message queue, event-driven, gRPC, CLI +- **Design patterns**: Factory, Strategy, Repository, Mediator, Pipeline +- **Data flow**: Input → Processing → Output chain +- **Cross-cutting**: Logging, tracing, auth, caching, error handling +- **Extension points**: Where and how to add new features + +### Step 2: Generate Draw.io Diagrams + +Create the `docs/diagrams/` directory. Generate **3-5 professional diagrams** using draw.io XML (`mxGraphModel` format). + +#### Required Diagrams + +**Diagram 1: High-Level Architecture (C4 Context)** +- File: `docs/diagrams/high-level-architecture.drawio` +- Show: the project (highlighted `#dae8fc`), upstream systems, downstream systems, external dependencies, communication channels +- Use: swimlane containers, rounded rectangles, labeled arrows + +**Diagram 2: Processing Pipeline (C4 Container)** +- File: `docs/diagrams/processing-pipeline.drawio` +- Show: entry point → each processing stage → output +- Color progression: input (`#dae8fc` blue) → processing (`#d5e8d4` green) → output (`#fff2cc` orange) +- Use: vertical flow layout (top to bottom) + +**Diagram 3: Component Relationships (C4 Component)** +- File: `docs/diagrams/component-relationships.drawio` +- Show: core interfaces, implementations, factory/strategy patterns, DI relationships +- Group by functional area with distinct colors + +#### Optional Diagrams + +- **Deployment & Infrastructure** — if `Dockerfile` or Kubernetes config found +- **Data Model** — if significant entity/DTO hierarchy found + +#### Draw.io XML Format + +Generate valid `mxGraphModel` XML. Use these style conventions: + +```xml + + + + + + + + + + + +``` + +#### Diagram Export to PNG + +After generating `.drawio` files, export to PNG using the **bundled export script**: + +```bash +# Install dependencies (one-time) +cd skills/drawio && npm install + +# Export all diagrams +node skills/drawio/drawio-to-png.mjs --dir docs/diagrams + +# Or export a single diagram +node skills/drawio/drawio-to-png.mjs docs/diagrams/.drawio +``` + +The script tries (in order): +1. **draw.io CLI** — if draw.io desktop is installed +2. **Headless browser** — uses Edge/Chrome + official draw.io viewer JS + +If neither is available, keep the `.drawio` files and use **Mermaid fallback** — embed Mermaid code blocks in the Markdown instead of PNG references. + +### Step 3: Write Markdown Document + +Create `docs/project-summary.md` with these sections: + +**Front matter:** +```markdown +--- +title: — Project Summary +date: +version: 1.0 +audience: Engineering Team, Architects, Stakeholders +--- +``` + +#### Sections + +1. **Executive Summary** — 3-5 sentences: what, where, how, key capabilities +2. **Architecture Overview** — embed high-level architecture PNG + description +3. **Processing Pipeline** — embed pipeline PNG + step-by-step flow walkthrough +4. **Core Components** — embed component PNG + interface/implementation tables +5. **API Contracts / Message Schemas** — input/output property tables +6. **Infrastructure & Deployment** — Docker, CI/CD, cloud config +7. **Extension Patterns** — step-by-step how-to with file paths +8. **Rules & Anti-Patterns** — do's and don'ts from `Agents.md` or inferred +9. **Dependencies** — categorized package table with versions +10. **Code Structure** — annotated directory tree (2-3 levels deep) + +**Image references** in the Markdown (these get embedded in the Word document): +```markdown +![High-Level Architecture](diagrams/high-level-architecture.drawio.png) +![Processing Pipeline](diagrams/processing-pipeline.drawio.png) +![Component Relationships](diagrams/component-relationships.drawio.png) +``` + +### Step 4: Convert to Word Document + +Use the **bundled md-to-docx converter** to produce a `.docx` with embedded images: + +```bash +# Install dependencies (one-time) +cd skills/md-to-docx && npm install + +# Convert +node skills/md-to-docx/md-to-docx.mjs docs/project-summary.md docs/project-summary.docx +``` + +The converter: +- Extracts YAML front-matter for title page metadata +- Generates a title page and table of contents +- **Embeds PNG images** referenced via `![alt](path)` syntax — diagrams appear inline in the Word document +- Produces professionally formatted `.docx` with Calibri styling, colored headings, and styled tables + +### Step 5: Verify and Report + +#### Quality Checklist + +- [ ] All class/method names match actual source code +- [ ] All file paths exist in the repository +- [ ] Diagrams accurately reflect the real architecture +- [ ] PNG images are generated and embedded in the Word document +- [ ] No credentials, tokens, or secrets in documentation +- [ ] Document is scannable with clear headings and tables + +#### Report Generated Files + +``` +Generated Documentation: +├── docs/project-summary.md # Source document (Markdown) +├── docs/project-summary.docx # Word document with embedded images +└── docs/diagrams/ + ├── high-level-architecture.drawio # C4 Context diagram (editable) + ├── high-level-architecture.drawio.png # Rendered PNG + ├── processing-pipeline.drawio # C4 Container diagram + ├── processing-pipeline.drawio.png + ├── component-relationships.drawio # C4 Component diagram + ├── component-relationships.drawio.png + └── [deployment-infrastructure.drawio] # Optional +``` + +--- + +## Behavioral Rules + +- **Read-only on source code**: NEVER modify any file outside `docs/`. Only create files in `docs/`. +- **Discover, don't assume**: Never hardcode project-specific details. Discover from the repository. +- **Fresh regeneration**: Regenerate all content from scratch each run. +- **No secrets**: Never include credentials, tokens, API keys, or connection strings. +- **Graceful fallbacks**: If draw.io export fails, use Mermaid fallback. If md-to-docx fails, report the error. +- **Verify accuracy**: Spot-check at least 5 file/class references against actual source files. + +--- + +## Error Recovery + +| Problem | Action | +|---------|--------| +| draw.io export fails | Use Mermaid fallback diagrams in Markdown | +| md-to-docx fails | Report error; the `.md` file is still usable | +| Source file not found | Note the gap, continue with available files | +| Unrecognized tech stack | Document what you can observe, note gaps | diff --git a/plugins/project-documenter/docs/agent-workflow.drawio b/plugins/project-documenter/docs/agent-workflow.drawio new file mode 100644 index 000000000..22d23b043 --- /dev/null +++ b/plugins/project-documenter/docs/agent-workflow.drawio @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/project-documenter/docs/agent-workflow.drawio.png b/plugins/project-documenter/docs/agent-workflow.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..8889f53eea5e971ac5e9745d28705e44d54d6495 GIT binary patch literal 138724 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�}IMFaqn-T)S6X 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�!_u3K2-R#XH;qzfpBNbewoqSB;G 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 >o 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 [output.png] + +# Export all .drawio files in a directory +node skills/drawio/drawio-to-png.mjs --dir + +# Force a specific renderer +node skills/drawio/drawio-to-png.mjs --renderer=cli|viewer|auto +``` + +### Skill Folder Contents + +| File | Purpose | +|------|---------| +| `SKILL.md` | This instruction file | +| `drawio-to-png.mjs` | Node.js export script (CLI + browser fallback) | +| `package.json` | Dependencies (`puppeteer-core`) | + +## Supported Export Formats + +| Format | Embed XML | Notes | +|--------|-----------|-------| +| `png` | Yes | Viewable everywhere, editable in draw.io | +| `svg` | Yes | Scalable, editable in draw.io | +| `pdf` | Yes | Printable, editable in draw.io | + +## Draw.io XML Style Conventions + +Use these styles for consistent, professional diagrams: + +```xml + + + + + + + + + + + + + + + + + + + + +``` + +## Locating the draw.io CLI + +Try `drawio` first (works if on PATH), then fall back: + +- **Windows**: `"C:\Program Files\draw.io\draw.io.exe"` +- **macOS**: `/Applications/draw.io.app/Contents/MacOS/draw.io` +- **Linux**: `drawio` (via snap/apt/flatpak) + +### CLI Export Command + +```bash +drawio -x -f png -e -b 10 -o +``` + +Flags: `-x` (export), `-f` (format), `-e` (embed diagram XML), `-b` (border), `-o` (output path). diff --git a/plugins/project-documenter/skills/drawio/drawio-to-png.mjs b/plugins/project-documenter/skills/drawio/drawio-to-png.mjs new file mode 100644 index 000000000..a4a912808 --- /dev/null +++ b/plugins/project-documenter/skills/drawio/drawio-to-png.mjs @@ -0,0 +1,361 @@ +/** + * drawio-to-png.mjs - Convert .drawio files to PNG with accurate rendering. + * + * Rendering priority: + * 1. draw.io CLI (if installed) — pixel-perfect, fastest + * 2. Official draw.io viewer JS in headless browser — pixel-perfect, needs network + * + * Usage: node drawio-to-png.mjs [output.png] + * node drawio-to-png.mjs --dir (converts all .drawio files in directory) + * node drawio-to-png.mjs --renderer=cli|viewer|auto [output.png] + */ + +import { readFileSync, writeFileSync, readdirSync, statSync } from "fs"; +import { join, basename, dirname, resolve } from "path"; +import { spawnSync } from "child_process"; +import { inflateRawSync } from "zlib"; +import puppeteer from "puppeteer-core"; + +// --- Build HTML that uses the official draw.io viewer for rendering --- +function buildViewerHtml(rawFileContent) { + // Escape for embedding in a JS template literal + const escaped = rawFileContent + .replace(/\\/g, "\\\\") + .replace(/`/g, "\\`") + .replace(/\$/g, "\\$"); + + // The official draw.io viewer (viewer-static.min.js) contains the full mxGraph + // rendering engine — it handles orthogonal edge routing, all shape types, + // container layouts, and compressed/uncompressed diagram formats. + return ` + + + + + + +
+ + +`; +} + +// --- Extract mxGraph XML from .drawio input (supports mxGraphModel and mxfile) --- +function extractMxGraphModelXml(inputXml) { + const trimmed = inputXml.trim(); + + if (trimmed.startsWith("]*>([\s\S]*?)<\/diagram>/i); + if (!diagramMatch) { + throw new Error("Unsupported .drawio format: missing or content"); + } + + const diagramContent = diagramMatch[1].trim(); + + if (diagramContent.startsWith(" content: ${err.message}`); + } +} + +function resolveRenderer(rawArgs) { + let renderer = "auto"; + const args = []; + + for (const arg of rawArgs) { + if (arg.startsWith("--renderer=")) { + renderer = arg.substring("--renderer=".length).trim().toLowerCase(); + continue; + } + args.push(arg); + } + + if (!["auto", "cli", "viewer"].includes(renderer)) { + throw new Error(`Invalid renderer '${renderer}'. Use auto, cli, or viewer.`); + } + + return { renderer, args }; +} + +function findDrawioCliPath() { + const envPath = process.env.DRAWIO_PATH; + if (envPath) { + try { + if (statSync(envPath).isFile()) return envPath; + } catch { /* ignore */ } + } + + const candidates = [ + "C:\\Program Files\\draw.io\\draw.io.exe", + "C:\\Program Files (x86)\\draw.io\\draw.io.exe", + "/Applications/draw.io.app/Contents/MacOS/draw.io", + "/usr/bin/drawio", + "/usr/local/bin/drawio", + ]; + + for (const p of candidates) { + try { + if (statSync(p).isFile()) return p; + } catch { /* ignore */ } + } + + const locator = process.platform === "win32" ? "where" : "which"; + const names = process.platform === "win32" ? ["drawio", "draw.io"] : ["drawio"]; + + for (const name of names) { + const probe = spawnSync(locator, [name], { encoding: "utf-8" }); + if (probe.status === 0 && probe.stdout) { + const first = probe.stdout.split(/\r?\n/).map(line => line.trim()).find(Boolean); + if (first) return first; + } + } + + return null; +} + +function exportWithDrawioCli(drawioPath, input, output) { + const args = ["-x", "-f", "png", "-e", "-b", "10", "-o", output, input]; + const result = spawnSync(drawioPath, args, { encoding: "utf-8" }); + if (result.status !== 0) { + const stderr = (result.stderr || "").trim(); + const stdout = (result.stdout || "").trim(); + throw new Error(stderr || stdout || `draw.io CLI failed with exit code ${result.status}`); + } +} + +// --- Main --- +async function main() { + const parsed = resolveRenderer(process.argv.slice(2)); + const renderer = parsed.renderer; + const args = parsed.args; + + let files = []; + if (args[0] === "--dir") { + const dir = resolve(args[1] || "."); + files = readdirSync(dir) + .filter(f => f.endsWith(".drawio")) + .map(f => ({ + input: join(dir, f), + output: join(dir, f.replace(/\.drawio$/, ".drawio.png")) + })); + } else if (args[0]) { + const input = resolve(args[0]); + const output = args[1] || input.replace(/\.drawio$/, ".drawio.png"); + files = [{ input, output }]; + } else { + console.error("Usage: node drawio-to-png.mjs [output.png]"); + console.error(" node drawio-to-png.mjs --dir "); + console.error(" node drawio-to-png.mjs --renderer=cli|auto|custom [output.png]"); + process.exit(1); + } + + if (files.length === 0) { + console.log("No .drawio files found."); + return; + } + + const drawioCliPath = findDrawioCliPath(); + + // --- Path 1: draw.io CLI (best fidelity, no network needed) --- + if (renderer === "cli" || (renderer === "auto" && drawioCliPath)) { + if (!drawioCliPath) { + console.error("draw.io CLI not found. Install draw.io desktop or set DRAWIO_PATH."); + process.exit(1); + } + console.log(`Using renderer: draw.io CLI (${basename(drawioCliPath)})`); + for (const { input, output } of files) { + console.log(`Rendering: ${basename(input)}`); + try { + exportWithDrawioCli(drawioCliPath, input, output); + let kb = "?"; + try { + kb = (statSync(output).size / 1024).toFixed(0); + } catch { /* ignore size read errors */ } + console.log(` -> ${basename(output)} (${kb} KB)`); + } catch (err) { + console.error(` Error rendering ${basename(input)}: ${err.message}`); + } + } + console.log("Done."); + return; + } + + // --- Path 2: Official draw.io viewer in headless browser --- + // Find browser + const browserPaths = [ + process.env.CHROME_PATH, + process.env.EDGE_PATH, + "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe", + "C:\\Program Files\\Microsoft\\Edge\\Application\\msedge.exe", + "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", + "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe", + "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", + "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", + "/usr/bin/google-chrome", + "/usr/bin/chromium-browser", + "/usr/bin/microsoft-edge", + ].filter(Boolean); + + let execPath; + for (const p of browserPaths) { + try { + if (statSync(p).isFile()) { execPath = p; break; } + } catch { /* not found */ } + } + + if (!execPath) { + console.error("No browser found. Set CHROME_PATH or EDGE_PATH environment variable."); + process.exit(1); + } + + console.log(`Using renderer: draw.io viewer (${basename(execPath)})`); + + const browser = await puppeteer.launch({ + executablePath: execPath, + headless: true, + args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu"], + }); + + for (const { input, output } of files) { + console.log(`Rendering: ${basename(input)}`); + try { + const rawContent = readFileSync(input, "utf-8"); + const html = buildViewerHtml(rawContent); + + const page = await browser.newPage(); + await page.setViewport({ width: 2400, height: 1600, deviceScaleFactor: 2 }); + + // Set HTML content first (sets up the .mxgraph div with diagram XML) + await page.setContent(html, { waitUntil: "domcontentloaded" }); + + // Load the official draw.io viewer JS via addScriptTag (more reliable than inline src) + const VIEWER_URL = "https://viewer.diagrams.net/js/viewer-static.min.js"; + try { + await page.addScriptTag({ url: VIEWER_URL }); + } catch (scriptErr) { + throw new Error(`Failed to load draw.io viewer JS: ${scriptErr.message}`); + } + + // Start polling for the rendered diagram + await page.evaluate(() => window.__startPoll()); + + // Wait for the viewer to finish rendering + await page.waitForFunction(() => window.__renderComplete === true, { timeout: 30000 }); + + // Check rendering succeeded + const viewerOk = await page.evaluate(() => window.__renderWidth > 0); + if (!viewerOk) { + throw new Error("draw.io viewer failed to load or render (check network access)"); + } + + // Take element screenshot of just the diagram div for exact bounds + const containerHandle = await page.$('.mxgraph'); + let pngBuffer; + + if (containerHandle) { + pngBuffer = await containerHandle.screenshot({ type: "png" }); + } else { + // Fallback: full-page screenshot + const dims = await page.evaluate(() => ({ + w: Math.ceil(window.__renderWidth), + h: Math.ceil(window.__renderHeight) + })); + pngBuffer = await page.screenshot({ + type: "png", + clip: { x: 0, y: 0, width: dims.w + 20, height: dims.h + 20 }, + }); + } + + writeFileSync(output, pngBuffer); + console.log(` -> ${basename(output)} (${(pngBuffer.length / 1024).toFixed(0)} KB)`); + + await page.close(); + } catch (err) { + console.error(` Error rendering ${basename(input)}: ${err.message}`); + } + } + + await browser.close(); + console.log("Done."); +} + +main().catch(err => { console.error(err); process.exit(1); }); diff --git a/plugins/project-documenter/skills/drawio/package.json b/plugins/project-documenter/skills/drawio/package.json new file mode 100644 index 000000000..f3468fbfe --- /dev/null +++ b/plugins/project-documenter/skills/drawio/package.json @@ -0,0 +1,8 @@ +{ + "private": true, + "type": "module", + "description": "Dependencies for the draw.io diagram export skill", + "dependencies": { + "puppeteer-core": "^24.39.1" + } +} diff --git a/plugins/project-documenter/skills/md-to-docx/SKILL.md b/plugins/project-documenter/skills/md-to-docx/SKILL.md new file mode 100644 index 000000000..8fa9bc173 --- /dev/null +++ b/plugins/project-documenter/skills/md-to-docx/SKILL.md @@ -0,0 +1,74 @@ +--- +name: md-to-docx +description: Convert Markdown files to professionally formatted Word (.docx) documents with embedded PNG images — pure JavaScript, no external tools required +--- + +# Markdown to Word (.docx) Skill + +Convert Markdown (`.md`) files into professionally formatted Word (`.docx`) documents with embedded PNG images. Uses **pure JavaScript** via the `docx` and `marked` npm packages — no Pandoc, LibreOffice, or any native binary required. + +## How to Convert + +```bash +# Install dependencies (one-time, from this skill folder) +cd skills/md-to-docx && npm install + +# Convert (run from workspace root) +node skills/md-to-docx/md-to-docx.mjs [output.docx] +``` + +If `output.docx` is omitted, it defaults to `.docx` in the current directory. + +## Skill Folder Contents + +| File | Purpose | +|------|---------| +| `SKILL.md` | This instruction file | +| `md-to-docx.mjs` | Node.js Markdown-to-Word converter | +| `package.json` | Dependencies (`docx`, `marked`) | + +## Prerequisites + +| Requirement | Version | Notes | +|-------------|---------|-------| +| **Node.js** | 18+ | Required runtime | +| **`docx`** | 9+ | Pure JS Word document generator | +| **`marked`** | 15+ | Markdown parser | + +No native binaries. No system-level installs. Works on Windows, macOS, and Linux. + +## Features + +The converter: + +- **Extracts YAML front-matter** — uses `title`, `date`, `version`, `audience` for the title page +- **Generates a title page** — with project name, subtitle, date, version, and audience +- **Generates a table of contents** — built from H1-H3 headings +- **Embeds PNG images** — resolves `![alt](path)` references relative to the input `.md` file, reads the PNG, and embeds it inline in the Word document +- **Styled output** — Calibri font, colored headings (`#1F3864`), styled tables with alternating row colors, code blocks in Consolas +- **Handles all Markdown elements** — headings, paragraphs, tables, code blocks, lists, images, links, horizontal rules + +## Image Embedding + +The converter automatically embeds PNG images referenced in the Markdown: + +```markdown +![High-Level Architecture](diagrams/high-level-architecture.drawio.png) +``` + +The image path is resolved **relative to the input Markdown file**. The PNG is read, dimensions are extracted from the PNG header, and the image is scaled to fit within 6 inches width while preserving aspect ratio. + +If an image file is not found, a placeholder `[Image not found: ]` is inserted. + +## Front-Matter Format + +```yaml +--- +title: Project Name — Project Summary +date: 2025-01-15 +version: 1.0 +audience: Engineering Team, Architects, Stakeholders +--- +``` + +The title is split on `—` or `–` into main title and subtitle for the title page. diff --git a/plugins/project-documenter/skills/md-to-docx/md-to-docx.mjs b/plugins/project-documenter/skills/md-to-docx/md-to-docx.mjs new file mode 100644 index 000000000..c0b2ea7fd --- /dev/null +++ b/plugins/project-documenter/skills/md-to-docx/md-to-docx.mjs @@ -0,0 +1,440 @@ +/** + * md-to-docx.mjs - Markdown to Word converter + * Pure JavaScript, no external tools required. + * Usage: node md-to-docx.mjs [output.docx] + */ + +import { readFileSync, writeFileSync, existsSync } from "fs"; +import { dirname, join, resolve } from "path"; +import { marked } from "marked"; +import { + Document, Packer, Paragraph, TextRun, HeadingLevel, ImageRun, + TableRow, TableCell, Table, WidthType, BorderStyle, + AlignmentType, ShadingType, PageBreak +} from "docx"; + +// --- Image dimensions from PNG header --- +function pngDimensions(buffer) { + // PNG signature check + IHDR chunk at offset 16 (width) and 20 (height) + if (buffer[0] === 0x89 && buffer[1] === 0x50) { + return { + width: buffer.readUInt32BE(16), + height: buffer.readUInt32BE(20), + }; + } + return { width: 600, height: 400 }; // fallback +} + +// --- CLI argument parsing --- +const inputPath = process.argv[2]; +if (!inputPath) { + console.error("Usage: node md-to-docx.mjs [output.docx]"); + process.exit(1); +} +const outputPath = process.argv[3] || inputPath.replace(/\.md$/i, ".docx"); +const inputDir = dirname(resolve(inputPath)); + +const mdSource = readFileSync(inputPath, "utf-8"); + +// --- Extract YAML front-matter metadata --- +let title = "Document"; +let subtitle = ""; +let date = new Date().toISOString().slice(0, 10); +let version = "1.0"; +let audience = ""; + +const fmMatch = mdSource.match(/^---\n([\s\S]*?)\n---/m); +if (fmMatch) { + const fm = fmMatch[1]; + title = fm.match(/^title:\s*(.+)$/m)?.[1]?.trim().replace(/^["']|["']$/g, "") || title; + date = fm.match(/^date:\s*(.+)$/m)?.[1]?.trim() || date; + version = fm.match(/^version:\s*(.+)$/m)?.[1]?.trim() || version; + audience = fm.match(/^audience:\s*(.+)$/m)?.[1]?.trim() || ""; +} + +// Strip front-matter from markdown content +const md = mdSource.replace(/^---[\s\S]*?---\n*/m, ""); + +// Derive title / subtitle from front-matter title or first H1 +const titleParts = title.split(/\s*[—–]\s*/); +const mainTitle = titleParts[0] || title; +subtitle = titleParts[1] || ""; +if (!subtitle) { + const h1Match = md.match(/^#\s+(.+)$/m); + if (h1Match) { + const h1Parts = h1Match[1].split(/\s*[—–]\s*/); + if (h1Parts.length > 1) { + subtitle = h1Parts[1]; + if (!mainTitle || mainTitle === "Document") title = h1Parts[0]; + } + } +} + +// --- Parse Markdown tokens --- +const tokens = marked.lexer(md); + +// --- Style constants --- +const FONT = "Calibri"; +const HEADER_COLOR = "1F3864"; +const ACCENT_COLOR = "2E75B6"; +const TABLE_HEADER_BG = "D6E4F0"; +const TABLE_ALT_BG = "F2F7FB"; +const CODE_BG = "F5F5F5"; +const CODE_FONT = "Consolas"; +const BORDER_COLOR = "B4C6E7"; + +const tableBorder = { style: BorderStyle.SINGLE, size: 1, color: BORDER_COLOR }; +const tableBorders = { + top: tableBorder, bottom: tableBorder, + left: tableBorder, right: tableBorder, + insideHorizontal: tableBorder, insideVertical: tableBorder, +}; + +// --- Utility: decode HTML entities --- +function decodeEntities(str) { + return str + .replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">") + .replace(/"/g, '"').replace(/'/g, "'"); +} + +// --- Inline tokens to TextRun[] --- +function inlineToRuns(inlineTokens, parentBold = false, parentItalic = false) { + const runs = []; + if (!inlineTokens) return runs; + for (const t of inlineTokens) { + switch (t.type) { + case "text": + runs.push(new TextRun({ + text: decodeEntities(t.text || t.raw || ""), + bold: parentBold, italics: parentItalic, font: FONT, size: 22, + })); + break; + case "strong": + runs.push(...inlineToRuns(t.tokens, true, parentItalic)); + break; + case "em": + runs.push(...inlineToRuns(t.tokens, parentBold, true)); + break; + case "codespan": + runs.push(new TextRun({ + text: t.text, font: CODE_FONT, size: 20, bold: parentBold, + shading: { type: ShadingType.SOLID, color: CODE_BG, fill: CODE_BG }, + })); + break; + case "link": + runs.push(new TextRun({ + text: t.text || t.href, bold: parentBold, italics: parentItalic, + font: FONT, size: 22, color: ACCENT_COLOR, underline: {}, + })); + break; + case "image": + // Images handled at paragraph level; skip inline + break; + case "br": + runs.push(new TextRun({ break: 1, font: FONT })); + break; + default: + if (t.raw) { + runs.push(new TextRun({ + text: decodeEntities(t.raw), bold: parentBold, italics: parentItalic, + font: FONT, size: 22, + })); + } + break; + } + } + return runs; +} + +// --- Paragraph inline runs --- +function paragraphRuns(token) { + if (token.tokens) return inlineToRuns(token.tokens); + return [new TextRun({ text: token.text || token.raw || "", font: FONT, size: 22 })]; +} + +// --- Table builder --- +function buildTable(token) { + const rows = []; + if (token.header) { + rows.push(new TableRow({ + tableHeader: true, + children: token.header.map(cell => new TableCell({ + shading: { type: ShadingType.SOLID, color: TABLE_HEADER_BG, fill: TABLE_HEADER_BG }, + children: [new Paragraph({ + children: inlineToRuns(cell.tokens, true), + spacing: { before: 40, after: 40 }, + })], + })), + })); + } + if (token.rows) { + token.rows.forEach((row, idx) => { + rows.push(new TableRow({ + children: row.map(cell => new TableCell({ + shading: idx % 2 === 1 + ? { type: ShadingType.SOLID, color: TABLE_ALT_BG, fill: TABLE_ALT_BG } + : undefined, + children: [new Paragraph({ + children: inlineToRuns(cell.tokens), + spacing: { before: 30, after: 30 }, + })], + })), + })); + }); + } + return new Table({ + rows, width: { size: 100, type: WidthType.PERCENTAGE }, borders: tableBorders, + }); +} + +// --- Code block builder --- +function buildCodeBlock(token) { + const lines = (token.text || "").split("\n"); + return lines.map(line => new Paragraph({ + children: [new TextRun({ text: line || " ", font: CODE_FONT, size: 18 })], + spacing: { before: 20, after: 20 }, + shading: { type: ShadingType.SOLID, color: CODE_BG, fill: CODE_BG }, + indent: { left: 360 }, + })); +} + +// --- List builder --- +function buildList(token, level = 0) { + const items = []; + for (const item of token.items) { + const textTokens = item.tokens?.find(t => t.type === "text"); + const bullet = token.ordered ? `${item.raw?.match(/^\d+/)?.[0] || "1"}.` : "\u2022"; + const indent = 720 + level * 360; + items.push(new Paragraph({ + children: [ + new TextRun({ text: `${bullet} `, font: FONT, size: 22 }), + ...(textTokens ? inlineToRuns(textTokens.tokens) : [new TextRun({ + text: decodeEntities(item.text || ""), font: FONT, size: 22, + })]), + ], + spacing: { before: 40, after: 40 }, + indent: { left: indent }, + })); + const nestedList = item.tokens?.find(t => t.type === "list"); + if (nestedList) items.push(...buildList(nestedList, level + 1)); + } + return items; +} + +// --- Build document children --- +const children = []; + +// Title page (from front-matter metadata) +children.push( + new Paragraph({ spacing: { before: 2400 } }), + new Paragraph({ + children: [new TextRun({ text: mainTitle, font: FONT, size: 56, bold: true, color: HEADER_COLOR })], + alignment: AlignmentType.CENTER, + }), +); +if (subtitle) { + children.push(new Paragraph({ + children: [new TextRun({ text: subtitle, font: FONT, size: 36, color: ACCENT_COLOR })], + alignment: AlignmentType.CENTER, spacing: { after: 400 }, + })); +} +children.push( + new Paragraph({ + children: [new TextRun({ + text: `Date: ${date} | Version: ${version}`, + font: FONT, size: 22, color: "666666", + })], + alignment: AlignmentType.CENTER, + }), +); +if (audience) { + children.push(new Paragraph({ + children: [new TextRun({ text: `Audience: ${audience}`, font: FONT, size: 22, color: "666666" })], + alignment: AlignmentType.CENTER, spacing: { after: 600 }, + })); +} +children.push(new Paragraph({ children: [new PageBreak()] })); + +// Table of Contents (static, built from headings found in the markdown) +children.push( + new Paragraph({ + children: [new TextRun({ text: "Table of Contents", font: FONT, size: 32, bold: true, color: HEADER_COLOR })], + spacing: { before: 200, after: 400 }, + }), +); + +// Pre-scan tokens for headings to build the TOC +for (const tok of tokens) { + if (tok.type !== "heading" || tok.depth > 3) continue; + // Skip the first H1 title and the TOC heading itself + if (tok.depth === 1 && mainTitle !== "Document" && + decodeEntities(tok.text || "").includes(mainTitle)) continue; + if (tok.text === "Table of Contents") continue; + + const indent = (tok.depth - 1) * 360; + const tocSize = tok.depth === 1 ? 24 : tok.depth === 2 ? 22 : 20; + const tocBold = tok.depth <= 2; + const tocColor = tok.depth <= 2 ? HEADER_COLOR : ACCENT_COLOR; + + children.push(new Paragraph({ + children: [new TextRun({ + text: decodeEntities(tok.text), + font: FONT, size: tocSize, bold: tocBold, color: tocColor, + })], + spacing: { before: tok.depth === 2 ? 80 : 40, after: 40 }, + indent: { left: indent }, + })); +} + +children.push(new Paragraph({ children: [new PageBreak()] })); + +// --- Token walker --- +let skipToc = false; + +for (const token of tokens) { + switch (token.type) { + case "heading": { + // Skip first H1 if it matches the front-matter title (already on title page) + if (token.depth === 1 && mainTitle !== "Document" && + decodeEntities(token.text || "").includes(mainTitle)) { + continue; + } + // Skip markdown TOC section + if (token.text === "Table of Contents") { skipToc = true; continue; } + if (skipToc && token.depth > 2) continue; + skipToc = false; + + const headingMap = { + 1: HeadingLevel.HEADING_1, 2: HeadingLevel.HEADING_2, + 3: HeadingLevel.HEADING_3, 4: HeadingLevel.HEADING_4, + }; + children.push(new Paragraph({ + heading: headingMap[token.depth] || HeadingLevel.HEADING_4, + children: [new TextRun({ + text: decodeEntities(token.text), + font: FONT, bold: true, + color: token.depth <= 2 ? HEADER_COLOR : ACCENT_COLOR, + size: token.depth === 2 ? 32 : token.depth === 3 ? 26 : 24, + })], + spacing: { before: token.depth === 2 ? 360 : 240, after: 120 }, + })); + break; + } + case "paragraph": { + if (skipToc) continue; + // Check if the paragraph is a standalone image + const imgToken = token.tokens && token.tokens.length === 1 && token.tokens[0].type === "image" + ? token.tokens[0] : null; + if (imgToken) { + const href = imgToken.href || ""; + const imgPath = resolve(inputDir, href); + if (existsSync(imgPath)) { + const imgBuf = readFileSync(imgPath); + const dims = pngDimensions(imgBuf); + const maxW = 580; // max width in points (~6 inches) + const scale = dims.width > maxW ? maxW / dims.width : 1; + const w = Math.round(dims.width * scale); + const h = Math.round(dims.height * scale); + children.push(new Paragraph({ + children: [new ImageRun({ data: imgBuf, transformation: { width: w, height: h }, type: "png" })], + alignment: AlignmentType.CENTER, + spacing: { before: 120, after: 40 }, + })); + // Add caption if alt text exists + if (imgToken.text) { + children.push(new Paragraph({ + children: [new TextRun({ text: imgToken.text, font: FONT, size: 18, italics: true, color: "666666" })], + alignment: AlignmentType.CENTER, + spacing: { before: 0, after: 120 }, + })); + } + } else { + children.push(new Paragraph({ + children: [new TextRun({ text: `[Image not found: ${href}]`, font: FONT, size: 20, italics: true, color: "888888" })], + spacing: { before: 80, after: 80 }, + })); + } + } else { + children.push(new Paragraph({ + children: paragraphRuns(token), spacing: { before: 80, after: 80 }, + })); + } + break; + } + case "table": + if (skipToc) continue; + children.push(buildTable(token)); + children.push(new Paragraph({ spacing: { after: 120 } })); + break; + case "code": + if (skipToc) continue; + if (token.lang === "mermaid") { + children.push(new Paragraph({ + children: [new TextRun({ + text: "[Diagram: See source .md file for interactive Mermaid diagram]", + font: FONT, size: 20, italics: true, color: "888888", + })], + spacing: { before: 80, after: 80 }, + shading: { type: ShadingType.SOLID, color: CODE_BG, fill: CODE_BG }, + indent: { left: 360 }, + })); + } else { + children.push(...buildCodeBlock(token)); + } + children.push(new Paragraph({ spacing: { after: 80 } })); + break; + case "list": + if (skipToc) continue; + children.push(...buildList(token)); + break; + case "hr": + skipToc = false; + children.push(new Paragraph({ + spacing: { before: 200, after: 200 }, + border: { bottom: { style: BorderStyle.SINGLE, size: 1, color: BORDER_COLOR } }, + })); + break; + case "space": + break; + default: + if (token.raw && !skipToc) { + children.push(new Paragraph({ + children: [new TextRun({ text: decodeEntities(token.raw.trim()), font: FONT, size: 22 })], + spacing: { before: 80, after: 80 }, + })); + } + break; + } +} + +// --- Create and write document --- +const doc = new Document({ + styles: { + default: { + document: { run: { font: FONT, size: 22 } }, + heading1: { + run: { font: FONT, size: 36, bold: true, color: HEADER_COLOR }, + paragraph: { spacing: { before: 360, after: 160 } }, + }, + heading2: { + run: { font: FONT, size: 32, bold: true, color: HEADER_COLOR }, + paragraph: { spacing: { before: 320, after: 120 } }, + }, + heading3: { + run: { font: FONT, size: 26, bold: true, color: ACCENT_COLOR }, + paragraph: { spacing: { before: 240, after: 100 } }, + }, + }, + }, + sections: [{ + properties: { + page: { margin: { top: 1440, bottom: 1440, left: 1440, right: 1440 } }, + }, + children, + }], + features: { updateFields: false }, +}); + +const buffer = await Packer.toBuffer(doc); +writeFileSync(outputPath, buffer); +console.log(`Generated: ${outputPath} (${(buffer.length / 1024).toFixed(0)} KB)`); diff --git a/plugins/project-documenter/skills/md-to-docx/package.json b/plugins/project-documenter/skills/md-to-docx/package.json new file mode 100644 index 000000000..2f5c1cf94 --- /dev/null +++ b/plugins/project-documenter/skills/md-to-docx/package.json @@ -0,0 +1,9 @@ +{ + "private": true, + "type": "module", + "description": "Dependencies for the Markdown to Word converter skill", + "dependencies": { + "docx": "^9.6.1", + "marked": "^17.0.4" + } +} From 3faf4fa96f2308bc0fbe8f37d306d00d20568077 Mon Sep 17 00:00:00 2001 From: parveen-dotnet Date: Mon, 20 Apr 2026 23:03:34 +0530 Subject: [PATCH 2/6] chore: moved agents, skills and scripts to respective folders --- .github/plugin/marketplace.json | 6 + docs/README.agents.md | 12 +- docs/README.plugins.md | 1 + docs/README.skills.md | 2 + .../.github/plugin/plugin.json | 6 +- plugins/project-documenter/README.md | 2 - .../agents/project-documenter.md | 300 ------------------ .../docs/agent-workflow.drawio | 133 -------- .../docs/agent-workflow.drawio.png | Bin 138724 -> 0 bytes .../skills => skills}/drawio/SKILL.md | 14 +- .../drawio/scripts}/drawio-to-png.mjs | 0 .../drawio/scripts}/package.json | 0 .../skills => skills}/md-to-docx/SKILL.md | 10 +- .../md-to-docx/scripts}/md-to-docx.mjs | 0 .../md-to-docx/scripts}/package.json | 0 15 files changed, 30 insertions(+), 456 deletions(-) delete mode 100644 plugins/project-documenter/agents/project-documenter.md delete mode 100644 plugins/project-documenter/docs/agent-workflow.drawio delete mode 100644 plugins/project-documenter/docs/agent-workflow.drawio.png rename {plugins/project-documenter/skills => skills}/drawio/SKILL.md (85%) rename {plugins/project-documenter/skills/drawio => skills/drawio/scripts}/drawio-to-png.mjs (100%) rename {plugins/project-documenter/skills/drawio => skills/drawio/scripts}/package.json (100%) rename {plugins/project-documenter/skills => skills}/md-to-docx/SKILL.md (89%) rename {plugins/project-documenter/skills/md-to-docx => skills/md-to-docx/scripts}/md-to-docx.mjs (100%) rename {plugins/project-documenter/skills/md-to-docx => skills/md-to-docx/scripts}/package.json (100%) diff --git a/.github/plugin/marketplace.json b/.github/plugin/marketplace.json index a86a27a36..f8cfff19a 100644 --- a/.github/plugin/marketplace.json +++ b/.github/plugin/marketplace.json @@ -447,6 +447,12 @@ "description": "Complete toolkit for developing Power Platform custom connectors with Model Context Protocol integration for Microsoft Copilot Studio", "version": "1.0.0" }, + { + "name": "project-documenter", + "source": "project-documenter", + "description": "Generate professional project documentation with draw.io architecture diagrams and Word (.docx) output with embedded images. Automatically discovers any project's technology stack and produces Markdown, diagrams, PNG exports, and a formatted Word document.", + "version": "1.0.0" + }, { "name": "project-planning", "source": "project-planning", diff --git a/docs/README.agents.md b/docs/README.agents.md index 8e0856716..160a03315 100644 --- a/docs/README.agents.md +++ b/docs/README.agents.md @@ -32,7 +32,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Agent Governance Reviewer](../agents/agent-governance-reviewer.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%2Fagent-governance-reviewer.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%2Fagent-governance-reviewer.agent.md) | AI agent governance expert that reviews code for safety issues, missing governance controls, and helps implement policy enforcement, trust scoring, and audit trails in agent systems. | | | [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. | | | [API Architect](../agents/api-architect.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%2Fapi-architect.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%2Fapi-architect.agent.md) | Your role is that of an API architect. Help mentor the engineer by providing guidance, support, and working code. | | -| [Apify Integration Expert](../agents/apify-integration-expert.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%2Fapify-integration-expert.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%2Fapify-integration-expert.agent.md) | Expert agent for integrating Apify Actors into codebases. Handles Actor selection, workflow design, implementation across JavaScript/TypeScript and Python, testing, and production-ready deployment. | [apify](https://github.com/mcp/com.apify/apify-mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D) | +| [Apify Integration Expert](../agents/apify-integration-expert.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%2Fapify-integration-expert.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%2Fapify-integration-expert.agent.md) | Expert agent for integrating Apify Actors into codebases. Handles Actor selection, workflow design, implementation across JavaScript/TypeScript and Python, testing, and production-ready deployment. | apify
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D) | | [Arch Linux Expert](../agents/arch-linux-expert.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%2Farch-linux-expert.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%2Farch-linux-expert.agent.md) | Arch Linux specialist focused on pacman, rolling-release maintenance, and Arch-centric system administration workflows. | | | [Arm Migration Agent](../agents/arm-migration.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%2Farm-migration.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%2Farm-migration.agent.md) | Arm Cloud Migration Assistant accelerates moving x86 workloads to Arm infrastructure. It scans the repository for architecture assumptions, portability issues, container base image and dependency incompatibilities, and recommends Arm-optimized changes. It can drive multi-arch container builds, validate performance, and guide optimization, enabling smooth cross-platform deployment directly inside GitHub. | custom-mcp
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=custom-mcp&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=custom-mcp&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Atlassian Requirements to Jira](../agents/atlassian-requirements-to-jira.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%2Fatlassian-requirements-to-jira.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%2Fatlassian-requirements-to-jira.agent.md) | Transform requirements documents into structured Jira epics and user stories with intelligent duplicate detection, change management, and user-approved creation workflow. | | @@ -60,7 +60,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Clojure Interactive Programming](../agents/clojure-interactive-programming.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%2Fclojure-interactive-programming.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%2Fclojure-interactive-programming.agent.md) | 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. | | | [Comet Opik](../agents/comet-opik.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%2Fcomet-opik.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%2Fcomet-opik.agent.md) | Unified Comet Opik agent for instrumenting LLM apps, managing prompts/projects, auditing prompts, and investigating traces/metrics via the latest Opik MCP server. | opik
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=opik&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=opik&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Context Architect](../agents/context-architect.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%2Fcontext-architect.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%2Fcontext-architect.agent.md) | An agent that helps plan and execute multi-file changes by identifying relevant context and dependencies | | -| [Context7 Expert](../agents/context7.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%2Fcontext7.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%2Fcontext7.agent.md) | Expert in latest library versions, best practices, and correct syntax using up-to-date documentation | [context7](https://github.com/mcp/io.github.upstash/context7)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D) | +| [Context7 Expert](../agents/context7.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%2Fcontext7.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%2Fcontext7.agent.md) | Expert in latest library versions, best practices, and correct syntax using up-to-date documentation | context7
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D) | | [Create PRD Chat Mode](../agents/prd.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%2Fprd.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%2Fprd.agent.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](../agents/critical-thinking.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%2Fcritical-thinking.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%2Fcritical-thinking.agent.md) | Challenge assumptions and encourage critical thinking to ensure the best possible solution and outcomes. | | | [Custom Agent Foundry](../agents/custom-agent-foundry.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%2Fcustom-agent-foundry.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%2Fcustom-agent-foundry.agent.md) | Expert at designing and creating VS Code custom agents with optimal configurations | | @@ -76,7 +76,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Doublecheck](../agents/doublecheck.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%2Fdoublecheck.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%2Fdoublecheck.agent.md) | Interactive verification agent for AI-generated output. Runs a three-layer pipeline (self-audit, source verification, adversarial review) and produces structured reports with source links for human review. | | | [Droid](../agents/droid.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%2Fdroid.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%2Fdroid.agent.md) | Provides installation guidance, usage examples, and automation patterns for the Droid CLI, with emphasis on droid exec for CI/CD and non-interactive automation | | | [Drupal Expert](../agents/drupal-expert.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%2Fdrupal-expert.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%2Fdrupal-expert.agent.md) | Expert assistant for Drupal development, architecture, and best practices using PHP 8.3+ and modern Drupal patterns | | -| [Dynatrace Expert](../agents/dynatrace-expert.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%2Fdynatrace-expert.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%2Fdynatrace-expert.agent.md) | The Dynatrace Expert Agent integrates observability and security capabilities directly into GitHub workflows, enabling development teams to investigate incidents, validate deployments, triage errors, detect performance regressions, validate releases, and manage security vulnerabilities by autonomously analysing traces, logs, and Dynatrace findings. This enables targeted and precise remediation of identified issues directly within the repository. | [dynatrace](https://github.com/mcp/io.github.dynatrace-oss/Dynatrace-mcp)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D) | +| [Dynatrace Expert](../agents/dynatrace-expert.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%2Fdynatrace-expert.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%2Fdynatrace-expert.agent.md) | The Dynatrace Expert Agent integrates observability and security capabilities directly into GitHub workflows, enabling development teams to investigate incidents, validate deployments, triage errors, detect performance regressions, validate releases, and manage security vulnerabilities by autonomously analysing traces, logs, and Dynatrace findings. This enables targeted and precise remediation of identified issues directly within the repository. | dynatrace
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D) | | [Elasticsearch Agent](../agents/elasticsearch-observability.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%2Felasticsearch-observability.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%2Felasticsearch-observability.agent.md) | Our expert AI assistant for debugging code (O11y), optimizing vector search (RAG), and remediating security threats using live Elastic data. | elastic-mcp
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=elastic-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=elastic-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Electron Code Review Mode Instructions](../agents/electron-angular-native.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%2Felectron-angular-native.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%2Felectron-angular-native.agent.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. | | | [Ember](../agents/ember.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%2Fember.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%2Fember.agent.md) | An AI partner, not an assistant. Ember carries fire from person to person — helping humans discover that AI partnership isn't something you learn, it's something you find. | | @@ -113,7 +113,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Kotlin MCP Server Development Expert](../agents/kotlin-mcp-expert.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%2Fkotlin-mcp-expert.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%2Fkotlin-mcp-expert.agent.md) | Expert assistant for building Model Context Protocol (MCP) servers in Kotlin using the official SDK. | | | [Kusto Assistant](../agents/kusto-assistant.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%2Fkusto-assistant.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%2Fkusto-assistant.agent.md) | Expert KQL assistant for live Azure Data Explorer analysis via Azure MCP server | | | [Laravel Expert Agent](../agents/laravel-expert-agent.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%2Flaravel-expert-agent.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%2Flaravel-expert-agent.agent.md) | Expert Laravel development assistant specializing in modern Laravel 12+ applications with Eloquent, Artisan, testing, and best practices | | -| [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-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D) | +| [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
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Lingo.dev Localization (i18n) Agent](../agents/lingodotdev-i18n.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%2Flingodotdev-i18n.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%2Flingodotdev-i18n.agent.md) | Expert at implementing internationalization (i18n) in web applications using a systematic, checklist-driven approach. | lingo
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=lingo&config=%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=lingo&config=%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D) | | [LinkedIn Post Writer](../agents/linkedin-post-writer.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%2Flinkedin-post-writer.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%2Flinkedin-post-writer.agent.md) | Draft and format compelling LinkedIn posts with Unicode bold/italic styling, visual separators, and engagement-optimized structure. Transforms raw content, technical material, images, or ideas into copy-paste-ready LinkedIn posts. | | | [Markdown Accessibility Assistant](../agents/markdown-accessibility-assistant.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%2Fmarkdown-accessibility-assistant.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%2Fmarkdown-accessibility-assistant.agent.md) | Improves the accessibility of markdown files using five GitHub best practices | | @@ -135,7 +135,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [One Shot Feature Issue Planner](../agents/one-shot-feature-issue-planner.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%2Fone-shot-feature-issue-planner.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%2Fone-shot-feature-issue-planner.agent.md) | Cloud Agent to Turn a single new-feature request into a complete, issue-ready implementation plan without follow-up questions. | | | [OpenAPI to Application Generator](../agents/openapi-to-application.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%2Fopenapi-to-application.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%2Fopenapi-to-application.agent.md) | Expert assistant for generating working applications from OpenAPI specifications | | | [Oracle To PostgreSQL Migration Expert](../agents/oracle-to-postgres-migration-expert.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%2Foracle-to-postgres-migration-expert.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%2Foracle-to-postgres-migration-expert.agent.md) | Agent for Oracle-to-PostgreSQL application migrations. Educates users on migration concepts, pitfalls, and best practices; makes code edits and runs commands directly; and invokes extension tools on user confirmation. | | -| [PagerDuty Incident Responder](../agents/pagerduty-incident-responder.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%2Fpagerduty-incident-responder.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%2Fpagerduty-incident-responder.agent.md) | Responds to PagerDuty incidents by analyzing incident context, identifying recent code changes, and suggesting fixes via GitHub PRs. | [pagerduty](https://github.com/mcp/io.github.PagerDuty/pagerduty-mcp)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D) | +| [PagerDuty Incident Responder](../agents/pagerduty-incident-responder.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%2Fpagerduty-incident-responder.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%2Fpagerduty-incident-responder.agent.md) | Responds to PagerDuty incidents by analyzing incident context, identifying recent code changes, and suggesting fixes via GitHub PRs. | pagerduty
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D) | | [PHP MCP Expert](../agents/php-mcp-expert.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%2Fphp-mcp-expert.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%2Fphp-mcp-expert.agent.md) | Expert assistant for PHP MCP server development using the official PHP SDK with attribute-based discovery | | | [Pimcore Expert](../agents/pimcore-expert.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%2Fpimcore-expert.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%2Fpimcore-expert.agent.md) | Expert Pimcore development assistant specializing in CMS, DAM, PIM, and E-Commerce solutions with Symfony integration | | | [Plan Mode Strategic Planning & Architecture](../agents/plan.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%2Fplan.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%2Fplan.agent.md) | Strategic planning and architecture assistant focused on thoughtful analysis before implementation. Helps developers understand codebases, clarify requirements, and develop comprehensive implementation strategies. | | @@ -213,7 +213,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Technical Content Evaluator](../agents/technical-content-evaluator.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%2Ftechnical-content-evaluator.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%2Ftechnical-content-evaluator.agent.md) | Elite technical content editor and curriculum architect for evaluating technical training materials, documentation, and educational content. Reviews for technical accuracy, pedagogical excellence, content flow, code validation, and ensures A-grade quality standards. | | | [Technical Debt Remediation Plan](../agents/tech-debt-remediation-plan.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%2Ftech-debt-remediation-plan.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%2Ftech-debt-remediation-plan.agent.md) | Generate technical debt remediation plans for code, tests, and documentation. | | | [Technical spike research mode](../agents/research-technical-spike.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%2Fresearch-technical-spike.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%2Fresearch-technical-spike.agent.md) | Systematically research and validate technical spike documents through exhaustive investigation and controlled experimentation. | | -| [Terraform Agent](../agents/terraform.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%2Fterraform.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%2Fterraform.agent.md) | Terraform infrastructure specialist with automated HCP Terraform workflows. Leverages Terraform MCP server for registry integration, workspace management, and run orchestration. Generates compliant code using latest provider/module versions, manages private registries, automates variable sets, and orchestrates infrastructure deployments with proper validation and security practices. | [terraform](https://github.com/mcp/io.github.hashicorp/terraform-mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | +| [Terraform Agent](../agents/terraform.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%2Fterraform.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%2Fterraform.agent.md) | Terraform infrastructure specialist with automated HCP Terraform workflows. Leverages Terraform MCP server for registry integration, workspace management, and run orchestration. Generates compliant code using latest provider/module versions, manages private registries, automates variable sets, and orchestrates infrastructure deployments with proper validation and security practices. | terraform
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Terraform IaC Reviewer](../agents/terraform-iac-reviewer.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%2Fterraform-iac-reviewer.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%2Fterraform-iac-reviewer.agent.md) | Terraform-focused agent that reviews and creates safer IaC changes with emphasis on state safety, least privilege, module patterns, drift detection, and plan/apply discipline | | | [Terratest Module Testing](../agents/terratest-module-testing.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%2Fterratest-module-testing.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%2Fterratest-module-testing.agent.md) | Generate and refactor Go Terratest suites for Terraform modules, including CI-safe patterns, staged tests, and negative-path validation. | | | [Thinking Beast Mode](../agents/Thinking-Beast-Mode.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%2FThinking-Beast-Mode.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%2FThinking-Beast-Mode.agent.md) | A transcendent coding agent with quantum cognitive architecture, adversarial intelligence, and unrestricted creative freedom. | | diff --git a/docs/README.plugins.md b/docs/README.plugins.md index d99ecbb71..b99c4981a 100644 --- a/docs/README.plugins.md +++ b/docs/README.plugins.md @@ -68,6 +68,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-plugins) for guidelines on how t | [power-apps-code-apps](../plugins/power-apps-code-apps/README.md) | Complete toolkit for Power Apps Code Apps development including project scaffolding, development standards, and expert guidance for building code-first applications with Power Platform integration. | 2 items | power-apps, power-platform, typescript, react, code-apps, dataverse, connectors | | [power-bi-development](../plugins/power-bi-development/README.md) | Comprehensive Power BI development resources including data modeling, DAX optimization, performance tuning, visualization design, security best practices, and DevOps/ALM guidance for building enterprise-grade Power BI solutions. | 8 items | power-bi, dax, data-modeling, performance, visualization, security, devops, business-intelligence | | [power-platform-mcp-connector-development](../plugins/power-platform-mcp-connector-development/README.md) | Complete toolkit for developing Power Platform custom connectors with Model Context Protocol integration for Microsoft Copilot Studio | 3 items | power-platform, mcp, copilot-studio, custom-connector, json-rpc | +| [project-documenter](../plugins/project-documenter/README.md) | Generate professional project documentation with draw.io architecture diagrams and Word (.docx) output with embedded images. Automatically discovers any project's technology stack and produces Markdown, diagrams, PNG exports, and a formatted Word document. | 3 items | documentation, architecture-diagrams, drawio, word-document, docx, png-images, c4-model, project-summary, auto-discovery | | [project-planning](../plugins/project-planning/README.md) | Tools and guidance for software project planning, feature breakdown, epic management, implementation planning, and task organization for development teams. | 15 items | planning, project-management, epic, feature, implementation, task, architecture, technical-spike | | [python-mcp-development](../plugins/python-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Python using the official SDK with FastMCP. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | python, mcp, model-context-protocol, fastmcp, server-development | | [react18-upgrade](../plugins/react18-upgrade/README.md) | Enterprise React 18 migration toolkit with specialized agents and skills for upgrading React 16/17 class-component codebases to React 18.3.1. Includes auditor, dependency surgeon, class component migration specialist, automatic batching fixer, and test guardian. | 13 items | react18, react, migration, upgrade, class-components, lifecycle, batching | diff --git a/docs/README.skills.md b/docs/README.skills.md index 6041106cc..69a2b5db5 100644 --- a/docs/README.skills.md +++ b/docs/README.skills.md @@ -130,6 +130,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-skills) for guidelines on how to | [dotnet-upgrade](../skills/dotnet-upgrade/SKILL.md) | Ready-to-use prompts for comprehensive .NET framework upgrade analysis and execution | None | | [doublecheck](../skills/doublecheck/SKILL.md) | Three-layer verification pipeline for AI output. Extracts verifiable claims, finds supporting or contradicting sources via web search, runs adversarial review for hallucination patterns, and produces a structured verification report with source links for human review. | `assets/verification-report-template.md` | | [draw-io-diagram-generator](../skills/draw-io-diagram-generator/SKILL.md) | Use when creating, editing, or generating draw.io diagram files (.drawio, .drawio.svg, .drawio.png). Covers mxGraph XML authoring, shape libraries, style strings, flowcharts, system architecture, sequence diagrams, ER diagrams, UML class diagrams, network topology, layout strategy, the hediet.vscode-drawio VS Code extension, and the full agent workflow from request to a ready-to-open file. | `assets/templates`
`references/drawio-xml-schema.md`
`references/shape-libraries.md`
`references/style-reference.md`
`scripts/.gitignore`
`scripts/README.md`
`scripts/add-shape.py`
`scripts/validate-drawio.py` | +| [drawio](../skills/drawio/SKILL.md) | Generate draw.io diagrams as .drawio files and export to PNG/SVG/PDF with embedded XML | `scripts/drawio-to-png.mjs`
`scripts/package.json` | | [editorconfig](../skills/editorconfig/SKILL.md) | Generates a comprehensive and best-practice-oriented .editorconfig file based on project analysis and user preferences. | None | | [ef-core](../skills/ef-core/SKILL.md) | Get best practices for Entity Framework Core | None | | [email-drafter](../skills/email-drafter/SKILL.md) | Draft and review professional emails that match your personal writing style. Analyzes your sent emails for tone, greeting, structure, and sign-off patterns via WorkIQ, then generates context-aware drafts for any recipient. USE FOR: draft email, write email, compose email, reply email, follow-up email, analyze email tone, email style. | None | @@ -200,6 +201,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-skills) for guidelines on how to | [mcp-create-declarative-agent](../skills/mcp-create-declarative-agent/SKILL.md) | Skill converted from mcp-create-declarative-agent.prompt.md | None | | [mcp-deploy-manage-agents](../skills/mcp-deploy-manage-agents/SKILL.md) | Skill converted from mcp-deploy-manage-agents.prompt.md | None | | [mcp-security-audit](../skills/mcp-security-audit/SKILL.md) | Audit MCP (Model Context Protocol) server configurations for security issues. Use this skill when:
- Reviewing .mcp.json files for security risks
- Checking MCP server args for hardcoded secrets or shell injection patterns
- Validating that MCP servers use pinned versions (not @latest)
- Detecting unpinned dependencies in MCP server configurations
- Auditing which MCP servers a project registers and whether they're on an approved list
- Checking for environment variable usage vs. hardcoded credentials in MCP configs
- Any request like "is my MCP config secure?", "audit my MCP servers", or "check .mcp.json"
keywords: [mcp, security, audit, secrets, shell-injection, supply-chain, governance] | None | +| [md-to-docx](../skills/md-to-docx/SKILL.md) | Convert Markdown files to professionally formatted Word (.docx) documents with embedded PNG images — pure JavaScript, no external tools required | `scripts/md-to-docx.mjs`
`scripts/package.json` | | [meeting-minutes](../skills/meeting-minutes/SKILL.md) | Generate concise, actionable meeting minutes for internal meetings. Includes metadata, attendees, agenda, decisions, action items (owner + due date), and follow-up steps. | None | | [memory-merger](../skills/memory-merger/SKILL.md) | Merges mature lessons from a domain memory file into its instruction file. Syntax: `/memory-merger >domain [scope]` where scope is `global` (default), `user`, `workspace`, or `ws`. | None | | [mentoring-juniors](../skills/mentoring-juniors/SKILL.md) | Socratic mentoring for junior developers and AI newcomers. Guides through questions, never answers. Triggers: "help me understand", "explain this code", "I'm stuck", "Im stuck", "I'm confused", "Im confused", "I don't understand", "I dont understand", "can you teach me", "teach me", "mentor me", "guide me", "what does this error mean", "why doesn't this work", "why does not this work", "I'm a beginner", "Im a beginner", "I'm learning", "Im learning", "I'm new to this", "Im new to this", "walk me through", "how does this work", "what's wrong with my code", "what's wrong", "can you break this down", "ELI5", "step by step", "where do I start", "what am I missing", "newbie here", "junior dev", "first time using", "how do I", "what is", "is this right", "not sure", "need help", "struggling", "show me", "help me debug", "best practice", "too complex", "overwhelmed", "lost", "debug this", "/socratic", "/hint", "/concept", "/pseudocode". Progressive clue systems, teaching techniques, and success metrics. | None | diff --git a/plugins/project-documenter/.github/plugin/plugin.json b/plugins/project-documenter/.github/plugin/plugin.json index 1b2073761..23ed8d470 100644 --- a/plugins/project-documenter/.github/plugin/plugin.json +++ b/plugins/project-documenter/.github/plugin/plugin.json @@ -19,10 +19,10 @@ "auto-discovery" ], "agents": [ - "./agents" + "./agents/project-documenter.agent.md" ], "skills": [ - "./skills/drawio", - "./skills/md-to-docx" + "./skills/drawio/", + "./skills/md-to-docx/" ] } diff --git a/plugins/project-documenter/README.md b/plugins/project-documenter/README.md index e34b8e70a..a668cf737 100644 --- a/plugins/project-documenter/README.md +++ b/plugins/project-documenter/README.md @@ -17,8 +17,6 @@ Point the **Project Documenter** agent at any repository and it produces: 2. **Draw.io diagrams** — C4 Context, Pipeline, and Component relationship diagrams (`.drawio` + `.drawio.png`) 3. **Word document** — professionally formatted `.docx` with title page, table of contents, and embedded PNG architecture images -![Agent Workflow](docs/agent-workflow.drawio.png) - ## What's Included ### Agent diff --git a/plugins/project-documenter/agents/project-documenter.md b/plugins/project-documenter/agents/project-documenter.md deleted file mode 100644 index 46e8b6ec7..000000000 --- a/plugins/project-documenter/agents/project-documenter.md +++ /dev/null @@ -1,300 +0,0 @@ ---- -name: "Project Documenter" -description: "Generates professional MS Word project documentation with draw.io architecture diagrams and embedded PNG images. Automatically discovers any project's technology stack, architecture, and code structure. Produces Markdown, draw.io diagrams, PNG exports, and .docx output." -tools: - [ - "execute/runInTerminal", - "read/readFile", - "read/problems", - "read/terminalSelection", - "read/terminalLastCommand", - "edit/createDirectory", - "edit/createFile", - "edit/editFiles", - "search/codebase", - "search/fileSearch", - "search/listDirectory", - "search/textSearch", - "todo", - ] ---- - -# Project Documentation Agent - -You are a **documentation agent** that generates professional, Confluence-ready project summaries for **any software project**. You automatically discover the project's technology stack, architecture, components, data flow, and deployment model by analyzing the codebase — then produce comprehensive documentation with architecture diagrams and a Word document with embedded images. - -You are **project-agnostic**. You do not assume any specific language, framework, or architecture. You discover everything dynamically from the repository. - -Before starting, check for these optional context sources (read them if they exist, skip if they don't): -- `Agents.md` or `AGENTS.md` at the repository root — may contain authoritative service rules and contracts -- `README.md` — project overview and setup instructions -- `ARCHITECTURE.md`, `docs/architecture.md`, or similar — existing architecture documentation -- `.github/copilot-instructions.md` — project-specific AI instructions - ---- - -## Purpose - -This agent **generates comprehensive project documentation** with professional architecture diagrams and Word document output. It does NOT write, modify, or generate any production code. Its output is: - -1. **Markdown document** (`docs/project-summary.md`) — the source document -2. **Draw.io diagrams** (`docs/diagrams/*.drawio`) — editable architecture diagrams -3. **PNG exports** (`docs/diagrams/*.drawio.png`) — rendered diagram images -4. **Word document** (`docs/project-summary.docx`) — professional `.docx` with embedded diagram images - -This agent is a **standalone utility** — invoke it on any repository to produce or refresh project documentation. - ---- - -## Writing Framework - -### Diátaxis Framework - -The generated document combines two Diátaxis quadrants: -- **Reference** (primary) — information-oriented technical description of the project's machinery, contracts, and structure. -- **Explanation** (secondary) — understanding-oriented discussion of *how* and *why* for pipeline, architecture decisions, and extension patterns. - -### Writing Principles - -- **Clarity first**: Use simple words for complex ideas. Define technical terms on first use. -- **Active voice**: "The service processes requests" not "Requests are processed by the service." -- **Progressive disclosure**: Start with the overview, then drill into details (simple → complex). -- **Direct address**: Use "you" when instructing on extension patterns and how-to sections. -- **One idea per paragraph**: Keep paragraphs focused and scannable. -- **Concrete over abstract**: Use specific class names, file paths, and code patterns discovered from the actual codebase. - -### Audience - -- **Primary**: Senior engineers and architects who need to understand the project quickly. -- **Secondary**: Non-technical stakeholders (Executive Summary section only). -- **Tertiary**: New developers onboarding to the codebase. - -### Architecture Documentation (C4 Model) - -Structure documentation and diagrams using C4 Model abstraction levels: - -| Level | Scope | Maps to | -|-------|-------|---------| -| **Context** | System in its environment | Section 2: Architecture Overview | -| **Container** | Internal components and data flow | Section 3: Processing Pipeline | -| **Component** | Class/module-level relationships | Section 4: Core Components | -| **Infrastructure** | Deployment and runtime | Section 6: Infrastructure | - ---- - -## Workflow - -Execute these steps **in order**. Use the todo list to track progress. - -### Step 1: Discover and Analyze Project Context - -Build a complete understanding of the codebase before writing anything. - -#### 1a. Read Context Sources - -Check for and read (if they exist): -1. `Agents.md` or `AGENTS.md` at the repository root -2. `README.md` -3. `.github/copilot-instructions.md` -4. `ARCHITECTURE.md`, `docs/` directory, `CONTRIBUTING.md` - -#### 1b. Detect Technology Stack - -| Signal | What to Look For | -|--------|-----------------| -| **Language** | `.csproj`/`.sln` (.NET), `pom.xml`/`build.gradle` (Java), `package.json` (Node.js), `requirements.txt`/`pyproject.toml` (Python), `go.mod` (Go), `Cargo.toml` (Rust) | -| **Framework** | ASP.NET, Spring Boot, Express, FastAPI, Django, Gin, etc. | -| **Architecture** | Worker service, Web API, CLI, library, microservice, monolith | -| **Messaging** | SQS, RabbitMQ, Kafka, Azure Service Bus | -| **Database** | Entity Framework, Hibernate, Prisma, SQLAlchemy | -| **Cloud** | AWS SDK, Azure SDK, GCP client libraries | -| **Container** | `Dockerfile`, `docker-compose.yml`, Helm charts | -| **CI/CD** | `.github/workflows/`, `.gitlab-ci.yml`, `Jenkinsfile` | -| **Testing** | xUnit, NUnit, JUnit, Jest, pytest | - -#### 1c. Map the Codebase - -1. List the directory structure (up to 3 levels deep) -2. Find entry points (`Program.cs`, `Main.java`, `index.ts`, `main.py`, etc.) -3. Find configuration files (`appsettings.json`, `application.yml`, `.env`, etc.) -4. Discover interfaces/contracts -5. Map implementations (factories, services, handlers) -6. Find models/entities -7. Read the package manifest for dependencies -8. Review Dockerfile (if present) -9. Read the 10-20 most important source files - -#### 1d. Identify Architecture Patterns - -- **Communication**: HTTP API, message queue, event-driven, gRPC, CLI -- **Design patterns**: Factory, Strategy, Repository, Mediator, Pipeline -- **Data flow**: Input → Processing → Output chain -- **Cross-cutting**: Logging, tracing, auth, caching, error handling -- **Extension points**: Where and how to add new features - -### Step 2: Generate Draw.io Diagrams - -Create the `docs/diagrams/` directory. Generate **3-5 professional diagrams** using draw.io XML (`mxGraphModel` format). - -#### Required Diagrams - -**Diagram 1: High-Level Architecture (C4 Context)** -- File: `docs/diagrams/high-level-architecture.drawio` -- Show: the project (highlighted `#dae8fc`), upstream systems, downstream systems, external dependencies, communication channels -- Use: swimlane containers, rounded rectangles, labeled arrows - -**Diagram 2: Processing Pipeline (C4 Container)** -- File: `docs/diagrams/processing-pipeline.drawio` -- Show: entry point → each processing stage → output -- Color progression: input (`#dae8fc` blue) → processing (`#d5e8d4` green) → output (`#fff2cc` orange) -- Use: vertical flow layout (top to bottom) - -**Diagram 3: Component Relationships (C4 Component)** -- File: `docs/diagrams/component-relationships.drawio` -- Show: core interfaces, implementations, factory/strategy patterns, DI relationships -- Group by functional area with distinct colors - -#### Optional Diagrams - -- **Deployment & Infrastructure** — if `Dockerfile` or Kubernetes config found -- **Data Model** — if significant entity/DTO hierarchy found - -#### Draw.io XML Format - -Generate valid `mxGraphModel` XML. Use these style conventions: - -```xml - - - - - - - - - - - -``` - -#### Diagram Export to PNG - -After generating `.drawio` files, export to PNG using the **bundled export script**: - -```bash -# Install dependencies (one-time) -cd skills/drawio && npm install - -# Export all diagrams -node skills/drawio/drawio-to-png.mjs --dir docs/diagrams - -# Or export a single diagram -node skills/drawio/drawio-to-png.mjs docs/diagrams/.drawio -``` - -The script tries (in order): -1. **draw.io CLI** — if draw.io desktop is installed -2. **Headless browser** — uses Edge/Chrome + official draw.io viewer JS - -If neither is available, keep the `.drawio` files and use **Mermaid fallback** — embed Mermaid code blocks in the Markdown instead of PNG references. - -### Step 3: Write Markdown Document - -Create `docs/project-summary.md` with these sections: - -**Front matter:** -```markdown ---- -title: — Project Summary -date: -version: 1.0 -audience: Engineering Team, Architects, Stakeholders ---- -``` - -#### Sections - -1. **Executive Summary** — 3-5 sentences: what, where, how, key capabilities -2. **Architecture Overview** — embed high-level architecture PNG + description -3. **Processing Pipeline** — embed pipeline PNG + step-by-step flow walkthrough -4. **Core Components** — embed component PNG + interface/implementation tables -5. **API Contracts / Message Schemas** — input/output property tables -6. **Infrastructure & Deployment** — Docker, CI/CD, cloud config -7. **Extension Patterns** — step-by-step how-to with file paths -8. **Rules & Anti-Patterns** — do's and don'ts from `Agents.md` or inferred -9. **Dependencies** — categorized package table with versions -10. **Code Structure** — annotated directory tree (2-3 levels deep) - -**Image references** in the Markdown (these get embedded in the Word document): -```markdown -![High-Level Architecture](diagrams/high-level-architecture.drawio.png) -![Processing Pipeline](diagrams/processing-pipeline.drawio.png) -![Component Relationships](diagrams/component-relationships.drawio.png) -``` - -### Step 4: Convert to Word Document - -Use the **bundled md-to-docx converter** to produce a `.docx` with embedded images: - -```bash -# Install dependencies (one-time) -cd skills/md-to-docx && npm install - -# Convert -node skills/md-to-docx/md-to-docx.mjs docs/project-summary.md docs/project-summary.docx -``` - -The converter: -- Extracts YAML front-matter for title page metadata -- Generates a title page and table of contents -- **Embeds PNG images** referenced via `![alt](path)` syntax — diagrams appear inline in the Word document -- Produces professionally formatted `.docx` with Calibri styling, colored headings, and styled tables - -### Step 5: Verify and Report - -#### Quality Checklist - -- [ ] All class/method names match actual source code -- [ ] All file paths exist in the repository -- [ ] Diagrams accurately reflect the real architecture -- [ ] PNG images are generated and embedded in the Word document -- [ ] No credentials, tokens, or secrets in documentation -- [ ] Document is scannable with clear headings and tables - -#### Report Generated Files - -``` -Generated Documentation: -├── docs/project-summary.md # Source document (Markdown) -├── docs/project-summary.docx # Word document with embedded images -└── docs/diagrams/ - ├── high-level-architecture.drawio # C4 Context diagram (editable) - ├── high-level-architecture.drawio.png # Rendered PNG - ├── processing-pipeline.drawio # C4 Container diagram - ├── processing-pipeline.drawio.png - ├── component-relationships.drawio # C4 Component diagram - ├── component-relationships.drawio.png - └── [deployment-infrastructure.drawio] # Optional -``` - ---- - -## Behavioral Rules - -- **Read-only on source code**: NEVER modify any file outside `docs/`. Only create files in `docs/`. -- **Discover, don't assume**: Never hardcode project-specific details. Discover from the repository. -- **Fresh regeneration**: Regenerate all content from scratch each run. -- **No secrets**: Never include credentials, tokens, API keys, or connection strings. -- **Graceful fallbacks**: If draw.io export fails, use Mermaid fallback. If md-to-docx fails, report the error. -- **Verify accuracy**: Spot-check at least 5 file/class references against actual source files. - ---- - -## Error Recovery - -| Problem | Action | -|---------|--------| -| draw.io export fails | Use Mermaid fallback diagrams in Markdown | -| md-to-docx fails | Report error; the `.md` file is still usable | -| Source file not found | Note the gap, continue with available files | -| Unrecognized tech stack | Document what you can observe, note gaps | diff --git a/plugins/project-documenter/docs/agent-workflow.drawio b/plugins/project-documenter/docs/agent-workflow.drawio deleted file mode 100644 index 22d23b043..000000000 --- a/plugins/project-documenter/docs/agent-workflow.drawio +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plugins/project-documenter/docs/agent-workflow.drawio.png b/plugins/project-documenter/docs/agent-workflow.drawio.png deleted file mode 100644 index 8889f53eea5e971ac5e9745d28705e44d54d6495..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138724 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�}IMFaqn-T)S6X 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�!_u3K2-R#XH;qzfpBNbewoqSB;G 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
KfrK*?(enPS3`C} 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 >o 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 [output.png] +node skills/drawio/scripts/drawio-to-png.mjs [output.png] # Export all .drawio files in a directory -node skills/drawio/drawio-to-png.mjs --dir +node skills/drawio/scripts/drawio-to-png.mjs --dir # Force a specific renderer -node skills/drawio/drawio-to-png.mjs --renderer=cli|viewer|auto +node skills/drawio/scripts/drawio-to-png.mjs --renderer=cli|viewer|auto ``` ### Skill Folder Contents @@ -41,8 +41,8 @@ node skills/drawio/drawio-to-png.mjs --renderer=cli|viewer|auto | File | Purpose | |------|---------| | `SKILL.md` | This instruction file | -| `drawio-to-png.mjs` | Node.js export script (CLI + browser fallback) | -| `package.json` | Dependencies (`puppeteer-core`) | +| `scripts/drawio-to-png.mjs` | Node.js export script (CLI + browser fallback) | +| `scripts/package.json` | Dependencies (`puppeteer-core`) | ## Supported Export Formats diff --git a/plugins/project-documenter/skills/drawio/drawio-to-png.mjs b/skills/drawio/scripts/drawio-to-png.mjs similarity index 100% rename from plugins/project-documenter/skills/drawio/drawio-to-png.mjs rename to skills/drawio/scripts/drawio-to-png.mjs diff --git a/plugins/project-documenter/skills/drawio/package.json b/skills/drawio/scripts/package.json similarity index 100% rename from plugins/project-documenter/skills/drawio/package.json rename to skills/drawio/scripts/package.json diff --git a/plugins/project-documenter/skills/md-to-docx/SKILL.md b/skills/md-to-docx/SKILL.md similarity index 89% rename from plugins/project-documenter/skills/md-to-docx/SKILL.md rename to skills/md-to-docx/SKILL.md index 8fa9bc173..59e9a142f 100644 --- a/plugins/project-documenter/skills/md-to-docx/SKILL.md +++ b/skills/md-to-docx/SKILL.md @@ -10,11 +10,11 @@ Convert Markdown (`.md`) files into professionally formatted Word (`.docx`) docu ## How to Convert ```bash -# Install dependencies (one-time, from this skill folder) -cd skills/md-to-docx && npm install +# Install dependencies (one-time, from the scripts folder) +cd skills/md-to-docx/scripts && npm install # Convert (run from workspace root) -node skills/md-to-docx/md-to-docx.mjs [output.docx] +node skills/md-to-docx/scripts/md-to-docx.mjs [output.docx] ``` If `output.docx` is omitted, it defaults to `.docx` in the current directory. @@ -24,8 +24,8 @@ If `output.docx` is omitted, it defaults to `.docx` in the curre | File | Purpose | |------|---------| | `SKILL.md` | This instruction file | -| `md-to-docx.mjs` | Node.js Markdown-to-Word converter | -| `package.json` | Dependencies (`docx`, `marked`) | +| `scripts/md-to-docx.mjs` | Node.js Markdown-to-Word converter | +| `scripts/package.json` | Dependencies (`docx`, `marked`) | ## Prerequisites diff --git a/plugins/project-documenter/skills/md-to-docx/md-to-docx.mjs b/skills/md-to-docx/scripts/md-to-docx.mjs similarity index 100% rename from plugins/project-documenter/skills/md-to-docx/md-to-docx.mjs rename to skills/md-to-docx/scripts/md-to-docx.mjs diff --git a/plugins/project-documenter/skills/md-to-docx/package.json b/skills/md-to-docx/scripts/package.json similarity index 100% rename from plugins/project-documenter/skills/md-to-docx/package.json rename to skills/md-to-docx/scripts/package.json From 4945c600df7d516567fdede48396aa42f0e88c0e Mon Sep 17 00:00:00 2001 From: parveen-dotnet Date: Tue, 28 Apr 2026 19:25:55 +0530 Subject: [PATCH 3/6] chore: ran npm run build for readme updates --- docs/README.agents.md | 2 +- docs/README.skills.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/README.agents.md b/docs/README.agents.md index 2e349b830..033d52e70 100644 --- a/docs/README.agents.md +++ b/docs/README.agents.md @@ -220,7 +220,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Technical Debt Remediation Plan](../agents/tech-debt-remediation-plan.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%2Ftech-debt-remediation-plan.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%2Ftech-debt-remediation-plan.agent.md) | Generate technical debt remediation plans for code, tests, and documentation. | | | [Technical spike research mode](../agents/research-technical-spike.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%2Fresearch-technical-spike.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%2Fresearch-technical-spike.agent.md) | Systematically research and validate technical spike documents through exhaustive investigation and controlled experimentation. | | | [Terminal Helper](../agents/terminal-helper.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%2Fterminal-helper.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%2Fterminal-helper.agent.md) | Fast terminal syntax and command helper for PowerShell and Bash | | -| [Terraform Agent](../agents/terraform.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%2Fterraform.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%2Fterraform.agent.md) | Terraform infrastructure specialist with automated HCP Terraform workflows. Leverages Terraform MCP server for registry integration, workspace management, and run orchestration. Generates compliant code using latest provider/module versions, manages private registries, automates variable sets, and orchestrates infrastructure deployments with proper validation and security practices. | [terraform](https://github.com/mcp/io.github.hashicorp/terraform-mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | +| [Terraform Agent](../agents/terraform.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%2Fterraform.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%2Fterraform.agent.md) | Terraform infrastructure specialist with automated HCP Terraform workflows. Leverages Terraform MCP server for registry integration, workspace management, and run orchestration. Generates compliant code using latest provider/module versions, manages private registries, automates variable sets, and orchestrates infrastructure deployments with proper validation and security practices. | terraform
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Terraform IaC Reviewer](../agents/terraform-iac-reviewer.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%2Fterraform-iac-reviewer.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%2Fterraform-iac-reviewer.agent.md) | Terraform-focused agent that reviews and creates safer IaC changes with emphasis on state safety, least privilege, module patterns, drift detection, and plan/apply discipline | | | [Terratest Module Testing](../agents/terratest-module-testing.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%2Fterratest-module-testing.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%2Fterratest-module-testing.agent.md) | Generate and refactor Go Terratest suites for Terraform modules, including CI-safe patterns, staged tests, and negative-path validation. | | | [Thinking Beast Mode](../agents/Thinking-Beast-Mode.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%2FThinking-Beast-Mode.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%2FThinking-Beast-Mode.agent.md) | A transcendent coding agent with quantum cognitive architecture, adversarial intelligence, and unrestricted creative freedom. | | diff --git a/docs/README.skills.md b/docs/README.skills.md index 2aa6ba0eb..a7004d2d2 100644 --- a/docs/README.skills.md +++ b/docs/README.skills.md @@ -135,6 +135,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-skills) for guidelines on how to | [dotnet-upgrade](../skills/dotnet-upgrade/SKILL.md)
`gh skills install github/awesome-copilot dotnet-upgrade` | Ready-to-use prompts for comprehensive .NET framework upgrade analysis and execution | None | | [doublecheck](../skills/doublecheck/SKILL.md)
`gh skills install github/awesome-copilot doublecheck` | Three-layer verification pipeline for AI output. Extracts verifiable claims, finds supporting or contradicting sources via web search, runs adversarial review for hallucination patterns, and produces a structured verification report with source links for human review. | `assets/verification-report-template.md` | | [draw-io-diagram-generator](../skills/draw-io-diagram-generator/SKILL.md)
`gh skills install github/awesome-copilot draw-io-diagram-generator` | Use when creating, editing, or generating draw.io diagram files (.drawio, .drawio.svg, .drawio.png). Covers mxGraph XML authoring, shape libraries, style strings, flowcharts, system architecture, sequence diagrams, ER diagrams, UML class diagrams, network topology, layout strategy, the hediet.vscode-drawio VS Code extension, and the full agent workflow from request to a ready-to-open file. | `assets/templates`
`references/drawio-xml-schema.md`
`references/shape-libraries.md`
`references/style-reference.md`
`scripts/.gitignore`
`scripts/README.md`
`scripts/add-shape.py`
`scripts/validate-drawio.py` | +| [drawio](../skills/drawio/SKILL.md)
`gh skills install github/awesome-copilot drawio` | Generate draw.io diagrams as .drawio files and export to PNG/SVG/PDF with embedded XML | `scripts/drawio-to-png.mjs`
`scripts/package.json` | | [editorconfig](../skills/editorconfig/SKILL.md)
`gh skills install github/awesome-copilot editorconfig` | Generates a comprehensive and best-practice-oriented .editorconfig file based on project analysis and user preferences. | None | | [ef-core](../skills/ef-core/SKILL.md)
`gh skills install github/awesome-copilot ef-core` | Get best practices for Entity Framework Core | None | | [email-drafter](../skills/email-drafter/SKILL.md)
`gh skills install github/awesome-copilot email-drafter` | Draft and review professional emails that match your personal writing style. Analyzes your sent emails for tone, greeting, structure, and sign-off patterns via WorkIQ, then generates context-aware drafts for any recipient. USE FOR: draft email, write email, compose email, reply email, follow-up email, analyze email tone, email style. | None | @@ -208,6 +209,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-skills) for guidelines on how to | [mcp-create-declarative-agent](../skills/mcp-create-declarative-agent/SKILL.md)
`gh skills install github/awesome-copilot mcp-create-declarative-agent` | Skill converted from mcp-create-declarative-agent.prompt.md | None | | [mcp-deploy-manage-agents](../skills/mcp-deploy-manage-agents/SKILL.md)
`gh skills install github/awesome-copilot mcp-deploy-manage-agents` | Skill converted from mcp-deploy-manage-agents.prompt.md | None | | [mcp-security-audit](../skills/mcp-security-audit/SKILL.md)
`gh skills install github/awesome-copilot mcp-security-audit` | Audit MCP (Model Context Protocol) server configurations for security issues. Use this skill when:
- Reviewing .mcp.json files for security risks
- Checking MCP server args for hardcoded secrets or shell injection patterns
- Validating that MCP servers use pinned versions (not @latest)
- Detecting unpinned dependencies in MCP server configurations
- Auditing which MCP servers a project registers and whether they're on an approved list
- Checking for environment variable usage vs. hardcoded credentials in MCP configs
- Any request like "is my MCP config secure?", "audit my MCP servers", or "check .mcp.json"
keywords: [mcp, security, audit, secrets, shell-injection, supply-chain, governance] | None | +| [md-to-docx](../skills/md-to-docx/SKILL.md)
`gh skills install github/awesome-copilot md-to-docx` | Convert Markdown files to professionally formatted Word (.docx) documents with embedded PNG images — pure JavaScript, no external tools required | `scripts/md-to-docx.mjs`
`scripts/package.json` | | [meeting-minutes](../skills/meeting-minutes/SKILL.md)
`gh skills install github/awesome-copilot meeting-minutes` | Generate concise, actionable meeting minutes for internal meetings. Includes metadata, attendees, agenda, decisions, action items (owner + due date), and follow-up steps. | None | | [memory-merger](../skills/memory-merger/SKILL.md)
`gh skills install github/awesome-copilot memory-merger` | Merges mature lessons from a domain memory file into its instruction file. Syntax: `/memory-merger >domain [scope]` where scope is `global` (default), `user`, `workspace`, or `ws`. | None | | [mentoring-juniors](../skills/mentoring-juniors/SKILL.md)
`gh skills install github/awesome-copilot mentoring-juniors` | Socratic mentoring for junior developers and AI newcomers. Guides through questions, never answers. Triggers: "help me understand", "explain this code", "I'm stuck", "Im stuck", "I'm confused", "Im confused", "I don't understand", "I dont understand", "can you teach me", "teach me", "mentor me", "guide me", "what does this error mean", "why doesn't this work", "why does not this work", "I'm a beginner", "Im a beginner", "I'm learning", "Im learning", "I'm new to this", "Im new to this", "walk me through", "how does this work", "what's wrong with my code", "what's wrong", "can you break this down", "ELI5", "step by step", "where do I start", "what am I missing", "newbie here", "junior dev", "first time using", "how do I", "what is", "is this right", "not sure", "need help", "struggling", "show me", "help me debug", "best practice", "too complex", "overwhelmed", "lost", "debug this", "/socratic", "/hint", "/concept", "/pseudocode". Progressive clue systems, teaching techniques, and success metrics. | None | From aa951e82072c7f5373d75fe0025820b4ccccaca5 Mon Sep 17 00:00:00 2001 From: parveen-dotnet Date: Wed, 29 Apr 2026 07:02:04 +0530 Subject: [PATCH 4/6] Update plugins/project-documenter/.github/plugin/plugin.json Co-authored-by: Aaron Powell --- plugins/project-documenter/.github/plugin/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/project-documenter/.github/plugin/plugin.json b/plugins/project-documenter/.github/plugin/plugin.json index 23ed8d470..f1b48957a 100644 --- a/plugins/project-documenter/.github/plugin/plugin.json +++ b/plugins/project-documenter/.github/plugin/plugin.json @@ -19,7 +19,7 @@ "auto-discovery" ], "agents": [ - "./agents/project-documenter.agent.md" + "./agents/project-documenter.md" ], "skills": [ "./skills/drawio/", From d5606f8d565f7fb48ae2dbb7f681dd6525cc6a4d Mon Sep 17 00:00:00 2001 From: parveen-dotnet Date: Wed, 29 Apr 2026 09:14:11 +0530 Subject: [PATCH 5/6] fix: readme.agent.md file --- docs/README.agents.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/README.agents.md b/docs/README.agents.md index 8f6850e58..6167bfe8d 100644 --- a/docs/README.agents.md +++ b/docs/README.agents.md @@ -35,7 +35,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Ai Team Qa](../agents/ai-team-qa.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%2Fai-team-qa.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%2Fai-team-qa.agent.md) | AI QA engineer agent (Ivy). Use when: testing features, running E2E tests, playtesting, filing bug reports, writing test automation, creating QA sign-off documents, or verifying bug fixes. Reports bugs as GitHub Issues. | | | [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. | | | [API Architect](../agents/api-architect.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%2Fapi-architect.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%2Fapi-architect.agent.md) | Your role is that of an API architect. Help mentor the engineer by providing guidance, support, and working code. | | -| [Apify Integration Expert](../agents/apify-integration-expert.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%2Fapify-integration-expert.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%2Fapify-integration-expert.agent.md) | Expert agent for integrating Apify Actors into codebases. Handles Actor selection, workflow design, implementation across JavaScript/TypeScript and Python, testing, and production-ready deployment. | apify
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D) | +| [Apify Integration Expert](../agents/apify-integration-expert.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%2Fapify-integration-expert.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%2Fapify-integration-expert.agent.md) | Expert agent for integrating Apify Actors into codebases. Handles Actor selection, workflow design, implementation across JavaScript/TypeScript and Python, testing, and production-ready deployment. | [apify](https://github.com/mcp/com.apify/apify-mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D) | | [Arch Linux Expert](../agents/arch-linux-expert.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%2Farch-linux-expert.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%2Farch-linux-expert.agent.md) | Arch Linux specialist focused on pacman, rolling-release maintenance, and Arch-centric system administration workflows. | | | [Arm Migration Agent](../agents/arm-migration.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%2Farm-migration.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%2Farm-migration.agent.md) | Arm Cloud Migration Assistant accelerates moving x86 workloads to Arm infrastructure. It scans the repository for architecture assumptions, portability issues, container base image and dependency incompatibilities, and recommends Arm-optimized changes. It can drive multi-arch container builds, validate performance, and guide optimization, enabling smooth cross-platform deployment directly inside GitHub. | custom-mcp
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=custom-mcp&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=custom-mcp&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Atlassian Requirements to Jira](../agents/atlassian-requirements-to-jira.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%2Fatlassian-requirements-to-jira.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%2Fatlassian-requirements-to-jira.agent.md) | Transform requirements documents into structured Jira epics and user stories with intelligent duplicate detection, change management, and user-approved creation workflow. | | @@ -66,7 +66,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Clojure Interactive Programming](../agents/clojure-interactive-programming.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%2Fclojure-interactive-programming.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%2Fclojure-interactive-programming.agent.md) | 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. | | | [Comet Opik](../agents/comet-opik.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%2Fcomet-opik.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%2Fcomet-opik.agent.md) | Unified Comet Opik agent for instrumenting LLM apps, managing prompts/projects, auditing prompts, and investigating traces/metrics via the latest Opik MCP server. | opik
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=opik&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=opik&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Context Architect](../agents/context-architect.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%2Fcontext-architect.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%2Fcontext-architect.agent.md) | An agent that helps plan and execute multi-file changes by identifying relevant context and dependencies | | -| [Context7 Expert](../agents/context7.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%2Fcontext7.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%2Fcontext7.agent.md) | Expert in latest library versions, best practices, and correct syntax using up-to-date documentation | context7
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D) | +| [Context7 Expert](../agents/context7.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%2Fcontext7.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%2Fcontext7.agent.md) | Expert in latest library versions, best practices, and correct syntax using up-to-date documentation | [context7](https://github.com/mcp/io.github.upstash/context7)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D) | | [Create PRD Chat Mode](../agents/prd.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%2Fprd.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%2Fprd.agent.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](../agents/critical-thinking.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%2Fcritical-thinking.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%2Fcritical-thinking.agent.md) | Challenge assumptions and encourage critical thinking to ensure the best possible solution and outcomes. | | | [Custom Agent Foundry](../agents/custom-agent-foundry.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%2Fcustom-agent-foundry.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%2Fcustom-agent-foundry.agent.md) | Expert at designing and creating VS Code custom agents with optimal configurations | | @@ -82,7 +82,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Doublecheck](../agents/doublecheck.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%2Fdoublecheck.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%2Fdoublecheck.agent.md) | Interactive verification agent for AI-generated output. Runs a three-layer pipeline (self-audit, source verification, adversarial review) and produces structured reports with source links for human review. | | | [Droid](../agents/droid.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%2Fdroid.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%2Fdroid.agent.md) | Provides installation guidance, usage examples, and automation patterns for the Droid CLI, with emphasis on droid exec for CI/CD and non-interactive automation | | | [Drupal Expert](../agents/drupal-expert.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%2Fdrupal-expert.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%2Fdrupal-expert.agent.md) | Expert assistant for Drupal development, architecture, and best practices using PHP 8.3+ and modern Drupal patterns | | -| [Dynatrace Expert](../agents/dynatrace-expert.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%2Fdynatrace-expert.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%2Fdynatrace-expert.agent.md) | The Dynatrace Expert Agent integrates observability and security capabilities directly into GitHub workflows, enabling development teams to investigate incidents, validate deployments, triage errors, detect performance regressions, validate releases, and manage security vulnerabilities by autonomously analysing traces, logs, and Dynatrace findings. This enables targeted and precise remediation of identified issues directly within the repository. | dynatrace
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D) | +| [Dynatrace Expert](../agents/dynatrace-expert.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%2Fdynatrace-expert.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%2Fdynatrace-expert.agent.md) | The Dynatrace Expert Agent integrates observability and security capabilities directly into GitHub workflows, enabling development teams to investigate incidents, validate deployments, triage errors, detect performance regressions, validate releases, and manage security vulnerabilities by autonomously analysing traces, logs, and Dynatrace findings. This enables targeted and precise remediation of identified issues directly within the repository. | [dynatrace](https://github.com/mcp/io.github.dynatrace-oss/Dynatrace-mcp)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D) | | [Elasticsearch Agent](../agents/elasticsearch-observability.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%2Felasticsearch-observability.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%2Felasticsearch-observability.agent.md) | Our expert AI assistant for debugging code (O11y), optimizing vector search (RAG), and remediating security threats using live Elastic data. | elastic-mcp
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=elastic-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=elastic-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Electron Code Review Mode Instructions](../agents/electron-angular-native.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%2Felectron-angular-native.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%2Felectron-angular-native.agent.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. | | | [Ember](../agents/ember.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%2Fember.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%2Fember.agent.md) | An AI partner, not an assistant. Ember carries fire from person to person — helping humans discover that AI partnership isn't something you learn, it's something you find. | | @@ -119,7 +119,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Kotlin MCP Server Development Expert](../agents/kotlin-mcp-expert.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%2Fkotlin-mcp-expert.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%2Fkotlin-mcp-expert.agent.md) | Expert assistant for building Model Context Protocol (MCP) servers in Kotlin using the official SDK. | | | [Kusto Assistant](../agents/kusto-assistant.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%2Fkusto-assistant.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%2Fkusto-assistant.agent.md) | Expert KQL assistant for live Azure Data Explorer analysis via Azure MCP server | | | [Laravel Expert Agent](../agents/laravel-expert-agent.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%2Flaravel-expert-agent.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%2Flaravel-expert-agent.agent.md) | Expert Laravel development assistant specializing in modern Laravel 12+ applications with Eloquent, Artisan, testing, and best practices | | -| [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
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D) | +| [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-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Lingo.dev Localization (i18n) Agent](../agents/lingodotdev-i18n.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%2Flingodotdev-i18n.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%2Flingodotdev-i18n.agent.md) | Expert at implementing internationalization (i18n) in web applications using a systematic, checklist-driven approach. | lingo
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=lingo&config=%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=lingo&config=%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D) | | [LinkedIn Post Writer](../agents/linkedin-post-writer.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%2Flinkedin-post-writer.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%2Flinkedin-post-writer.agent.md) | Draft and format compelling LinkedIn posts with Unicode bold/italic styling, visual separators, and engagement-optimized structure. Transforms raw content, technical material, images, or ideas into copy-paste-ready LinkedIn posts. | | | [Markdown Accessibility Assistant](../agents/markdown-accessibility-assistant.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%2Fmarkdown-accessibility-assistant.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%2Fmarkdown-accessibility-assistant.agent.md) | Improves the accessibility of markdown files using five GitHub best practices | | @@ -142,7 +142,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [One Shot Feature Issue Planner](../agents/one-shot-feature-issue-planner.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%2Fone-shot-feature-issue-planner.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%2Fone-shot-feature-issue-planner.agent.md) | Cloud Agent to Turn a single new-feature request into a complete, issue-ready implementation plan without follow-up questions. | | | [OpenAPI to Application Generator](../agents/openapi-to-application.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%2Fopenapi-to-application.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%2Fopenapi-to-application.agent.md) | Expert assistant for generating working applications from OpenAPI specifications | | | [Oracle To PostgreSQL Migration Expert](../agents/oracle-to-postgres-migration-expert.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%2Foracle-to-postgres-migration-expert.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%2Foracle-to-postgres-migration-expert.agent.md) | Agent for Oracle-to-PostgreSQL application migrations. Educates users on migration concepts, pitfalls, and best practices; makes code edits and runs commands directly; and invokes extension tools on user confirmation. | | -| [PagerDuty Incident Responder](../agents/pagerduty-incident-responder.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%2Fpagerduty-incident-responder.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%2Fpagerduty-incident-responder.agent.md) | Responds to PagerDuty incidents by analyzing incident context, identifying recent code changes, and suggesting fixes via GitHub PRs. | pagerduty
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D) | +| [PagerDuty Incident Responder](../agents/pagerduty-incident-responder.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%2Fpagerduty-incident-responder.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%2Fpagerduty-incident-responder.agent.md) | Responds to PagerDuty incidents by analyzing incident context, identifying recent code changes, and suggesting fixes via GitHub PRs. | [pagerduty](https://github.com/mcp/io.github.PagerDuty/pagerduty-mcp)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D) | | [PHP MCP Expert](../agents/php-mcp-expert.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%2Fphp-mcp-expert.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%2Fphp-mcp-expert.agent.md) | Expert assistant for PHP MCP server development using the official PHP SDK with attribute-based discovery | | | [Pimcore Expert](../agents/pimcore-expert.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%2Fpimcore-expert.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%2Fpimcore-expert.agent.md) | Expert Pimcore development assistant specializing in CMS, DAM, PIM, and E-Commerce solutions with Symfony integration | | | [Plan Mode Strategic Planning & Architecture](../agents/plan.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%2Fplan.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%2Fplan.agent.md) | Strategic planning and architecture assistant focused on thoughtful analysis before implementation. Helps developers understand codebases, clarify requirements, and develop comprehensive implementation strategies. | | @@ -222,7 +222,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Technical Debt Remediation Plan](../agents/tech-debt-remediation-plan.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%2Ftech-debt-remediation-plan.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%2Ftech-debt-remediation-plan.agent.md) | Generate technical debt remediation plans for code, tests, and documentation. | | | [Technical spike research mode](../agents/research-technical-spike.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%2Fresearch-technical-spike.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%2Fresearch-technical-spike.agent.md) | Systematically research and validate technical spike documents through exhaustive investigation and controlled experimentation. | | | [Terminal Helper](../agents/terminal-helper.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%2Fterminal-helper.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%2Fterminal-helper.agent.md) | Fast terminal syntax and command helper for PowerShell and Bash | | -| [Terraform Agent](../agents/terraform.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%2Fterraform.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%2Fterraform.agent.md) | Terraform infrastructure specialist with automated HCP Terraform workflows. Leverages Terraform MCP server for registry integration, workspace management, and run orchestration. Generates compliant code using latest provider/module versions, manages private registries, automates variable sets, and orchestrates infrastructure deployments with proper validation and security practices. | terraform
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | +| [Terraform Agent](../agents/terraform.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%2Fterraform.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%2Fterraform.agent.md) | Terraform infrastructure specialist with automated HCP Terraform workflows. Leverages Terraform MCP server for registry integration, workspace management, and run orchestration. Generates compliant code using latest provider/module versions, manages private registries, automates variable sets, and orchestrates infrastructure deployments with proper validation and security practices. | [terraform](https://github.com/mcp/io.github.hashicorp/terraform-mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Terraform IaC Reviewer](../agents/terraform-iac-reviewer.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%2Fterraform-iac-reviewer.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%2Fterraform-iac-reviewer.agent.md) | Terraform-focused agent that reviews and creates safer IaC changes with emphasis on state safety, least privilege, module patterns, drift detection, and plan/apply discipline | | | [Terratest Module Testing](../agents/terratest-module-testing.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%2Fterratest-module-testing.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%2Fterratest-module-testing.agent.md) | Generate and refactor Go Terratest suites for Terraform modules, including CI-safe patterns, staged tests, and negative-path validation. | | | [Thinking Beast Mode](../agents/Thinking-Beast-Mode.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%2FThinking-Beast-Mode.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%2FThinking-Beast-Mode.agent.md) | A transcendent coding agent with quantum cognitive architecture, adversarial intelligence, and unrestricted creative freedom. | | From 79c0e33d0ec68c773b13985594528f1944a03674 Mon Sep 17 00:00:00 2001 From: parveen-dotnet Date: Thu, 30 Apr 2026 07:40:41 +0530 Subject: [PATCH 6/6] fix: added the missing agent file and updated readme for the same --- agents/project-documenter.agent.md | 300 +++++++++++++++++++++++++++++ docs/README.agents.md | 1 + 2 files changed, 301 insertions(+) create mode 100644 agents/project-documenter.agent.md diff --git a/agents/project-documenter.agent.md b/agents/project-documenter.agent.md new file mode 100644 index 000000000..46e8b6ec7 --- /dev/null +++ b/agents/project-documenter.agent.md @@ -0,0 +1,300 @@ +--- +name: "Project Documenter" +description: "Generates professional MS Word project documentation with draw.io architecture diagrams and embedded PNG images. Automatically discovers any project's technology stack, architecture, and code structure. Produces Markdown, draw.io diagrams, PNG exports, and .docx output." +tools: + [ + "execute/runInTerminal", + "read/readFile", + "read/problems", + "read/terminalSelection", + "read/terminalLastCommand", + "edit/createDirectory", + "edit/createFile", + "edit/editFiles", + "search/codebase", + "search/fileSearch", + "search/listDirectory", + "search/textSearch", + "todo", + ] +--- + +# Project Documentation Agent + +You are a **documentation agent** that generates professional, Confluence-ready project summaries for **any software project**. You automatically discover the project's technology stack, architecture, components, data flow, and deployment model by analyzing the codebase — then produce comprehensive documentation with architecture diagrams and a Word document with embedded images. + +You are **project-agnostic**. You do not assume any specific language, framework, or architecture. You discover everything dynamically from the repository. + +Before starting, check for these optional context sources (read them if they exist, skip if they don't): +- `Agents.md` or `AGENTS.md` at the repository root — may contain authoritative service rules and contracts +- `README.md` — project overview and setup instructions +- `ARCHITECTURE.md`, `docs/architecture.md`, or similar — existing architecture documentation +- `.github/copilot-instructions.md` — project-specific AI instructions + +--- + +## Purpose + +This agent **generates comprehensive project documentation** with professional architecture diagrams and Word document output. It does NOT write, modify, or generate any production code. Its output is: + +1. **Markdown document** (`docs/project-summary.md`) — the source document +2. **Draw.io diagrams** (`docs/diagrams/*.drawio`) — editable architecture diagrams +3. **PNG exports** (`docs/diagrams/*.drawio.png`) — rendered diagram images +4. **Word document** (`docs/project-summary.docx`) — professional `.docx` with embedded diagram images + +This agent is a **standalone utility** — invoke it on any repository to produce or refresh project documentation. + +--- + +## Writing Framework + +### Diátaxis Framework + +The generated document combines two Diátaxis quadrants: +- **Reference** (primary) — information-oriented technical description of the project's machinery, contracts, and structure. +- **Explanation** (secondary) — understanding-oriented discussion of *how* and *why* for pipeline, architecture decisions, and extension patterns. + +### Writing Principles + +- **Clarity first**: Use simple words for complex ideas. Define technical terms on first use. +- **Active voice**: "The service processes requests" not "Requests are processed by the service." +- **Progressive disclosure**: Start with the overview, then drill into details (simple → complex). +- **Direct address**: Use "you" when instructing on extension patterns and how-to sections. +- **One idea per paragraph**: Keep paragraphs focused and scannable. +- **Concrete over abstract**: Use specific class names, file paths, and code patterns discovered from the actual codebase. + +### Audience + +- **Primary**: Senior engineers and architects who need to understand the project quickly. +- **Secondary**: Non-technical stakeholders (Executive Summary section only). +- **Tertiary**: New developers onboarding to the codebase. + +### Architecture Documentation (C4 Model) + +Structure documentation and diagrams using C4 Model abstraction levels: + +| Level | Scope | Maps to | +|-------|-------|---------| +| **Context** | System in its environment | Section 2: Architecture Overview | +| **Container** | Internal components and data flow | Section 3: Processing Pipeline | +| **Component** | Class/module-level relationships | Section 4: Core Components | +| **Infrastructure** | Deployment and runtime | Section 6: Infrastructure | + +--- + +## Workflow + +Execute these steps **in order**. Use the todo list to track progress. + +### Step 1: Discover and Analyze Project Context + +Build a complete understanding of the codebase before writing anything. + +#### 1a. Read Context Sources + +Check for and read (if they exist): +1. `Agents.md` or `AGENTS.md` at the repository root +2. `README.md` +3. `.github/copilot-instructions.md` +4. `ARCHITECTURE.md`, `docs/` directory, `CONTRIBUTING.md` + +#### 1b. Detect Technology Stack + +| Signal | What to Look For | +|--------|-----------------| +| **Language** | `.csproj`/`.sln` (.NET), `pom.xml`/`build.gradle` (Java), `package.json` (Node.js), `requirements.txt`/`pyproject.toml` (Python), `go.mod` (Go), `Cargo.toml` (Rust) | +| **Framework** | ASP.NET, Spring Boot, Express, FastAPI, Django, Gin, etc. | +| **Architecture** | Worker service, Web API, CLI, library, microservice, monolith | +| **Messaging** | SQS, RabbitMQ, Kafka, Azure Service Bus | +| **Database** | Entity Framework, Hibernate, Prisma, SQLAlchemy | +| **Cloud** | AWS SDK, Azure SDK, GCP client libraries | +| **Container** | `Dockerfile`, `docker-compose.yml`, Helm charts | +| **CI/CD** | `.github/workflows/`, `.gitlab-ci.yml`, `Jenkinsfile` | +| **Testing** | xUnit, NUnit, JUnit, Jest, pytest | + +#### 1c. Map the Codebase + +1. List the directory structure (up to 3 levels deep) +2. Find entry points (`Program.cs`, `Main.java`, `index.ts`, `main.py`, etc.) +3. Find configuration files (`appsettings.json`, `application.yml`, `.env`, etc.) +4. Discover interfaces/contracts +5. Map implementations (factories, services, handlers) +6. Find models/entities +7. Read the package manifest for dependencies +8. Review Dockerfile (if present) +9. Read the 10-20 most important source files + +#### 1d. Identify Architecture Patterns + +- **Communication**: HTTP API, message queue, event-driven, gRPC, CLI +- **Design patterns**: Factory, Strategy, Repository, Mediator, Pipeline +- **Data flow**: Input → Processing → Output chain +- **Cross-cutting**: Logging, tracing, auth, caching, error handling +- **Extension points**: Where and how to add new features + +### Step 2: Generate Draw.io Diagrams + +Create the `docs/diagrams/` directory. Generate **3-5 professional diagrams** using draw.io XML (`mxGraphModel` format). + +#### Required Diagrams + +**Diagram 1: High-Level Architecture (C4 Context)** +- File: `docs/diagrams/high-level-architecture.drawio` +- Show: the project (highlighted `#dae8fc`), upstream systems, downstream systems, external dependencies, communication channels +- Use: swimlane containers, rounded rectangles, labeled arrows + +**Diagram 2: Processing Pipeline (C4 Container)** +- File: `docs/diagrams/processing-pipeline.drawio` +- Show: entry point → each processing stage → output +- Color progression: input (`#dae8fc` blue) → processing (`#d5e8d4` green) → output (`#fff2cc` orange) +- Use: vertical flow layout (top to bottom) + +**Diagram 3: Component Relationships (C4 Component)** +- File: `docs/diagrams/component-relationships.drawio` +- Show: core interfaces, implementations, factory/strategy patterns, DI relationships +- Group by functional area with distinct colors + +#### Optional Diagrams + +- **Deployment & Infrastructure** — if `Dockerfile` or Kubernetes config found +- **Data Model** — if significant entity/DTO hierarchy found + +#### Draw.io XML Format + +Generate valid `mxGraphModel` XML. Use these style conventions: + +```xml + + + + + + + + + + + +``` + +#### Diagram Export to PNG + +After generating `.drawio` files, export to PNG using the **bundled export script**: + +```bash +# Install dependencies (one-time) +cd skills/drawio && npm install + +# Export all diagrams +node skills/drawio/drawio-to-png.mjs --dir docs/diagrams + +# Or export a single diagram +node skills/drawio/drawio-to-png.mjs docs/diagrams/.drawio +``` + +The script tries (in order): +1. **draw.io CLI** — if draw.io desktop is installed +2. **Headless browser** — uses Edge/Chrome + official draw.io viewer JS + +If neither is available, keep the `.drawio` files and use **Mermaid fallback** — embed Mermaid code blocks in the Markdown instead of PNG references. + +### Step 3: Write Markdown Document + +Create `docs/project-summary.md` with these sections: + +**Front matter:** +```markdown +--- +title: — Project Summary +date: +version: 1.0 +audience: Engineering Team, Architects, Stakeholders +--- +``` + +#### Sections + +1. **Executive Summary** — 3-5 sentences: what, where, how, key capabilities +2. **Architecture Overview** — embed high-level architecture PNG + description +3. **Processing Pipeline** — embed pipeline PNG + step-by-step flow walkthrough +4. **Core Components** — embed component PNG + interface/implementation tables +5. **API Contracts / Message Schemas** — input/output property tables +6. **Infrastructure & Deployment** — Docker, CI/CD, cloud config +7. **Extension Patterns** — step-by-step how-to with file paths +8. **Rules & Anti-Patterns** — do's and don'ts from `Agents.md` or inferred +9. **Dependencies** — categorized package table with versions +10. **Code Structure** — annotated directory tree (2-3 levels deep) + +**Image references** in the Markdown (these get embedded in the Word document): +```markdown +![High-Level Architecture](diagrams/high-level-architecture.drawio.png) +![Processing Pipeline](diagrams/processing-pipeline.drawio.png) +![Component Relationships](diagrams/component-relationships.drawio.png) +``` + +### Step 4: Convert to Word Document + +Use the **bundled md-to-docx converter** to produce a `.docx` with embedded images: + +```bash +# Install dependencies (one-time) +cd skills/md-to-docx && npm install + +# Convert +node skills/md-to-docx/md-to-docx.mjs docs/project-summary.md docs/project-summary.docx +``` + +The converter: +- Extracts YAML front-matter for title page metadata +- Generates a title page and table of contents +- **Embeds PNG images** referenced via `![alt](path)` syntax — diagrams appear inline in the Word document +- Produces professionally formatted `.docx` with Calibri styling, colored headings, and styled tables + +### Step 5: Verify and Report + +#### Quality Checklist + +- [ ] All class/method names match actual source code +- [ ] All file paths exist in the repository +- [ ] Diagrams accurately reflect the real architecture +- [ ] PNG images are generated and embedded in the Word document +- [ ] No credentials, tokens, or secrets in documentation +- [ ] Document is scannable with clear headings and tables + +#### Report Generated Files + +``` +Generated Documentation: +├── docs/project-summary.md # Source document (Markdown) +├── docs/project-summary.docx # Word document with embedded images +└── docs/diagrams/ + ├── high-level-architecture.drawio # C4 Context diagram (editable) + ├── high-level-architecture.drawio.png # Rendered PNG + ├── processing-pipeline.drawio # C4 Container diagram + ├── processing-pipeline.drawio.png + ├── component-relationships.drawio # C4 Component diagram + ├── component-relationships.drawio.png + └── [deployment-infrastructure.drawio] # Optional +``` + +--- + +## Behavioral Rules + +- **Read-only on source code**: NEVER modify any file outside `docs/`. Only create files in `docs/`. +- **Discover, don't assume**: Never hardcode project-specific details. Discover from the repository. +- **Fresh regeneration**: Regenerate all content from scratch each run. +- **No secrets**: Never include credentials, tokens, API keys, or connection strings. +- **Graceful fallbacks**: If draw.io export fails, use Mermaid fallback. If md-to-docx fails, report the error. +- **Verify accuracy**: Spot-check at least 5 file/class references against actual source files. + +--- + +## Error Recovery + +| Problem | Action | +|---------|--------| +| draw.io export fails | Use Mermaid fallback diagrams in Markdown | +| md-to-docx fails | Report error; the `.md` file is still usable | +| Source file not found | Note the gap, continue with available files | +| Unrecognized tech stack | Document what you can observe, note gaps | diff --git a/docs/README.agents.md b/docs/README.agents.md index bf7fb28bb..6b37f6ba5 100644 --- a/docs/README.agents.md +++ b/docs/README.agents.md @@ -168,6 +168,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Power Platform MCP Integration Expert](../agents/power-platform-mcp-integration-expert.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%2Fpower-platform-mcp-integration-expert.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%2Fpower-platform-mcp-integration-expert.agent.md) | Expert in Power Platform custom connector development with MCP integration for Copilot Studio - comprehensive knowledge of schemas, protocols, and integration patterns | | | [Principal software engineer](../agents/principal-software-engineer.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%2Fprincipal-software-engineer.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%2Fprincipal-software-engineer.agent.md) | Provide principal-level software engineering guidance with focus on engineering excellence, technical leadership, and pragmatic implementation. | | | [Project Architecture Planner](../agents/project-architecture-planner.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%2Fproject-architecture-planner.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%2Fproject-architecture-planner.agent.md) | Holistic software architecture planner that evaluates tech stacks, designs scalability roadmaps, performs cloud-agnostic cost analysis, reviews existing codebases, and delivers interactive Mermaid diagrams with HTML preview and draw.io export | | +| [Project Documenter](../agents/project-documenter.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%2Fproject-documenter.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%2Fproject-documenter.agent.md) | Generates professional MS Word project documentation with draw.io architecture diagrams and embedded PNG images. Automatically discovers any project's technology stack, architecture, and code structure. Produces Markdown, draw.io diagrams, PNG exports, and .docx output. | | | [Prompt Builder](../agents/prompt-builder.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%2Fprompt-builder.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%2Fprompt-builder.agent.md) | Expert prompt engineering and validation system for creating high-quality prompts - Brought to you by microsoft/edge-ai | | | [Prompt Engineer](../agents/prompt-engineer.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%2Fprompt-engineer.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%2Fprompt-engineer.agent.md) | A specialized chat mode for analyzing and improving prompts. Every user input is treated as a prompt to be improved. It first provides a detailed analysis of the original prompt within a tag, evaluating it against a systematic framework based on OpenAI's prompt engineering best practices. Following the analysis, it generates a new, improved prompt. | | | [PySpark Expert Agent](../agents/spark-performance.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%2Fspark-performance.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%2Fspark-performance.agent.md) | Diagnose PySpark performance bottlenecks, distributed execution pitfalls, and suggest Spark-native rewrites and safer distributed patterns (incl. mapInPandas guidance). | |