Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .github/instructions/skill-files.instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,19 @@ Every SKILL.md must include YAML frontmatter with:
```yaml
---
name: skill-name
description: Detailed description including trigger phrases and use cases.
description: "Detailed description including trigger phrases and use cases."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---
```

- **name**: 1-64 characters, lowercase letters and hyphens only, must match directory name
- **description**: 1-1024 characters, explain WHAT the skill does and WHEN to use it. Include trigger phrases.
- **license**: Required for all skills. Use `MIT` unless there is a documented exception.
- **metadata.author**: Recommended value is `Microsoft`.
- **metadata.version**: Semver format (`X.Y.Z`). Set to `"1.0.0"` for new skills. Must be bumped in the same PR that modifies the skill.

## Size Limits

Expand Down
4 changes: 4 additions & 0 deletions .github/skills/file-test-bug/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: file-test-bug
description: "File a GitHub issue for local integration test failures. TRIGGERS: file test bug, report test failure, create bug for test, integration test failed, test failure issue, junit failure"
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# File Test Bug
Expand Down
4 changes: 4 additions & 0 deletions .github/skills/markdown-token-optimizer/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: markdown-token-optimizer
description: "Analyzes markdown files for token efficiency. TRIGGERS: optimize markdown, reduce tokens, token count, token bloat, too many tokens, make concise, shrink file, file too large, optimize for AI, token efficiency, verbose markdown, reduce file size"
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Markdown Token Optimizer
Expand Down
4 changes: 4 additions & 0 deletions .github/skills/sensei/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: sensei
description: "**WORKFLOW SKILL** — Iteratively improve skill frontmatter compliance using the Ralph loop pattern. WHEN: \"run sensei\", \"sensei help\", \"improve skill\", \"fix frontmatter\", \"skill compliance\", \"frontmatter audit\", \"score skill\", \"check skill tokens\". INVOKES: token counting tools, test runners, git commands. FOR SINGLE OPERATIONS: use token CLI directly for counts/checks."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Sensei
Expand Down
6 changes: 3 additions & 3 deletions .github/skills/sensei/references/SCORING.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ license: MIT
compatibility: Supports ASP.NET Core (.NET 6+), Node.js. Requires App Insights resource.
metadata:
author: example-org
version: "1.0"
version: "1.0.0"
```

---
Expand Down Expand Up @@ -218,7 +218,7 @@ The [agentskills.io spec](https://agentskills.io/specification) defines addition
```
SUGGESTIONS:
• Add license field (e.g., license: MIT)
• Add metadata.version field (e.g., metadata: { version: "1.0" })
• Add metadata.version field (e.g., metadata: { version: "1.0.0" })
```

### 7. SKILL.md Size Limits
Expand Down Expand Up @@ -345,7 +345,7 @@ function collectSuggestions(skill):
if skill.license == null:
suggestions.add("Add license field (e.g., license: MIT)")
if skill.metadata == null OR skill.metadata.version == null:
suggestions.add("Add metadata.version field (e.g., metadata: { version: \"1.0\" })")
suggestions.add("Add metadata.version field (e.g., metadata: { version: \"1.0.0\" })")
if usesBlockScalar(skill.rawDescription):
suggestions.add("Use inline double-quoted string for description (>- incompatible with skills.sh)")
if containsAntiTriggers(skill.description):
Expand Down
4 changes: 4 additions & 0 deletions .github/skills/skill-authoring/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: skill-authoring
description: "Guidelines for writing Agent Skills that comply with the agentskills.io specification. WHEN: \"create a skill\", \"new skill\", \"write a skill\", \"skill template\", \"skill structure\", \"review skill\", \"skill PR\", \"skill compliance\", \"SKILL.md format\", \"skill frontmatter\", \"skill best practices\"."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Skill Authoring Guide
Expand Down
81 changes: 74 additions & 7 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Check changed skill files
id: changed-skills
Expand All @@ -195,6 +197,14 @@ jobs:
plugin/skills/**/SKILL.md
.github/skills/**/SKILL.md

- name: Check all changed plugin skill files
id: changed-plugin-skills
uses: tj-actions/changed-files@v46
with:
files: |
plugin/skills/**
Comment thread
spboyer marked this conversation as resolved.
.github/skills/**

- name: Setup Node.js
if: steps.changed-skills.outputs.any_changed == 'true'
uses: actions/setup-node@v4
Expand All @@ -215,17 +225,15 @@ jobs:
echo "## Skill Validation" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

# Extract skill names from changed SKILL.md paths
SKILLS=()
IFS=$'\n'
# Pass changed SKILL.md file paths directly to the validator
# Prefix with ../ since working-directory is ./scripts
SKILL_FILES=""
for file in ${{ steps.changed-skills.outputs.all_changed_files }}; do
# Extract the skill directory name (parent of SKILL.md)
SKILL_NAME=$(basename "$(dirname "$file")")
SKILLS+=("$SKILL_NAME")
SKILL_FILES="$SKILL_FILES ../$file"
done

# Run frontmatter spec validation
if OUTPUT=$(npm run frontmatter -- "${SKILLS[@]}" 2>&1); then
if OUTPUT=$(npm run frontmatter -- $SKILL_FILES 2>&1); then
Comment thread
spboyer marked this conversation as resolved.
echo "$OUTPUT"
echo "✅ All skill frontmatter is valid" >> $GITHUB_STEP_SUMMARY
else
Expand Down Expand Up @@ -288,6 +296,65 @@ jobs:
core.setFailed('tests/skills.json validation failed');
}

- name: Check skill version bumps
if: steps.changed-plugin-skills.outputs.any_changed == 'true'
run: |
echo "## Skill Version Check" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

FAILED=false

# For each changed file, walk up to find the nearest SKILL.md
SKILL_FILES=""
for file in ${{ steps.changed-plugin-skills.outputs.all_changed_files }}; do
dir=$(dirname "$file")
while [ "$dir" != "plugin/skills" ] && [ "$dir" != ".github/skills" ] && [ "$dir" != "plugin" ] && [ "$dir" != ".github" ] && [ "$dir" != "." ]; do
if [ -f "$dir/SKILL.md" ]; then
SKILL_FILES="$SKILL_FILES $dir/SKILL.md"
break
fi
dir=$(dirname "$dir")
done
done

# Deduplicate
SKILL_FILES=$(echo "$SKILL_FILES" | tr ' ' '\n' | sort -u | grep -v '^$')

if [ -z "$SKILL_FILES" ]; then
echo "No SKILL.md files affected by changes."
echo "✅ No version bump needed" >> $GITHUB_STEP_SUMMARY
exit 0
fi

for skill_file in $SKILL_FILES; do
# Get version in base branch (use [[:space:]] for portable whitespace matching)
BASE_VERSION=$(git show origin/${{ github.base_ref }}:"$skill_file" 2>/dev/null | sed -n '/^---$/,/^---$/p' | grep -E '^[[:space:]]+version:' | head -1 | sed 's/.*version:[[:space:]]*"\{0,1\}\([^"]*\)"\{0,1\}/\1/' || echo "")

# Get version in PR branch
HEAD_VERSION=$(sed -n '/^---$/,/^---$/p' "$skill_file" | grep -E '^[[:space:]]+version:' | head -1 | sed 's/.*version:[[:space:]]*"\{0,1\}\([^"]*\)"\{0,1\}/\1/')

# New skill (no base version) — skip, it starts at 1.0.0
if [ -z "$BASE_VERSION" ]; then
echo "✅ $skill_file — new skill (version: $HEAD_VERSION)"
continue
fi

if [ "$BASE_VERSION" = "$HEAD_VERSION" ]; then
echo "::error file=$skill_file::Skill was modified but metadata.version was not bumped ($BASE_VERSION). Bump the version in your PR."
echo "❌ \`$skill_file\` — version not bumped ($BASE_VERSION)" >> $GITHUB_STEP_SUMMARY
FAILED=true
else
echo "✅ $skill_file — version bumped: $BASE_VERSION → $HEAD_VERSION"
echo "✅ \`$skill_file\` — $BASE_VERSION → $HEAD_VERSION" >> $GITHUB_STEP_SUMMARY
fi
done

if [ "$FAILED" = true ]; then
echo "" >> $GITHUB_STEP_SUMMARY
echo "> Every PR that modifies a skill must bump its \`metadata.version\` in the same PR." >> $GITHUB_STEP_SUMMARY
exit 1
fi

- name: Skip message
if: steps.changed-skills.outputs.any_changed != 'true'
run: echo "No skill files changed - skipping validation"
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/appinsights-instrumentation/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: appinsights-instrumentation
description: "Guidance for instrumenting webapps with Azure Application Insights. Provides telemetry patterns, SDK setup, and configuration references. USE FOR: how to instrument app, App Insights SDK, telemetry patterns, what is App Insights, Application Insights guidance, instrumentation examples, APM best practices. DO NOT USE FOR: adding App Insights to my app (use azure-prepare), add telemetry to my project (use azure-prepare), add monitoring (use azure-prepare). This skill provides guidance—azure-prepare orchestrates component changes."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# AppInsights Instrumentation Guide
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-ai/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-ai
description: "Use for Azure AI: Search, Speech, OpenAI, Document Intelligence. Helps with search, vector/hybrid search, speech-to-text, text-to-speech, transcription, OCR. USE FOR: AI Search, query search, vector search, hybrid search, semantic search, speech-to-text, text-to-speech, transcribe, OCR, convert text to speech. DO NOT USE FOR: Function apps/Functions (use azure-functions), databases (azure-kusto), general Azure resources."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Azure AI Services
Expand Down
5 changes: 3 additions & 2 deletions plugin/skills/azure-aigateway/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
---
name: azure-aigateway
description: "Configure Azure API Management as an AI Gateway for AI models, MCP tools, and agents. USE FOR: semantic caching, token limit, content safety, load balancing, AI model governance, MCP rate limiting, jailbreak detection, add Azure OpenAI backend, add AI Foundry model, test AI gateway, LLM policies, configure AI backend, token metrics, AI cost control, convert API to MCP, import OpenAPI to gateway. DO NOT USE FOR: deploying APIM (use azure-prepare), general API policies (use azure-deploy), creating new APIM instance (use azure-prepare)."
license: MIT
metadata:
author: microsoft
version: "3.0"
author: Microsoft
version: "3.0.0"
compatibility: Requires Azure CLI (az) for configuration and testing
---

Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-compliance/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-compliance
description: "Comprehensive Azure compliance and security auditing capabilities including best practices assessment, Key Vault expiration monitoring, and resource configuration validation. USE FOR: compliance scan, security audit, azqr, Azure best practices, Key Vault expiration check, compliance assessment, resource review, configuration validation, expired certificates, expiring secrets, orphaned resources, policy compliance, security posture evaluation. DO NOT USE FOR: deploying resources (use azure-deploy), cost analysis alone (use azure-cost-optimization), active security hardening (use azure-security-hardening), general Azure Advisor queries (use azure-observability)."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Azure Compliance & Security Auditing
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-compute/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-compute
description: "Recommend Azure VM sizes, VM Scale Sets (VMSS), and configurations based on workload requirements, performance needs, and budget constraints. No Azure account required — uses public documentation and the Azure Retail Prices API. USE FOR: recommend VM size, which VM should I use, choose Azure VM, VM for web/database/ML/batch/HPC, GPU VM, compare VM sizes, cheapest VM, best VM for workload, VM pricing, cost estimate, burstable/compute/memory/storage optimized VM, confidential computing, VM trade-offs, VM families, VMSS, scale set recommendation, autoscale VMs, load balanced VMs, VMSS vs VM, scale out, horizontal scaling, flexible orchestration. DO NOT USE FOR: deploying VMs or VMSS, deploying apps (use azure-deploy), looking up existing VMs (use azure-resource-lookup), cost optimization of running VMs (use azure-cost-optimization), non-VM services like App Service or AKS."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Azure Compute Skill
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-cost-optimization/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-cost-optimization
description: "Identify and quantify cost savings across Azure subscriptions by analyzing actual costs, utilization metrics, and generating actionable optimization recommendations. USE FOR: optimize Azure costs, reduce Azure spending, reduce Azure expenses, analyze Azure costs, find cost savings, generate cost optimization report, find orphaned resources, rightsize VMs, cost analysis, reduce waste, Azure spending analysis, find unused resources, optimize Redis costs. DO NOT USE FOR: deploying resources (use azure-deploy), general Azure diagnostics (use azure-diagnostics), security issues (use azure-security)"
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Azure Cost Optimization Skill
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-deploy/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-deploy
description: "Deploy already-prepared applications to Azure by running azd up, azd deploy, or infrastructure provisioning commands. Supports Bicep and Terraform projects. WHEN: \"run azd up\", \"run azd deploy\", \"execute deployment\", \"provision infrastructure\", \"push to production\", \"push to cloud\", \"go live\", \"ship it\", \"bicep deploy\", \"terraform apply\", \"publish to Azure\", \"launch on Azure\"."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Azure Deploy
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-diagnostics/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-diagnostics
description: "Debug and troubleshoot production issues on Azure. Covers Container Apps and Function Apps diagnostics, log analysis with KQL, health checks, and common issue resolution for image pulls, cold starts, health probes, and function invocation failures. USE FOR: debug production issues, troubleshoot container apps, troubleshoot function apps, troubleshoot Azure Functions, analyze logs with KQL, fix image pull failures, resolve cold start issues, investigate health probe failures, check resource health, view application logs, find root cause of errors, function app not working, function invocation failures DO NOT USE FOR: deploying applications (use azure-deploy), creating new resources (use azure-prepare), setting up monitoring (use azure-observability), cost optimization (use azure-cost-optimization)"
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Azure Diagnostics
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-hosted-copilot-sdk/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-hosted-copilot-sdk
description: "Build and deploy GitHub Copilot SDK apps to Azure. USE FOR: build copilot app, create copilot app, copilot SDK, @github/copilot-sdk, scaffold copilot project, copilot-powered app, deploy copilot app, host on azure, azure model, BYOM, bring your own model, use my own model, azure openai model, DefaultAzureCredential, self-hosted model, copilot SDK service, chat app with copilot, copilot-sdk-service template, azd init copilot, CopilotClient, createSession, sendAndWait, GitHub Models API. DO NOT USE FOR: using Copilot (not building with it), Copilot Extensions, Azure Functions without Copilot, general web apps without copilot SDK, Foundry agent hosting (use microsoft-foundry skill), agent evaluation (use microsoft-foundry skill)."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# GitHub Copilot SDK on Azure
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-kusto/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-kusto
description: "Query and analyze data in Azure Data Explorer (Kusto/ADX) using KQL for log analytics, telemetry, and time series analysis. USE FOR: KQL queries, Kusto database queries, Azure Data Explorer, ADX clusters, log analytics, time series data, IoT telemetry, anomaly detection DO NOT USE FOR: SQL databases, NoSQL queries (use azure-storage), Elasticsearch, AWS analytics tools"
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Azure Data Explorer (Kusto) Query & Analytics
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-messaging/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-messaging
description: "Troubleshoot and resolve issues with Azure Messaging SDKs for Event Hubs and Service Bus. Covers connection failures, authentication errors, message processing issues, and SDK configuration problems. USE FOR: event hub SDK error, service bus SDK issue, messaging connection failure, AMQP error, event processor host issue, message lock lost, send timeout, receiver disconnected, SDK troubleshooting, azure messaging SDK, event hub consumer, service bus queue issue, topic subscription error, enable logging event hub, service bus logging, eventhub python, servicebus java, eventhub javascript, servicebus dotnet, event hub checkpoint, event hub not receiving messages, service bus dead letter DO NOT USE FOR: creating Event Hub or Service Bus resources (use azure-prepare), monitoring metrics (use azure-observability), cost analysis (use azure-cost-optimization)"
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Azure Messaging SDK Troubleshooting
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-observability/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-observability
description: "Azure Observability Services including Azure Monitor, Application Insights, Log Analytics, Alerts, and Workbooks. Provides metrics, APM, distributed tracing, KQL queries, and interactive reports. USE FOR: Azure Monitor, Application Insights, Log Analytics, Alerts, Workbooks, metrics, APM, distributed tracing, KQL queries, interactive reports, observability, monitoring dashboards. DO NOT USE FOR: instrumenting apps with App Insights SDK (use appinsights-instrumentation), querying Kusto/ADX clusters (use azure-kusto), cost analysis (use azure-cost-optimization)."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Azure Observability Services
Expand Down
4 changes: 4 additions & 0 deletions plugin/skills/azure-prepare/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
---
name: azure-prepare
description: "Default entry point for Azure application development EXCEPT cross-cloud migration — use azure-cloud-migrate instead. Analyzes your project and prepares it for Azure deployment by generating infrastructure code (Bicep/Terraform), azure.yaml, and Dockerfiles. WHEN: \"create an app\", \"build a web app\", \"create API\", \"create frontend\", \"create backend\", \"add a feature\", \"build a service\", \"develop a project\", \"modernize my code\", \"update my application\", \"add database\", \"add authentication\", \"add caching\", \"deploy to Azure\", \"host on Azure\", \"Azure with terraform\", \"Azure with azd\", \"generate azure.yaml\", \"generate Bicep\", \"generate Terraform\", \"create Azure Functions app\", \"create serverless HTTP API\", \"create function app\", \"create event-driven function\", \"create and deploy to Azure\", \"create Azure Functions and deploy\", \"create function app and deploy\"."
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
---

# Azure Prepare
Expand Down
Loading
Loading