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:
@@ -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).
|
||||
@@ -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
|
||||
@@ -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.)
|
||||
@@ -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.
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user