Skill: capacity-planning
SkillDev toolsUse when calculating the team's capacity for a sprint or period.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Skill: capacity-planning skill
What this skill tells your AI
The instructions your AI receives, as published by gonzalezpazmonica/pm-workspace in .claude/skills/capacity-planning/SKILL.md and read by ahel’s review.
Gestión completa de capacidades del equipo: consulta, cálculo y alertas de sobre-asignación.
Prerequisito: Leer primero .opencode/skills/azure-devops-queries/SKILL.md
Constantes de esta skill
TEAM_HOURS_PER_DAY=8 # horas de trabajo por día
TEAM_FOCUS_FACTOR=0.75 # 75% del tiempo es productivo
OVERLOAD_THRESHOLD=1.0 # > 100% = sobre-cargado
WARNING_THRESHOLD=0.85 # > 85% = al límite
ITERATIONS_API="$ORG_URL/$PROJECT/$TEAM/_apis/work/teamsettings/iterations"
Flujo 1 — Obtener el ID de la Iteración Actual
PAT=$(cat $AZURE_DEVOPS_PAT_FILE)
AUTH="Authorization: Basic $(echo -n ":$PAT" | base64)"
ITER_RESPONSE=$(curl -s "$ITERATIONS_API?\$timeframe=current&api-version=7.1" \
-H "$AUTH" -H "Content-Type: application/json")
ITER_ID=$(echo $ITER_RESPONSE | jq -r '.value[0].id')
ITER_NAME=$(echo $ITER_RESPONSE | jq -r '.value[0].name')
Flujo 2 — Consultar Capacidades Configuradas
CAPACITIES=$(curl -s "$ITERATIONS_API/$ITER_ID/capacities?api-version=7.1" -H "$AUTH")
echo $CAPACITIES | jq '.value[] | {persona: .teamMember.displayName, capacidadDia: .activities[0].capacityPerDay}'
Formato esperado: {displayName, uniqueName, activities[], daysOff[]}
Flujo 3 — Consultar Días Off del Equipo
TEAM_DAYS_OFF=$(curl -s "$ITERATIONS_API/$ITER_ID/teamdaysoff?api-version=7.1" -H "$AUTH")
echo $TEAM_DAYS_OFF | jq '.daysOff[] | {start, end}'
Flujo 4 — Calcular Horas Disponibles Reales
Detalle: @references/capacity-formula.md
Algoritmo:
- Contar días hábiles entre inicio-fin del sprint
- Restar días off (persona + equipo)
- Aplicar factor de foco (75%)
Fórmula: horas_disponibles = (dias_habiles - dias_off) * horas_dia * factor_foco
Flujo 5 — Calcular Utilización vs Carga Asignada
Obtener RemainingWork por persona desde WIQL y cruzar con capacidad calculada:
Utilización = sum(RemainingWork por persona) / horas_disponibles_por_persona
Umbrales:
- 🔴 > 100% — SOBRE-CARGADO
- 🟡 85-100% — AL LÍMITE
- 🟢 < 85% — OK
- ⚪ Sin datos — SIN CONFIGURACIÓN
Flujo 6 — Actualizar Capacidades en Azure DevOps
curl -s -X PATCH "$ITERATIONS_API/$ITER_ID/capacities/$TEAM_MEMBER_ID?api-version=7.1" \
-H "$AUTH" -H "Content-Type: application/json" \
-d '{"activities": [{"name": "Development", "capacityPerDay": 6}], "daysOff": []}'
⚠️ Confirmar con usuario antes de ejecutar.
Errores Frecuentes
| Error | Solución |
|---|---|
404 en capacities | Usar team ID en lugar de nombre |
| Capacidades vacías | Activar sprint en Team Settings |
| Festivos ignorados | Añadir manualmente via API o UI |
Referencias
references/capacity-formula.md— Fórmulas de cálculoreferences/capacity-api.md— Estructura respuesta API- Sprint management:
../sprint-management/SKILL.md - Comando:
/report-capacity
Signals
- GitHub stars
- 50
- Forks
- 12
- Last commit
- Sep 2026
Others that do the same job
Advanced
- Catalog kind
- skill
- Gateway key
capacity-planning-gonzalezpazmonica- Source
- github.com/gonzalezpazmonica/pm-workspace