Create a Skill
Build a complete skill folder with SKILL.md, optional bundled assets, play wiring, and validation.
Prerequisitesโ
- FrootAI repo cloned
- Node.js 22+
- VS Code with GitHub Copilot Chat
Step 1: Choose a Skill Nameโ
Use kebab-case. The folder name must match the name field in SKILL.md frontmatter:
SKILL_NAME="fai-deploy-container-app"
Step 2: Scaffold with the CLIโ
node scripts/scaffold-primitive.js skill
Follow the prompts:
- Name:
fai-deploy-container-app(kebab-case) - Description: "Deploy a FrootAI play to Azure Container Apps with Bicep" (10โ1024 chars)
Or create manually:
mkdir -p skills/${SKILL_NAME}
Step 3: Understand Folder Structureโ
skills/
fai-deploy-container-app/
SKILL.md # Required โ the skill procedure
templates/ # Optional โ scaffolding templates
scripts/ # Optional โ automation scripts
examples/ # Optional โ example outputs
:::info Size Limit Bundled assets should total under 5MB per skill folder. :::
Step 4: Write the Frontmatterโ
SKILL.md
---
name: "fai-deploy-container-app"
description: "Deploys a FrootAI solution play to Azure Container Apps with managed identity, Key Vault integration, and health probes."
---
| Field | Required | Validation |
|---|---|---|
name | โ | Must be kebab-case, must match parent folder name exactly |
description | โ | 10โ1024 characters |
Step 5: Write the Skill Bodyโ
A good skill has numbered steps, runnable code blocks, verification checks, and a troubleshooting table. Aim for 150+ lines:
# Deploy to Azure Container Apps
## Purpose
Deploy any FrootAI solution play as a containerized service on Azure Container Apps.
## Prerequisites
- Azure CLI installed and logged in (`az login`)
- Docker installed
- Azure subscription with Contributor access
## Step 1: Set Environment Variables
โ```bash
PLAY_NUM="01"
RG="rg-frootai-${PLAY_NAME}"
LOCATION="eastus2"
โ```
## Step 2: Create Resources
โ```bash
az group create --name $RG --location $LOCATION
az acr create --name $ACR_NAME --resource-group $RG --sku Basic
โ```
## Verification
1. Health endpoint returns 200
2. Container app has 1+ running replicas
## Troubleshooting
| Problem | Cause | Fix |
|---------|-------|-----|
| Image pull fails | ACR auth not configured | Enable managed identity |
Step 6: Add Bundled Scripts (Optional)โ
Skills can bundle executable scripts:
scripts/deploy.sh
#!/usr/bin/env bash
set -euo pipefail
PLAY_NUM="${1:?Usage: deploy.sh <play-num> <play-name> <location>}"
PLAY_NAME="${2:?}"
LOCATION="${3:-eastus2}"
echo "Deploying Play ${PLAY_NUM}: ${PLAY_NAME} to ${LOCATION}..."
az group create --name "rg-frootai-${PLAY_NAME}" --location "$LOCATION" --output none
echo "โ
Deployment complete"
Step 7: Wire into a Playโ
fai-manifest.json
{
"primitives": {
"skills": ["../../skills/fai-deploy-container-app/"]
}
}
Step 8: Validateโ
npm run validate:primitives
Naming Conventionsโ
| Pattern | Example | Use Case |
|---|---|---|
fai-build-* | fai-build-rag-pipeline | Create from scratch |
fai-deploy-* | fai-deploy-container-app | Deploy to Azure |
fai-evaluate-* | fai-evaluate-rag-quality | Run evaluation |
fai-scaffold-* | fai-scaffold-play | Generate boilerplate |
Troubleshootingโ
| Problem | Fix |
|---|---|
| "name doesn't match folder" | Make name and folder identical |
| "description too short" | Expand to a full sentence (10+ chars) |
| Copilot doesn't find the skill | Move to skills/fai-your-skill/SKILL.md |
| Plugin doesn't list the skill | Use ../../skills/fai-your-skill/ with trailing slash |
See Alsoโ
- Skills Reference โ full skill specification
- Package a Plugin โ bundle skills into plugins