.github/skills/skill-creator/SKILL.md
Guide for creating effective skills for AI coding agents working with Azure SDKs and Microsoft Foundry services. Use when creating new skills or updating existing skills.
npx skillsauth add microsoft/skills skill-creatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
4 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Guide for creating skills that extend AI agent capabilities, with emphasis on Azure SDKs and Microsoft Foundry.
Required Context: When creating SDK or API skills, users MUST provide the SDK package name, documentation URL, or repository reference for the skill to be based on.
Skills are modular knowledge packages that transform general-purpose agents into specialized experts:
The context window is a shared resource. Challenge each piece: "Does this justify its token cost?"
Default assumption: Agents are already capable. Only add what they don't already know.
Azure SDKs change constantly. Skills should instruct agents to verify documentation:
## Before Implementation
Search `microsoft-docs` MCP for current API patterns:
- Query: "[SDK name] [operation] python"
- Verify: Parameters match your installed SDK version
Match specificity to task fragility:
| Freedom | When | Example | |---------|------|---------| | High | Multiple valid approaches | Text guidelines | | Medium | Preferred pattern with variation | Pseudocode | | Low | Must be exact | Specific scripts |
Skills load in three levels:
Keep SKILL.md under 500 lines. Split into reference files when approaching this limit.
skill-name/
├── SKILL.md (required)
│ ├── YAML frontmatter (name, description)
│ └── Markdown instructions
└── Bundled Resources (optional)
├── scripts/ — Executable code
├── references/ — Documentation loaded as needed
└── assets/ — Output resources (templates, images)
name and description. The description is the trigger mechanism.| Type | Purpose | When to Include |
|------|---------|-----------------|
| scripts/ | Deterministic operations | Same code rewritten repeatedly |
| references/ | Detailed patterns | API docs, schemas, detailed guides |
| assets/ | Output resources | Templates, images, boilerplate |
Don't include: README.md, CHANGELOG.md, installation guides.
When creating skills for Azure SDKs, follow these patterns consistently.
Follow this structure (based on existing Azure SDK skills):
# SDK Namepip install, npm install, etc.DefaultAzureCredential/references/*.mdAlways use DefaultAzureCredential:
# Python
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
client = ServiceClient(endpoint, credential)
// C#
var credential = new DefaultAzureCredential();
var client = new ServiceClient(new Uri(endpoint), credential);
// Java
TokenCredential credential = new DefaultAzureCredentialBuilder().build();
ServiceClient client = new ServiceClientBuilder()
.endpoint(endpoint)
.credential(credential)
.buildClient();
// TypeScript
import { DefaultAzureCredential } from "@azure/identity";
const credential = new DefaultAzureCredential();
const client = new ServiceClient(endpoint, credential);
Never hardcode credentials. Use environment variables.
Azure SDKs use consistent verbs across all languages:
| Verb | Behavior |
|------|----------|
| create | Create new; fail if exists |
| upsert | Create or update |
| get | Retrieve; error if missing |
| list | Return collection |
| delete | Succeed even if missing |
| begin | Start long-running operation |
See references/azure-sdk-patterns.md for detailed patterns including:
ItemPaged, LROPoller, context managers, Sphinx docstringsResponse<T>, Pageable<T>, Operation<T>, mocking supportPagedIterable/PagedFlux, Reactor typesPagedAsyncIterableIterator, AbortSignal, browser considerations---
name: skill-creator
description: |
Azure AI Example SDK for Python. Use for [specific service features].
Triggers: "example service", "create example", "list examples".
---
# Azure AI Example SDK
## Installation
\`\`\`bash
pip install azure-ai-example
\`\`\`
## Environment Variables
\`\`\`bash
AZURE_EXAMPLE_ENDPOINT=https://<resource>.example.azure.com
\`\`\`
## Authentication
\`\`\`python
from azure.identity import DefaultAzureCredential
from azure.ai.example import ExampleClient
credential = DefaultAzureCredential()
client = ExampleClient(
endpoint=os.environ["AZURE_EXAMPLE_ENDPOINT"],
credential=credential
)
\`\`\`
## Core Workflow
\`\`\`python
# Create
item = client.create_item(name="example", data={...})
# List (pagination handled automatically)
for item in client.list_items():
print(item.name)
# Long-running operation
poller = client.begin_process(item_id)
result = poller.result()
# Cleanup
client.delete_item(item_id)
\`\`\`
## Reference Files
| File | Contents |
|------|----------|
| [references/tools.md](references/tools.md) | Tool integrations |
| [references/streaming.md](references/streaming.md) | Event streaming patterns |
.github/skills/<skill-name>/skills/<language>/<category>/Before creating any SDK skill, the user MUST provide:
| Required | Example | Purpose |
|----------|---------|---------|
| SDK Package | azure-ai-agents, Azure.AI.OpenAI | Identifies the exact SDK |
| Documentation URL | https://learn.microsoft.com/en-us/azure/ai-services/... | Primary source of truth |
| Repository (optional) | Azure/azure-sdk-for-python | For code patterns |
Prompt the user if not provided:
To create this skill, I need:
1. The SDK package name (e.g., azure-ai-projects)
2. The Microsoft Learn documentation URL or GitHub repo
3. The target language (py/dotnet/ts/java)
Search official docs first:
# Use microsoft-docs MCP to get current API patterns
# Query: "[SDK name] [operation] [language]"
# Verify: Parameters match the latest SDK version
Gather concrete examples:
| Example Task | Reusable Resource |
|--------------|-------------------|
| Same auth code each time | Code example in SKILL.md |
| Complex streaming patterns | references/streaming.md |
| Tool configurations | references/tools.md |
| Error handling patterns | references/error-handling.md |
Skills are organized by language and product area in the skills/ directory via symlinks.
Product Area Categories:
| Category | Description | Examples |
|----------|-------------|----------|
| foundry | AI Foundry, agents, projects, inference | azure-ai-agents-py, azure-ai-projects-py |
| data | Storage, Cosmos DB, Tables, Data Lake | azure-cosmos-py, azure-storage-blob-py |
| messaging | Event Hubs, Service Bus, Event Grid | azure-eventhub-py, azure-servicebus-py |
| monitoring | OpenTelemetry, App Insights, Query | azure-monitor-opentelemetry-py |
| identity | Authentication, DefaultAzureCredential | azure-identity-py |
| security | Key Vault, secrets, keys, certificates | azure-keyvault-py |
| integration | API Management, App Configuration | azure-appconfiguration-py |
| compute | Batch, ML compute | azure-compute-batch-java |
| container | Container Registry, ACR | azure-containerregistry-py |
Determine the category based on:
data, Event Hubs → messaging)foundry)Location: .github/skills/<skill-name>/SKILL.md
Naming convention:
azure-<service>-<subservice>-<language>azure-ai-agents-py, azure-cosmos-java, azure-storage-blob-tsFor Azure SDK skills:
microsoft-docs MCP for current API patternsWrite bundled resources first, then SKILL.md.
Frontmatter:
---
name: skill-name-py
description: |
Azure Service SDK for Python. Use for [specific features].
Triggers: "service name", "create resource", "specific operation".
---
After creating the skill in .github/skills/, create a symlink in the appropriate category:
# Pattern: skills/<language>/<category>/<short-name> -> ../../../.github/skills/<full-skill-name>
# Example for azure-ai-agents-py in python/foundry:
cd skills/python/foundry
ln -s ../../../.github/skills/azure-ai-agents-py agents
# Example for azure-cosmos-db-py in python/data:
cd skills/python/data
ln -s ../../../.github/skills/azure-cosmos-db-py cosmos-db
Symlink naming:
agents, cosmos, blob)azure- prefix and language suffixVerify the symlink:
ls -la skills/python/foundry/agents
# Should show: agents -> ../../../.github/skills/azure-ai-agents-py
Every skill MUST have acceptance criteria and test scenarios.
Location: .github/skills/<skill-name>/references/acceptance-criteria.md
Source materials (in priority order):
microsoft-docs MCP)Format:
# Acceptance Criteria: <skill-name>
**SDK**: `package-name`
**Repository**: https://github.com/Azure/azure-sdk-for-<language>
**Purpose**: Skill testing acceptance criteria
---
## 1. Correct Import Patterns
### 1.1 Client Imports
#### ✅ CORRECT: Main Client
\`\`\`python
from azure.ai.mymodule import MyClient
from azure.identity import DefaultAzureCredential
\`\`\`
#### ❌ INCORRECT: Wrong Module Path
\`\`\`python
from azure.ai.mymodule.models import MyClient # Wrong - Client is not in models
\`\`\`
## 2. Authentication Patterns
#### ✅ CORRECT: DefaultAzureCredential
\`\`\`python
credential = DefaultAzureCredential()
client = MyClient(endpoint, credential)
\`\`\`
#### ❌ INCORRECT: Hardcoded Credentials
\`\`\`python
client = MyClient(endpoint, api_key="hardcoded") # Security risk
\`\`\`
Critical patterns to document:
.aio modules)Location: tests/scenarios/<skill-name>/scenarios.yaml
config:
model: gpt-4
max_tokens: 2000
temperature: 0.3
scenarios:
- name: basic_client_creation
prompt: |
Create a basic example using the Azure SDK.
Include proper authentication and client initialization.
expected_patterns:
- "DefaultAzureCredential"
- "MyClient"
forbidden_patterns:
- "api_key="
- "hardcoded"
tags:
- basic
- authentication
mock_response: |
import os
from azure.identity import DefaultAzureCredential
from azure.ai.mymodule import MyClient
credential = DefaultAzureCredential()
client = MyClient(
endpoint=os.environ["AZURE_ENDPOINT"],
credential=credential
)
# ... rest of working example
Scenario design principles:
expected_patterns — patterns that MUST appearforbidden_patterns — common mistakes that must NOT appearmock_response — complete, working code that passes all checkstags — for filtering (basic, async, streaming, tools)cd tests
pnpm install
# Check skill is discovered
pnpm harness --list
# Run in mock mode (fast, deterministic)
pnpm harness <skill-name> --mock --verbose
# Run with Ralph Loop (iterative improvement)
pnpm harness <skill-name> --ralph --mock --max-iterations 5 --threshold 85
Success criteria:
After creating the skill:
Update README.md — Add the skill to the appropriate language section in the Skill Catalog
> N skills in...)Browse all N skills)> N skills • suffix: -py)<summary><strong>Foundry & AI</strong> (N skills)</summary>)**N skills with N test scenarios**)Regenerate GitHub Pages data — Run the extraction script to update the docs site
cd docs-site && npx tsx scripts/extract-skills.ts
This updates docs-site/src/data/skills.json which feeds the Astro-based docs site.
Then rebuild the docs site:
cd docs-site && npm run build
This outputs to docs/ which is served by GitHub Pages.
Verify AGENTS.md — Ensure the skill count is accurate
# SDK Name
## Quick Start
[Minimal example]
## Advanced Features
- **Streaming**: See [references/streaming.md](references/streaming.md)
- **Tools**: See [references/tools.md](references/tools.md)
azure-service-skill/
├── SKILL.md (overview + language selection)
└── references/
├── python.md
├── dotnet.md
├── java.md
└── typescript.md
azure-ai-agents/
├── SKILL.md (core workflow)
└── references/
├── tools.md
├── streaming.md
├── async-patterns.md
└── error-handling.md
| Reference | Contents |
|-----------|----------|
| references/workflows.md | Sequential and conditional workflows |
| references/output-patterns.md | Templates and examples |
| references/azure-sdk-patterns.md | Language-specific Azure SDK patterns |
| Don't | Why | |-------|-----| | Create skill without SDK context | Users must provide package name/docs URL | | Put "when to use" in body | Body loads AFTER triggering | | Hardcode credentials | Security risk | | Skip authentication section | Agents will improvise poorly | | Use outdated SDK patterns | APIs change; search docs first | | Include README.md | Agents don't need meta-docs | | Deeply nest references | Keep one level deep | | Skip acceptance criteria | Skills without tests can't be validated | | Skip symlink categorization | Skills won't be discoverable by category | | Use wrong import paths | Azure SDKs have specific module structures |
Before completing a skill:
Prerequisites:
microsoft-docs MCPSkill Creation:
DefaultAzureCredentialCategorization:
.github/skills/<skill-name>/skills/<language>/<category>/<short-name>../../../.github/skills/<skill-name>Testing:
references/acceptance-criteria.md created with correct/incorrect patternstests/scenarios/<skill-name>/scenarios.yaml createdpnpm harness <skill> --mock)Documentation:
microsoft-docs MCP for current APIstools
KQL language expertise for writing correct, efficient Kusto Query Language queries. Covers syntax gotchas, join patterns, dynamic types, datetime pitfalls, regex patterns, serialization, memory management, result-size discipline, and advanced functions (geo, vector, graph). USE THIS SKILL whenever writing, debugging, or reviewing KQL queries — even simple ones — because the gotchas section prevents the most common errors that waste tool calls and cause expensive retry cascades. Trigger on: KQL, Kusto, ADX, Azure Data Explorer, Fabric Real-Time Intelligence, EventHouse, Log Analytics, log analysis, data exploration, time series, anomaly detection, summarize, where clause, join, extend, project, let statement, parse operator, extract function, any mention of pipe-forward query syntax.
development
Deploy, evaluate, and manage Foundry agents end-to-end: Docker build, ACR push, hosted/prompt agent create, container start, batch eval, prompt optimization, prompt optimizer workflows, agent.yaml, dataset curation from traces. USE FOR: deploy agent to Foundry, hosted agent, create agent, invoke agent, evaluate agent, run batch eval, optimize prompt, improve prompt, prompt optimization, prompt optimizer, improve agent instructions, optimize agent instructions, optimize system prompt, deploy model, Foundry project, RBAC, role assignment, permissions, quota, capacity, region, troubleshoot agent, deployment failure, create dataset from traces, dataset versioning, eval trending, create AI Services, Cognitive Services, create Foundry resource, provision resource, knowledge index, agent monitoring, customize deployment, onboard, availability. DO NOT USE FOR: Azure Functions, App Service, general Azure deploy (use azure-deploy), general Azure prep (use azure-prepare).
testing
Pre-deployment validation for Azure readiness. Run deep checks on configuration, infrastructure (Bicep or Terraform), RBAC role assignments, managed identity permissions, and prerequisites before deploying. WHEN: validate my app, check deployment readiness, run preflight checks, verify configuration, check if ready to deploy, validate azure.yaml, validate Bicep, test before deploying, troubleshoot deployment errors, validate Azure Functions, validate function app, validate serverless deployment, verify RBAC roles, check role assignments, review managed identity permissions, what-if analysis, validate Container Apps deployment.
testing
Check/manage Azure quotas and usage across providers. For deployment planning, capacity validation, region selection. WHEN: "check quotas", "service limits", "current usage", "request quota increase", "quota exceeded", "validate capacity", "regional availability", "provisioning limits", "vCPU limit", "how many vCPUs available in my subscription".