diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index cc94a473c..665a282c5 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -49,5 +49,6 @@ jobs:
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add -A
+ git add -f plugins/*/agents/ plugins/*/commands/ plugins/*/skills/
git commit -m "chore: publish from staged [skip ci]" --allow-empty
git push origin HEAD:main --force
diff --git a/.gitignore b/.gitignore
index 5167cf501..91de8a135 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,11 @@ reports/
# Generated files
/llms.txt
+# Materialized plugin files (generated by CI via eng/materialize-plugins.mjs)
+plugins/*/agents/
+plugins/*/commands/
+plugins/*/skills/
+
# Website build artifacts
website/dist/
website/.astro/
diff --git a/docs/README.skills.md b/docs/README.skills.md
index f047c84fb..00f19db53 100644
--- a/docs/README.skills.md
+++ b/docs/README.skills.md
@@ -34,6 +34,7 @@ Skills differ from other primitives by supporting bundled assets (scripts, code
| [chrome-devtools](../skills/chrome-devtools/SKILL.md) | Expert-level browser automation, debugging, and performance analysis using Chrome DevTools MCP. Use for interacting with web pages, capturing screenshots, analyzing network traffic, and profiling performance. | None |
| [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-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-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` |
| [create-web-form](../skills/create-web-form/SKILL.md) | Create robust, accessible web forms with best practices for HTML structure, CSS styling, JavaScript interactivity, form validation, and server-side processing. Use when asked to "create a form", "build a web form", "add a contact form", "make a signup form", or when building any HTML form with data handling. Covers PHP and Python backends, MySQL database integration, REST APIs, XML data exchange, accessibility (ARIA), and progressive web apps. | `references/accessibility.md`
`references/aria-form-role.md`
`references/css-styling.md`
`references/form-basics.md`
`references/form-controls.md`
`references/form-data-handling.md`
`references/html-form-elements.md`
`references/html-form-example.md`
`references/hypertext-transfer-protocol.md`
`references/javascript.md`
`references/php-cookies.md`
`references/php-forms.md`
`references/php-json.md`
`references/php-mysql-database.md`
`references/progressive-web-app.md`
`references/python-as-web-framework.md`
`references/python-contact-form.md`
`references/python-flask-app.md`
`references/python-flask.md`
`references/security.md`
`references/styling-web-forms.md`
`references/web-api.md`
`references/web-performance.md`
`references/xml.md` |
| [excalidraw-diagram-generator](../skills/excalidraw-diagram-generator/SKILL.md) | Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw. | `references/element-types.md`
`references/excalidraw-schema.md`
`scripts/.gitignore`
`scripts/README.md`
`scripts/add-arrow.py`
`scripts/add-icon-to-diagram.py`
`scripts/split-excalidraw-library.py`
`templates/business-flow-swimlane-template.excalidraw`
`templates/class-diagram-template.excalidraw`
`templates/data-flow-diagram-template.excalidraw`
`templates/er-diagram-template.excalidraw`
`templates/flowchart-template.excalidraw`
`templates/mindmap-template.excalidraw`
`templates/relationship-template.excalidraw`
`templates/sequence-diagram-template.excalidraw` |
| [fabric-lakehouse](../skills/fabric-lakehouse/SKILL.md) | Use this skill to get context about Fabric Lakehouse and its features for software systems and AI-powered functions. It offers descriptions of Lakehouse data components, organization with schemas and shortcuts, access control, and code examples. This skill supports users in designing, building, and optimizing Lakehouse solutions using best practices. | `references/getdata.md`
`references/pyspark.md` |
diff --git a/skills/copilot-usage-metrics/SKILL.md b/skills/copilot-usage-metrics/SKILL.md
new file mode 100644
index 000000000..ea54910ad
--- /dev/null
+++ b/skills/copilot-usage-metrics/SKILL.md
@@ -0,0 +1,52 @@
+---
+name: copilot-usage-metrics
+description: Retrieve and display GitHub Copilot usage metrics for organizations and enterprises using the GitHub CLI and REST API.
+---
+
+# Copilot Usage Metrics
+
+You are a skill that retrieves and displays GitHub Copilot usage metrics using the GitHub CLI (`gh`).
+
+## When to use this skill
+
+Use this skill when the user asks about:
+- Copilot usage metrics, adoption, or statistics
+- How many people are using Copilot in their org or enterprise
+- Copilot acceptance rates, suggestions, or chat usage
+- Per-user Copilot usage breakdowns
+- Copilot usage on a specific date
+
+## How to use this skill
+
+1. Determine whether the user wants **organization** or **enterprise** level metrics.
+2. Ask for the org name or enterprise slug if not provided.
+3. Determine if they want **aggregated** metrics or **per-user** metrics.
+4. Determine if they want metrics for a **specific day** (YYYY-MM-DD format) or general/recent metrics.
+5. Run the appropriate script from this skill's directory.
+
+## Available scripts
+
+### Organization metrics
+
+- `get-org-metrics.sh [day]` — Get aggregated Copilot usage metrics for an organization. Optionally pass a specific day in YYYY-MM-DD format.
+- `get-org-user-metrics.sh [day]` — Get per-user Copilot usage metrics for an organization. Optionally pass a specific day.
+
+### Enterprise metrics
+
+- `get-enterprise-metrics.sh [day]` — Get aggregated Copilot usage metrics for an enterprise. Optionally pass a specific day.
+- `get-enterprise-user-metrics.sh [day]` — Get per-user Copilot usage metrics for an enterprise. Optionally pass a specific day.
+
+## Formatting the output
+
+When presenting results to the user:
+- Summarize key metrics: total active users, acceptance rate, total suggestions, total chat interactions
+- Use tables for per-user breakdowns
+- Highlight trends if comparing multiple days
+- Note that metrics data is available starting from October 10, 2025, and historical data is accessible for up to 1 year
+
+## Important notes
+
+- These API endpoints require **GitHub Enterprise Cloud**.
+- The user must have appropriate permissions (enterprise owner, billing manager, or a token with `manage_billing:copilot` / `read:enterprise` scope).
+- The "Copilot usage metrics" policy must be enabled in enterprise settings.
+- If the API returns 403, advise the user to check their token permissions and enterprise policy settings.
diff --git a/skills/copilot-usage-metrics/get-enterprise-metrics.sh b/skills/copilot-usage-metrics/get-enterprise-metrics.sh
new file mode 100644
index 000000000..a1176903d
--- /dev/null
+++ b/skills/copilot-usage-metrics/get-enterprise-metrics.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+# Fetch aggregated Copilot usage metrics for an enterprise
+# Usage: get-enterprise-metrics.sh [day]
+# enterprise - GitHub enterprise slug
+# day - (optional) specific day in YYYY-MM-DD format
+
+set -euo pipefail
+
+ENTERPRISE="${1:?Usage: get-enterprise-metrics.sh [day]}"
+DAY="${2:-}"
+
+if [ -n "$DAY" ]; then
+ gh api \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ "/enterprises/$ENTERPRISE/copilot/usage/day?day=$DAY"
+else
+ gh api \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ "/enterprises/$ENTERPRISE/copilot/usage"
+fi
diff --git a/skills/copilot-usage-metrics/get-enterprise-user-metrics.sh b/skills/copilot-usage-metrics/get-enterprise-user-metrics.sh
new file mode 100644
index 000000000..4ccf4fe0c
--- /dev/null
+++ b/skills/copilot-usage-metrics/get-enterprise-user-metrics.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+# Fetch per-user Copilot usage metrics for an enterprise
+# Usage: get-enterprise-user-metrics.sh [day]
+# enterprise - GitHub enterprise slug
+# day - (optional) specific day in YYYY-MM-DD format
+
+set -euo pipefail
+
+ENTERPRISE="${1:?Usage: get-enterprise-user-metrics.sh [day]}"
+DAY="${2:-}"
+
+if [ -n "$DAY" ]; then
+ gh api \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ "/enterprises/$ENTERPRISE/copilot/usage/users/day?day=$DAY"
+else
+ gh api \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ "/enterprises/$ENTERPRISE/copilot/usage/users"
+fi
diff --git a/skills/copilot-usage-metrics/get-org-metrics.sh b/skills/copilot-usage-metrics/get-org-metrics.sh
new file mode 100644
index 000000000..28822feb7
--- /dev/null
+++ b/skills/copilot-usage-metrics/get-org-metrics.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+# Fetch aggregated Copilot usage metrics for an organization
+# Usage: get-org-metrics.sh [day]
+# org - GitHub organization name
+# day - (optional) specific day in YYYY-MM-DD format
+
+set -euo pipefail
+
+ORG="${1:?Usage: get-org-metrics.sh [day]}"
+DAY="${2:-}"
+
+if [ -n "$DAY" ]; then
+ gh api \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ "/orgs/$ORG/copilot/usage/day?day=$DAY"
+else
+ gh api \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ "/orgs/$ORG/copilot/usage"
+fi
diff --git a/skills/copilot-usage-metrics/get-org-user-metrics.sh b/skills/copilot-usage-metrics/get-org-user-metrics.sh
new file mode 100644
index 000000000..dc85185c3
--- /dev/null
+++ b/skills/copilot-usage-metrics/get-org-user-metrics.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+# Fetch per-user Copilot usage metrics for an organization
+# Usage: get-org-user-metrics.sh [day]
+# org - GitHub organization name
+# day - (optional) specific day in YYYY-MM-DD format
+
+set -euo pipefail
+
+ORG="${1:?Usage: get-org-user-metrics.sh [day]}"
+DAY="${2:-}"
+
+if [ -n "$DAY" ]; then
+ gh api \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ "/orgs/$ORG/copilot/usage/users/day?day=$DAY"
+else
+ gh api \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ "/orgs/$ORG/copilot/usage/users"
+fi