Skip to main content

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."
---
FieldRequiredValidation
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โ€‹

PatternExampleUse Case
fai-build-*fai-build-rag-pipelineCreate from scratch
fai-deploy-*fai-deploy-container-appDeploy to Azure
fai-evaluate-*fai-evaluate-rag-qualityRun evaluation
fai-scaffold-*fai-scaffold-playGenerate boilerplate

Troubleshootingโ€‹

ProblemFix
"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 skillMove to skills/fai-your-skill/SKILL.md
Plugin doesn't list the skillUse ../../skills/fai-your-skill/ with trailing slash

See Alsoโ€‹