From e3ee37a27450b16199ad4ccc08502c0d58feb6db Mon Sep 17 00:00:00 2001 From: MV Karan Date: Fri, 6 Mar 2026 02:30:52 +0530 Subject: [PATCH 01/37] Add instrumentation script for pageview analytics (#875) * Add instrumentation script for pageview analytics * Only include analytics tags in production builds Wrap hydro-marketing analytics meta tag and script in an import.meta.env.PROD conditional so they are excluded during local development and only rendered in production builds. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add production-only analytics tags to Starlight Head component Add hydro-marketing analytics meta tag and script to the custom Head.astro component override, gated behind import.meta.env.PROD so they only render in production builds (GitHub Pages deploy). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- website/src/components/Head.astro | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/website/src/components/Head.astro b/website/src/components/Head.astro index bf25df34..73dc360d 100644 --- a/website/src/components/Head.astro +++ b/website/src/components/Head.astro @@ -9,3 +9,16 @@ const basePath = import.meta.env.BASE_URL; document.body.dataset.basePath = basePath; }); +{import.meta.env.PROD && ( + <> + + + +)} From 38aafb1a7282c762ffaa7097530cb73cf4d3f95c Mon Sep 17 00:00:00 2001 From: Tom Meschter Date: Thu, 5 Mar 2026 13:01:58 -0800 Subject: [PATCH 02/37] Add azure-skills as external plugin (#880) * Add azure-skills as external plugin Add microsoft/azure-skills as an external plugin with metadata including author, homepage, keywords, license, and repository fields. Regenerated marketplace.json. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Rename external plugin from azure-skills to azure Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update azure plugin description Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Swap homepage and repository URLs for azure plugin Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add source.path to azure external plugin entry Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/plugin/marketplace.json | 25 +++++++++++++++++++++++++ plugins/external.json | 21 ++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/.github/plugin/marketplace.json b/.github/plugin/marketplace.json index 78d31a00..66be4b39 100644 --- a/.github/plugin/marketplace.json +++ b/.github/plugin/marketplace.json @@ -16,6 +16,31 @@ "description": "Meta prompts that help you discover and generate curated GitHub Copilot agents, instructions, prompts, and skills.", "version": "1.0.0" }, + { + "name": "azure", + "description": "Microsoft Azure MCP Server and skills for cloud resource management, deployments, and Azure services. Manage your Azure infrastructure, monitor applications, and deploy resources directly from Copilot.", + "version": "1.0.0", + "author": { + "name": "Microsoft", + "url": "https://www.microsoft.com" + }, + "homepage": "https://github.com/microsoft/azure-skills", + "keywords": [ + "azure", + "cloud", + "infrastructure", + "deployment", + "microsoft", + "devops" + ], + "license": "MIT", + "repository": "https://github.com/microsoft/github-copilot-for-azure", + "source": { + "source": "github", + "repo": "microsoft/azure-skills", + "path": ".github/plugins/azure-skills" + } + }, { "name": "azure-cloud-development", "source": "azure-cloud-development", diff --git a/plugins/external.json b/plugins/external.json index fe51488c..ec8c8073 100644 --- a/plugins/external.json +++ b/plugins/external.json @@ -1 +1,20 @@ -[] +[ + { + "name": "azure", + "description": "Microsoft Azure MCP Server and skills for cloud resource management, deployments, and Azure services. Manage your Azure infrastructure, monitor applications, and deploy resources directly from Copilot.", + "version": "1.0.0", + "author": { + "name": "Microsoft", + "url": "https://www.microsoft.com" + }, + "homepage": "https://github.com/microsoft/azure-skills", + "keywords": ["azure", "cloud", "infrastructure", "deployment", "microsoft", "devops"], + "license": "MIT", + "repository": "https://github.com/microsoft/github-copilot-for-azure", + "source": { + "source": "github", + "repo": "microsoft/azure-skills", + "path": ".github/plugins/azure-skills" + } + } +] From 13970c3275d4474555656a8efca3b91ca9339f9f Mon Sep 17 00:00:00 2001 From: Tadas Labudis Date: Thu, 5 Mar 2026 21:06:55 +0000 Subject: [PATCH 03/37] Add copilot-spaces skill (#889) * Add copilot-spaces skill for loading project-specific context New skill that teaches agents to use Copilot Spaces MCP tools (list_copilot_spaces, get_copilot_space) to discover and load curated project context into conversations. Covers discovery workflow, loading spaces by owner/name, and using space content to ground responses in team-specific docs, code, and standards. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Improve copilot-spaces skill with real-world usage patterns - Add 'Spaces as workflow engines' pattern for multi-step processes - Add 'Follow the breadcrumbs' step for fetching referenced resources - Document read-only API limitation (no create/update/delete) - Add filtering tip for list_copilot_spaces by owner - Add large output handling guidance (20KB+ spaces) - Add Example 4: Space as a workflow engine - Strengthen tips with actionable guidance Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add Spaces CRUD REST API to copilot-spaces skill - Document full CRUD API endpoints (create, update, delete, collaborators) - Add 'Managing Spaces' workflow section with gh api examples - Add Example 5: updating Space instructions programmatically - Fix incorrect 'read-only' claim - MCP is read-only, REST API is full CRUD - Add scope requirements (user scope for writes) - Add resource management tips (array replacement, _destroy) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/README.skills.md | 1 + skills/copilot-spaces/SKILL.md | 205 +++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 skills/copilot-spaces/SKILL.md diff --git a/docs/README.skills.md b/docs/README.skills.md index e90a64b7..ca41e425 100644 --- a/docs/README.skills.md +++ b/docs/README.skills.md @@ -64,6 +64,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-skills) for guidelines on how to | [copilot-cli-quickstart](../skills/copilot-cli-quickstart/SKILL.md) | Use this skill when someone wants to learn GitHub Copilot CLI from scratch. Offers interactive step-by-step tutorials with separate Developer and Non-Developer tracks, plus on-demand Q&A. Just say "start tutorial" or ask a question! Note: This skill targets GitHub Copilot CLI specifically and uses CLI-specific tools (ask_user, sql, fetch_copilot_cli_documentation). | None | | [copilot-instructions-blueprint-generator](../skills/copilot-instructions-blueprint-generator/SKILL.md) | Technology-agnostic blueprint generator for creating comprehensive copilot-instructions.md files that guide GitHub Copilot to produce code consistent with project standards, architecture patterns, and exact technology versions by analyzing existing codebase patterns and avoiding assumptions. | None | | [copilot-sdk](../skills/copilot-sdk/SKILL.md) | Build agentic applications with GitHub Copilot SDK. Use when embedding AI agents in apps, creating custom tools, implementing streaming responses, managing sessions, connecting to MCP servers, or creating custom agents. Triggers on Copilot SDK, GitHub SDK, agentic app, embed Copilot, programmable agent, MCP server, custom agent. | None | +| [copilot-spaces](../skills/copilot-spaces/SKILL.md) | Use Copilot Spaces to provide project-specific context to conversations. Use this skill when users mention a "Copilot space", want to load context from a shared knowledge base, discover available spaces, or ask questions grounded in curated project documentation, code, and instructions. | None | | [copilot-usage-metrics](../skills/copilot-usage-metrics/SKILL.md) | Retrieve and display GitHub Copilot usage metrics for organizations and enterprises using the GitHub CLI and REST API. | `get-enterprise-metrics.sh`
`get-enterprise-user-metrics.sh`
`get-org-metrics.sh`
`get-org-user-metrics.sh` | | [cosmosdb-datamodeling](../skills/cosmosdb-datamodeling/SKILL.md) | Step-by-step guide for capturing key application requirements for NoSQL use-case and produce Azure Cosmos DB Data NoSQL Model design using best practices and common patterns, artifacts_produced: "cosmosdb_requirements.md" file and "cosmosdb_data_model.md" file | None | | [create-agentsmd](../skills/create-agentsmd/SKILL.md) | Prompt for generating an AGENTS.md file for a repository | None | diff --git a/skills/copilot-spaces/SKILL.md b/skills/copilot-spaces/SKILL.md new file mode 100644 index 00000000..616952af --- /dev/null +++ b/skills/copilot-spaces/SKILL.md @@ -0,0 +1,205 @@ +--- +name: copilot-spaces +description: 'Use Copilot Spaces to provide project-specific context to conversations. Use this skill when users mention a "Copilot space", want to load context from a shared knowledge base, discover available spaces, or ask questions grounded in curated project documentation, code, and instructions.' +--- + +# Copilot Spaces + +Use Copilot Spaces to bring curated, project-specific context into conversations. A Space is a shared collection of repositories, files, documentation, and instructions that grounds Copilot responses in your team's actual code and knowledge. + +## Available Tools + +### MCP Tools (Read-only) + +| Tool | Purpose | +|------|---------| +| `mcp__github__list_copilot_spaces` | List all spaces accessible to the current user | +| `mcp__github__get_copilot_space` | Load a space's full context by owner and name | + +### REST API via `gh api` (Full CRUD) + +The Spaces REST API supports creating, updating, deleting spaces, and managing collaborators. The MCP server only exposes read operations, so use `gh api` for writes. + +**User Spaces:** + +| Method | Endpoint | Purpose | +|--------|----------|---------| +| `POST` | `/users/{username}/copilot-spaces` | Create a space | +| `GET` | `/users/{username}/copilot-spaces` | List spaces | +| `GET` | `/users/{username}/copilot-spaces/{number}` | Get a space | +| `PUT` | `/users/{username}/copilot-spaces/{number}` | Update a space | +| `DELETE` | `/users/{username}/copilot-spaces/{number}` | Delete a space | + +**Organization Spaces:** Same pattern under `/orgs/{org}/copilot-spaces/...` + +**Collaborators:** Add, list, update, and remove collaborators at `.../collaborators` + +**Scope requirements:** PAT needs `read:user` for reads, `user` for writes. Add with `gh auth refresh -h github.com -s user`. + +**Note:** This API is functional but not yet in the public REST API docs. It may require the `copilot_spaces_api` feature flag. + +## When to Use Spaces + +- User mentions "Copilot space" or asks to "load a space" +- User wants answers grounded in specific project docs, code, or standards +- User asks "what spaces are available?" or "find a space for X" +- User needs onboarding context, architecture docs, or team-specific guidance +- User wants to follow a structured workflow defined in a Space (templates, checklists, multi-step processes) + +## Workflow + +### 1. Discover Spaces + +When a user asks what spaces are available or you need to find the right space: + +``` +Call mcp__github__list_copilot_spaces +``` + +This returns all spaces the user can access, each with a `name` and `owner_login`. Present relevant matches to the user. + +To filter for a specific user's spaces, match `owner_login` against the username (e.g., "show me my spaces"). + +### 2. Load a Space + +When a user names a specific space or you've identified the right one: + +``` +Call mcp__github__get_copilot_space with: + owner: "org-or-user" (the owner_login from the list) + name: "Space Name" (exact space name, case-sensitive) +``` + +This returns the space's full content: attached documentation, code context, custom instructions, and any other curated materials. Use this context to inform your responses. + +### 3. Follow the Breadcrumbs + +Space content often references external resources: GitHub issues, dashboards, repos, discussions, or other tools. Proactively fetch these using other MCP tools to gather complete context. For example: +- A space references an initiative tracking issue. Use `issue_read` to get the latest comments. +- A space links to a project board. Use project tools to check current status. +- A space mentions a repo's masterplan. Use `get_file_contents` to read it. + +### 4. Answer or Execute + +Once loaded, use the space content based on what it contains: + +**If the space contains reference material** (docs, code, standards): +- Answer questions about the project's architecture, patterns, or standards +- Generate code that follows the team's conventions +- Debug issues using project-specific knowledge + +**If the space contains workflow instructions** (templates, step-by-step processes): +- Follow the workflow as defined, step by step +- Gather data from the sources the workflow specifies +- Produce output in the format the workflow defines +- Show progress after each step so the user can steer + +### 5. Manage Spaces (via `gh api`) + +When a user wants to create, update, or delete a space, use `gh api`. First, find the space number from the list endpoint. + +**Update a space's instructions:** +```bash +gh api users/{username}/copilot-spaces/{number} \ + -X PUT \ + -f general_instructions="New instructions here" +``` + +**Update name, description, or instructions together:** +```bash +gh api users/{username}/copilot-spaces/{number} \ + -X PUT \ + -f name="Updated Name" \ + -f description="Updated description" \ + -f general_instructions="Updated instructions" +``` + +**Create a new space:** +```bash +gh api users/{username}/copilot-spaces \ + -X POST \ + -f name="My New Space" \ + -f general_instructions="Help me with..." \ + -f visibility="private" +``` + +**Attach resources (replaces entire resource list):** +```json +{ + "resources_attributes": [ + { "resource_type": "free_text", "metadata": { "name": "Notes", "text": "Content here" } }, + { "resource_type": "github_issue", "metadata": { "repository_id": 12345, "number": 42 } }, + { "resource_type": "github_file", "metadata": { "repository_id": 12345, "file_path": "docs/guide.md" } } + ] +} +``` + +**Delete a space:** +```bash +gh api users/{username}/copilot-spaces/{number} -X DELETE +``` + +**Updatable fields:** `name`, `description`, `general_instructions`, `icon_type`, `icon_color`, `visibility` ("private"/"public"), `base_role` ("no_access"/"reader"), `resources_attributes` + +## Examples + +### Example 1: User Asks for a Space + +**User**: "Load the Accessibility copilot space" + +**Action**: +1. Call `mcp__github__get_copilot_space` with owner `"github"`, name `"Accessibility"` +2. Use the returned context to answer questions about accessibility standards, MAS grades, compliance processes, etc. + +### Example 2: User Wants to Find Spaces + +**User**: "What copilot spaces are available for our team?" + +**Action**: +1. Call `mcp__github__list_copilot_spaces` +2. Filter/present spaces relevant to the user's org or interests +3. Offer to load any space they're interested in + +### Example 3: Context-Grounded Question + +**User**: "Using the security space, what's our policy on secret scanning?" + +**Action**: +1. Call `mcp__github__get_copilot_space` with the appropriate owner and name +2. Find the relevant policy in the space content +3. Answer based on the actual internal documentation + +### Example 4: Space as a Workflow Engine + +**User**: "Write my weekly update using the PM Weekly Updates space" + +**Action**: +1. Call `mcp__github__get_copilot_space` to load the space. It contains a template format and step-by-step instructions. +2. Follow the space's workflow: pull data from attached initiative issues, gather metrics, draft each section. +3. Fetch external resources referenced by the space (tracking issues, dashboards) using other MCP tools. +4. Show the draft after each section so the user can review and fill in gaps. +5. Produce the final output in the format the space defines. + +### Example 5: Update Space Instructions Programmatically + +**User**: "Update my PM Weekly Updates space to include a new writing guideline" + +**Action**: +1. Call `mcp__github__list_copilot_spaces` and find the space number (e.g., 19). +2. Call `mcp__github__get_copilot_space` to read current instructions. +3. Modify the instructions text as requested. +4. Push the update: +```bash +gh api users/labudis/copilot-spaces/19 -X PUT -f general_instructions="updated instructions..." +``` + +## Tips + +- Space names are **case-sensitive**. Use the exact name from `list_copilot_spaces`. +- Spaces can be owned by users or organizations. Always provide both `owner` and `name`. +- Space content can be large (20KB+). If returned as a temp file, use grep or view_range to find relevant sections rather than reading everything at once. +- If a space isn't found, suggest listing available spaces to find the right name. +- Spaces auto-update as underlying repos change, so the context is always current. +- Some spaces contain custom instructions that should guide your behavior (coding standards, preferred patterns, workflows). Treat these as directives, not suggestions. +- **Write operations** (`gh api` for create/update/delete) require the `user` PAT scope. If you get a 404 on write operations, run `gh auth refresh -h github.com -s user`. +- Resource updates **replace the entire array**. To add a resource, include all existing resources plus the new one. To remove one, include `{ "id": 123, "_destroy": true }` in the array. From f9b08a585fb325e72306baf99306d10d9e219592 Mon Sep 17 00:00:00 2001 From: augustus-0 <113288678+augustus-0@users.noreply.github.com> Date: Fri, 6 Mar 2026 05:09:19 +0800 Subject: [PATCH 04/37] Update README.md (#891) Fixed the installation script --- plugins/structured-autonomy/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/structured-autonomy/README.md b/plugins/structured-autonomy/README.md index 2a69e99a..55abe83f 100644 --- a/plugins/structured-autonomy/README.md +++ b/plugins/structured-autonomy/README.md @@ -6,7 +6,7 @@ Premium planning, thrifty implementation ```bash # Using Copilot CLI -copilot plugin install github/awesome-copilot/plugins/structured-autonomy +copilot plugin install structured-autonomy@awesome-copilot ``` ## What's Included From 9239e8e32065c0a5a37ef58c91174e38b98d72e6 Mon Sep 17 00:00:00 2001 From: Muhammad Ubaid Raza Date: Fri, 6 Mar 2026 02:10:34 +0500 Subject: [PATCH 05/37] feat: Support mulitple browser tools envrionment (#893) - Make browser tester generic to support for chrome devotols mcp, playwright, agentic browser tools. - Add Team lead and energetci peronsality to Orchestrator - Add progress updates between phases/ waves --- .github/plugin/marketplace.json | 4 +- agents/gem-browser-tester.agent.md | 51 +++++++++++++-------- agents/gem-devops.agent.md | 2 +- agents/gem-documentation-writer.agent.md | 2 +- agents/gem-implementer.agent.md | 2 +- agents/gem-orchestrator.agent.md | 16 +++++-- agents/gem-reviewer.agent.md | 2 +- docs/README.agents.md | 4 +- docs/README.plugins.md | 2 +- plugins/gem-team/.github/plugin/plugin.json | 4 +- plugins/gem-team/README.md | 4 +- 11 files changed, 57 insertions(+), 36 deletions(-) diff --git a/.github/plugin/marketplace.json b/.github/plugin/marketplace.json index 66be4b39..c89b38a2 100644 --- a/.github/plugin/marketplace.json +++ b/.github/plugin/marketplace.json @@ -122,8 +122,8 @@ { "name": "gem-team", "source": "gem-team", - "description": "A modular multi-agent team for complex project execution with DAG-based planning, parallel execution, TDD verification, and automated testing.", - "version": "1.2.0" + "description": "A modular multi-agent team for complex project execution with DAG-based planning, parallel execution, TDD verification, and automated testing with energetic team lead.", + "version": "1.2.1" }, { "name": "go-mcp-development", diff --git a/agents/gem-browser-tester.agent.md b/agents/gem-browser-tester.agent.md index a2564d08..68a5c322 100644 --- a/agents/gem-browser-tester.agent.md +++ b/agents/gem-browser-tester.agent.md @@ -1,5 +1,5 @@ --- -description: "Automates browser testing, UI/UX validation using browser automation tools and visual verification techniques" +description: "Automates E2E scenarios with Chrome DevTools MCP, Playwright, Agent Browser. UI/UX validation using browser automation tools and visual verification techniques" name: gem-browser-tester disable-model-invocation: false user-invocable: true @@ -7,24 +7,28 @@ user-invocable: true -BROWSER TESTER: Run E2E tests in browser, verify UI/UX, check accessibility. Deliver test results. Never implement. +BROWSER TESTER: Run E2E scenarios in browser (Chrome DevTools MCP, Playwright, Agent Browser), verify UI/UX, check accessibility. Deliver test results. Never implement. -Browser Automation, E2E Testing, UI Verification, Accessibility +Browser Automation (Chrome DevTools MCP, Playwright, Agent Browser), E2E Testing, UI Verification, Accessibility -- Initialize: Identify plan_id, task_def. Map scenarios. -- Execute: Run scenarios iteratively. For each: - - Navigate to target URL - - Observation-First: Navigate → Snapshot → Action - - Use accessibility snapshots over screenshots for element identification - - Verify outcomes against expected results - - On failure: Capture evidence to docs/plan/{plan_id}/evidence/{task_id}/ -- Verify: Console errors, network requests, accessibility audit per plan -- Handle Failure: Apply mitigation from failure_modes if available -- Log Failure: If status=failed, write to docs/plan/{plan_id}/logs/{agent}_{task_id}_{timestamp}.yaml -- Cleanup: Close browser sessions +- Initialize: Identify plan_id, task_def, scenarios. +- Execute: Run scenarios. For each scenario: + - Verify: list pages to confirm browser state + - Navigate: open new page → capture pageId from response + - Wait: wait for content to load + - Snapshot: take snapshot to get element uids + - Interact: click, fill, etc. + - Verify: Validate outcomes against expected results + - On element not found: Retry with fresh snapshot before failing + - On failure: Capture evidence using filePath parameter +- Finalize Verification (per page): + - Console: get console messages + - Network: get network requests + - Accessibility: audit accessibility +- Cleanup: close page for each scenario - Return JSON per @@ -52,6 +56,7 @@ Browser Automation, E2E Testing, UI Verification, Accessibility "console_errors": "number", "network_failures": "number", "accessibility_issues": "number", + "lighthouse_scores": { "accessibility": "number", "seo": "number", "best_practices": "number" }, "evidence_path": "docs/plan/{plan_id}/evidence/{task_id}/", "failures": [ { @@ -82,10 +87,20 @@ Browser Automation, E2E Testing, UI Verification, Accessibility - Execute autonomously. Never pause for confirmation or progress report. -- Observation-First: Navigate → Snapshot → Action -- Use accessibility snapshots over screenshots -- Verify validation matrix (console, network, accessibility) +- Use pageId on ALL page-scoped tool calls - get from opening new page, use for wait for, take snapshot, take screenshot, click, fill, evaluate script, get console, get network, audit accessibility, close page, etc. +- Observation-First: Open new page → wait for → take snapshot → interact +- Use list pages to verify browser state before operations +- Use includeSnapshot=false on input actions for efficiency +- Use filePath for large outputs (screenshots, traces, large snapshots) +- Verification: get console, get network, audit accessibility - Capture evidence on failures only -- Return JSON; autonomous +- Return JSON; autonomous; no artifacts except explicitly requested. +- Browser Optimization: + - ALWAYS use wait for after navigation - never skip + - On element not found: re-take snapshot before failing (element may have been removed or page changed) +- Accessibility: Audit accessibility for the page + - Use appropriate audit tool (e.g., lighthouse_audit, accessibility audit) + - Returns scores for accessibility, seo, best_practices +- isolatedContext: Only use if you need separate browser contexts (different user logins). For most tests, pageId alone is sufficient. diff --git a/agents/gem-devops.agent.md b/agents/gem-devops.agent.md index 37c77779..e8fda9cf 100644 --- a/agents/gem-devops.agent.md +++ b/agents/gem-devops.agent.md @@ -96,6 +96,6 @@ deployment_approval: - Gate production/security changes via approval - Verify health checks and resources - Remove orphaned resources -- Return JSON; autonomous +- Return JSON; autonomous; no artifacts except explicitly requested. diff --git a/agents/gem-documentation-writer.agent.md b/agents/gem-documentation-writer.agent.md index 77628c62..529f45ab 100644 --- a/agents/gem-documentation-writer.agent.md +++ b/agents/gem-documentation-writer.agent.md @@ -95,6 +95,6 @@ Technical Writing, API Documentation, Diagram Generation, Documentation Maintena - Generate docs with absolute code parity - Use coverage matrix; verify diagrams - Never use TBD/TODO as final -- Return JSON; autonomous +- Return JSON; autonomous; no artifacts except explicitly requested. diff --git a/agents/gem-implementer.agent.md b/agents/gem-implementer.agent.md index 351c4d52..965750cc 100644 --- a/agents/gem-implementer.agent.md +++ b/agents/gem-implementer.agent.md @@ -86,6 +86,6 @@ TDD Implementation, Code Writing, Test Coverage, Debugging - Test behavior, not implementation - Enforce YAGNI, KISS, DRY, Functional Programming - No TBD/TODO as final code -- Return JSON; autonomous +- Return JSON; autonomous; no artifacts except explicitly requested. diff --git a/agents/gem-orchestrator.agent.md b/agents/gem-orchestrator.agent.md index f52742ef..5d7f5637 100644 --- a/agents/gem-orchestrator.agent.md +++ b/agents/gem-orchestrator.agent.md @@ -1,5 +1,5 @@ --- -description: "Coordinates multi-agent workflows, delegates tasks, synthesizes results via runSubagent" +description: "Team Lead - Coordinates multi-agent workflows with energetic announcements, delegates tasks, synthesizes results via runSubagent" name: gem-orchestrator disable-model-invocation: true user-invocable: true @@ -7,7 +7,7 @@ user-invocable: true -ORCHESTRATOR: Coordinate workflow by delegating all tasks. Detect phase → Route to agents → Synthesize results. Never execute workspace modifications directly. +ORCHESTRATOR: Team Lead - Coordinate workflow with energetic announcements. Detect phase → Route to agents → Synthesize results. Never execute workspace modifications directly. @@ -103,7 +103,7 @@ gem-researcher, gem-planner, gem-implementer, gem-browser-tester, gem-devops, ge "task_id": "string", "plan_id": "string", "plan_path": "string", - "validation_matrix": "array of test scenarios" + "task_definition": "object (full task from plan.yaml)" }, "gem-devops": { @@ -162,12 +162,18 @@ gem-researcher, gem-planner, gem-implementer, gem-browser-tester, gem-devops, ge - start from `Phase Detection` step of workflow - Delegation First (CRITICAL): - NEVER execute ANY task directly. ALWAYS delegate to an agent. - - Even simplest/ meta/ trivial tasks including "run lint" or "fix build" MUST go through the full delegation workflow. - - Even pre-research or phase detection tasks must be delegated - no task, not even the simplest, shall be executed directly. + - Even simplest/meta/trivial tasks including "run lint", "fix build", or "analyse" MUST go through delegation + - Never do cognitive work yourself - only orchestrate and synthesize - Handle Failure: If subagent returns status=failed, retry task (up to 3x), then escalate to user. - Manage tasks status updates: - in plan.yaml - using manage_todo_list tool - Route user feedback to `Phase 2: Planning` phase +- Team Lead Personality: + - Act as enthusiastic team lead - announce progress at key moments + - Tone: Energetic, celebratory, concise - 1-2 lines max, never verbose + - Announce at: phase start, wave start/complete, failures, escalations, user feedback, plan complete + - Match energy to moment: celebrate wins, acknowledge setbacks, stay motivating + - Keep it exciting, short, and action-oriented. Use formatting, emojis, and energy diff --git a/agents/gem-reviewer.agent.md b/agents/gem-reviewer.agent.md index a14da41e..2808359a 100644 --- a/agents/gem-reviewer.agent.md +++ b/agents/gem-reviewer.agent.md @@ -102,6 +102,6 @@ Security Auditing, OWASP Top 10, Secret Detection, PRD Compliance, Requirements - Depth-based: full/standard/lightweight - OWASP Top 10, secrets/PII detection - Verify logic against specification AND PRD compliance -- Return JSON; autonomous +- Return JSON; autonomous; no artifacts except explicitly requested. diff --git a/docs/README.agents.md b/docs/README.agents.md index 8d9213b0..fe5e94a7 100644 --- a/docs/README.agents.md +++ b/docs/README.agents.md @@ -80,11 +80,11 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Expert React Frontend Engineer](../agents/expert-react-frontend-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%2Fexpert-react-frontend-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%2Fexpert-react-frontend-engineer.agent.md) | Expert React 19.2 frontend engineer specializing in modern hooks, Server Components, Actions, TypeScript, and performance optimization | | | [Expert Vue.js Frontend Engineer](../agents/vuejs-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%2Fvuejs-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%2Fvuejs-expert.agent.md) | Expert Vue.js frontend engineer specializing in Vue 3 Composition API, reactivity, state management, testing, and performance with TypeScript | | | [Fedora Linux Expert](../agents/fedora-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%2Ffedora-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%2Ffedora-linux-expert.agent.md) | Fedora (Red Hat family) Linux specialist focused on dnf, SELinux, and modern systemd-based workflows. | | -| [Gem Browser Tester](../agents/gem-browser-tester.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%2Fgem-browser-tester.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%2Fgem-browser-tester.agent.md) | Automates browser testing, UI/UX validation using browser automation tools and visual verification techniques | | +| [Gem Browser Tester](../agents/gem-browser-tester.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%2Fgem-browser-tester.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%2Fgem-browser-tester.agent.md) | Automates E2E scenarios with Chrome DevTools MCP, Playwright, Agent Browser. UI/UX validation using browser automation tools and visual verification techniques | | | [Gem Devops](../agents/gem-devops.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%2Fgem-devops.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%2Fgem-devops.agent.md) | Manages containers, CI/CD pipelines, and infrastructure deployment | | | [Gem Documentation Writer](../agents/gem-documentation-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%2Fgem-documentation-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%2Fgem-documentation-writer.agent.md) | Generates technical docs, diagrams, maintains code-documentation parity | | | [Gem Implementer](../agents/gem-implementer.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%2Fgem-implementer.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%2Fgem-implementer.agent.md) | Executes TDD code changes, ensures verification, maintains quality | | -| [Gem Orchestrator](../agents/gem-orchestrator.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%2Fgem-orchestrator.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%2Fgem-orchestrator.agent.md) | Coordinates multi-agent workflows, delegates tasks, synthesizes results via runSubagent | | +| [Gem Orchestrator](../agents/gem-orchestrator.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%2Fgem-orchestrator.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%2Fgem-orchestrator.agent.md) | Team Lead - Coordinates multi-agent workflows with energetic announcements, delegates tasks, synthesizes results via runSubagent | | | [Gem Planner](../agents/gem-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%2Fgem-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%2Fgem-planner.agent.md) | Creates DAG-based plans with pre-mortem analysis and task decomposition from research findings | | | [Gem Researcher](../agents/gem-researcher.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%2Fgem-researcher.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%2Fgem-researcher.agent.md) | Research specialist: gathers codebase context, identifies relevant files/patterns, returns structured findings | | | [Gem Reviewer](../agents/gem-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%2Fgem-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%2Fgem-reviewer.agent.md) | Security gatekeeper for critical tasks—OWASP, secrets, compliance | | diff --git a/docs/README.plugins.md b/docs/README.plugins.md index 095228f8..dd3afb0b 100644 --- a/docs/README.plugins.md +++ b/docs/README.plugins.md @@ -34,7 +34,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-plugins) for guidelines on how t | [devops-oncall](../plugins/devops-oncall/README.md) | A focused set of prompts, instructions, and a chat mode to help triage incidents and respond quickly with DevOps tools and Azure resources. | 3 items | devops, incident-response, oncall, azure | | [edge-ai-tasks](../plugins/edge-ai-tasks/README.md) | Task Researcher and Task Planner for intermediate to expert users and large codebases - Brought to you by microsoft/edge-ai | 2 items | architecture, planning, research, tasks, implementation | | [frontend-web-dev](../plugins/frontend-web-dev/README.md) | Essential prompts, instructions, and chat modes for modern frontend web development including React, Angular, Vue, TypeScript, and CSS frameworks. | 4 items | frontend, web, react, typescript, javascript, css, html, angular, vue | -| [gem-team](../plugins/gem-team/README.md) | A modular multi-agent team for complex project execution with DAG-based planning, parallel execution, TDD verification, and automated testing. | 8 items | multi-agent, orchestration, dag-planning, parallel-execution, tdd, verification, automation, security, prd | +| [gem-team](../plugins/gem-team/README.md) | A modular multi-agent team for complex project execution with DAG-based planning, parallel execution, TDD verification, and automated testing with energetic team lead. | 8 items | multi-agent, orchestration, dag-planning, parallel-execution, tdd, verification, automation, security, prd | | [go-mcp-development](../plugins/go-mcp-development/README.md) | Complete toolkit for building Model Context Protocol (MCP) servers in Go using the official github.com/modelcontextprotocol/go-sdk. Includes instructions for best practices, a prompt for generating servers, and an expert chat mode for guidance. | 2 items | go, golang, mcp, model-context-protocol, server-development, sdk | | [java-development](../plugins/java-development/README.md) | Comprehensive collection of prompts and instructions for Java development including Spring Boot, Quarkus, testing, documentation, and best practices. | 4 items | java, springboot, quarkus, jpa, junit, javadoc | | [java-mcp-development](../plugins/java-mcp-development/README.md) | Complete toolkit for building Model Context Protocol servers in Java using the official MCP Java SDK with reactive streams and Spring Boot integration. | 2 items | java, mcp, model-context-protocol, server-development, sdk, reactive-streams, spring-boot, reactor | diff --git a/plugins/gem-team/.github/plugin/plugin.json b/plugins/gem-team/.github/plugin/plugin.json index 79b32afe..6f756168 100644 --- a/plugins/gem-team/.github/plugin/plugin.json +++ b/plugins/gem-team/.github/plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "gem-team", - "description": "A modular multi-agent team for complex project execution with DAG-based planning, parallel execution, TDD verification, and automated testing.", - "version": "1.2.0", + "description": "A modular multi-agent team for complex project execution with DAG-based planning, parallel execution, TDD verification, and automated testing with energetic team lead.", + "version": "1.2.1", "author": { "name": "Awesome Copilot Community" }, diff --git a/plugins/gem-team/README.md b/plugins/gem-team/README.md index 321c64a9..703437a0 100644 --- a/plugins/gem-team/README.md +++ b/plugins/gem-team/README.md @@ -15,11 +15,11 @@ copilot plugin install gem-team@awesome-copilot | Agent | Description | |-------|-------------| -| `gem-orchestrator` | Coordinates multi-agent workflows, delegates tasks, synthesizes results via runSubagent | +| `gem-orchestrator` | Team Lead - Coordinates multi-agent workflows with energetic announcements, delegates tasks, synthesizes results via runSubagent | | `gem-researcher` | Research specialist: gathers codebase context, identifies relevant files/patterns, returns structured findings | | `gem-planner` | Creates DAG-based plans with pre-mortem analysis and task decomposition from research findings | | `gem-implementer` | Executes TDD code changes, ensures verification, maintains quality | -| `gem-chrome-tester` | Automates browser testing, UI/UX validation via Chrome DevTools | +| `gem-browser-tester` | Automates E2E scenarios with Chrome DevTools MCP, Playwright, Agent Browser. UI/UX validation using browser automation tools and visual verification techniques | | `gem-devops` | Manages containers, CI/CD pipelines, and infrastructure deployment | | `gem-reviewer` | Security gatekeeper for critical tasks—OWASP, secrets, compliance | | `gem-documentation-writer` | Generates technical docs, diagrams, maintains code-documentation parity | From 78e3ea29c2df83640c94924c3816f2d177f83d4b Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 10:22:25 +1100 Subject: [PATCH 06/37] [WIP] Fix URL path issue in learning hub (#895) * Initial plan * fix: use relative links in learning-hub index to preserve base path Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com> --- website/src/content/docs/learning-hub/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/src/content/docs/learning-hub/index.md b/website/src/content/docs/learning-hub/index.md index 538e51ec..86f8ac50 100644 --- a/website/src/content/docs/learning-hub/index.md +++ b/website/src/content/docs/learning-hub/index.md @@ -16,17 +16,17 @@ tableOfContents: false ## Fundamentals Essential concepts to tailor GitHub Copilot beyond its default experience. Start with -[What are Agents, Skills, and Instructions](/learning-hub/what-are-agents-skills-instructions/) +[What are Agents, Skills, and Instructions](what-are-agents-skills-instructions/) and work through the full track to master every customization primitive. ## Reference Quick-lookup resources to keep handy while you work. Browse the -[GitHub Copilot Terminology Glossary](/learning-hub/github-copilot-terminology-glossary/) +[GitHub Copilot Terminology Glossary](github-copilot-terminology-glossary/) for definitions of common terms and concepts. ## Hands-on Interactive samples and recipes to learn by doing. Jump into the -[Cookbook](/learning-hub/cookbook/) for code samples, recipes, +[Cookbook](cookbook/) for code samples, recipes, and examples you can use right away. From 4707565c7b50c8ae36adee182e8e86ce56e8ee40 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 13:57:39 +1100 Subject: [PATCH 07/37] [WIP] Update text colour for improved navigation readability (#897) * Initial plan * fix: improve readability of active nav item on learning hub pages Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com> --- website/src/styles/starlight-overrides.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/styles/starlight-overrides.css b/website/src/styles/starlight-overrides.css index c1d55cb6..0761c39c 100644 --- a/website/src/styles/starlight-overrides.css +++ b/website/src/styles/starlight-overrides.css @@ -43,7 +43,7 @@ /* ── Sidebar active item ───────────────────────────────────── */ nav[aria-label="Main"] a[aria-current="page"] { - color: var(--sl-color-accent) !important; + color: var(--sl-color-white) !important; font-weight: 600; border-inline-start-color: var(--sl-color-accent) !important; } From f3142d77c15f40fb6910f1093f385df9c4c691e6 Mon Sep 17 00:00:00 2001 From: Catherine Han <123369259+ninihen1@users.noreply.github.com> Date: Fri, 6 Mar 2026 15:16:11 +1100 Subject: [PATCH 08/37] feat: add power-automate-mcp skill (#896) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add power-automate-mcp skill Connect to and operate Power Automate cloud flows via a FlowStudio MCP server. Includes tool reference, action types, connection references, and bootstrap guide. * fix: rename skill & address review feedback - Rename power-automate-mcp → flowstudio-power-automate-mcp - Fix list_live_flows docs: returns wrapper object {mode, flows, totalCount, error}, not direct array - Fix next() syntax: add parens for generator with default arg - Add User-Agent header to tools/list discovery example - Standardize User-Agent to FlowStudio-MCP/1.0 (required by Cloudflare) - Add environmentName note for list_live_connections (required despite schema) - Update list_live_flows response shape in tool-reference.md All response shapes verified against live MCP server. --- docs/README.skills.md | 1 + skills/flowstudio-power-automate-mcp/SKILL.md | 450 ++++++++++++++++++ .../references/MCP-BOOTSTRAP.md | 53 +++ .../references/action-types.md | 79 +++ .../references/connection-references.md | 115 +++++ .../references/tool-reference.md | 445 +++++++++++++++++ 6 files changed, 1143 insertions(+) create mode 100644 skills/flowstudio-power-automate-mcp/SKILL.md create mode 100644 skills/flowstudio-power-automate-mcp/references/MCP-BOOTSTRAP.md create mode 100644 skills/flowstudio-power-automate-mcp/references/action-types.md create mode 100644 skills/flowstudio-power-automate-mcp/references/connection-references.md create mode 100644 skills/flowstudio-power-automate-mcp/references/tool-reference.md diff --git a/docs/README.skills.md b/docs/README.skills.md index ca41e425..ef0c8124 100644 --- a/docs/README.skills.md +++ b/docs/README.skills.md @@ -112,6 +112,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-skills) for guidelines on how to | [finalize-agent-prompt](../skills/finalize-agent-prompt/SKILL.md) | Finalize prompt file using the role of an AI agent to polish the prompt for the end user. | None | | [finnish-humanizer](../skills/finnish-humanizer/SKILL.md) | Detect and remove AI-generated markers from Finnish text, making it sound like a native Finnish speaker wrote it. Use when asked to "humanize", "naturalize", or "remove AI feel" from Finnish text, or when editing .md/.txt files containing Finnish content. Identifies 26 patterns (12 Finnish-specific + 14 universal) and 4 style markers. | `references/patterns.md` | | [first-ask](../skills/first-ask/SKILL.md) | Interactive, input-tool powered, task refinement workflow: interrogates scope, deliverables, constraints before carrying out the task; Requires the Joyride extension. | None | +| [flowstudio-power-automate-mcp](../skills/flowstudio-power-automate-mcp/SKILL.md) | Connect to and operate Power Automate cloud flows via a FlowStudio MCP server. Use when asked to: list flows, read a flow definition, check run history, inspect action outputs, resubmit a run, cancel a running flow, view connections, get a trigger URL, validate a definition, monitor flow health, or any task that requires talking to the Power Automate API through an MCP tool. Also use for Power Platform environment discovery and connection management. Requires a FlowStudio MCP subscription or compatible server — see https://mcp.flowstudio.app | `references/MCP-BOOTSTRAP.md`
`references/action-types.md`
`references/connection-references.md`
`references/tool-reference.md` | | [fluentui-blazor](../skills/fluentui-blazor/SKILL.md) | Guide for using the Microsoft Fluent UI Blazor component library (Microsoft.FluentUI.AspNetCore.Components NuGet package) in Blazor applications. Use this when the user is building a Blazor app with Fluent UI components, setting up the library, using FluentUI components like FluentButton, FluentDataGrid, FluentDialog, FluentToast, FluentNavMenu, FluentTextField, FluentSelect, FluentAutocomplete, FluentDesignTheme, or any component prefixed with "Fluent". Also use when troubleshooting missing providers, JS interop issues, or theming. | `references/DATAGRID.md`
`references/LAYOUT-AND-NAVIGATION.md`
`references/SETUP.md`
`references/THEMING.md` | | [folder-structure-blueprint-generator](../skills/folder-structure-blueprint-generator/SKILL.md) | Comprehensive technology-agnostic prompt for analyzing and documenting project folder structures. Auto-detects project types (.NET, Java, React, Angular, Python, Node.js, Flutter), generates detailed blueprints with visualization options, naming conventions, file placement patterns, and extension templates for maintaining consistent code organization across diverse technology stacks. | None | | [game-engine](../skills/game-engine/SKILL.md) | Expert skill for building web-based game engines and games using HTML5, Canvas, WebGL, and JavaScript. Use when asked to create games, build game engines, implement game physics, handle collision detection, set up game loops, manage sprites, add game controls, or work with 2D/3D rendering. Covers techniques for platformers, breakout-style games, maze games, tilemaps, audio, multiplayer via WebRTC, and publishing games. | `assets/2d-maze-game.md`
`assets/2d-platform-game.md`
`assets/gameBase-template-repo.md`
`assets/paddle-game-template.md`
`assets/simple-2d-engine.md`
`references/3d-web-games.md`
`references/algorithms.md`
`references/basics.md`
`references/game-control-mechanisms.md`
`references/game-engine-core-principles.md`
`references/game-publishing.md`
`references/techniques.md`
`references/terminology.md`
`references/web-apis.md` | diff --git a/skills/flowstudio-power-automate-mcp/SKILL.md b/skills/flowstudio-power-automate-mcp/SKILL.md new file mode 100644 index 00000000..7866ed27 --- /dev/null +++ b/skills/flowstudio-power-automate-mcp/SKILL.md @@ -0,0 +1,450 @@ +--- +name: flowstudio-power-automate-mcp +description: >- + Connect to and operate Power Automate cloud flows via a FlowStudio MCP server. + Use when asked to: list flows, read a flow definition, check run history, inspect + action outputs, resubmit a run, cancel a running flow, view connections, get a + trigger URL, validate a definition, monitor flow health, or any task that requires + talking to the Power Automate API through an MCP tool. Also use for Power Platform + environment discovery and connection management. Requires a FlowStudio MCP + subscription or compatible server — see https://mcp.flowstudio.app +--- + +# Power Automate via FlowStudio MCP + +This skill lets AI agents read, monitor, and operate Microsoft Power Automate +cloud flows programmatically through a **FlowStudio MCP server** — no browser, +no UI, no manual steps. + +> **Requires:** A [FlowStudio](https://mcp.flowstudio.app) MCP subscription (or +> compatible Power Automate MCP server). You will need: +> - MCP endpoint: `https://mcp.flowstudio.app/mcp` (same for all subscribers) +> - API key / JWT token (`x-api-key` header — NOT Bearer) +> - Power Platform environment name (e.g. `Default-`) + +--- + +## Source of Truth + +| Priority | Source | Covers | +|----------|--------|--------| +| 1 | **Real API response** | Always trust what the server actually returns | +| 2 | **`tools/list`** | Tool names, parameter names, types, required flags | +| 3 | **SKILL docs & reference files** | Response shapes, behavioral notes, workflow recipes | + +> **Start every new session with `tools/list`.** +> It returns the authoritative, up-to-date schema for every tool — parameter names, +> types, and required flags. The SKILL docs cover what `tools/list` cannot tell you: +> response shapes, non-obvious behaviors, and end-to-end workflow patterns. +> +> If any documentation disagrees with `tools/list` or a real API response, +> the API wins. + +--- + +## Recommended Language: Python or Node.js + +All examples in this skill and the companion build / debug skills use **Python +with `urllib.request`** (stdlib — no `pip install` needed). **Node.js** is an +equally valid choice: `fetch` is built-in from Node 18+, JSON handling is +native, and the async/await model maps cleanly onto the request-response pattern +of MCP tool calls — making it a natural fit for teams already working in a +JavaScript/TypeScript stack. + +| Language | Verdict | Notes | +|---|---|---| +| **Python** | ✅ Recommended | Clean JSON handling, no escaping issues, all skill examples use it | +| **Node.js (≥ 18)** | ✅ Recommended | Native `fetch` + `JSON.stringify`/`JSON.parse`; async/await fits MCP call patterns well; no extra packages needed | +| PowerShell | ⚠️ Avoid for flow operations | `ConvertTo-Json -Depth` silently truncates nested definitions; quoting and escaping break complex payloads. Acceptable for a quick `tools/list` discovery call but not for building or updating flows. | +| cURL / Bash | ⚠️ Possible but fragile | Shell-escaping nested JSON is error-prone; no native JSON parser | + +> **TL;DR — use the Core MCP Helper (Python or Node.js) below.** Both handle +> JSON-RPC framing, auth, and response parsing in a single reusable function. + +--- + +## What You Can Do + +FlowStudio MCP has two access tiers. **FlowStudio for Teams** subscribers get +both the fast Azure-table store (cached snapshot data + governance metadata) and +full live Power Automate API access. **MCP-only subscribers** get the live tools — +more than enough to build, debug, and operate flows. + +### Live Tools — Available to All MCP Subscribers + +| Tool | What it does | +|---|---| +| `list_live_flows` | List flows in an environment directly from the PA API (always current) | +| `list_live_environments` | List all Power Platform environments visible to the service account | +| `list_live_connections` | List all connections in an environment from the PA API | +| `get_live_flow` | Fetch the complete flow definition (triggers, actions, parameters) | +| `get_live_flow_http_schema` | Inspect the JSON body schema and response schemas of an HTTP-triggered flow | +| `get_live_flow_trigger_url` | Get the current signed callback URL for an HTTP-triggered flow | +| `trigger_live_flow` | POST to an HTTP-triggered flow's callback URL (AAD auth handled automatically) | +| `update_live_flow` | Create a new flow or patch an existing definition in one call | +| `add_live_flow_to_solution` | Migrate a non-solution flow into a solution | +| `get_live_flow_runs` | List recent run history with status, start/end times, and errors | +| `get_live_flow_run_error` | Get structured error details (per-action) for a failed run | +| `get_live_flow_run_action_outputs` | Inspect inputs/outputs of any action (or every foreach iteration) in a run | +| `resubmit_live_flow_run` | Re-run a failed or cancelled run using its original trigger payload | +| `cancel_live_flow_run` | Cancel a currently running flow execution | + +### Store Tools — FlowStudio for Teams Subscribers Only + +These tools read from (and write to) the FlowStudio Azure table — a monitored +snapshot of your tenant's flows enriched with governance metadata and run statistics. + +| Tool | What it does | +|---|---| +| `list_store_flows` | Search flows from the cache with governance flags, run failure rates, and owner metadata | +| `get_store_flow` | Get full cached details for a single flow including run stats and governance fields | +| `get_store_flow_trigger_url` | Get the trigger URL from the cache (instant, no PA API call) | +| `get_store_flow_runs` | Cached run history for the last N days with duration and remediation hints | +| `get_store_flow_errors` | Cached failed-only runs with failed action names and remediation hints | +| `get_store_flow_summary` | Aggregated stats: success rate, failure count, avg/max duration | +| `set_store_flow_state` | Start or stop a flow via the PA API and sync the result back to the store | +| `update_store_flow` | Update governance metadata (description, tags, monitor flag, notification rules, business impact) | +| `list_store_environments` | List all environments from the cache | +| `list_store_makers` | List all makers (citizen developers) from the cache | +| `get_store_maker` | Get a maker's flow/app counts and account status | +| `list_store_power_apps` | List all Power Apps canvas apps from the cache | +| `list_store_connections` | List all Power Platform connections from the cache | + +--- + +## Which Tool Tier to Call First + +| Task | Tool | Notes | +|---|---|---| +| List flows | `list_live_flows` | Always current — calls PA API directly | +| Read a definition | `get_live_flow` | Always fetched live — not cached | +| Debug a failure | `get_live_flow_runs` → `get_live_flow_run_error` | Use live run data | + +> ⚠️ **`list_live_flows` returns a wrapper object** with a `flows` array — access via `result["flows"]`. + +> Store tools (`list_store_flows`, `get_store_flow`, etc.) are available to **FlowStudio for Teams** subscribers and provide cached governance metadata. Use live tools when in doubt — they work for all subscription tiers. + +--- + +## Step 0 — Discover Available Tools + +Always start by calling `tools/list` to confirm the server is reachable and see +exactly which tool names are available (names may vary by server version): + +```python +import json, urllib.request + +TOKEN = "" +MCP = "https://mcp.flowstudio.app/mcp" + +def mcp_raw(method, params=None, cid=1): + payload = {"jsonrpc": "2.0", "method": method, "id": cid} + if params: + payload["params"] = params + req = urllib.request.Request(MCP, data=json.dumps(payload).encode(), + headers={"x-api-key": TOKEN, "Content-Type": "application/json", + "User-Agent": "FlowStudio-MCP/1.0"}) + try: + resp = urllib.request.urlopen(req, timeout=30) + except urllib.error.HTTPError as e: + raise RuntimeError(f"MCP HTTP {e.code} — check token and endpoint") from e + return json.loads(resp.read()) + +raw = mcp_raw("tools/list") +if "error" in raw: + print("ERROR:", raw["error"]); raise SystemExit(1) +for t in raw["result"]["tools"]: + print(t["name"], "—", t["description"][:60]) +``` + +--- + +## Core MCP Helper (Python) + +Use this helper throughout all subsequent operations: + +```python +import json, urllib.request + +TOKEN = "" +MCP = "https://mcp.flowstudio.app/mcp" + +def mcp(tool, args, cid=1): + payload = {"jsonrpc": "2.0", "method": "tools/call", "id": cid, + "params": {"name": tool, "arguments": args}} + req = urllib.request.Request(MCP, data=json.dumps(payload).encode(), + headers={"x-api-key": TOKEN, "Content-Type": "application/json", + "User-Agent": "FlowStudio-MCP/1.0"}) + try: + resp = urllib.request.urlopen(req, timeout=120) + except urllib.error.HTTPError as e: + body = e.read().decode("utf-8", errors="replace") + raise RuntimeError(f"MCP HTTP {e.code}: {body[:200]}") from e + raw = json.loads(resp.read()) + if "error" in raw: + raise RuntimeError(f"MCP error: {json.dumps(raw['error'])}") + text = raw["result"]["content"][0]["text"] + return json.loads(text) +``` + +> **Common auth errors:** +> - HTTP 401/403 → token is missing, expired, or malformed. Get a fresh JWT from [mcp.flowstudio.app](https://mcp.flowstudio.app). +> - HTTP 400 → malformed JSON-RPC payload. Check `Content-Type: application/json` and body structure. +> - `MCP error: {"code": -32602, ...}` → wrong or missing tool arguments. + +--- + +## Core MCP Helper (Node.js) + +Equivalent helper for Node.js 18+ (built-in `fetch` — no packages required): + +```js +const TOKEN = ""; +const MCP = "https://mcp.flowstudio.app/mcp"; + +async function mcp(tool, args, cid = 1) { + const payload = { + jsonrpc: "2.0", + method: "tools/call", + id: cid, + params: { name: tool, arguments: args }, + }; + const res = await fetch(MCP, { + method: "POST", + headers: { + "x-api-key": TOKEN, + "Content-Type": "application/json", + "User-Agent": "FlowStudio-MCP/1.0", + }, + body: JSON.stringify(payload), + }); + if (!res.ok) { + const body = await res.text(); + throw new Error(`MCP HTTP ${res.status}: ${body.slice(0, 200)}`); + } + const raw = await res.json(); + if (raw.error) throw new Error(`MCP error: ${JSON.stringify(raw.error)}`); + return JSON.parse(raw.result.content[0].text); +} +``` + +> Requires Node.js 18+. For older Node, replace `fetch` with `https.request` +> from the stdlib or install `node-fetch`. + +--- + +## List Flows + +```python +ENV = "Default-" + +result = mcp("list_live_flows", {"environmentName": ENV}) +# Returns wrapper object: +# {"mode": "owner", "flows": [{"id": "0757041a-...", "displayName": "My Flow", +# "state": "Started", "triggerType": "Request", ...}], "totalCount": 42, "error": null} +for f in result["flows"]: + FLOW_ID = f["id"] # plain UUID — use directly as flowName + print(FLOW_ID, "|", f["displayName"], "|", f["state"]) +``` + +--- + +## Read a Flow Definition + +```python +FLOW = "" + +flow = mcp("get_live_flow", {"environmentName": ENV, "flowName": FLOW}) + +# Display name and state +print(flow["properties"]["displayName"]) +print(flow["properties"]["state"]) + +# List all action names +actions = flow["properties"]["definition"]["actions"] +print("Actions:", list(actions.keys())) + +# Inspect one action's expression +print(actions["Compose_Filter"]["inputs"]) +``` + +--- + +## Check Run History + +```python +# Most recent runs (newest first) +runs = mcp("get_live_flow_runs", {"environmentName": ENV, "flowName": FLOW, "top": 5}) +# Returns direct array: +# [{"name": "08584296068667933411438594643CU15", +# "status": "Failed", +# "startTime": "2026-02-25T06:13:38.6910688Z", +# "endTime": "2026-02-25T06:15:24.1995008Z", +# "triggerName": "manual", +# "error": {"code": "ActionFailed", "message": "An action failed..."}}, +# {"name": "08584296028664130474944675379CU26", +# "status": "Succeeded", "error": null, ...}] + +for r in runs: + print(r["name"], r["status"]) + +# Get the name of the first failed run +run_id = next((r["name"] for r in runs if r["status"] == "Failed"), None) +``` + +--- + +## Inspect an Action's Output + +```python +run_id = runs[0]["name"] + +out = mcp("get_live_flow_run_action_outputs", { + "environmentName": ENV, + "flowName": FLOW, + "runName": run_id, + "actionName": "Get_Customer_Record" # exact action name from the definition +}) +print(json.dumps(out, indent=2)) +``` + +--- + +## Get a Run's Error + +```python +err = mcp("get_live_flow_run_error", { + "environmentName": ENV, + "flowName": FLOW, + "runName": run_id +}) +# Returns: +# {"runName": "08584296068...", +# "failedActions": [ +# {"actionName": "HTTP_find_AD_User_by_Name", "status": "Failed", +# "code": "NotSpecified", "startTime": "...", "endTime": "..."}, +# {"actionName": "Scope_prepare_workers", "status": "Failed", +# "error": {"code": "ActionFailed", "message": "An action failed..."}} +# ], +# "allActions": [ +# {"actionName": "Apply_to_each", "status": "Skipped"}, +# {"actionName": "Compose_WeekEnd", "status": "Succeeded"}, +# ... +# ]} + +# The ROOT cause is usually the deepest entry in failedActions: +root = err["failedActions"][-1] +print(f"Root failure: {root['actionName']} → {root['code']}") +``` + +--- + +## Resubmit a Run + +```python +result = mcp("resubmit_live_flow_run", { + "environmentName": ENV, + "flowName": FLOW, + "runName": run_id +}) +print(result) # {"resubmitted": true, "triggerName": "..."} +``` + +--- + +## Cancel a Running Run + +```python +mcp("cancel_live_flow_run", { + "environmentName": ENV, + "flowName": FLOW, + "runName": run_id +}) +``` + +> ⚠️ **Do NOT cancel a run that shows `Running` because it is waiting for an +> adaptive card response.** That status is normal — the flow is paused waiting +> for a human to respond in Teams. Cancelling it will discard the pending card. + +--- + +## Full Round-Trip Example — Debug and Fix a Failing Flow + +```python +# ── 1. Find the flow ───────────────────────────────────────────────────── +result = mcp("list_live_flows", {"environmentName": ENV}) +target = next(f for f in result["flows"] if "My Flow Name" in f["displayName"]) +FLOW_ID = target["id"] + +# ── 2. Get the most recent failed run ──────────────────────────────────── +runs = mcp("get_live_flow_runs", {"environmentName": ENV, "flowName": FLOW_ID, "top": 5}) +# [{"name": "08584296068...", "status": "Failed", ...}, ...] +RUN_ID = next(r["name"] for r in runs if r["status"] == "Failed") + +# ── 3. Get per-action failure breakdown ────────────────────────────────── +err = mcp("get_live_flow_run_error", {"environmentName": ENV, "flowName": FLOW_ID, "runName": RUN_ID}) +# {"failedActions": [{"actionName": "HTTP_find_AD_User_by_Name", "code": "NotSpecified",...}], ...} +root_action = err["failedActions"][-1]["actionName"] +print(f"Root failure: {root_action}") + +# ── 4. Read the definition and inspect the failing action's expression ─── +defn = mcp("get_live_flow", {"environmentName": ENV, "flowName": FLOW_ID}) +acts = defn["properties"]["definition"]["actions"] +print("Failing action inputs:", acts[root_action]["inputs"]) + +# ── 5. Inspect the prior action's output to find the null ──────────────── +out = mcp("get_live_flow_run_action_outputs", { + "environmentName": ENV, "flowName": FLOW_ID, + "runName": RUN_ID, "actionName": "Compose_Names" +}) +nulls = [x for x in out.get("body", []) if x.get("Name") is None] +print(f"{len(nulls)} records with null Name") + +# ── 6. Apply the fix ───────────────────────────────────────────────────── +acts[root_action]["inputs"]["parameters"]["searchName"] = \ + "@coalesce(item()?['Name'], '')" + +conn_refs = defn["properties"]["connectionReferences"] +result = mcp("update_live_flow", { + "environmentName": ENV, "flowName": FLOW_ID, + "definition": defn["properties"]["definition"], + "connectionReferences": conn_refs +}) +assert result.get("error") is None, f"Deploy failed: {result['error']}" +# ⚠️ error key is always present — only fail if it is NOT None + +# ── 7. Resubmit and verify ─────────────────────────────────────────────── +mcp("resubmit_live_flow_run", {"environmentName": ENV, "flowName": FLOW_ID, "runName": RUN_ID}) + +import time; time.sleep(30) +new_runs = mcp("get_live_flow_runs", {"environmentName": ENV, "flowName": FLOW_ID, "top": 1}) +print(new_runs[0]["status"]) # Succeeded = done +``` + +--- + +## Auth & Connection Notes + +| Field | Value | +|---|---| +| Auth header | `x-api-key: ` — **not** `Authorization: Bearer` | +| Token format | Plain JWT — do not strip, alter, or prefix it | +| Timeout | Use ≥ 120 s for `get_live_flow_run_action_outputs` (large outputs) | +| Environment name | `Default-` (find it via `list_live_environments` or `list_live_flows` response) | + +--- + +## Reference Files + +- [MCP-BOOTSTRAP.md](references/MCP-BOOTSTRAP.md) — endpoint, auth, request/response format (read this first) +- [tool-reference.md](references/tool-reference.md) — response shapes and behavioral notes (parameters are in `tools/list`) +- [action-types.md](references/action-types.md) — Power Automate action type patterns +- [connection-references.md](references/connection-references.md) — connector reference guide + +--- + +## More Capabilities + +For **diagnosing failing flows** end-to-end → load the `power-automate-debug` skill. + +For **building and deploying new flows** → load the `power-automate-build` skill. diff --git a/skills/flowstudio-power-automate-mcp/references/MCP-BOOTSTRAP.md b/skills/flowstudio-power-automate-mcp/references/MCP-BOOTSTRAP.md new file mode 100644 index 00000000..7dc71605 --- /dev/null +++ b/skills/flowstudio-power-automate-mcp/references/MCP-BOOTSTRAP.md @@ -0,0 +1,53 @@ +# MCP Bootstrap — Quick Reference + +Everything an agent needs to start calling the FlowStudio MCP server. + +``` +Endpoint: https://mcp.flowstudio.app/mcp +Protocol: JSON-RPC 2.0 over HTTP POST +Transport: Streamable HTTP — single POST per request, no SSE, no WebSocket +Auth: x-api-key header with JWT token (NOT Bearer) +``` + +## Required Headers + +``` +Content-Type: application/json +x-api-key: +User-Agent: FlowStudio-MCP/1.0 ← required, or Cloudflare blocks you +``` + +## Step 1 — Discover Tools + +```json +POST {"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}} +``` + +Returns all tools with names, descriptions, and input schemas. +Free — not counted against plan limits. + +## Step 2 — Call a Tool + +```json +POST {"jsonrpc":"2.0","id":1,"method":"tools/call", + "params":{"name":"","arguments":{...}}} +``` + +## Response Shape + +``` +Success → {"result":{"content":[{"type":"text","text":""}]}} +Error → {"result":{"content":[{"type":"text","text":"{\"error\":{...}}"}]}} +``` + +Always parse `result.content[0].text` as JSON to get the actual data. + +## Key Tips + +- Tool results are JSON strings inside the text field — **double-parse needed** +- `"error"` field in parsed body: `null` = success, object = failure +- `environmentName` is required for most tools, but **not** for: + `list_live_environments`, `list_live_connections`, `list_store_flows`, + `list_store_environments`, `list_store_makers`, `get_store_maker`, + `list_store_power_apps`, `list_store_connections` +- When in doubt, check the `required` array in each tool's schema from `tools/list` diff --git a/skills/flowstudio-power-automate-mcp/references/action-types.md b/skills/flowstudio-power-automate-mcp/references/action-types.md new file mode 100644 index 00000000..42507ce7 --- /dev/null +++ b/skills/flowstudio-power-automate-mcp/references/action-types.md @@ -0,0 +1,79 @@ +# FlowStudio MCP — Action Types Reference + +Compact lookup for recognising action types returned by `get_live_flow`. +Use this to **read and understand** existing flow definitions. + +> For full copy-paste construction patterns, see the `power-automate-build` skill. + +--- + +## How to Read a Flow Definition + +Every action has `"type"`, `"runAfter"`, and `"inputs"`. The `runAfter` object +declares dependencies: `{"Previous": ["Succeeded"]}`. Valid statuses: +`Succeeded`, `Failed`, `Skipped`, `TimedOut`. + +--- + +## Action Type Quick Reference + +| Type | Purpose | Key fields to inspect | Output reference | +|---|---|---|---| +| `Compose` | Store/transform a value | `inputs` (any expression) | `outputs('Name')` | +| `InitializeVariable` | Declare a variable | `inputs.variables[].{name, type, value}` | `variables('name')` | +| `SetVariable` | Update a variable | `inputs.{name, value}` | `variables('name')` | +| `IncrementVariable` | Increment a numeric variable | `inputs.{name, value}` | `variables('name')` | +| `AppendToArrayVariable` | Push to an array variable | `inputs.{name, value}` | `variables('name')` | +| `If` | Conditional branch | `expression.and/or`, `actions`, `else.actions` | — | +| `Switch` | Multi-way branch | `expression`, `cases.{case, actions}`, `default` | — | +| `Foreach` | Loop over array | `foreach`, `actions`, `operationOptions` | `item()` / `items('Name')` | +| `Until` | Loop until condition | `expression`, `limit.{count, timeout}`, `actions` | — | +| `Wait` | Delay | `inputs.interval.{count, unit}` | — | +| `Scope` | Group / try-catch | `actions` (nested action map) | `result('Name')` | +| `Terminate` | End run | `inputs.{runStatus, runError}` | — | +| `OpenApiConnection` | Connector call (SP, Outlook, Teams…) | `inputs.host.{apiId, connectionName, operationId}`, `inputs.parameters` | `outputs('Name')?['body/...']` | +| `OpenApiConnectionWebhook` | Webhook wait (approvals, adaptive cards) | same as above | `body('Name')?['...']` | +| `Http` | External HTTP call | `inputs.{method, uri, headers, body}` | `outputs('Name')?['body']` | +| `Response` | Return to HTTP caller | `inputs.{statusCode, headers, body}` | — | +| `Query` | Filter array | `inputs.{from, where}` | `body('Name')` (filtered array) | +| `Select` | Reshape/project array | `inputs.{from, select}` | `body('Name')` (projected array) | +| `Table` | Array → CSV/HTML string | `inputs.{from, format, columns}` | `body('Name')` (string) | +| `ParseJson` | Parse JSON with schema | `inputs.{content, schema}` | `body('Name')?['field']` | +| `Expression` | Built-in function (e.g. ConvertTimeZone) | `kind`, `inputs` | `body('Name')` | + +--- + +## Connector Identification + +When you see `type: OpenApiConnection`, identify the connector from `host.apiId`: + +| apiId suffix | Connector | +|---|---| +| `shared_sharepointonline` | SharePoint | +| `shared_office365` | Outlook / Office 365 | +| `shared_teams` | Microsoft Teams | +| `shared_approvals` | Approvals | +| `shared_office365users` | Office 365 Users | +| `shared_flowmanagement` | Flow Management | + +The `operationId` tells you the specific operation (e.g. `GetItems`, `SendEmailV2`, +`PostMessageToConversation`). The `connectionName` maps to a GUID in +`properties.connectionReferences`. + +--- + +## Common Expressions (Reading Cheat Sheet) + +| Expression | Meaning | +|---|---| +| `@outputs('X')?['body/value']` | Array result from connector action X | +| `@body('X')` | Direct body of action X (Query, Select, ParseJson) | +| `@item()?['Field']` | Current loop item's field | +| `@triggerBody()?['Field']` | Trigger payload field | +| `@variables('name')` | Variable value | +| `@coalesce(a, b)` | First non-null of a, b | +| `@first(array)` | First element (null if empty) | +| `@length(array)` | Array count | +| `@empty(value)` | True if null/empty string/empty array | +| `@union(a, b)` | Merge arrays — **first wins** on duplicates | +| `@result('Scope')` | Array of action outcomes inside a Scope | diff --git a/skills/flowstudio-power-automate-mcp/references/connection-references.md b/skills/flowstudio-power-automate-mcp/references/connection-references.md new file mode 100644 index 00000000..08e83984 --- /dev/null +++ b/skills/flowstudio-power-automate-mcp/references/connection-references.md @@ -0,0 +1,115 @@ +# FlowStudio MCP — Connection References + +Connection references wire a flow's connector actions to real authenticated +connections in the Power Platform. They are required whenever you call +`update_live_flow` with a definition that uses connector actions. + +--- + +## Structure in a Flow Definition + +```json +{ + "properties": { + "definition": { ... }, + "connectionReferences": { + "shared_sharepointonline": { + "connectionName": "shared-sharepointonl-62599557c-1f33-4aec-b4c0-a6e4afcae3be", + "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline", + "displayName": "SharePoint" + }, + "shared_office365": { + "connectionName": "shared-office365-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "id": "/providers/Microsoft.PowerApps/apis/shared_office365", + "displayName": "Office 365 Outlook" + } + } + } +} +``` + +Keys are **logical reference names** (e.g. `shared_sharepointonline`). +These match the `connectionName` field inside each action's `host` block. + +--- + +## Finding Connection GUIDs + +Call `get_live_flow` on **any existing flow** that uses the same connection +and copy the `connectionReferences` block. The GUID after the connector prefix is +the connection instance owned by the authenticating user. + +```python +flow = mcp("get_live_flow", environmentName=ENV, flowName=EXISTING_FLOW_ID) +conn_refs = flow["properties"]["connectionReferences"] +# conn_refs["shared_sharepointonline"]["connectionName"] +# → "shared-sharepointonl-62599557c-1f33-4aec-b4c0-a6e4afcae3be" +``` + +> ⚠️ Connection references are **user-scoped**. If a connection is owned +> by another account, `update_live_flow` will return 403 +> `ConnectionAuthorizationFailed`. You must use a connection belonging to +> the account whose token is in the `x-api-key` header. + +--- + +## Passing `connectionReferences` to `update_live_flow` + +```python +result = mcp("update_live_flow", + environmentName=ENV, + flowName=FLOW_ID, + definition=modified_definition, + connectionReferences={ + "shared_sharepointonline": { + "connectionName": "shared-sharepointonl-62599557c-1f33-4aec-b4c0-a6e4afcae3be", + "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline" + } + } +) +``` + +Only include connections that the definition actually uses. + +--- + +## Common Connector API IDs + +| Service | API ID | +|---|---| +| SharePoint Online | `/providers/Microsoft.PowerApps/apis/shared_sharepointonline` | +| Office 365 Outlook | `/providers/Microsoft.PowerApps/apis/shared_office365` | +| Microsoft Teams | `/providers/Microsoft.PowerApps/apis/shared_teams` | +| OneDrive for Business | `/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness` | +| Azure AD | `/providers/Microsoft.PowerApps/apis/shared_azuread` | +| HTTP with Azure AD | `/providers/Microsoft.PowerApps/apis/shared_webcontents` | +| SQL Server | `/providers/Microsoft.PowerApps/apis/shared_sql` | +| Dataverse | `/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps` | +| Azure Blob Storage | `/providers/Microsoft.PowerApps/apis/shared_azureblob` | +| Approvals | `/providers/Microsoft.PowerApps/apis/shared_approvals` | +| Office 365 Users | `/providers/Microsoft.PowerApps/apis/shared_office365users` | +| Flow Management | `/providers/Microsoft.PowerApps/apis/shared_flowmanagement` | + +--- + +## Teams Adaptive Card Dual-Connection Requirement + +Flows that send adaptive cards **and** post follow-up messages require two +separate Teams connections: + +```json +"connectionReferences": { + "shared_teams": { + "connectionName": "shared-teams-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "id": "/providers/Microsoft.PowerApps/apis/shared_teams" + }, + "shared_teams_1": { + "connectionName": "shared-teams-yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy", + "id": "/providers/Microsoft.PowerApps/apis/shared_teams" + } +} +``` + +Both can point to the **same underlying Teams account** but must be registered +as two distinct connection references. The webhook (`OpenApiConnectionWebhook`) +uses `shared_teams` and subsequent message actions use `shared_teams_1`. diff --git a/skills/flowstudio-power-automate-mcp/references/tool-reference.md b/skills/flowstudio-power-automate-mcp/references/tool-reference.md new file mode 100644 index 00000000..b447a9c0 --- /dev/null +++ b/skills/flowstudio-power-automate-mcp/references/tool-reference.md @@ -0,0 +1,445 @@ +# FlowStudio MCP — Tool Response Catalog + +Response shapes and behavioral notes for the FlowStudio Power Automate MCP server. + +> **For tool names and parameters**: Always call `tools/list` on the server. +> It returns the authoritative, up-to-date schema for every tool. +> This document covers what `tools/list` does NOT tell you: **response shapes** +> and **non-obvious behaviors** discovered through real usage. + +--- + +## Source of Truth + +| Priority | Source | Covers | +|----------|--------|--------| +| 1 | **Real API response** | Always trust what the server actually returns | +| 2 | **`tools/list`** | Tool names, parameter names, types, required flags | +| 3 | **This document** | Response shapes, behavioral notes, gotchas | + +> If this document disagrees with `tools/list` or real API behavior, +> the API wins. Update this document accordingly. + +--- + +## Environment & Tenant Discovery + +### `list_live_environments` + +Response: direct array of environments. +```json +[ + { + "id": "Default-26e65220-5561-46ef-9783-ce5f20489241", + "displayName": "FlowStudio (default)", + "sku": "Production", + "location": "australia", + "state": "Enabled", + "isDefault": true, + "isAdmin": true, + "isMember": true, + "createdTime": "2023-08-18T00:41:05Z" + } +] +``` + +> Use the `id` value as `environmentName` in all other tools. + +### `list_store_environments` + +Same shape as `list_live_environments` but read from cache (faster). + +--- + +## Connection Discovery + +### `list_live_connections` + +Response: wrapper object with `connections` array. +```json +{ + "connections": [ + { + "id": "shared-office365-9f9d2c8e-55f1-49c9-9f9c-1c45d1fbbdce", + "displayName": "user@contoso.com", + "connectorName": "shared_office365", + "createdBy": "User Name", + "statuses": [{"status": "Connected"}], + "createdTime": "2024-03-12T21:23:55.206815Z" + } + ], + "totalCount": 56, + "error": null +} +``` + +> **Key field**: `id` is the `connectionName` value used in `connectionReferences`. +> +> **Key field**: `connectorName` maps to apiId: +> `"/providers/Microsoft.PowerApps/apis/" + connectorName` +> +> Filter by status: `statuses[0].status == "Connected"`. +> +> **Note**: `tools/list` marks `environmentName` as optional, but the server +> returns `MissingEnvironmentFilter` (HTTP 400) if you omit it. Always pass +> `environmentName`. + +### `list_store_connections` + +Same connection data from cache. + +--- + +## Flow Discovery & Listing + +### `list_live_flows` + +Response: wrapper object with `flows` array. +```json +{ + "mode": "owner", + "flows": [ + { + "id": "0757041a-8ef2-cf74-ef06-06881916f371", + "displayName": "My Flow", + "state": "Started", + "triggerType": "Request", + "triggerKind": "Http", + "createdTime": "2023-08-18T01:18:17Z", + "lastModifiedTime": "2023-08-18T12:47:42Z", + "owners": "", + "definitionAvailable": true + } + ], + "totalCount": 100, + "error": null +} +``` + +> Access via `result["flows"]`. `id` is a plain UUID --- use directly as `flowName`. +> +> `mode` indicates the access scope used (`"owner"` or `"admin"`). + +### `list_store_flows` + +Response: **direct array** (no wrapper). +```json +[ + { + "id": "3991358a-f603-e49d-b1ed-a9e4f72e2dcb.0757041a-8ef2-cf74-ef06-06881916f371", + "displayName": "Admin | Sync Template v3 (Solutions)", + "state": "Started", + "triggerType": "OpenApiConnectionWebhook", + "environmentName": "3991358a-f603-e49d-b1ed-a9e4f72e2dcb", + "runPeriodTotal": 100, + "createdTime": "2023-08-18T01:18:17Z", + "lastModifiedTime": "2023-08-18T12:47:42Z" + } +] +``` + +> **`id` format**: `envId.flowId` --- split on the first `.` to extract the flow UUID: +> `flow_id = item["id"].split(".", 1)[1]` + +### `get_store_flow` + +Response: single flow metadata from cache (selected fields). +```json +{ + "id": "envId.flowId", + "displayName": "My Flow", + "state": "Started", + "triggerType": "Recurrence", + "runPeriodTotal": 100, + "runPeriodFailRate": 0.1, + "runPeriodSuccessRate": 0.9, + "runPeriodFails": 10, + "runPeriodSuccess": 90, + "runPeriodDurationAverage": 29410.8, + "runPeriodDurationMax": 158900.0, + "runError": "{\"code\": \"EACCES\", ...}", + "description": "Flow description", + "tier": "Premium", + "complexity": "{...}", + "actions": 42, + "connections": ["sharepointonline", "office365"], + "owners": ["user@contoso.com"], + "createdBy": "user@contoso.com" +} +``` + +> `runPeriodDurationAverage` / `runPeriodDurationMax` are in **milliseconds** (divide by 1000). +> `runError` is a **JSON string** --- parse with `json.loads()`. + +--- + +## Flow Definition (Live API) + +### `get_live_flow` + +Response: full flow definition from PA API. +```json +{ + "name": "", + "properties": { + "displayName": "My Flow", + "state": "Started", + "definition": { + "triggers": { "..." }, + "actions": { "..." }, + "parameters": { "..." } + }, + "connectionReferences": { "..." } + } +} +``` + +### `update_live_flow` + +**Create mode**: Omit `flowName` --- creates a new flow. `definition` and `displayName` required. + +**Update mode**: Provide `flowName` --- PATCHes existing flow. + +Response: +```json +{ + "created": false, + "flowKey": "envId.flowId", + "updated": ["definition", "connectionReferences"], + "displayName": "My Flow", + "state": "Started", + "definition": { "...full definition..." }, + "error": null +} +``` + +> `error` is **always present** but may be `null`. Check `result.get("error") is not None`. +> +> On create: `created` is the new flow GUID (string). On update: `created` is `false`. +> +> `description` is **always required** (create and update). + +### `add_live_flow_to_solution` + +Migrates a non-solution flow into a solution. Returns error if already in a solution. + +--- + +## Run History & Monitoring + +### `get_live_flow_runs` + +Response: direct array of runs (newest first). +```json +[{ + "name": "", + "status": "Succeeded|Failed|Running|Cancelled", + "startTime": "2026-02-25T06:13:38Z", + "endTime": "2026-02-25T06:14:02Z", + "triggerName": "Recurrence", + "error": null +}] +``` + +> `top` defaults to **30** and auto-paginates for higher values. Set `top: 300` +> for 24-hour coverage on flows running every 5 minutes. +> +> Run ID field is **`name`** (not `runName`). Use this value as the `runName` +> parameter in other tools. + +### `get_live_flow_run_error` + +Response: structured error breakdown for a failed run. +```json +{ + "runName": "08584296068667933411438594643CU15", + "failedActions": [ + { + "actionName": "Apply_to_each_prepare_workers", + "status": "Failed", + "error": {"code": "ActionFailed", "message": "An action failed."}, + "code": "ActionFailed", + "startTime": "2026-02-25T06:13:52Z", + "endTime": "2026-02-25T06:15:24Z" + }, + { + "actionName": "HTTP_find_AD_User_by_Name", + "status": "Failed", + "code": "NotSpecified", + "startTime": "2026-02-25T06:14:01Z", + "endTime": "2026-02-25T06:14:05Z" + } + ], + "allActions": [ + {"actionName": "Apply_to_each", "status": "Skipped"}, + {"actionName": "Compose_WeekEnd", "status": "Succeeded"}, + {"actionName": "HTTP_find_AD_User_by_Name", "status": "Failed"} + ] +} +``` + +> `failedActions` is ordered outer-to-inner --- the **last entry is the root cause**. +> Use `failedActions[-1]["actionName"]` as the starting point for diagnosis. + +### `get_live_flow_run_action_outputs` + +Response: array of action detail objects. +```json +[ + { + "actionName": "Compose_WeekEnd_now", + "status": "Succeeded", + "startTime": "2026-02-25T06:13:52Z", + "endTime": "2026-02-25T06:13:52Z", + "error": null, + "inputs": "Mon, 25 Feb 2026 06:13:52 GMT", + "outputs": "Mon, 25 Feb 2026 06:13:52 GMT" + } +] +``` + +> **`actionName` is optional**: omit it to return ALL actions in the run; +> provide it to return a single-element array for that action only. +> +> Outputs can be very large (50 MB+) for bulk-data actions. Use 120s+ timeout. + +--- + +## Run Control + +### `resubmit_live_flow_run` + +Response: `{ flowKey, resubmitted: true, runName, triggerName }` + +### `cancel_live_flow_run` + +Cancels a `Running` flow run. + +> Do NOT cancel runs waiting for an adaptive card response --- status `Running` +> is normal while a Teams card is awaiting user input. + +--- + +## HTTP Trigger Tools + +### `get_live_flow_http_schema` + +Response keys: +``` +flowKey - Flow GUID +displayName - Flow display name +triggerName - Trigger action name (e.g. "manual") +triggerType - Trigger type (e.g. "Request") +triggerKind - Trigger kind (e.g. "Http") +requestMethod - HTTP method (e.g. "POST") +relativePath - Relative path configured on the trigger (if any) +requestSchema - JSON schema the trigger expects as POST body +requestHeaders - Headers the trigger expects +responseSchemas - Array of JSON schemas defined on Response action(s) +responseSchemaCount - Number of Response actions that define output schemas +``` + +> The request body schema is in `requestSchema` (not `triggerSchema`). + +### `get_live_flow_trigger_url` + +Returns the signed callback URL for HTTP-triggered flows. Response includes +`flowKey`, `triggerName`, `triggerType`, `triggerKind`, `triggerMethod`, `triggerUrl`. + +### `trigger_live_flow` + +Response keys: `flowKey`, `triggerName`, `triggerUrl`, `requiresAadAuth`, `authType`, +`responseStatus`, `responseBody`. + +> **Only works for `Request` (HTTP) triggers.** Returns an error for Recurrence +> and other trigger types: `"only HTTP Request triggers can be invoked via this tool"`. +> +> `responseStatus` + `responseBody` contain the flow's Response action output. +> AAD-authenticated triggers are handled automatically. + +--- + +## Flow State Management + +### `set_store_flow_state` + +Start or stop a flow. Pass `state: "Started"` or `state: "Stopped"`. + +--- + +## Store Tools --- FlowStudio for Teams Only + +### `get_store_flow_summary` + +Response: aggregated run statistics. +```json +{ + "totalRuns": 100, + "failRuns": 10, + "failRate": 0.1, + "averageDurationSeconds": 29.4, + "maxDurationSeconds": 158.9, + "firstFailRunRemediation": "" +} +``` + +### `get_store_flow_runs` + +Cached run history for the last N days with duration and remediation hints. + +### `get_store_flow_errors` + +Cached failed-only runs with failed action names and remediation hints. + +### `get_store_flow_trigger_url` + +Trigger URL from cache (instant, no PA API call). + +### `update_store_flow` + +Update governance metadata (description, tags, monitor flag, notification rules, business impact). + +### `list_store_makers` / `get_store_maker` + +Maker (citizen developer) discovery and detail. + +### `list_store_power_apps` + +List all Power Apps canvas apps from the cache. + +--- + +## Behavioral Notes + +Non-obvious behaviors discovered through real API usage. These are things +`tools/list` cannot tell you. + +### `get_live_flow_run_action_outputs` +- **`actionName` is optional**: omit to get all actions, provide to get one. + This changes the response from N elements to 1 element (still an array). +- Outputs can be 50 MB+ for bulk-data actions --- always use 120s+ timeout. + +### `update_live_flow` +- `description` is **always required** (create and update modes). +- `error` key is **always present** in response --- `null` means success. + Do NOT check `if "error" in result`; check `result.get("error") is not None`. +- On create, `created` = new flow GUID (string). On update, `created` = `false`. + +### `trigger_live_flow` +- **Only works for HTTP Request triggers.** Returns error for Recurrence, connector, + and other trigger types. +- AAD-authenticated triggers are handled automatically (impersonated Bearer token). + +### `get_live_flow_runs` +- `top` defaults to **30** with automatic pagination for higher values. +- Run ID field is `name`, not `runName`. Use this value as `runName` in other tools. +- Runs are returned newest-first. + +### Teams `PostMessageToConversation` (via `update_live_flow`) +- **"Chat with Flow bot"**: `body/recipient` = `"user@domain.com;"` (string with trailing semicolon). +- **"Channel"**: `body/recipient` = `{"groupId": "...", "channelId": "..."}` (object). +- `poster`: `"Flow bot"` for Workflows bot identity, `"User"` for user identity. + +### `list_live_connections` +- `id` is the value you need for `connectionName` in `connectionReferences`. +- `connectorName` maps to apiId: `"/providers/Microsoft.PowerApps/apis/" + connectorName`. From e6437902d62bd9baf8c227a20615b55aeb98e36e Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Fri, 6 Mar 2026 16:10:05 +1100 Subject: [PATCH 09/37] Fix sidebar navigation text contrast in light mode (#902) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixing the action link * Fix sidebar navigation text contrast in light mode - Use --sl-color-text-invert instead of --sl-color-white for active sidebar item, fixing near-black text on dark purple background (contrast ~2.5:1 → ~7.1:1) - Bump inactive sidebar links to font-weight 500 for better readability Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- website/src/content/docs/learning-hub/index.md | 2 +- website/src/styles/starlight-overrides.css | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/website/src/content/docs/learning-hub/index.md b/website/src/content/docs/learning-hub/index.md index 86f8ac50..d06359d7 100644 --- a/website/src/content/docs/learning-hub/index.md +++ b/website/src/content/docs/learning-hub/index.md @@ -6,7 +6,7 @@ hero: tagline: 'Curated articles, walkthroughs, and reference material to help you unlock everything you can do with GitHub Copilot' actions: - text: Start with Fundamentals - link: /learning-hub/what-are-agents-skills-instructions/ + link: what-are-agents-skills-instructions/ icon: right-arrow sidebar: hidden: true diff --git a/website/src/styles/starlight-overrides.css b/website/src/styles/starlight-overrides.css index 0761c39c..ec6489af 100644 --- a/website/src/styles/starlight-overrides.css +++ b/website/src/styles/starlight-overrides.css @@ -41,10 +41,14 @@ --sl-color-black: #f0f0f5; } -/* ── Sidebar active item ───────────────────────────────────── */ +/* ── Sidebar readability ───────────────────────────────────── */ +nav[aria-label="Main"] a { + font-weight: 500 !important; +} + nav[aria-label="Main"] a[aria-current="page"] { - color: var(--sl-color-white) !important; - font-weight: 600; + color: var(--sl-color-text-invert) !important; + font-weight: 600 !important; border-inline-start-color: var(--sl-color-accent) !important; } From 1b15663c46736d82ad56600d0a0f5dd3842f1a88 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 16:26:26 +1100 Subject: [PATCH 10/37] Update docs to reflect awesome-copilot as default plugin marketplace in CLI and VS Code (#901) * Initial plan * docs: update plugin discovery for default marketplace in CLI and VS Code Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com> * docs: revert README.md changes (covered by #900), update README.plugins.md Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com> * fix: update plugin template in constants.mjs so README.plugins.md survives rebuilds Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com> --- docs/README.plugins.md | 15 +++++--- eng/constants.mjs | 15 +++++--- .../installing-and-using-plugins.md | 19 ++++++++--- website/src/pages/plugins.astro | 34 +++++++++++++++++++ 4 files changed, 69 insertions(+), 14 deletions(-) diff --git a/docs/README.plugins.md b/docs/README.plugins.md index dd3afb0b..284d3c7e 100644 --- a/docs/README.plugins.md +++ b/docs/README.plugins.md @@ -1,6 +1,8 @@ # 🔌 Plugins -Curated plugins of related agents and skills organized around specific themes, workflows, or use cases. Plugins can be installed directly via GitHub Copilot CLI. +Curated plugins of related agents and skills organized around specific themes, workflows, or use cases. Plugins can be installed directly via GitHub Copilot CLI or VS Code. + +> **Awesome Copilot is a default plugin marketplace** — no setup required in either Copilot CLI or VS Code. ### How to Contribute See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-plugins) for guidelines on how to contribute new plugins, improve existing ones, and share your use cases. @@ -13,10 +15,13 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-plugins) for guidelines on how t - Each plugin includes agents and skills for specific workflows - Plugins make it easy to adopt comprehensive toolkits for particular scenarios -**Install Plugins:** -- Use \`copilot plugin install @awesome-copilot\` to install a plugin -- Or browse to the individual files to copy content manually -- Plugins help you discover related customizations you might have missed +**Find & Install in Copilot CLI:** +- Browse the marketplace from within an interactive Copilot session: \`/plugin marketplace browse awesome-copilot\` +- Install a plugin: \`copilot plugin install @awesome-copilot\` + +**Find & Install in VS Code:** +- Open the Extensions search view and type \`@agentPlugins\` to browse available plugins +- Or open the Command Palette and run \`Chat: Plugins\` | Name | Description | Items | Tags | | ---- | ----------- | ----- | ---- | diff --git a/eng/constants.mjs b/eng/constants.mjs index 50f85cb8..21a11053 100644 --- a/eng/constants.mjs +++ b/eng/constants.mjs @@ -27,7 +27,9 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-instructions) for guidelines on pluginsSection: `## 🔌 Plugins -Curated plugins of related agents and skills organized around specific themes, workflows, or use cases. Plugins can be installed directly via GitHub Copilot CLI.`, +Curated plugins of related agents and skills organized around specific themes, workflows, or use cases. Plugins can be installed directly via GitHub Copilot CLI or VS Code. + +> **Awesome Copilot is a default plugin marketplace** — no setup required in either Copilot CLI or VS Code.`, pluginsUsage: `### How to Contribute @@ -41,10 +43,13 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-plugins) for guidelines on how t - Each plugin includes agents and skills for specific workflows - Plugins make it easy to adopt comprehensive toolkits for particular scenarios -**Install Plugins:** -- Use \\\`copilot plugin install @awesome-copilot\\\` to install a plugin -- Or browse to the individual files to copy content manually -- Plugins help you discover related customizations you might have missed`, +**Find & Install in Copilot CLI:** +- Browse the marketplace from within an interactive Copilot session: \\\`/plugin marketplace browse awesome-copilot\\\` +- Install a plugin: \\\`copilot plugin install @awesome-copilot\\\` + +**Find & Install in VS Code:** +- Open the Extensions search view and type \\\`@agentPlugins\\\` to browse available plugins +- Or open the Command Palette and run \\\`Chat: Plugins\\\``, featuredPluginsSection: `## 🌟 Featured Plugins diff --git a/website/src/content/learning-hub/installing-and-using-plugins.md b/website/src/content/learning-hub/installing-and-using-plugins.md index 94eb44d5..28bc8795 100644 --- a/website/src/content/learning-hub/installing-and-using-plugins.md +++ b/website/src/content/learning-hub/installing-and-using-plugins.md @@ -94,12 +94,12 @@ Plugins are especially valuable when you want to: ## Finding Plugins -Plugins are collected in **marketplaces** — registries you can browse and install from. Copilot CLI comes with two marketplaces registered by default: +Plugins are collected in **marketplaces** — registries you can browse and install from. Both Copilot CLI and VS Code come with two marketplaces registered by default — **no setup required**: - **`copilot-plugins`** — Official GitHub Copilot plugins - **`awesome-copilot`** — Community-contributed plugins from this repository -### Browsing a Marketplace +### Browsing in Copilot CLI List your registered marketplaces: @@ -121,6 +121,13 @@ Or from within an interactive Copilot session: > **Tip**: You can also browse plugins on this site's [Plugins Directory](../../plugins/) to see descriptions, included agents, and skills before installing. +### Browsing in VS Code + +Because `awesome-copilot` is a default marketplace in VS Code, you can discover plugins without any configuration: + +- Open the **Extensions** search view and type **`@agentPlugins`** to see all available plugins +- Or open the **Command Palette** (`Ctrl+Shift+P` / `Cmd+Shift+P`) and run **Chat: Plugins** + ### Adding More Marketplaces Register additional marketplaces from GitHub repositories: @@ -137,9 +144,9 @@ copilot plugin marketplace add /path/to/local-marketplace ## Installing Plugins -### From a Registered Marketplace +### From Copilot CLI -The most common way to install a plugin — reference it by name and marketplace: +Reference a plugin by name and marketplace: ```bash copilot plugin install database-data-management@awesome-copilot @@ -151,6 +158,10 @@ Or from an interactive session: /plugin install database-data-management@awesome-copilot ``` +### From VS Code + +Browse to the plugin via `@agentPlugins` in the Extensions search view or via **Chat: Plugins** in the Command Palette, then click **Install**. + ## Managing Plugins Once installed, plugins are managed with a few simple commands: diff --git a/website/src/pages/plugins.astro b/website/src/pages/plugins.astro index 52bff369..c7f49fbf 100644 --- a/website/src/pages/plugins.astro +++ b/website/src/pages/plugins.astro @@ -11,6 +11,15 @@ import PageHeader from '../components/PageHeader.astro';
+
+

Awesome Copilot is a default plugin marketplace — no setup required. Access it directly from your tools:

+
    +
  • GitHub Copilot CLI: Type /plugin marketplace browse awesome-copilot in a Copilot session
  • +
  • VS Code: Type @agentPlugins in the Extensions search view, or open the Command Palette and run Chat: Plugins
  • +
+

Install any plugin with: copilot plugin install <plugin-name>@awesome-copilot

+
+