feat: scaffold del sistema de skills

Estructura inicial de skills organizadas por categoría (analysis, coding,
communication, devops, system). Incluye README con convenciones de formato
y directorio por skill con sus prompts. Las skills son plantillas de prompts
reutilizables que los agentes pueden invocar para tareas especializadas.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-07 17:16:52 +00:00
parent 8d89a762fb
commit 6ae2e6be03
10 changed files with 496 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
# Skills
Sistema de skills reutilizables para agentes. Las skills son paquetes de instrucciones, scripts y recursos que guian al agente para completar tareas complejas multi-paso.
## Diferencia entre Tools y Skills
| | Tools | Skills |
|---|---|---|
| **Nivel** | Funcion atomica | Flujo multi-paso |
| **Invocacion** | Function calling del LLM | El agente busca y carga bajo demanda |
| **Ejemplo** | `ssh_command`, `http_get` | "deploy-service", "log-analyzer" |
| **Ubicacion** | `tools/<nombre>/` | `skills/<categoria>/<nombre>/` |
## Estructura de una skill
```
skills/<categoria>/<nombre>/
├── SKILL.md ← obligatorio (frontmatter YAML + instrucciones)
├── scripts/ ← opcional, codigo ejecutable
├── references/ ← opcional, docs de referencia
├── templates/ ← opcional, plantillas
└── assets/ ← opcional, archivos estaticos
```
## SKILL.md — formato
```yaml
---
name: nombre-skill
description: >
Descripcion de que hace y cuando activarse.
---
# Instrucciones
Cuerpo markdown con instrucciones completas (< 500 lineas idealmente).
```
## Carga progresiva
1. **Metadata** (name + description) — siempre en contexto del agente
2. **Instrucciones** (cuerpo SKILL.md) — cuando la skill se activa
3. **Recursos** (scripts/, references/, etc.) — bajo demanda
## Categorias
| Categoria | Descripcion |
|-----------|-------------|
| `devops/` | Operaciones, deploy, infraestructura |
| `analysis/` | Analisis de datos, logs, metricas |
| `communication/` | Notificaciones, reportes, mensajeria |
| `coding/` | Desarrollo, code review, refactoring |
| `system/` | Administracion de sistemas, monitoreo |
## Crear una nueva skill
1. Crear directorio: `skills/<categoria>/<nombre>/`
2. Crear `SKILL.md` con frontmatter YAML (name + description) y cuerpo markdown
3. Opcionalmente agregar scripts/, references/, templates/, assets/
4. La skill estara disponible automaticamente para agentes con `skills.enabled: true`
Ver policy completa en `.claude/policies/create_skill.md` (pendiente).
+70
View File
@@ -0,0 +1,70 @@
---
name: log-analyzer
description: >
Analiza logs de servicios para encontrar errores, patrones y anomalias.
Usa esta skill cuando el usuario pida revisar logs, buscar errores en un
servicio, diagnosticar problemas, o entender que paso en un periodo de tiempo.
Funciona con journalctl, archivos de log, y logs de Docker.
---
# Analisis de logs
## Prerequisitos
- Tool `ssh_command` habilitada (para logs remotos)
- Acceso al servidor donde estan los logs
## Flujo
### 1. Identificar fuente de logs
Preguntar o inferir del contexto:
- **Servicio**: nombre del servicio o contenedor
- **Periodo**: rango de tiempo a analizar (default: ultima hora)
- **Servidor**: host donde corren los logs
- **Tipo**: systemd (journalctl), archivo (/var/log/...), o Docker
### 2. Obtener logs
Segun el tipo de fuente:
**Systemd (journalctl):**
```bash
ssh_command: "journalctl -u <servicio> --since '<periodo>' --no-pager"
```
**Archivo de log:**
```bash
ssh_command: "tail -n 500 /var/log/<servicio>/<archivo>.log"
# o con filtro de tiempo:
ssh_command: "awk '/2024-01-15 14:00/,/2024-01-15 15:00/' /var/log/<servicio>.log"
```
**Docker:**
```bash
ssh_command: "docker logs --since <periodo> <contenedor> 2>&1 | tail -500"
```
### 3. Analisis
Buscar en los logs:
- **Errores**: lineas con ERROR, FATAL, panic, exception, traceback
- **Warnings**: lineas con WARN, warning
- **Patrones repetitivos**: errores que se repiten (agrupar por tipo)
- **Timestamps**: cuando empezaron los problemas
- **Correlaciones**: errores que ocurren juntos o en secuencia
### 4. Reporte
Presentar al usuario:
1. **Resumen**: estado general (saludable / con problemas / critico)
2. **Errores encontrados**: listado agrupado por tipo con conteo
3. **Timeline**: cuando empezaron y si siguen ocurriendo
4. **Causa probable**: si se puede inferir del contexto
5. **Recomendacion**: accion sugerida (restart, fix config, escalar, etc.)
## Tips
- Si los logs son muy extensos, obtener primero un conteo de errores y luego los detalles de los mas frecuentes
- Usar `grep -c` para contar antes de traer lineas completas
- Para logs grandes, usar `tail` o rangos de tiempo acotados
+96
View File
@@ -0,0 +1,96 @@
---
name: code-review
description: >
Revisa codigo fuente buscando bugs, problemas de seguridad, y mejoras.
Usa esta skill cuando el usuario pida revisar un archivo, un diff, o
cambios recientes en un repositorio. Tambien cuando pregunte "que opinas
de este codigo" o "revisa esto".
---
# Code review
## Prerequisitos
- Tool `ssh_command` o `read_file` para acceder al codigo
- Contexto sobre el lenguaje y framework del proyecto
## Flujo
### 1. Obtener el codigo
Segun el contexto:
**Archivo especifico:**
```bash
read_file: "<ruta>"
```
**Diff de cambios recientes:**
```bash
ssh_command: "cd <repo> && git diff HEAD~1"
# o:
ssh_command: "cd <repo> && git diff --staged"
```
**PR o branch:**
```bash
ssh_command: "cd <repo> && git diff main..<branch>"
```
### 2. Analisis
Revisar el codigo buscando:
**Bugs y errores logicos:**
- Variables no inicializadas o no usadas
- Condiciones de carrera (acceso concurrente sin mutex)
- Nil/null pointer dereferences
- Off-by-one errors
- Resource leaks (archivos, conexiones no cerradas)
**Seguridad (OWASP top 10):**
- Inyeccion SQL o de comandos
- XSS, CSRF
- Secretos hardcodeados
- Permisos demasiado amplios
- Input no validado
**Calidad:**
- Funciones demasiado largas (> 50 lineas)
- Duplicacion de codigo
- Nombres poco claros
- Complejidad innecesaria
- Errores silenciados (catch vacio, err ignorado)
**Estilo y convenciones:**
- Consistencia con el resto del codebase
- Patrones del proyecto (ej: pure core / impure shell en este repo)
### 3. Reporte
Formato del review:
```markdown
## Code Review — <archivo o scope>
### Critico
- **[L42]** SQL injection: el parametro `userID` se concatena directamente en la query
- **[L78]** Resource leak: `file` se abre pero nunca se cierra
### Mejoras sugeridas
- **[L15-20]** Esta logica se repite en handler.go:45 — considerar extraer funcion
- **[L33]** El error de `json.Unmarshal` se ignora silenciosamente
### Positivo
- Buena separacion de responsabilidades
- Tests cubren los casos principales
### Resumen
X issues criticos, Y mejoras sugeridas. Prioridad: resolver los criticos antes de merge.
```
### 4. Seguimiento
Si el usuario quiere aplicar las sugerencias:
- Generar los patches concretos para cada issue
- Aplicar cambios uno por uno con confirmacion
@@ -0,0 +1,84 @@
---
name: daily-report
description: >
Genera y envia un reporte diario con el estado de servicios, metricas clave
y eventos relevantes. Usa esta skill cuando el usuario pida un resumen del
dia, estado general de los sistemas, o un reporte periodico. Tambien puede
activarse automaticamente via schedule.
---
# Reporte diario
## Prerequisitos
- Tool `ssh_command` para consultar estado de servicios
- Tool `http_get` para health checks
- Tool `matrix_send` para enviar el reporte a una room
## Flujo
### 1. Recopilar datos
Ejecutar en paralelo cuando sea posible:
**Estado de servicios:**
```bash
ssh_command: "systemctl list-units --type=service --state=running --no-pager | grep -E '<servicios>'"
ssh_command: "systemctl list-units --type=service --state=failed --no-pager"
```
**Uso de recursos:**
```bash
ssh_command: "df -h / | tail -1"
ssh_command: "free -h | grep Mem"
ssh_command: "uptime"
```
**Errores recientes:**
```bash
ssh_command: "journalctl --priority=err --since '24 hours ago' --no-pager | wc -l"
ssh_command: "journalctl --priority=err --since '24 hours ago' --no-pager | tail -10"
```
**Health checks HTTP:**
```
http_get: "<url>/health" para cada servicio con endpoint
```
### 2. Formatear reporte
Generar markdown con:
```markdown
## Reporte diario — <fecha>
### Estado de servicios
| Servicio | Estado | Uptime |
|----------|--------|--------|
| servicio-1 | OK | 5d 3h |
| servicio-2 | FAILED | - |
### Recursos
- **Disco**: 45% usado (55GB libres)
- **Memoria**: 3.2GB / 8GB (40%)
- **Load average**: 0.5, 0.3, 0.2
### Errores (ultimas 24h)
- Total: 15 errores
- Mas frecuente: "connection timeout" (8 veces)
### Alertas
- servicio-2 esta caido desde las 14:30
- Disco al 85% en /var/log (limpiar)
```
### 3. Enviar
Enviar el reporte formateado a la room configurada o a la room donde fue solicitado.
## Personalizacion
El reporte puede adaptarse segun:
- Lista de servicios a monitorear (del config del agente)
- Servidores a consultar (de ssh.allowed_targets)
- Umbrales de alerta (disco > 80%, memoria > 90%, etc.)
+89
View File
@@ -0,0 +1,89 @@
---
name: deploy-service
description: >
Despliega un servicio en un servidor remoto via SSH. Usa esta skill cuando
el usuario pida hacer deploy, actualizar un servicio, o subir cambios a
produccion/staging. Cubre: pull de codigo, build, restart del servicio,
y verificacion post-deploy.
---
# Deploy de servicio via SSH
## Prerequisitos
- El agente debe tener la tool `ssh_command` habilitada
- El servidor destino debe estar configurado en `ssh.allowed_targets`
- El usuario debe tener permisos de deploy (verificar roles si RBAC esta activo)
## Flujo
### 1. Confirmar parametros
Antes de ejecutar, confirmar con el usuario:
- **Servicio**: nombre del servicio a desplegar
- **Servidor**: host destino (debe estar en allowed_targets)
- **Branch/tag**: rama o tag a desplegar (default: main)
- **Ruta**: directorio del servicio en el servidor
### 2. Pre-checks
Ejecutar en el servidor remoto:
```bash
# Verificar conectividad
ssh_command: "echo 'OK'" en el host destino
# Verificar que el directorio existe
ssh_command: "test -d /path/to/service && echo 'exists'"
# Verificar estado actual del servicio
ssh_command: "systemctl is-active nombre-servicio || true"
```
Si algun pre-check falla, informar al usuario y no continuar.
### 3. Deploy
Ejecutar secuencialmente:
```bash
# Pull de cambios
ssh_command: "cd /path/to/service && git fetch origin && git checkout <branch> && git pull"
# Build (si aplica)
ssh_command: "cd /path/to/service && make build"
# o: "cd /path/to/service && go build -o bin/service ./cmd/..."
# o: "cd /path/to/service && docker-compose build"
# Restart del servicio
ssh_command: "sudo systemctl restart nombre-servicio"
```
### 4. Verificacion post-deploy
```bash
# Esperar 5 segundos para que el servicio arranque
ssh_command: "sleep 5 && systemctl is-active nombre-servicio"
# Verificar logs recientes (buscar errores)
ssh_command: "journalctl -u nombre-servicio --since '1 min ago' --no-pager | tail -20"
# Health check HTTP si aplica
http_get: "http://servidor:puerto/health"
```
### 5. Reportar resultado
Informar al usuario:
- Estado del deploy (exitoso/fallido)
- Version desplegada (commit hash o tag)
- Estado del servicio post-deploy
- Cualquier warning en los logs
## Rollback
Si el deploy falla o el servicio no arranca:
```bash
ssh_command: "cd /path/to/service && git checkout <commit-anterior>"
ssh_command: "sudo systemctl restart nombre-servicio"
```
Informar al usuario que se hizo rollback y el motivo.
+95
View File
@@ -0,0 +1,95 @@
---
name: health-check
description: >
Verifica la salud de uno o varios servicios y servidores. Usa esta skill
cuando el usuario pregunte si algo esta funcionando, si un servicio esta
arriba, o pida un chequeo de salud general. Tambien util despues de un
deploy o un incidente.
---
# Health check de servicios
## Prerequisitos
- Tool `ssh_command` habilitada
- Tool `http_get` para endpoints HTTP
- Servidores en `ssh.allowed_targets`
## Flujo
### 1. Determinar alcance
Inferir del contexto del usuario:
- **Servicio especifico**: checkear solo ese servicio
- **Servidor especifico**: checkear todos los servicios en ese servidor
- **General**: checkear todos los servidores y servicios conocidos
### 2. Checks basicos por servidor
Para cada servidor:
```bash
# Conectividad
ssh_command: "echo OK"
# Uptime y load
ssh_command: "uptime"
# Disco
ssh_command: "df -h / /var /tmp 2>/dev/null | tail -n +2"
# Memoria
ssh_command: "free -m | grep -E 'Mem|Swap'"
# Procesos zombie o en estado D
ssh_command: "ps aux | awk '{if ($8 ~ /Z|D/) print}' | head -5"
```
### 3. Checks por servicio
Para cada servicio:
```bash
# Estado systemd
ssh_command: "systemctl is-active <servicio>"
# Tiempo activo
ssh_command: "systemctl show <servicio> --property=ActiveEnterTimestamp --value"
# Puertos abiertos
ssh_command: "ss -tlnp | grep <puerto>"
# Ultimos errores
ssh_command: "journalctl -u <servicio> --priority=err --since '1 hour ago' --no-pager | tail -5"
```
**Health check HTTP** (si tiene endpoint):
```
http_get: "http://<host>:<puerto>/health"
```
### 4. Evaluar y reportar
Clasificar cada componente:
| Estado | Criterio |
|--------|----------|
| OK | Servicio activo, sin errores recientes, recursos normales |
| WARNING | Servicio activo pero con errores recientes, o recursos > 80% |
| CRITICAL | Servicio caido, disco lleno, o memoria agotada |
Reportar al usuario con formato claro:
```
Health Check — <fecha hora>
[OK] servidor-1: load 0.3, disco 45%, mem 40%
[OK] servicio-a: activo (uptime 5d), 0 errores
[WARNING] servicio-b: activo, 3 errores en ultima hora
[CRITICAL] servidor-2: no responde SSH
```
### 5. Recomendaciones
Si hay problemas, sugerir acciones:
- Servicio caido → "Intentar restart: `systemctl restart <servicio>`"
- Disco lleno → "Limpiar logs antiguos o expandir disco"
- Memoria alta → "Revisar procesos con mayor consumo"
- Errores frecuentes → "Revisar logs con la skill log-analyzer"