docs: add Spanish (es) translation (#2095)

Adds a complete Spanish translation of the ECC documentation under
docs/es/, mirroring the Turkish (docs/tr/) translation in scope.
141 files covering agents, commands, rules, skills, contexts, examples,
and core docs. Updates root README.md with the Spanish language link.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Santiago González Siordia
2026-06-07 01:26:42 -04:00
committed by GitHub
parent 28b78dd7bf
commit ac0f11c640
143 changed files with 28639 additions and 3 deletions
+66
View File
@@ -0,0 +1,66 @@
---
description: Detectar el sistema de build del proyecto y corregir incrementalmente errores de build/tipos con cambios mínimos y seguros.
---
# Build y Corrección
Corregir incrementalmente errores de build y de tipos con cambios mínimos y seguros.
## Paso 1: Detectar el Sistema de Build
Identificar la herramienta de build del proyecto y ejecutar el build:
| Indicador | Comando de Build |
|-----------|-----------------|
| `package.json` con script `build` | `npm run build` o `pnpm build` |
| `tsconfig.json` (solo TypeScript) | `npx tsc --noEmit` |
| `Cargo.toml` | `cargo build 2>&1` |
| `pom.xml` | `mvn compile` |
| `build.gradle` | `./gradlew compileJava` |
| `go.mod` | `go build ./...` |
| `pyproject.toml` | `python -m compileall -q .` o `mypy .` |
## Paso 2: Parsear y Agrupar Errores
1. Ejecutar el comando de build y capturar stderr
2. Agrupar errores por ruta de archivo
3. Ordenar por orden de dependencia (corregir imports/tipos antes que errores de lógica)
4. Contar errores totales para seguimiento del progreso
## Paso 3: Bucle de Corrección (Un Error a la Vez)
Para cada error:
1. **Leer el archivo** — Usar la herramienta Read para ver el contexto del error (10 líneas alrededor del error)
2. **Diagnosticar** — Identificar la causa raíz (import faltante, tipo incorrecto, error de sintaxis)
3. **Corregir mínimamente** — Usar la herramienta Edit para el cambio más pequeño que resuelva el error
4. **Re-ejecutar el build** — Verificar que el error desapareció y que no se introdujeron nuevos errores
5. **Continuar** — Seguir con los errores restantes
## Paso 4: Salvaguardas
Parar y preguntar al usuario si:
- Una corrección introduce **más errores de los que resuelve**
- El **mismo error persiste después de 3 intentos** (probablemente un problema más profundo)
- La corrección requiere **cambios arquitectónicos** (no es solo una corrección de build)
- Los errores de build provienen de **dependencias faltantes** (se necesita `npm install`, `cargo add`, etc.)
## Paso 5: Resumen
Mostrar resultados:
- Errores corregidos (con rutas de archivos)
- Errores restantes (si los hay)
- Nuevos errores introducidos (debe ser cero)
- Próximos pasos sugeridos para problemas no resueltos
## Estrategias de Recuperación
| Situación | Acción |
|-----------|--------|
| Módulo/import faltante | Verificar si el paquete está instalado; sugerir comando de instalación |
| Incompatibilidad de tipos | Leer ambas definiciones de tipo; corregir el tipo más restrictivo |
| Dependencia circular | Identificar el ciclo con el grafo de imports; sugerir extracción |
| Conflicto de versiones | Verificar `package.json` / `Cargo.toml` para restricciones de versión |
| Mala configuración de herramienta de build | Leer el archivo de configuración; comparar con valores por defecto funcionales |
Corregir un error a la vez por seguridad. Preferir diffs mínimos sobre refactorización.
+78
View File
@@ -0,0 +1,78 @@
---
description: Crear, verificar o listar puntos de control del flujo de trabajo después de ejecutar verificaciones.
---
# Comando Checkpoint
Crear o verificar un punto de control en tu flujo de trabajo.
## Uso
`/checkpoint [create|verify|list] [nombre]`
## Crear Checkpoint
Al crear un checkpoint:
1. Ejecutar `/verify quick` para asegurarse de que el estado actual está limpio
2. Crear un git stash o commit con el nombre del checkpoint
3. Registrar el checkpoint en `.claude/checkpoints.log`:
```bash
echo "$(date +%Y-%m-%d-%H:%M) | $CHECKPOINT_NAME | $(git rev-parse --short HEAD)" >> .claude/checkpoints.log
```
4. Reportar que el checkpoint fue creado
## Verificar Checkpoint
Al verificar contra un checkpoint:
1. Leer el checkpoint desde el log
2. Comparar el estado actual con el checkpoint:
- Archivos añadidos desde el checkpoint
- Archivos modificados desde el checkpoint
- Tasa de pruebas pasadas ahora vs entonces
- Cobertura ahora vs entonces
3. Reportar:
```
COMPARACIÓN DE CHECKPOINT: $NAME
============================
Archivos cambiados: X
Pruebas: +Y pasaron / -Z fallaron
Cobertura: +X% / -Y%
Build: [PASS/FAIL]
```
## Listar Checkpoints
Mostrar todos los checkpoints con:
- Nombre
- Marca de tiempo
- SHA de git
- Estado (actual, detrás, adelante)
## Flujo de Trabajo
Flujo típico de checkpoints:
```
[Inicio] --> /checkpoint create "feature-start"
|
[Implementar] --> /checkpoint create "core-done"
|
[Probar] --> /checkpoint verify "core-done"
|
[Refactorizar] --> /checkpoint create "refactor-done"
|
[PR] --> /checkpoint verify "feature-start"
```
## Argumentos
$ARGUMENTS:
- `create <nombre>` - Crear checkpoint con nombre
- `verify <nombre>` - Verificar contra checkpoint con nombre
- `list` - Mostrar todos los checkpoints
- `clear` - Eliminar checkpoints antiguos (conserva los últimos 5)
+289
View File
@@ -0,0 +1,289 @@
---
description: Revisión de código — cambios locales no confirmados o PR de GitHub (pasa número/URL del PR para modo PR)
argument-hint: [número-pr | url-pr | vacío para revisión local]
---
# Revisión de Código
> Modo de revisión de PR adaptado de PRPs-agentic-eng por Wirasm. Parte de la serie de flujos de trabajo PRP.
**Entrada**: $ARGUMENTS
---
## Selección de Modo
Si `$ARGUMENTS` contiene un número de PR, URL de PR, o `--pr`:
→ Ir a **Modo de Revisión de PR** más abajo.
De lo contrario:
→ Usar **Modo de Revisión Local**.
---
## Modo de Revisión Local
Revisión exhaustiva de seguridad y calidad de los cambios no confirmados.
### Fase 1 — RECOPILAR
```bash
git diff --name-only HEAD
```
Si no hay archivos modificados, detener: "Nada que revisar."
### Fase 2 — REVISAR
Leer cada archivo modificado completo. Verificar:
**Problemas de Seguridad (CRÍTICO):**
- Credenciales, claves de API, tokens hardcodeados
- Vulnerabilidades de inyección SQL
- Vulnerabilidades XSS
- Validación de entrada faltante
- Dependencias inseguras
- Riesgos de path traversal
**Calidad de Código (ALTO):**
- Funciones de más de 50 líneas
- Archivos de más de 800 líneas
- Profundidad de anidamiento mayor a 4 niveles
- Manejo de errores faltante
- Sentencias console.log
- Comentarios TODO/FIXME
- JSDoc faltante para APIs públicas
**Buenas Prácticas (MEDIO):**
- Patrones de mutación (usar inmutable en su lugar)
- Uso de emojis en código/comentarios
- Pruebas faltantes para código nuevo
- Problemas de accesibilidad (a11y)
### Fase 3 — REPORTE
Generar reporte con:
- Severidad: CRÍTICO, ALTO, MEDIO, BAJO
- Ubicación del archivo y números de línea
- Descripción del problema
- Corrección sugerida
Bloquear commit si se encuentran problemas CRÍTICOS o ALTOS.
Nunca aprobar código con vulnerabilidades de seguridad.
---
## Modo de Revisión de PR
Revisión exhaustiva de PR de GitHub — obtiene el diff, lee los archivos completos, ejecuta validación, publica la revisión.
### Fase 1 — OBTENER
Parsear la entrada para determinar el PR:
| Entrada | Acción |
|---|---|
| Número (ej. `42`) | Usar como número de PR |
| URL (`github.com/.../pull/42`) | Extraer número de PR |
| Nombre de branch | Encontrar PR via `gh pr list --head <branch>` |
```bash
gh pr view <NÚMERO> --json number,title,body,author,baseRefName,headRefName,changedFiles,additions,deletions
gh pr diff <NÚMERO>
```
Si no se encuentra el PR, detener con error. Almacenar metadatos del PR para fases posteriores.
### Fase 2 — CONTEXTO
Construir contexto de revisión:
1. **Reglas del proyecto** — Leer `CLAUDE.md`, `.claude/docs/`, y cualquier guía de contribución
2. **Artefactos de planificación** — Verificar `.claude/prds/`, `.claude/plans/`, `.claude/reviews/`, y legacy `.claude/PRPs/{prds,plans,reports,reviews}/` para contexto relacionado con este PR
3. **Intención del PR** — Parsear la descripción del PR para objetivos, issues vinculados, planes de prueba
4. **Archivos modificados** — Listar todos los archivos modificados y categorizar por tipo (fuente, prueba, config, docs)
### Fase 3 — REVISAR
Leer cada archivo modificado **completo** (no solo los hunks del diff — se necesita el contexto circundante).
Para revisiones de PR, obtener el contenido completo del archivo en la revisión head del PR:
```bash
gh pr diff <NÚMERO> --name-only | while IFS= read -r file; do
gh api "repos/{owner}/{repo}/contents/$file?ref=<head-branch>" --jq '.content' | base64 -d
done
```
Aplicar la lista de verificación de revisión en 7 categorías:
| Categoría | Qué Verificar |
|---|---|
| **Corrección** | Errores lógicos, off-by-ones, manejo de null, casos límite, condiciones de carrera |
| **Seguridad de Tipos** | Incompatibilidades de tipos, castings inseguros, uso de `any`, generics faltantes |
| **Cumplimiento de Patrones** | Coincide con convenciones del proyecto (nomenclatura, estructura de archivos, manejo de errores, imports) |
| **Seguridad** | Inyección, brechas de auth, exposición de secretos, SSRF, path traversal, XSS |
| **Rendimiento** | Consultas N+1, índices faltantes, bucles sin límite, fugas de memoria, payloads grandes |
| **Completitud** | Pruebas faltantes, manejo de errores faltante, migraciones incompletas, docs faltante |
| **Mantenibilidad** | Código muerto, números mágicos, anidamiento profundo, nomenclatura poco clara, tipos faltantes |
Asignar severidad a cada hallazgo:
| Severidad | Significado | Acción |
|---|---|---|
| **CRÍTICO** | Vulnerabilidad de seguridad o riesgo de pérdida de datos | Debe corregirse antes de merge |
| **ALTO** | Bug o error lógico que probablemente causará problemas | Debería corregirse antes de merge |
| **MEDIO** | Problema de calidad de código o buena práctica faltante | Se recomienda corregir |
| **BAJO** | Detalle de estilo o sugerencia menor | Opcional |
### Fase 4 — VALIDAR
Ejecutar comandos de validación disponibles:
Detectar el tipo de proyecto desde los archivos de configuración (`package.json`, `Cargo.toml`, `go.mod`, `pyproject.toml`, etc.), luego ejecutar los comandos apropiados:
**Node.js / TypeScript** (tiene `package.json`):
```bash
npm run typecheck 2>/dev/null || npx tsc --noEmit 2>/dev/null # Verificación de tipos
npm run lint # Lint
npm test # Pruebas
npm run build # Build
```
**Rust** (tiene `Cargo.toml`):
```bash
cargo clippy -- -D warnings # Lint
cargo test # Pruebas
cargo build # Build
```
**Go** (tiene `go.mod`):
```bash
go vet ./... # Lint
go test ./... # Pruebas
go build ./... # Build
```
**Python** (tiene `pyproject.toml` / `setup.py`):
```bash
pytest # Pruebas
```
Ejecutar solo los comandos que apliquen al tipo de proyecto detectado. Registrar pass/fail para cada uno.
### Fase 5 — DECIDIR
Formular recomendación basada en los hallazgos:
| Condición | Decisión |
|---|---|
| Cero problemas CRÍTICOS/ALTOS, validación pasa | **APROBAR** |
| Solo problemas MEDIO/BAJO, validación pasa | **APROBAR** con comentarios |
| Cualquier problema ALTO o fallos de validación | **SOLICITAR CAMBIOS** |
| Cualquier problema CRÍTICO | **BLOQUEAR** — debe corregirse antes del merge |
Casos especiales:
- PR en borrador → Siempre usar **COMENTAR** (no aprobar/bloquear)
- Solo cambios de docs/config → Revisión más ligera, enfocada en corrección
- Flag explícito `--approve` o `--request-changes` → Anular decisión (pero reportar todos los hallazgos)
### Fase 6 — REPORTE
Crear artefacto de revisión en `.claude/reviews/pr-<NÚMERO>-review.md` a menos que el repositorio ya use el legacy `.claude/PRPs/reviews/` para este flujo:
```markdown
# Revisión de PR: #<NÚMERO> — <TÍTULO>
**Revisado**: <fecha>
**Autor**: <autor>
**Branch**: <head> → <base>
**Decisión**: APROBAR | SOLICITAR CAMBIOS | BLOQUEAR
## Resumen
<evaluación general en 1-2 oraciones>
## Hallazgos
### CRÍTICO
<hallazgos o "Ninguno">
### ALTO
<hallazgos o "Ninguno">
### MEDIO
<hallazgos o "Ninguno">
### BAJO
<hallazgos o "Ninguno">
## Resultados de Validación
| Verificación | Resultado |
|---|---|
| Verificación de tipos | Pass / Fail / Omitido |
| Lint | Pass / Fail / Omitido |
| Pruebas | Pass / Fail / Omitido |
| Build | Pass / Fail / Omitido |
## Archivos Revisados
<lista de archivos con tipo de cambio: Agregado/Modificado/Eliminado>
```
### Fase 7 — PUBLICAR
Publicar la revisión en GitHub:
```bash
# Si APROBAR
gh pr review <NÚMERO> --approve --body "<resumen de la revisión>"
# Si SOLICITAR CAMBIOS
gh pr review <NÚMERO> --request-changes --body "<resumen con correcciones requeridas>"
# Si solo COMENTAR (PR en borrador o informativo)
gh pr review <NÚMERO> --comment --body "<resumen>"
```
Para comentarios en línea en líneas específicas, usar la API de comentarios de revisión de GitHub:
```bash
gh api "repos/{owner}/{repo}/pulls/<NÚMERO>/comments" \
-f body="<comentario>" \
-f path="<archivo>" \
-F line=<número-de-línea> \
-f side="RIGHT" \
-f commit_id="$(gh pr view <NÚMERO> --json headRefOid --jq .headRefOid)"
```
Alternativamente, publicar una sola revisión con múltiples comentarios en línea a la vez:
```bash
gh api "repos/{owner}/{repo}/pulls/<NÚMERO>/reviews" \
-f event="COMMENT" \
-f body="<resumen general>" \
--input comments.json # [{"path": "archivo", "line": N, "body": "comentario"}, ...]
```
### Fase 8 — SALIDA
Reportar al usuario:
```
PR #<NÚMERO>: <TÍTULO>
Decisión: <APROBAR|SOLICITAR_CAMBIOS|BLOQUEAR>
Problemas: <cantidad_críticos> críticos, <cantidad_altos> altos, <cantidad_medios> medios, <cantidad_bajos> bajos
Validación: <cantidad_pass>/<total> verificaciones pasaron
Artefactos:
Revisión: .claude/reviews/pr-<NÚMERO>-review.md
GitHub: <URL del PR>
Próximos pasos:
- <sugerencias contextuales basadas en la decisión>
```
---
## Casos Límite
- **Sin CLI `gh`**: Volver a revisión solo local (leer el diff, omitir publicación en GitHub). Advertir al usuario.
- **Branches divergidos**: Sugerir `git fetch origin && git rebase origin/<base>` antes de la revisión.
- **PRs grandes (>50 archivos)**: Advertir sobre el alcance de la revisión. Enfocarse primero en cambios de fuente, luego pruebas, luego config/docs.
+336
View File
@@ -0,0 +1,336 @@
---
description: Crear y ejecutar pruebas end-to-end con Playwright. Genera flujos de prueba, ejecuta los tests, captura capturas de pantalla/videos/trazas y sube artefactos.
---
# Comando E2E
Este comando invoca al agente **e2e-runner** para crear, mantener y ejecutar pruebas end-to-end usando Playwright.
## Qué Hace Este Comando
1. **Crear Flujos de Prueba** - Generar pruebas Playwright para flujos de usuario
2. **Ejecutar Pruebas E2E** - Ejecutar los tests en múltiples navegadores
3. **Capturar Artefactos** - Capturas de pantalla, videos y trazas en caso de error
4. **Subir Resultados** - Reportes HTML y JUnit XML
5. **Identificar Pruebas Inestables** - Poner en cuarentena tests no deterministas
## Cuándo Usarlo
Usa el comando `/e2e` cuando:
- Pruebes flujos de usuario críticos (login, transacciones, pagos)
- Verifiques que flujos de múltiples pasos funcionen de extremo a extremo
- Pruebes interacciones de UI y navegación
- Valides la integración entre frontend y backend
- Te prepares para despliegue a producción
## Cómo Funciona
El agente e2e-runner:
1. **Analizará el flujo de usuario** e identificará los escenarios de prueba
2. **Generará la prueba Playwright** usando el patrón Page Object Model
3. **Ejecutará las pruebas** (Chrome, Firefox, Safari)
4. **Capturará los fallos** con capturas de pantalla, videos y trazas
5. **Generará un reporte** con los resultados y artefactos
6. **Identificará pruebas inestables** y sugerirá correcciones
## Ejemplo de Uso
```
Usuario: /e2e Probar el flujo de búsqueda y visualización de mercados
Agente (e2e-runner):
# Creación de Prueba E2E: Flujo de Búsqueda y Visualización de Mercados
## Escenario de Prueba Identificado
**Flujo de Usuario:** Búsqueda de Mercados → Ver Resultados → Click en Mercado → Ver Detalles
**Cobertura de Prueba:**
1. Ir a la página de mercados
2. Realizar búsqueda semántica
3. Validar resultados de búsqueda
4. Click en el primer resultado
5. Validar que carga la página de detalles del mercado
6. Validar que el gráfico se renderiza
## Código de Prueba Generado
```typescript
// tests/e2e/markets/search-and-view.spec.ts
import { test, expect } from '@playwright/test'
import { MarketsPage } from '../../pages/MarketsPage'
import { MarketDetailsPage } from '../../pages/MarketDetailsPage'
test.describe('Market Search and View Flow', () => {
test('el usuario puede buscar mercados y ver detalles', async ({ page }) => {
// 1. Ir a la página de mercados
const marketsPage = new MarketsPage(page)
await marketsPage.goto()
// Validar que la página cargó
await expect(page).toHaveTitle(/Markets/)
await expect(page.locator('h1')).toContainText('Markets')
// 2. Realizar búsqueda semántica
await marketsPage.searchMarkets('election')
// Esperar respuesta de la API
await page.waitForResponse(resp =>
resp.url().includes('/api/markets/search') && resp.status() === 200
)
// 3. Validar resultados de búsqueda
const marketCards = marketsPage.marketCards
await expect(marketCards.first()).toBeVisible()
const resultCount = await marketCards.count()
expect(resultCount).toBeGreaterThan(0)
// Tomar captura de pantalla de los resultados
await page.screenshot({ path: 'artifacts/search-results.png' })
// 4. Click en el primer resultado
const firstMarketTitle = await marketCards.first().textContent()
await marketCards.first().click()
// 5. Validar que carga la página de detalles del mercado
await expect(page).toHaveURL(/\/markets\/[a-z0-9-]+/)
const detailsPage = new MarketDetailsPage(page)
await expect(detailsPage.marketName).toBeVisible()
await expect(detailsPage.marketDescription).toBeVisible()
// 6. Validar que el gráfico se renderiza
await expect(detailsPage.priceChart).toBeVisible()
// Verificar que el nombre del mercado coincide
const detailsTitle = await detailsPage.marketName.textContent()
expect(detailsTitle?.toLowerCase()).toContain(
firstMarketTitle?.toLowerCase().substring(0, 20) || ''
)
// Tomar captura de pantalla de los detalles del mercado
await page.screenshot({ path: 'artifacts/market-details.png' })
})
test('búsqueda sin resultados debe mostrar estado vacío', async ({ page }) => {
const marketsPage = new MarketsPage(page)
await marketsPage.goto()
// Buscar un mercado que no existe
await marketsPage.searchMarkets('xyznonexistentmarket123456')
// Validar estado vacío
await expect(page.locator('[data-testid="no-results"]')).toBeVisible()
await expect(page.locator('[data-testid="no-results"]')).toContainText(
/no.*results|no.*markets/i
)
const marketCount = await marketsPage.marketCards.count()
expect(marketCount).toBe(0)
})
test('puede limpiar la búsqueda y ver todos los mercados de nuevo', async ({ page }) => {
const marketsPage = new MarketsPage(page)
await marketsPage.goto()
// Cantidad inicial de mercados
const initialCount = await marketsPage.marketCards.count()
// Realizar búsqueda
await marketsPage.searchMarkets('trump')
await page.waitForLoadState('networkidle')
// Validar resultados filtrados
const filteredCount = await marketsPage.marketCards.count()
expect(filteredCount).toBeLessThan(initialCount)
// Limpiar búsqueda
await marketsPage.searchInput.clear()
await page.waitForLoadState('networkidle')
// Validar que se muestran todos los mercados de nuevo
const finalCount = await marketsPage.marketCards.count()
expect(finalCount).toBe(initialCount)
})
})
```
## Ejecutar las Pruebas
```bash
# Ejecutar la prueba generada
npx playwright test tests/e2e/markets/search-and-view.spec.ts
Corriendo 3 pruebas usando 3 workers
[chromium] search-and-view.spec.ts:5:3 el usuario puede buscar mercados y ver detalles (4.2s)
[chromium] search-and-view.spec.ts:52:3 búsqueda sin resultados muestra estado vacío (1.8s)
[chromium] search-and-view.spec.ts:67:3 puede limpiar búsqueda y ver todos los mercados (2.9s)
3 passed (9.1s)
Artefactos generados:
- artifacts/search-results.png
- artifacts/market-details.png
- playwright-report/index.html
```
## Reporte de Pruebas
```
╔══════════════════════════════════════════════════════════════╗
║ Resultados de Pruebas E2E ║
╠══════════════════════════════════════════════════════════════╣
║ Estado: PASS: TODAS LAS PRUEBAS PASARON ║
║ Total: 3 pruebas ║
║ Pasaron: 3 (100%) ║
║ Fallaron: 0 ║
║ Inestables: 0 ║
║ Duración: 9.1s ║
╚══════════════════════════════════════════════════════════════╝
Artefactos:
Capturas de pantalla: 2 archivos
Videos: 0 archivos (solo en fallo)
Trazas: 0 archivos (solo en fallo)
Reporte HTML: playwright-report/index.html
Ver reporte: npx playwright show-report
```
PASS: ¡Suite de pruebas E2E lista para integración CI/CD!
```
## Artefactos de Prueba
Cuando las pruebas se ejecutan, se capturan estos artefactos:
**En Todas las Pruebas:**
- Reporte HTML con cronología y resultados
- JUnit XML para integración CI
**Solo en Caso de Fallo:**
- Captura de pantalla del estado fallido
- Grabación de video de la prueba
- Archivo de traza para depuración (reproducción paso a paso)
- Logs de red
- Logs de consola
## Ver Artefactos
```bash
# Ver reporte HTML en el navegador
npx playwright show-report
# Ver archivo de traza específico
npx playwright show-trace artifacts/trace-abc123.zip
# Las capturas de pantalla se guardan en el directorio artifacts/
open artifacts/search-results.png
```
## Detección de Pruebas Inestables
Si una prueba falla de forma intermitente:
```
ADVERTENCIA: PRUEBA INESTABLE DETECTADA: tests/e2e/markets/trade.spec.ts
La prueba pasó 7 de 10 ejecuciones (70% de tasa de éxito)
Fallo más frecuente:
"Timeout esperando elemento '[data-testid="confirm-btn"]'"
Correcciones sugeridas:
1. Agregar espera explícita: await page.waitForSelector('[data-testid="confirm-btn"]')
2. Aumentar timeout: { timeout: 10000 }
3. Verificar condiciones de carrera en el componente
4. Validar que el elemento no está oculto por animación
Sugerencia de cuarentena: Marcar como test.fixme() hasta que se corrija
```
## Configuración de Navegadores
Las pruebas se ejecutan en múltiples navegadores por defecto:
- PASS: Chromium (Desktop Chrome)
- PASS: Firefox (Desktop)
- PASS: WebKit (Desktop Safari)
- PASS: Mobile Chrome (opcional)
Configura `playwright.config.ts` para ajustar los navegadores.
## Integración CI/CD
Agregar a tu pipeline CI:
```yaml
# .github/workflows/e2e.yml
- name: Install Playwright
run: npx playwright install --with-deps
- name: Run E2E tests
run: npx playwright test
- name: Upload artifacts
if: always()
uses: actions/upload-artifact@v3
with:
name: playwright-report
path: playwright-report/
```
## Buenas Prácticas
**HAZ:**
- PASS: Usa Page Object Model para mantenibilidad
- PASS: Usa atributos data-testid para los selectores
- PASS: Espera respuestas de API, no timeouts arbitrarios
- PASS: Prueba los flujos de usuario críticos de extremo a extremo
- PASS: Ejecuta las pruebas antes de hacer merge a main
- PASS: Inspecciona los artefactos cuando las pruebas fallen
**NO HAGAS:**
- FAIL: No uses selectores frágiles (las clases CSS pueden cambiar)
- FAIL: No pruebes detalles de implementación
- FAIL: No ejecutes pruebas contra producción
- FAIL: No ignores pruebas inestables
- FAIL: No omitas la inspección de artefactos en fallos
- FAIL: No pruebes todos los casos límite con E2E (usa pruebas unitarias)
## Comandos Rápidos
```bash
# Ejecutar todas las pruebas E2E
npx playwright test
# Ejecutar archivo de prueba específico
npx playwright test tests/e2e/markets/search.spec.ts
# Ejecutar en modo headed (ver el navegador)
npx playwright test --headed
# Depurar prueba
npx playwright test --debug
# Generar código de prueba
npx playwright codegen http://localhost:3000
# Ver reporte
npx playwright show-report
```
## Agentes Relacionados
Este comando invoca al agente `e2e-runner` proporcionado por ECC.
Para instalaciones manuales, el archivo fuente se encuentra en:
`agents/e2e-runner.md`
## Integración con Otros Comandos
- Usa `/plan` para identificar los flujos críticos a probar
- Usa `/tdd` para pruebas unitarias (más rápidas, más detalladas)
- Usa `/e2e` para pruebas de integración y flujos de usuario
- Usa `/code-review` para validar la calidad de las pruebas
+120
View File
@@ -0,0 +1,120 @@
# Comando Eval
Gestionar el flujo de trabajo de desarrollo orientado a evals.
## Uso
`/eval [define|check|report|list] [nombre-feature]`
## Definir Eval
`/eval define nombre-feature`
Crear una nueva definición de eval:
1. Crear `.claude/evals/nombre-feature.md` con la plantilla:
```markdown
## EVAL: nombre-feature
Created: $(date)
### Capability Evals
- [ ] [Descripción de Capability 1]
- [ ] [Descripción de Capability 2]
### Regression Evals
- [ ] [El comportamiento existente 1 sigue funcionando]
- [ ] [El comportamiento existente 2 sigue funcionando]
### Success Criteria
- pass@3 > 90% para capability evals
- pass^3 = 100% para regression evals
```
2. Pedir al usuario que complete los criterios específicos
## Verificar Eval
`/eval check nombre-feature`
Ejecutar los evals para una feature:
1. Leer la definición de eval desde `.claude/evals/nombre-feature.md`
2. Para cada capability eval:
- Intentar verificar el criterio
- Registrar PASS/FAIL
- Guardar el intento en `.claude/evals/nombre-feature.log`
3. Para cada regression eval:
- Ejecutar las pruebas relevantes
- Comparar con la línea base
- Registrar PASS/FAIL
4. Reportar el estado actual:
```
EVAL CHECK: nombre-feature
========================
Capability: X/Y pasando
Regression: X/Y pasando
Estado: EN PROGRESO / LISTO
```
## Reporte de Eval
`/eval report nombre-feature`
Generar reporte exhaustivo de eval:
```
EVAL REPORT: nombre-feature
=========================
Generated: $(date)
CAPABILITY EVALS
----------------
[eval-1]: PASS (pass@1)
[eval-2]: PASS (pass@2) - requirió reintento
[eval-3]: FAIL - ver notas
REGRESSION EVALS
----------------
[test-1]: PASS
[test-2]: PASS
[test-3]: PASS
METRICS
-------
Capability pass@1: 67%
Capability pass@3: 100%
Regression pass^3: 100%
NOTES
-----
[Cualquier problema, caso límite u observación]
RECOMMENDATION
--------------
[SHIP / NEEDS WORK / BLOCKED]
```
## Listar Evals
`/eval list`
Mostrar todas las definiciones de eval:
```
EVAL DEFINITIONS
================
feature-auth [3/5 pasando] EN PROGRESO
feature-search [5/5 pasando] LISTO
feature-export [0/4 pasando] NO INICIADO
```
## Argumentos
$ARGUMENTS:
- `define <nombre>` - Crear nueva definición de eval
- `check <nombre>` - Ejecutar y verificar evals
- `report <nombre>` - Generar reporte completo
- `list` - Mostrar todos los evals
- `clean` - Eliminar logs de evals antiguos (mantiene las últimas 10 ejecuciones)
+178
View File
@@ -0,0 +1,178 @@
---
name: evolve
description: Analizar instintos y sugerir o generar estructuras evolucionadas
command: true
---
# Comando Evolve
## Implementación
Ejecutar la CLI de instintos usando la ruta raíz del plugin:
```bash
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" evolve [--generate]
```
O si `CLAUDE_PLUGIN_ROOT` no está configurado (instalación manual):
```bash
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve [--generate]
```
Analiza los instintos y agrupa los relacionados en estructuras de nivel superior:
- **Comandos**: Cuando los instintos describen acciones invocadas por el usuario
- **Skills**: Cuando los instintos describen comportamientos activados automáticamente
- **Agentes**: Cuando los instintos describen procesos complejos de múltiples pasos
## Uso
```
/evolve # Analizar todos los instintos y sugerir evoluciones
/evolve --generate # También generar archivos bajo evolved/{skills,commands,agents}
```
## Reglas de Evolución
### → Comando (Invocado por el Usuario)
Cuando los instintos describen acciones que un usuario solicitaría explícitamente:
- Múltiples instintos sobre "cuando el usuario pide..."
- Instintos con disparadores como "cuando se crea un nuevo X"
- Instintos que siguen una secuencia repetible
Ejemplo:
- `new-table-step1`: "cuando se añade una tabla de base de datos, crear migración"
- `new-table-step2`: "cuando se añade una tabla de base de datos, actualizar schema"
- `new-table-step3`: "cuando se añade una tabla de base de datos, regenerar tipos"
→ Crea: comando **new-table**
### → Skill (Activada Automáticamente)
Cuando los instintos describen comportamientos que deben ocurrir automáticamente:
- Disparadores de coincidencia de patrones
- Respuestas al manejo de errores
- Aplicación de estilo de código
Ejemplo:
- `prefer-functional`: "cuando se escriben funciones, preferir estilo funcional"
- `use-immutable`: "cuando se modifica estado, usar patrones inmutables"
- `avoid-classes`: "cuando se diseñan módulos, evitar diseño basado en clases"
→ Crea: skill `functional-patterns`
### → Agente (Necesita Profundidad/Aislamiento)
Cuando los instintos describen procesos complejos de múltiples pasos que se benefician del aislamiento:
- Flujos de trabajo de depuración
- Secuencias de refactorización
- Tareas de investigación
Ejemplo:
- `debug-step1`: "al depurar, primero revisar los logs"
- `debug-step2`: "al depurar, aislar el componente que falla"
- `debug-step3`: "al depurar, crear una reproducción mínima"
- `debug-step4`: "al depurar, verificar la corrección con una prueba"
→ Crea: agente **debugger**
## Qué Hacer
1. Detectar el contexto actual del proyecto
2. Leer los instintos del proyecto y globales (el proyecto tiene precedencia en conflictos de ID)
3. Agrupar los instintos por patrones de disparador/dominio
4. Identificar:
- Candidatos a skill (clusters de disparadores con 2+ instintos)
- Candidatos a comando (instintos de flujo de trabajo de alta confianza)
- Candidatos a agente (clusters más grandes de alta confianza)
5. Mostrar candidatos a promoción (proyecto → global) cuando corresponda
6. Si se pasa `--generate`, escribir archivos en:
- Alcance del proyecto: `~/.claude/homunculus/projects/<project-id>/evolved/`
- Respaldo global: `~/.claude/homunculus/evolved/`
## Formato de Salida
```
============================================================
ANÁLISIS EVOLVE - 12 instintos
Proyecto: my-app (a1b2c3d4e5f6)
Con alcance de proyecto: 8 | Global: 4
============================================================
Instintos de alta confianza (>=80%): 5
## CANDIDATOS A SKILL
1. Cluster: "adding tests"
Instintos: 3
Confianza promedio: 82%
Dominios: testing
Alcances: proyecto
## CANDIDATOS A COMANDO (2)
/adding-tests
De: test-first-workflow [proyecto]
Confianza: 84%
## CANDIDATOS A AGENTE (1)
adding-tests-agent
Cubre 3 instintos
Confianza promedio: 82%
```
## Flags
- `--generate`: Generar archivos evolucionados además de la salida de análisis
## Formato de Archivo Generado
### Comando
```markdown
---
name: new-table
description: Crear una nueva tabla de base de datos con migración, actualización de schema y generación de tipos
command: /new-table
evolved_from:
- new-table-migration
- update-schema
- regenerate-types
---
# Comando New Table
[Contenido generado basado en instintos agrupados]
## Pasos
1. ...
2. ...
```
### Skill
```markdown
---
name: functional-patterns
description: Reforzar patrones de programación funcional
evolved_from:
- prefer-functional
- use-immutable
- avoid-classes
---
# Skill de Patrones Funcionales
[Contenido generado basado en instintos agrupados]
```
### Agente
```markdown
---
name: debugger
description: Agente de depuración sistemática
model: sonnet
evolved_from:
- debug-check-logs
- debug-isolate
- debug-reproduce
---
# Agente Debugger
[Contenido generado basado en instintos agrupados]
```
+166
View File
@@ -0,0 +1,166 @@
---
description: Corregir errores de build de Go, advertencias de go vet y problemas del linter de forma incremental. Invoca al agente go-build-resolver para correcciones mínimas y quirúrgicas.
---
# Go Build y Corrección
Este comando invoca al agente **go-build-resolver** para corregir incrementalmente errores de build de Go con cambios mínimos.
## Qué Hace Este Comando
1. **Ejecutar Diagnósticos**: Ejecutar `go build`, `go vet`, `staticcheck`
2. **Parsear Errores**: Agrupar por archivo y ordenar por severidad
3. **Corregir Incrementalmente**: Un error a la vez
4. **Verificar Cada Corrección**: Re-ejecutar el build después de cada cambio
5. **Reportar Resumen**: Mostrar qué se corrigió y qué queda pendiente
## Cuándo Usar
Usar `/go-build` cuando:
- `go build ./...` falla con errores
- `go vet ./...` reporta problemas
- `golangci-lint run` muestra advertencias
- Las dependencias de módulos están rotas
- Después de hacer pull de cambios que rompen el build
## Comandos de Diagnóstico Ejecutados
```bash
# Verificación de build principal
go build ./...
# Análisis estático
go vet ./...
# Linting extendido (si está disponible)
staticcheck ./...
golangci-lint run
# Problemas de módulos
go mod verify
go mod tidy -v
```
## Ejemplo de Sesión
```text
Usuario: /go-build
Agente:
# Resolución de Build de Go
## Diagnósticos Iniciales
$ go build ./...
internal/service/user.go:25:15: undefined: UserRepository
internal/handler/api.go:42:9: cannot use x (type string) as type int
internal/handler/api.go:58:2: missing return at end of function
Errores encontrados: 3
## Corrección 1: Identificador Indefinido
Archivo: internal/service/user.go:25
Error: undefined: UserRepository
Causa: Import faltante
// Import añadido
import "project/internal/repository"
// Cambiado
var repo UserRepository
// A
var repo repository.UserRepository
$ go build ./...
# 2 errores restantes
## Corrección 2: Incompatibilidad de Tipos
Archivo: internal/handler/api.go:42
Error: cannot use x (type string) as type int
// Cambiado
count := params.Get("count")
// A
countStr := params.Get("count")
count, _ := strconv.Atoi(countStr)
$ go build ./...
# 1 error restante
## Corrección 3: Return Faltante
Archivo: internal/handler/api.go:58
Error: missing return at end of function
func GetUser(id string) (*User, error) {
if id == "" {
return nil, ErrInvalidID
}
user := findUser(id)
// Return añadido
return user, nil
}
$ go build ./...
# ¡Build exitoso!
## Verificación Final
$ go vet ./...
# Sin problemas
$ go test ./...
ok project/internal/service 0.015s
ok project/internal/handler 0.023s
## Resumen
| Métrica | Cantidad |
|---------|---------|
| Errores de build corregidos | 3 |
| Advertencias de vet corregidas | 0 |
| Archivos modificados | 2 |
| Problemas restantes | 0 |
Estado del Build: ÉXITO
```
## Errores Comunes Corregidos
| Error | Corrección Típica |
|-------|-----------------|
| `undefined: X` | Añadir import o corregir typo |
| `cannot use X as Y` | Conversión de tipo o corregir asignación |
| `missing return` | Añadir sentencia return |
| `X does not implement Y` | Añadir método faltante |
| `import cycle` | Reestructurar paquetes |
| `declared but not used` | Eliminar o usar la variable |
| `cannot find package` | `go get` o `go mod tidy` |
## Estrategia de Corrección
1. **Errores de build primero** - El código debe compilar
2. **Advertencias de vet segundo** - Corregir construcciones sospechosas
3. **Advertencias del linter tercero** - Estilo y mejores prácticas
4. **Una corrección a la vez** - Verificar cada cambio
5. **Cambios mínimos** - No refactorizar, solo corregir
## Condiciones de Parada
El agente se detendrá e informará si:
- El mismo error persiste después de 3 intentos
- La corrección introduce más errores
- Requiere cambios arquitectónicos
- Faltan dependencias externas
## Comandos Relacionados
- `/go-test` - Ejecutar pruebas después de que el build tenga éxito
- `/go-review` - Revisar la calidad del código
## Relacionado
- Agente: `agents/go-build-resolver.md`
- Skill: `skills/golang-patterns/`
+124
View File
@@ -0,0 +1,124 @@
---
description: Revisión de código Go completa para patrones idiomáticos, seguridad de concurrencia, manejo de errores y seguridad. Invoca al agente go-reviewer.
---
# Revisión de Código Go
Este comando invoca al agente **go-reviewer** para una revisión de código Go completa y específica.
## Qué Hace Este Comando
1. **Identificar Cambios de Go**: Encontrar archivos `.go` modificados mediante `git diff`
2. **Ejecutar Análisis Estático**: Ejecutar `go vet`, `staticcheck` y `golangci-lint`
3. **Escaneo de Seguridad**: Verificar inyección SQL, inyección de comandos, condiciones de carrera
4. **Revisión de Concurrencia**: Analizar seguridad de goroutines, uso de canales, patrones de mutex
5. **Verificación de Go Idiomático**: Verificar que el código sigue las convenciones y mejores prácticas de Go
6. **Generar Reporte**: Categorizar problemas por severidad
## Cuándo Usar
Usar `/go-review` cuando:
- Después de escribir o modificar código Go
- Antes de hacer commit de cambios de Go
- Al revisar pull requests con código Go
- Al incorporarse a una nueva base de código de Go
- Al aprender patrones idiomáticos de Go
## Categorías de Revisión
### CRÍTICO (Debe Corregirse)
- Vulnerabilidades de inyección SQL/comandos
- Condiciones de carrera sin sincronización
- Fugas de goroutines
- Credenciales hardcodeadas
- Uso de punteros inseguros
- Errores ignorados en rutas críticas
### ALTO (Debería Corregirse)
- Manejo de errores sin context
- Panic en lugar de retorno de errores
- Context no propagado
- Canales sin buffer causando deadlocks
- Errores de interfaz no satisfecha
- Protección de mutex faltante
### MEDIO (Considerar)
- Patrones de código no idiomáticos
- Comentarios godoc faltantes en exports
- Concatenación de strings ineficiente
- Slice no preasignado
- Pruebas table-driven no usadas
## Verificaciones Automáticas Ejecutadas
```bash
# Análisis estático
go vet ./...
# Verificaciones avanzadas (si están instaladas)
staticcheck ./...
golangci-lint run
# Detección de condiciones de carrera
go build -race ./...
# Vulnerabilidades de seguridad
govulncheck ./...
```
## Ejemplo de Uso
```text
Usuario: /go-review
Agente:
# Reporte de Revisión de Código Go
## Archivos Revisados
- internal/handler/user.go (modificado)
- internal/service/auth.go (modificado)
## Resultados del Análisis Estático
✓ go vet: Sin problemas
✓ staticcheck: Sin problemas
## Problemas Encontrados
[CRÍTICO] Condición de Carrera
Archivo: internal/service/auth.go:45
Problema: Mapa compartido accedido sin sincronización
Fix: Usar sync.RWMutex o sync.Map
[ALTO] Context de Error Faltante
Archivo: internal/handler/user.go:28
Problema: Error retornado sin context
Fix: Envolver con context
return fmt.Errorf("get user %s: %w", userID, err)
## Resumen
- CRÍTICO: 1
- ALTO: 1
- MEDIO: 0
Recomendación: FALLAR: Bloquear merge hasta que se corrija el problema CRÍTICO
```
## Criterios de Aprobación
| Estado | Condición |
|--------|-----------|
| PASAR: Aprobar | Sin problemas CRÍTICOS o ALTOS |
| ADVERTENCIA | Solo problemas MEDIOS (fusionar con precaución) |
| FALLAR: Bloquear | Problemas CRÍTICOS o ALTOS encontrados |
## Integración con Otros Comandos
- Usar `/go-test` primero para asegurarse de que las pruebas pasen
- Usar `/go-build` si ocurren errores de build
- Usar `/go-review` antes de hacer commit
- Usar `/code-review` para preocupaciones no específicas de Go
## Relacionado
- Agente: `agents/go-reviewer.md`
- Skills: `skills/golang-patterns/`, `skills/golang-testing/`
+191
View File
@@ -0,0 +1,191 @@
---
description: Reforzar el flujo de trabajo TDD para Go. Escribir pruebas table-driven primero, luego implementar. Verificar 80%+ de cobertura con go test -cover.
---
# Comando TDD de Go
Este comando refuerza la metodología de desarrollo guiado por pruebas para código Go usando patrones de testing idiomáticos de Go.
## Qué Hace Este Comando
1. **Definir Tipos/Interfaces**: Hacer scaffold de las firmas de funciones primero
2. **Escribir Pruebas Table-Driven**: Crear casos de prueba exhaustivos (ROJO)
3. **Ejecutar Pruebas**: Verificar que las pruebas fallan por la razón correcta
4. **Implementar Código**: Escribir el código mínimo para que pasen (VERDE)
5. **Refactorizar**: Mejorar mientras se mantienen las pruebas en verde
6. **Verificar Cobertura**: Asegurar 80%+ de cobertura
## Cuándo Usar
Usar `/go-test` cuando:
- Se implementan nuevas funciones de Go
- Se añade cobertura de pruebas a código existente
- Se corrigen bugs (escribir primero la prueba que falla)
- Se construye lógica de negocio crítica
- Se aprende el flujo de trabajo TDD en Go
## Ciclo TDD
```
ROJO → Escribir prueba table-driven que falla
VERDE → Implementar código mínimo para que pase
REFACTOR → Mejorar código, las pruebas se mantienen en verde
REPETIR → Siguiente caso de prueba
```
## Ejemplo de Sesión
```
Usuario: /go-test Necesito una función para validar direcciones de email
Agente:
# Sesión TDD: Validador de Email
## Paso 1: Definir Interfaz
// validator/email.go
package validator
// ValidateEmail verifica si el string dado es una dirección de email válida.
// Retorna nil si es válido, error describiendo el problema de lo contrario.
func ValidateEmail(email string) error {
panic("not implemented")
}
## Paso 2: Escribir Pruebas Table-Driven (ROJO)
// validator/email_test.go
func TestValidateEmail(t *testing.T) {
tests := []struct {
name string
email string
wantErr bool
}{
// Emails válidos
{"email simple", "user@example.com", false},
{"con subdominio", "user@mail.example.com", false},
// Emails inválidos
{"string vacío", "", true},
{"sin arroba", "userexample.com", true},
{"sin dominio", "user@", true},
}
// ...
}
## Paso 3: Ejecutar Pruebas - Verificar FALLO
$ go test ./validator/...
FAIL (panic: not implemented)
✓ Las pruebas fallan como se esperaba.
## Paso 4: Implementar Código Mínimo (VERDE)
var emailRegex = regexp.MustCompile(`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`)
func ValidateEmail(email string) error {
if email == "" {
return ErrEmailEmpty
}
if !emailRegex.MatchString(email) {
return ErrEmailInvalid
}
return nil
}
## Paso 5: Ejecutar Pruebas - Verificar PASAN
$ go test ./validator/...
PASS ✓ Todas las pruebas pasando!
## Paso 6: Verificar Cobertura
$ go test -cover ./validator/...
coverage: 100.0% of statements
```
## Patrones de Prueba
### Pruebas Table-Driven
```go
tests := []struct {
name string
input InputType
want OutputType
wantErr bool
}{
{"caso 1", input1, want1, false},
{"caso 2", input2, want2, true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := Function(tt.input)
// afirmaciones
})
}
```
### Pruebas en Paralelo
```go
for _, tt := range tests {
tt := tt // Capturar
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
// cuerpo de prueba
})
}
```
## Comandos de Cobertura
```bash
# Cobertura básica
go test -cover ./...
# Perfil de cobertura
go test -coverprofile=coverage.out ./...
# Ver en navegador
go tool cover -html=coverage.out
# Cobertura por función
go tool cover -func=coverage.out
# Con detección de condiciones de carrera
go test -race -cover ./...
```
## Objetivos de Cobertura
| Tipo de Código | Objetivo |
|----------------|---------|
| Lógica de negocio crítica | 100% |
| APIs públicas | 90%+ |
| Código general | 80%+ |
| Código generado | Excluir |
## Mejores Prácticas de TDD
**HACER:**
- Escribir la prueba PRIMERO, antes de cualquier implementación
- Ejecutar las pruebas después de cada cambio
- Usar pruebas table-driven para cobertura exhaustiva
- Probar el comportamiento, no los detalles de implementación
- Incluir casos límite (vacío, nil, valores máximos)
**NO HACER:**
- Escribir implementación antes que las pruebas
- Saltar la fase ROJO
- Probar funciones privadas directamente
- Usar `time.Sleep` en las pruebas
- Ignorar las pruebas inestables
## Comandos Relacionados
- `/go-build` - Corregir errores de build
- `/go-review` - Revisar código después de la implementación
## Relacionado
- Skill: `skills/golang-testing/`
- Skill: `skills/tdd-workflow/`
+66
View File
@@ -0,0 +1,66 @@
---
name: instinct-export
description: Exportar instintos del alcance del proyecto/global a un archivo
command: /instinct-export
---
# Comando Instinct Export
Exporta los instintos a un formato compartible. Perfecto para:
- Compartir con compañeros de equipo
- Transferir a una nueva máquina
- Contribuir a las convenciones del proyecto
## Uso
```
/instinct-export # Exportar todos los instintos personales
/instinct-export --domain testing # Exportar solo instintos de testing
/instinct-export --min-confidence 0.7 # Solo exportar instintos de alta confianza
/instinct-export --output team-instincts.yaml
/instinct-export --scope project --output project-instincts.yaml
```
## Qué Hacer
1. Detectar el contexto actual del proyecto
2. Cargar instintos por alcance seleccionado:
- `project`: solo el proyecto actual
- `global`: solo global
- `all`: proyecto + global fusionados (por defecto)
3. Aplicar filtros (`--domain`, `--min-confidence`)
4. Escribir la exportación en formato YAML al archivo (o stdout si no se proporciona ruta de salida)
## Formato de Salida
Crea un archivo YAML:
```yaml
# Exportación de Instintos
# Generado: 2025-01-22
# Fuente: personal
# Cantidad: 12 instintos
---
id: prefer-functional-style
trigger: "when writing new functions"
confidence: 0.8
domain: code-style
source: session-observation
scope: project
project_id: a1b2c3d4e5f6
project_name: my-app
---
# Preferir Estilo Funcional
## Acción
Usar patrones funcionales sobre clases.
```
## Flags
- `--domain <nombre>`: Exportar solo el dominio especificado
- `--min-confidence <n>`: Umbral mínimo de confianza
- `--output <archivo>`: Ruta del archivo de salida (imprime a stdout si se omite)
- `--scope <project|global|all>`: Alcance de exportación (por defecto: `all`)
+114
View File
@@ -0,0 +1,114 @@
---
name: instinct-import
description: Importar instintos desde archivo o URL al alcance del proyecto/global
command: true
---
# Comando Instinct Import
## Implementación
Ejecutar la CLI de instintos usando la ruta raíz del plugin:
```bash
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" import <archivo-o-url> [--dry-run] [--force] [--min-confidence 0.7] [--scope project|global]
```
O si `CLAUDE_PLUGIN_ROOT` no está configurado (instalación manual):
```bash
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py import <archivo-o-url>
```
Importar instintos desde rutas de archivos locales o URLs HTTP(S).
## Uso
```
/instinct-import team-instincts.yaml
/instinct-import https://github.com/org/repo/instincts.yaml
/instinct-import team-instincts.yaml --dry-run
/instinct-import team-instincts.yaml --scope global --force
```
## Qué Hacer
1. Obtener el archivo de instintos (ruta local o URL)
2. Parsear y validar el formato
3. Verificar duplicados con instintos existentes
4. Fusionar o añadir nuevos instintos
5. Guardar en el directorio de instintos heredados:
- Alcance de proyecto: `~/.claude/homunculus/projects/<project-id>/instincts/inherited/`
- Alcance global: `~/.claude/homunculus/instincts/inherited/`
## Proceso de Importación
```
Importando instintos desde: team-instincts.yaml
================================================
12 instintos encontrados para importar.
Analizando conflictos...
## Nuevos Instintos (8)
Estos se añadirán:
✓ use-zod-validation (confianza: 0.7)
✓ prefer-named-exports (confianza: 0.65)
✓ test-async-functions (confianza: 0.8)
...
## Instintos Duplicados (3)
Ya existen instintos similares:
ADVERTENCIA: prefer-functional-style
Local: confianza 0.8, 12 observaciones
Importado: confianza 0.7
→ Conservar local (mayor confianza)
ADVERTENCIA: test-first-workflow
Local: confianza 0.75
Importado: confianza 0.9
→ Actualizar al importado (mayor confianza)
¿Importar 8 nuevos, actualizar 1?
```
## Comportamiento de Fusión
Al importar un instinto con un ID existente:
- El importado con mayor confianza se convierte en candidato de actualización
- El importado con igual/menor confianza se omite
- El usuario confirma a menos que se use `--force`
## Seguimiento de Fuente
Los instintos importados se marcan con:
```yaml
source: inherited
scope: project
imported_from: "team-instincts.yaml"
project_id: "a1b2c3d4e5f6"
project_name: "my-project"
```
## Flags
- `--dry-run`: Vista previa sin importar
- `--force`: Omitir el prompt de confirmación
- `--min-confidence <n>`: Solo importar instintos por encima del umbral
- `--scope <project|global>`: Seleccionar el alcance destino (por defecto: `project`)
## Salida
Después de la importación:
```
¡Importación completada!
Añadidos: 8 instintos
Actualizados: 1 instinto
Omitidos: 3 instintos (ya existe igual/mayor confianza)
Nuevos instintos guardados en: ~/.claude/homunculus/instincts/inherited/
Ejecutar /instinct-status para ver todos los instintos.
```
+59
View File
@@ -0,0 +1,59 @@
---
name: instinct-status
description: Mostrar los instintos aprendidos (proyecto + global) con confianza
command: true
---
# Comando Instinct Status
Muestra los instintos aprendidos para el proyecto actual más los instintos globales, agrupados por dominio.
## Implementación
Ejecutar la CLI de instintos usando la ruta raíz del plugin:
```bash
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" status
```
O si `CLAUDE_PLUGIN_ROOT` no está configurado (instalación manual):
```bash
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status
```
## Uso
```
/instinct-status
```
## Qué Hacer
1. Detectar el contexto actual del proyecto (hash de remote/ruta de git)
2. Leer instintos del proyecto desde `~/.claude/homunculus/projects/<project-id>/instincts/`
3. Leer instintos globales desde `~/.claude/homunculus/instincts/`
4. Fusionar con reglas de precedencia (el proyecto sobreescribe global cuando hay colisión de IDs)
5. Mostrar agrupados por dominio con barras de confianza y estadísticas de observación
## Formato de Salida
```
============================================================
ESTADO DE INSTINTOS - 12 en total
============================================================
Proyecto: my-app (a1b2c3d4e5f6)
Instintos del proyecto: 8
Instintos globales: 4
## CON ALCANCE DE PROYECTO (my-app)
### WORKFLOW (3)
███████░░░ 70% grep-before-edit [proyecto]
disparador: when modifying code
## GLOBAL (aplican a todos los proyectos)
### SECURITY (2)
█████████░ 85% validate-user-input [global]
disparador: when handling user input
```
+112
View File
@@ -0,0 +1,112 @@
---
description: "Extraer patrones reutilizables de la sesión, autoevaluar la calidad antes de guardar y determinar la ubicación correcta (Global vs. Proyecto)."
---
# /learn-eval - Extraer, Evaluar y luego Guardar
Extiende `/learn` con una puerta de calidad, decisión de ubicación de guardado y conciencia de colocación del conocimiento antes de escribir cualquier archivo de skill.
## Qué Extraer
Buscar:
1. **Patrones de Resolución de Errores** — causa raíz + corrección + reutilizabilidad
2. **Técnicas de Depuración** — pasos no obvios, combinaciones de herramientas
3. **Soluciones Alternativas** — peculiaridades de librerías, limitaciones de API, correcciones específicas de versión
4. **Patrones Específicos del Proyecto** — convenciones, decisiones arquitectónicas, patrones de integración
## Proceso
1. Revisar la sesión en busca de patrones extraíbles
2. Identificar el insight más valioso/reutilizable
3. **Determinar la ubicación de guardado:**
- Preguntar: "¿Este patrón sería útil en un proyecto diferente?"
- **Global** (`~/.claude/skills/learned/`): Patrones genéricos usables en 2+ proyectos (compatibilidad bash, comportamiento de API LLM, técnicas de depuración, etc.)
- **Proyecto** (`.claude/skills/learned/` en el proyecto actual): Conocimiento específico del proyecto (peculiaridades de un archivo de configuración particular, decisiones de arquitectura específicas del proyecto, etc.)
- Ante la duda, elegir Global (mover Global → Proyecto es más fácil que al revés)
4. Redactar el archivo de skill usando este formato:
```markdown
---
name: nombre-del-patron
description: "Menos de 130 caracteres"
user-invocable: false
origin: auto-extracted
---
# [Nombre Descriptivo del Patrón]
**Extraído:** [Fecha]
**Contexto:** [Breve descripción de cuándo aplica]
## Problema
[Qué problema resuelve - ser específico]
## Solución
[El patrón/técnica/solución alternativa - con ejemplos de código]
## Cuándo Usar
[Condiciones de activación]
```
5. **Puerta de calidad — Lista de verificación + Veredicto holístico**
### 5a. Lista de verificación requerida (verificar leyendo los archivos reales)
Ejecutar **todos** los siguientes antes de evaluar el borrador:
- [ ] Hacer grep en `~/.claude/skills/` y archivos relevantes de `.claude/skills/` del proyecto por palabras clave para verificar superposición de contenido
- [ ] Verificar MEMORY.md (tanto del proyecto como global) para superposición
- [ ] Considerar si añadir a una skill existente sería suficiente
- [ ] Confirmar que este es un patrón reutilizable, no una corrección puntual
### 5b. Veredicto holístico
Sintetizar los resultados de la lista de verificación y la calidad del borrador, luego elegir **uno** de los siguientes:
| Veredicto | Significado | Próxima Acción |
|-----------|-------------|---------------|
| **Guardar** | Único, específico, bien delimitado | Proceder al Paso 6 |
| **Mejorar y luego Guardar** | Valioso pero necesita refinamiento | Listar mejoras → revisar → re-evaluar (una vez) |
| **Absorber en [X]** | Debe añadirse a una skill existente | Mostrar skill objetivo y adiciones → Paso 6 |
| **Descartar** | Trivial, redundante o demasiado abstracto | Explicar razonamiento y parar |
**Dimensiones de guía** (informando el veredicto, no puntuadas):
- **Especificidad y Accionabilidad**: Contiene ejemplos de código o comandos que son utilizables inmediatamente
- **Ajuste de Alcance**: El nombre, las condiciones de activación y el contenido están alineados y enfocados en un solo patrón
- **Unicidad**: Proporciona valor no cubierto por skills existentes (informado por los resultados de la lista de verificación)
- **Reutilizabilidad**: Existen escenarios de activación realistas en sesiones futuras
6. **Flujo de confirmación específico por veredicto**
- **Mejorar y luego Guardar**: Presentar las mejoras requeridas + borrador revisado + lista de verificación/veredicto actualizado después de una re-evaluación; si el veredicto revisado es **Guardar**, guardar después de confirmación del usuario, de lo contrario seguir el nuevo veredicto
- **Guardar**: Presentar ruta de guardado + resultados de lista de verificación + razón de veredicto de 1 línea + borrador completo → guardar después de confirmación del usuario
- **Absorber en [X]**: Presentar ruta objetivo + adiciones (formato diff) + resultados de lista de verificación + razón del veredicto → añadir después de confirmación del usuario
- **Descartar**: Mostrar solo resultados de lista de verificación + razonamiento (sin necesidad de confirmación)
7. Guardar / Absorber en la ubicación determinada
## Formato de Salida para el Paso 5
```
### Lista de Verificación
- [x] grep de skills/: sin superposición (o: superposición encontrada → detalles)
- [x] MEMORY.md: sin superposición (o: superposición encontrada → detalles)
- [x] Añadir a skill existente: nuevo archivo apropiado (o: debería añadirse a [X])
- [x] Reutilizabilidad: confirmada (o: caso único → Descartar)
### Veredicto: Guardar / Mejorar y luego Guardar / Absorber en [X] / Descartar
**Razonamiento:** (1-2 oraciones explicando el veredicto)
```
## Notas
- No extraer correcciones triviales (typos, errores de sintaxis simples)
- No extraer problemas puntuales (interrupciones específicas de API, etc.)
- Enfocarse en patrones que ahorrarán tiempo en sesiones futuras
- Mantener las skills enfocadas — un patrón por skill
- Cuando el veredicto es Absorber, añadir a la skill existente en lugar de crear un archivo nuevo
+74
View File
@@ -0,0 +1,74 @@
---
description: Extraer patrones reutilizables de la sesión actual y guardarlos como skills candidatas o guía.
---
# /learn - Extraer Patrones Reutilizables
Analizar la sesión actual y extraer cualquier patrón que valga la pena guardar como skills.
## Activador
Ejecutar `/learn` en cualquier momento durante una sesión cuando se haya resuelto un problema no trivial.
## Qué Extraer
Buscar:
1. **Patrones de Resolución de Errores**
- ¿Qué error ocurrió?
- ¿Cuál fue la causa raíz?
- ¿Qué lo solucionó?
- ¿Es reutilizable para errores similares?
2. **Técnicas de Depuración**
- Pasos de depuración no obvios
- Combinaciones de herramientas que funcionaron
- Patrones de diagnóstico
3. **Soluciones Alternativas**
- Peculiaridades de librerías
- Limitaciones de API
- Correcciones específicas de versión
4. **Patrones Específicos del Proyecto**
- Convenciones de la base de código descubiertas
- Decisiones arquitectónicas tomadas
- Patrones de integración
## Formato de Salida
Crear un archivo de skill en `~/.claude/skills/learned/[nombre-del-patron].md`:
```markdown
# [Nombre Descriptivo del Patrón]
**Extraído:** [Fecha]
**Contexto:** [Breve descripción de cuándo aplica]
## Problema
[Qué problema resuelve - ser específico]
## Solución
[El patrón/técnica/solución alternativa]
## Ejemplo
[Ejemplo de código si aplica]
## Cuándo Usar
[Condiciones de activación - qué debe activar esta skill]
```
## Proceso
1. Revisar la sesión en busca de patrones extraíbles
2. Identificar el insight más valioso/reutilizable
3. Redactar el archivo de skill
4. Pedir al usuario que confirme antes de guardar
5. Guardar en `~/.claude/skills/learned/`
## Notas
- No extraer correcciones triviales (typos, errores de sintaxis simples)
- No extraer problemas puntuales (interrupciones específicas de API, etc.)
- Enfocarse en patrones que ahorrarán tiempo en sesiones futuras
- Mantener las skills enfocadas - un patrón por skill
+97
View File
@@ -0,0 +1,97 @@
---
description: Ejecutar un flujo de trabajo multi-modelo enfocado en backend para APIs, algoritmos, datos y lógica de negocio.
---
# Backend - Desarrollo Enfocado en Backend
Flujo de trabajo enfocado en backend (Investigación → Ideación → Plan → Ejecución → Optimización → Revisión), liderado por Codex.
## Uso
```bash
/backend <descripción de tarea backend>
```
## Contexto
- Tarea backend: $ARGUMENTS
- Liderado por Codex, Gemini para referencia auxiliar
- Aplicable a: diseño de API, implementación de algoritmos, optimización de base de datos, lógica de negocio
## Tu Rol
Eres el **Orquestador Backend**, coordinando la colaboración multi-modelo para tareas del lado del servidor (Investigación → Ideación → Plan → Ejecución → Optimización → Revisión).
**Modelos Colaboradores**:
- **Codex** Lógica backend, algoritmos (**Autoridad de backend, confiable**)
- **Gemini** Perspectiva frontend (**Opiniones de backend solo como referencia**)
- **Claude (propio)** Orquestación, planificación, ejecución, entrega
---
## Flujo de Trabajo Principal
### Fase 0: Mejora del Prompt (Opcional)
`[Modo: Preparar]` - Si el MCP ace-tool está disponible, llamar a `mcp__ace-tool__enhance_prompt`. Si no está disponible, usar `$ARGUMENTS` tal cual.
### Fase 1: Investigación
`[Modo: Investigación]` - Entender los requisitos y recopilar contexto
1. **Recuperación de Código** (si el MCP ace-tool está disponible): Llamar a `mcp__ace-tool__search_context`. Si no está disponible, usar herramientas integradas: `Glob` para descubrir archivos, `Grep` para buscar símbolos/APIs, `Read` para recopilar contexto.
2. Puntuación de completitud de requisitos (0-10): >=7 continuar, <7 parar y complementar
### Fase 2: Ideación
`[Modo: Ideación]` - Análisis liderado por Codex
**DEBE llamar a Codex**:
- Análisis de viabilidad técnica, soluciones recomendadas (al menos 2), evaluación de riesgos
**Guardar SESSION_ID** (`CODEX_SESSION`) para reutilización en fases posteriores.
Presentar soluciones (al menos 2), esperar selección del usuario.
### Fase 3: Planificación
`[Modo: Plan]` - Planificación liderada por Codex
**DEBE llamar a Codex** (usar `resume <CODEX_SESSION>`):
- Estructura de archivos, diseño de funciones/clases, relaciones de dependencia
Claude sintetiza el plan, guardar en `.claude/plan/nombre-tarea.md` después de aprobación del usuario.
### Fase 4: Implementación
`[Modo: Ejecutar]` - Desarrollo de código
- Seguir estrictamente el plan aprobado
- Seguir los estándares de código existentes del proyecto
- Asegurar manejo de errores, seguridad, optimización de rendimiento
### Fase 5: Optimización
`[Modo: Optimizar]` - Revisión liderada por Codex
**DEBE llamar a Codex**:
- Lista de problemas de seguridad, rendimiento, manejo de errores, cumplimiento de API
Integrar retroalimentación de la revisión, ejecutar optimización después de confirmación del usuario.
### Fase 6: Revisión de Calidad
`[Modo: Revisión]` - Evaluación final
- Verificar completitud contra el plan
- Ejecutar pruebas para verificar la funcionalidad
- Reportar problemas y recomendaciones
---
## Reglas Clave
1. **Las opiniones de backend de Codex son confiables**
2. **Las opiniones de backend de Gemini son solo de referencia**
3. Los modelos externos tienen **cero acceso de escritura al sistema de archivos**
4. Claude maneja todas las escrituras de código y operaciones de archivos
+127
View File
@@ -0,0 +1,127 @@
---
description: Ejecutar un plan de implementación multi-modelo preservando a Claude como el único escritor del sistema de archivos.
---
# Execute - Ejecución Colaborativa Multi-Modelo
Ejecución colaborativa multi-modelo - Obtener prototipo del plan → Claude refactoriza e implementa → Auditoría multi-modelo y entrega.
$ARGUMENTS
---
## Protocolos Principales
- **Soberanía del Código**: Los modelos externos tienen **cero acceso de escritura al sistema de archivos**, todas las modificaciones por Claude
- **Refactorización de Prototipo Sucio**: Tratar el Unified Diff de Codex/Gemini como "prototipo sucio", debe refactorizarse a código de calidad de producción
- **Mecanismo de Parada**: No proceder a la siguiente fase hasta que la salida de la fase actual esté validada
- **Prerrequisito**: Solo ejecutar después de que el usuario responda explícitamente "Y" a la salida de `/ccg:plan`
---
## Flujo de Ejecución
**Tarea a Ejecutar**: $ARGUMENTS
### Fase 0: Leer Plan
`[Modo: Preparar]`
1. **Identificar Tipo de Entrada**:
- Ruta de archivo de plan (ej. `.claude/plan/xxx.md`)
- Descripción directa de tarea
2. **Leer Contenido del Plan**:
- Si se proporciona ruta de archivo, leer y parsear
- Extraer: tipo de tarea, pasos de implementación, archivos clave, SESSION_ID
3. **Enrutamiento por Tipo de Tarea**:
| Tipo de Tarea | Detección | Ruta |
|---------------|-----------|------|
| **Frontend** | Páginas, componentes, UI, estilos | Gemini |
| **Backend** | API, interfaces, base de datos, lógica | Codex |
| **Fullstack** | Contiene tanto frontend como backend | Codex ∥ Gemini en paralelo |
---
### Fase 1: Recuperación Rápida de Contexto
`[Modo: Recuperación]`
Basado en la lista de "Archivos Clave" del plan, recuperar el contexto relevante del proyecto.
---
### Fase 3: Adquisición de Prototipo
`[Modo: Prototipo]`
**Enrutar según el Tipo de Tarea**:
#### Ruta A: Frontend/UI/Estilos → Gemini
1. Llamar a Gemini
2. Entrada: Contenido del plan + contexto recuperado + archivos objetivo
3. **Gemini es la autoridad de diseño frontend, su prototipo CSS/React/Vue es la línea base visual final**
#### Ruta B: Backend/Lógica/Algoritmos → Codex
1. Llamar a Codex
2. **Codex es la autoridad de lógica backend, aprovechar su razonamiento lógico y capacidades de depuración**
#### Ruta C: Fullstack → Llamadas en Paralelo
1. **Llamadas en Paralelo**
2. Esperar resultados completos de ambos modelos
3. Cada uno usa el `SESSION_ID` correspondiente del plan para `resume`
---
### Fase 4: Implementación de Código
`[Modo: Implementar]`
**Claude como Soberano del Código ejecuta los siguientes pasos**:
1. **Leer Diff**: Parsear el Unified Diff Patch retornado por Codex/Gemini
2. **Sandbox Mental**: Simular la aplicación del Diff a los archivos objetivo
3. **Refactorizar y Limpiar**: Refactorizar el "prototipo sucio" a **código altamente legible, mantenible y de nivel empresarial**
4. **Alcance Mínimo**: Cambios limitados solo al alcance del requisito
5. **Aplicar Cambios**: Usar herramientas Edit/Write para ejecutar las modificaciones reales
---
### Fase 5: Auditoría y Entrega
`[Modo: Auditoría]`
**Llamar en paralelo** a Codex y Gemini para revisión de código:
1. **Revisión de Codex**: Seguridad, rendimiento, manejo de errores, corrección lógica
2. **Revisión de Gemini**: Accesibilidad, consistencia de diseño, experiencia de usuario
Después de que pase la auditoría, reportar al usuario:
```markdown
## Ejecución Completa
### Resumen de Cambios
| Archivo | Operación | Descripción |
|---------|-----------|-------------|
| ruta/al/archivo.ts | Modificado | Descripción |
### Resultados de Auditoría
- Codex: <Pasó/Encontró N problemas>
- Gemini: <Pasó/Encontró N problemas>
```
---
## Reglas Clave
1. **Soberanía del Código** Todas las modificaciones de archivos por Claude, los modelos externos tienen cero acceso de escritura
2. **Refactorización del Prototipo Sucio** La salida de Codex/Gemini tratada como borrador, debe refactorizarse
3. **Reglas de Confianza** Backend sigue a Codex, Frontend sigue a Gemini
4. **Cambios Mínimos** Solo modificar el código necesario, sin efectos secundarios
5. **Auditoría Obligatoria** Debe realizar revisión de código multi-modelo después de los cambios
+97
View File
@@ -0,0 +1,97 @@
---
description: Ejecutar un flujo de trabajo multi-modelo enfocado en frontend para componentes, layouts, animaciones y pulido de UI.
---
# Frontend - Desarrollo Enfocado en Frontend
Flujo de trabajo enfocado en frontend (Investigación → Ideación → Plan → Ejecución → Optimización → Revisión), liderado por Gemini.
## Uso
```bash
/frontend <descripción de tarea de UI>
```
## Contexto
- Tarea frontend: $ARGUMENTS
- Liderado por Gemini, Codex para referencia auxiliar
- Aplicable a: diseño de componentes, layout responsivo, animaciones de UI, optimización de estilos
## Tu Rol
Eres el **Orquestador Frontend**, coordinando la colaboración multi-modelo para tareas de UI/UX (Investigación → Ideación → Plan → Ejecución → Optimización → Revisión).
**Modelos Colaboradores**:
- **Gemini** UI/UX frontend (**Autoridad frontend, confiable**)
- **Codex** Perspectiva backend (**Opiniones de frontend solo como referencia**)
- **Claude (propio)** Orquestación, planificación, ejecución, entrega
---
## Flujo de Trabajo Principal
### Fase 0: Mejora del Prompt (Opcional)
`[Modo: Preparar]` - Si el MCP ace-tool está disponible, llamar a `mcp__ace-tool__enhance_prompt`. Si no está disponible, usar `$ARGUMENTS` tal cual.
### Fase 1: Investigación
`[Modo: Investigación]` - Entender los requisitos y recopilar contexto
1. **Recuperación de Código**: Recuperar componentes existentes, estilos, sistema de diseño.
2. Puntuación de completitud de requisitos (0-10): >=7 continuar, <7 parar y complementar
### Fase 2: Ideación
`[Modo: Ideación]` - Análisis liderado por Gemini
**DEBE llamar a Gemini**:
- Análisis de viabilidad de UI, soluciones recomendadas (al menos 2), evaluación de UX
**Guardar SESSION_ID** (`GEMINI_SESSION`) para reutilización en fases posteriores.
Presentar soluciones (al menos 2), esperar selección del usuario.
### Fase 3: Planificación
`[Modo: Plan]` - Planificación liderada por Gemini
**DEBE llamar a Gemini** (usar `resume <GEMINI_SESSION>`):
- Estructura de componentes, flujo de UI, enfoque de estilos
Claude sintetiza el plan, guardar en `.claude/plan/nombre-tarea.md` después de aprobación del usuario.
### Fase 4: Implementación
`[Modo: Ejecutar]` - Desarrollo de código
- Seguir estrictamente el plan aprobado
- Seguir el sistema de diseño y estándares de código existentes del proyecto
- Asegurar responsividad, accesibilidad
### Fase 5: Optimización
`[Modo: Optimizar]` - Revisión liderada por Gemini
**DEBE llamar a Gemini**:
- Lista de problemas de accesibilidad, responsividad, rendimiento, consistencia de diseño
Integrar retroalimentación de la revisión, ejecutar optimización después de confirmación del usuario.
### Fase 6: Revisión de Calidad
`[Modo: Revisión]` - Evaluación final
- Verificar completitud contra el plan
- Verificar responsividad y accesibilidad
- Reportar problemas y recomendaciones
---
## Reglas Clave
1. **Las opiniones frontend de Gemini son confiables**
2. **Las opiniones frontend de Codex son solo de referencia**
3. Los modelos externos tienen **cero acceso de escritura al sistema de archivos**
4. Claude maneja todas las escrituras de código y operaciones de archivos
+100
View File
@@ -0,0 +1,100 @@
---
description: Crear un plan de implementación multi-modelo sin modificar código de producción.
---
# Plan - Planificación Colaborativa Multi-Modelo
Planificación colaborativa multi-modelo - Recuperación de contexto + Análisis de doble modelo → Generar plan de implementación paso a paso.
$ARGUMENTS
---
## Protocolos Principales
- **Solo Planificación**: Este comando permite leer contexto y escribir en archivos de plan `.claude/plan/*`, pero **NUNCA modificar código de producción**
- **Soberanía del Código**: Los modelos externos tienen **cero acceso de escritura al sistema de archivos**, todas las modificaciones por Claude
- **Paralelo Obligatorio**: Las llamadas a Codex/Gemini DEBEN usar `run_in_background: true`
---
## Flujo de Ejecución
**Tarea de Planificación**: $ARGUMENTS
### Fase 1: Recuperación Completa de Contexto
`[Modo: Investigación]`
1. **Mejora del Prompt** (si el MCP ace-tool está disponible)
2. **Recuperación de Contexto**: Obtener definiciones y firmas completas para clases, funciones y variables relevantes
3. **Verificación de Completitud**: Si los requisitos aún tienen ambigüedad, **DEBE** presentar preguntas guía al usuario
### Fase 2: Análisis Colaborativo Multi-Modelo
`[Modo: Análisis]`
**Llamadas en Paralelo** a Codex y Gemini:
1. **Análisis Backend de Codex**: Viabilidad técnica, impacto arquitectónico, consideraciones de rendimiento
2. **Análisis Frontend de Gemini**: Impacto en UI/UX, experiencia de usuario, diseño visual
**Guardar SESSION_ID** (`CODEX_SESSION` y `GEMINI_SESSION`).
**Validación Cruzada**:
1. Identificar consenso (señal fuerte)
2. Identificar divergencia (necesita ponderación)
3. Fortalezas complementarias: lógica backend sigue a Codex, diseño frontend sigue a Gemini
### Fase 2: Generar Plan de Implementación (Versión Final de Claude)
Sintetizar ambos análisis, generar **Plan de Implementación Paso a Paso**:
```markdown
## Plan de Implementación: <Nombre de Tarea>
### Tipo de Tarea
- [ ] Frontend (→ Gemini)
- [ ] Backend (→ Codex)
- [ ] Fullstack (→ Paralelo)
### Solución Técnica
<Solución óptima sintetizada del análisis de Codex + Gemini>
### Pasos de Implementación
1. <Paso 1> - Entregable esperado
2. <Paso 2> - Entregable esperado
...
### Archivos Clave
| Archivo | Operación | Descripción |
|---------|-----------|-------------|
| ruta/al/archivo.ts:L10-L50 | Modificar | Descripción |
### SESSION_ID (para uso de /ccg:execute)
- CODEX_SESSION: <session_id>
- GEMINI_SESSION: <session_id>
```
### Fin de Fase 2: Entrega del Plan (No Ejecución)
**Las responsabilidades de `/ccg:plan` terminan aquí**:
1. Presentar el plan completo al usuario
2. Guardar el plan en `.claude/plan/<nombre-característica>.md`
3. Solicitar revisión del usuario
**ABSOLUTAMENTE PROHIBIDO**:
- Preguntar "Y/N" y luego auto-ejecutar (la ejecución es responsabilidad de `/ccg:execute`)
- Cualquier operación de escritura en código de producción
- Llamar automáticamente a `/ccg:execute` o cualquier acción de implementación
---
## Reglas Clave
1. **Solo planificación, sin implementación** Este comando no ejecuta ningún cambio de código
2. **Sin prompts Y/N** Solo presentar el plan, dejar que el usuario decida los próximos pasos
3. **Reglas de Confianza** Backend sigue a Codex, Frontend sigue a Gemini
4. Los modelos externos tienen **cero acceso de escritura al sistema de archivos**
5. **Traspaso de SESSION_ID** El plan debe incluir `CODEX_SESSION` / `GEMINI_SESSION` al final
+104
View File
@@ -0,0 +1,104 @@
---
description: Ejecutar un flujo de trabajo de desarrollo multi-modelo completo con investigación, planificación, ejecución, optimización y revisión.
---
# Workflow - Desarrollo Colaborativo Multi-Modelo
Flujo de trabajo de desarrollo colaborativo multi-modelo (Investigación → Ideación → Plan → Ejecución → Optimización → Revisión), con enrutamiento inteligente: Frontend → Gemini, Backend → Codex.
## Uso
```bash
/workflow <descripción de la tarea>
```
## Contexto
- Tarea a desarrollar: $ARGUMENTS
- Flujo de trabajo estructurado de 6 fases con puertas de calidad
- Colaboración multi-modelo: Codex (backend) + Gemini (frontend) + Claude (orquestación)
## Tu Rol
Eres el **Orquestador**, coordinando un sistema colaborativo multi-modelo (Investigación → Ideación → Plan → Ejecución → Optimización → Revisión).
**Modelos Colaboradores**:
- **Codex** Lógica backend, algoritmos, depuración (**Autoridad de backend, confiable**)
- **Gemini** UI/UX frontend, diseño visual (**Experto en frontend, opiniones de backend solo como referencia**)
- **Claude (propio)** Orquestación, planificación, ejecución, entrega
---
## Pautas de Comunicación
1. Comenzar respuestas con etiqueta de modo `[Modo: X]`, el inicial es `[Modo: Investigación]`
2. Seguir secuencia estricta: `Investigación → Ideación → Plan → Ejecución → Optimización → Revisión`
3. Solicitar confirmación del usuario después de completar cada fase
4. Forzar parada cuando la puntuación < 7 o el usuario no aprueba
---
## Flujo de Ejecución
**Descripción de la Tarea**: $ARGUMENTS
### Fase 1: Investigación y Análisis
`[Modo: Investigación]` - Entender requisitos y recopilar contexto:
1. **Mejora del Prompt** (si el MCP ace-tool está disponible)
2. **Recuperación de Contexto**
3. **Puntuación de Completitud de Requisitos** (0-10):
- Claridad del objetivo (0-3), Resultado esperado (0-3), Límites del alcance (0-2), Restricciones (0-2)
- ≥7: Continuar | <7: Parar, hacer preguntas aclaratorias
### Fase 2: Ideación de Soluciones
`[Modo: Ideación]` - Análisis paralelo multi-modelo:
**Llamadas en Paralelo**:
- Codex: Viabilidad técnica, soluciones, riesgos
- Gemini: Viabilidad de UI, soluciones, evaluación de UX
**Guardar SESSION_ID** (`CODEX_SESSION` y `GEMINI_SESSION`).
### Fase 3: Planificación Detallada
`[Modo: Plan]` - Planificación colaborativa multi-modelo:
**Llamadas en Paralelo** (reanudar sesión):
- Codex: Arquitectura backend
- Gemini: Arquitectura frontend
**Síntesis de Claude**: Adoptar plan backend de Codex + plan frontend de Gemini.
### Fase 4: Implementación
`[Modo: Ejecutar]` - Desarrollo de código:
- Seguir estrictamente el plan aprobado
- Seguir los estándares de código existentes del proyecto
### Fase 5: Optimización de Código
`[Modo: Optimizar]` - Revisión paralela multi-modelo:
**Llamadas en Paralelo**:
- Codex: Seguridad, rendimiento, manejo de errores
- Gemini: Accesibilidad, consistencia de diseño
### Fase 6: Revisión de Calidad
`[Modo: Revisión]` - Evaluación final:
- Verificar completitud contra el plan
- Ejecutar pruebas para verificar la funcionalidad
- Reportar problemas y recomendaciones
---
## Reglas Clave
1. La secuencia de fases no puede omitirse (a menos que el usuario lo indique explícitamente)
2. Los modelos externos tienen **cero acceso de escritura al sistema de archivos**, todas las modificaciones por Claude
3. **Forzar parada** cuando la puntuación < 7 o el usuario no aprueba
+231
View File
@@ -0,0 +1,231 @@
---
description: Guía de orquestación secuencial y tmux/worktree para flujos de trabajo multi-agente.
---
# Comando Orchestrate
Flujo de trabajo secuencial de agentes para tareas complejas.
## Uso
`/orchestrate [tipo-workflow] [descripción-de-tarea]`
## Tipos de Workflow
### feature
Flujo de trabajo completo de implementación de feature:
```
planner -> tdd-guide -> code-reviewer -> security-reviewer
```
### bugfix
Flujo de trabajo de investigación y corrección de bugs:
```
planner -> tdd-guide -> code-reviewer
```
### refactor
Flujo de trabajo de refactoring seguro:
```
architect -> code-reviewer -> tdd-guide
```
### security
Revisión enfocada en seguridad:
```
security-reviewer -> code-reviewer -> architect
```
## Patrón de Ejecución
Para cada agente en el flujo de trabajo:
1. **Invocar el agente** con el contexto del agente anterior
2. **Recopilar la salida** como documento de handoff estructurado
3. **Pasarlo al siguiente agente** en la cadena
4. **Consolidar los resultados** en el reporte final
## Formato del Documento de Handoff
Entre agentes, crear el documento de handoff:
```markdown
## HANDOFF: [agente-anterior] -> [agente-siguiente]
### Context
[Resumen de lo que se hizo]
### Findings
[Descubrimientos o decisiones clave]
### Files Modified
[Lista de archivos tocados]
### Open Questions
[Elementos sin resolver para el siguiente agente]
### Recommendations
[Próximos pasos recomendados]
```
## Ejemplo: Flujo de Trabajo Feature
```
/orchestrate feature "Agregar autenticación de usuarios"
```
Ejecuta:
1. **Agente Planner**
- Analiza los requisitos
- Crea un plan de implementación
- Identifica dependencias
- Salida: `HANDOFF: planner -> tdd-guide`
2. **Agente TDD Guide**
- Lee el handoff del planner
- Escribe las pruebas primero
- Implementa para que las pruebas pasen
- Salida: `HANDOFF: tdd-guide -> code-reviewer`
3. **Agente Code Reviewer**
- Revisa la implementación
- Verifica problemas
- Sugiere mejoras
- Salida: `HANDOFF: code-reviewer -> security-reviewer`
4. **Agente Security Reviewer**
- Auditoría de seguridad
- Verificación de vulnerabilidades
- Aprobación final
- Salida: Reporte Final
## Formato del Reporte Final
```
ORCHESTRATION REPORT
====================
Workflow: feature
Task: Agregar autenticación de usuarios
Agents: planner -> tdd-guide -> code-reviewer -> security-reviewer
SUMMARY
-------
[Resumen en un párrafo]
AGENT OUTPUTS
-------------
Planner: [resumen]
TDD Guide: [resumen]
Code Reviewer: [resumen]
Security Reviewer: [resumen]
FILES CHANGED
-------------
[Lista de todos los archivos modificados]
TEST RESULTS
------------
[Resumen de pruebas pasadas/fallidas]
SECURITY STATUS
---------------
[Hallazgos de seguridad]
RECOMMENDATION
--------------
[SHIP / NEEDS WORK / BLOCKED]
```
## Ejecución Paralela
Para verificaciones independientes, ejecutar agentes en paralelo:
```markdown
### Fase Paralela
Ejecutar simultáneamente:
- code-reviewer (calidad)
- security-reviewer (seguridad)
- architect (diseño)
### Combinar Resultados
Combinar las salidas en un único reporte
```
Para workers externos en tmux pane con git worktrees separados, usar `node scripts/orchestrate-worktrees.js plan.json --execute`. El patrón de orquestación integrado permanece en proceso; el helper sirve para sesiones de larga duración o cross-harness.
Cuando los workers necesiten ver archivos locales no rastreados o sucios del checkout principal, agregar `seedPaths` al archivo de plan. ECC superpone solo esas rutas seleccionadas en cada worktree de worker después de `git worktree add`; esto muestra scripts, planes o documentos locales en progreso mientras mantiene el branch aislado.
```json
{
"sessionName": "workflow-e2e",
"seedPaths": [
"scripts/orchestrate-worktrees.js",
"scripts/lib/tmux-worktree-orchestrator.js",
".claude/plan/workflow-e2e-test.json"
],
"workers": [
{ "name": "docs", "task": "Actualizar documentación de orquestación." }
]
}
```
Para exportar un snapshot del plano de control de una sesión tmux/worktree activa, ejecutar:
```bash
node scripts/orchestration-status.js .claude/plan/workflow-visual-proof.json
```
El snapshot contiene actividad de sesión, metadatos de pane de tmux, estados de workers, objetivos, seed overlays y resúmenes de handoff recientes en formato JSON.
## Handoff al Centro de Control del Operador
Cuando el flujo de trabajo se extiende a múltiples sesiones, worktrees o panes de tmux, agregar un bloque de plano de control al handoff final:
```markdown
CONTROL PLANE
-------------
Sessions:
- ID o alias de sesión activa
- branch + ruta de worktree para cada worker activo
- nombre del pane de tmux o sesión detached donde aplique
Diffs:
- resumen de git status
- git diff --stat de archivos tocados
- notas de riesgo de merge/conflictos
Approvals:
- aprobaciones de usuario pendientes
- pasos bloqueados esperando aprobación
Telemetry:
- timestamp de última actividad o señal de idle
- deriva estimada de tokens o costos
- eventos de política reportados por hooks o revisores
```
Esto mantiene al planner, implementador, revisor y workers del loop comprensibles desde la superficie del operador.
## Argumentos
$ARGUMENTS:
- `feature <descripción>` - Flujo de trabajo completo de feature
- `bugfix <descripción>` - Flujo de trabajo de corrección de bug
- `refactor <descripción>` - Flujo de trabajo de refactoring
- `security <descripción>` - Flujo de trabajo de revisión de seguridad
- `custom <agentes> <descripción>` - Secuencia de agentes personalizada
## Ejemplo de Workflow Personalizado
```
/orchestrate custom "architect,tdd-guide,code-reviewer" "Rediseñar la capa de caché"
```
## Consejos
1. **Comenzar con planner para features complejas**
2. **Siempre incluir code-reviewer antes del merge**
3. **Usar security-reviewer para auth/pagos/PII**
4. **Mantener los handoffs concisos** - enfocarse en lo que el siguiente agente necesita
5. **Ejecutar validación entre agentes si es necesario**
+109
View File
@@ -0,0 +1,109 @@
---
description: Reformular requisitos, evaluar riesgos y crear un plan de implementación paso a paso. ESPERAR confirmación del usuario antes de tocar cualquier código.
argument-hint: "[descripción de la funcionalidad | ruta/a/*.prd.md]"
---
# Comando Plan
Este comando crea un plan de implementación completo antes de escribir cualquier código. Acepta tanto requisitos en texto libre como un archivo PRD en Markdown.
Ejecutar inline por defecto. No llamar a la herramienta Task ni a ningún subagente por defecto.
## Qué Hace Este Comando
1. **Reformular Requisitos** - Aclarar qué necesita construirse
2. **Identificar Riesgos** - Detectar problemas potenciales y bloqueadores
3. **Crear Plan de Pasos** - Descomponer la implementación en fases
4. **Esperar Confirmación** - DEBE recibir aprobación del usuario antes de proceder
## Cuándo Usar
Usar `/plan` cuando:
- Se empieza una nueva funcionalidad
- Se hacen cambios arquitectónicos significativos
- Se trabaja en refactorización compleja
- Múltiples archivos/componentes se verán afectados
- Los requisitos no están claros o son ambiguos
## Cómo Funciona
El asistente:
1. **Analiza la solicitud** y reformula los requisitos en términos claros
2. **Fundamenta el plan** en patrones relevantes del código base cuando el repositorio está disponible
3. **Descompone en fases** con pasos específicos y accionables
4. **Identifica dependencias** entre componentes
5. **Evalúa riesgos** y posibles bloqueadores
6. **Estima la complejidad** (Alta/Media/Baja)
7. **Presenta el plan** y ESPERA tu confirmación explícita
## Modos de Entrada
| Entrada | Modo | Comportamiento |
|---------|------|---------------|
| `ruta/al/nombre.prd.md` | Modo artefacto PRD | Leer el PRD, elegir el próximo hito de entrega pendiente y escribir `.claude/plans/{nombre}.plan.md` |
| Cualquier otra ruta markdown | Modo referencia | Leer el archivo como contexto y producir un plan inline |
| Texto libre | Modo conversacional | Producir un plan inline |
| Entrada vacía | Modo aclaración | Preguntar qué debe planificarse |
## Fundamentación en Patrones
Antes de escribir el plan, buscar en el código base las convenciones que la implementación debe replicar:
| Categoría | Qué capturar |
|-----------|-------------|
| Nomenclatura | Archivo, función, tipo, comando o nomenclatura de scripts en el área afectada |
| Manejo de errores | Cómo se generan, retornan, registran o manejan los fallos |
| Logging | Niveles, formato y qué se registra |
| Acceso a datos | Patrones de repositorio, servicio, consulta o sistema de archivos |
| Pruebas | Ubicación de archivos de prueba, framework, fixtures y estilo de afirmaciones |
## Ejemplo de Uso
```
Usuario: /plan Necesito añadir notificaciones en tiempo real cuando los mercados se resuelven
Asistente:
# Plan de Implementación: Notificaciones de Resolución de Mercados en Tiempo Real
## Reformulación de Requisitos
- Enviar notificaciones a usuarios cuando los mercados que observan se resuelven
- Soporte para múltiples canales (en-app, email, webhook)
- Asegurar entrega confiable de notificaciones
## Fases de Implementación
### Fase 1: Schema de Base de Datos
- Añadir tabla de notificaciones con columnas: id, user_id, market_id, type, status, created_at
### Fase 2: Servicio de Notificaciones
- Crear servicio en lib/notifications.ts
- Implementar cola de notificaciones con BullMQ/Redis
## Riesgos
- ALTO: Entregabilidad de email (SPF/DKIM requerido)
- MEDIO: Rendimiento con 1000+ usuarios por mercado
## Complejidad Estimada: MEDIA
**ESPERANDO CONFIRMACIÓN**: ¿Proceder con este plan? (sí/no/modificar)
```
## Notas Importantes
**CRÍTICO**: Este comando **NO** escribirá ningún código hasta que confirmes explícitamente el plan con "sí", "proceder" o respuesta afirmativa similar.
## Integración con Otros Comandos
Después de planificar:
- Usar la skill `tdd-workflow` para implementar con desarrollo guiado por pruebas
- Usar `/build-fix` si ocurren errores de build
- Usar `/code-review` para revisar la implementación completada
- Usar `/pr` o `/prp-pr` para abrir un pull request
## Agente Planificador Opcional
ECC también proporciona un agente `planner` para instalaciones manuales que incluyen archivos de agente. Usarlo solo cuando el runtime local ya expone ese subagente y el usuario lo pide explícitamente.
El archivo fuente se encuentra en:
`agents/planner.md`
+116
View File
@@ -0,0 +1,116 @@
---
description: Analizar un proyecto y generar comandos de servicio PM2 para los servicios detectados de frontend, backend o base de datos.
---
# PM2 Init
Auto-analizar el proyecto y generar comandos de servicio PM2.
**Comando**: `$ARGUMENTS`
---
## Flujo de Trabajo
1. Verificar PM2 (instalar mediante `npm install -g pm2` si falta)
2. Escanear el proyecto para identificar servicios (frontend/backend/base de datos)
3. Generar archivos de configuración y archivos de comando individuales
---
## Detección de Servicios
| Tipo | Detección | Puerto por Defecto |
|------|-----------|-------------------|
| Vite | vite.config.* | 5173 |
| Next.js | next.config.* | 3000 |
| Nuxt | nuxt.config.* | 3000 |
| CRA | react-scripts en package.json | 3000 |
| Express/Node | directorio server/backend/api + package.json | 3000 |
| FastAPI/Flask | requirements.txt / pyproject.toml | 8000 |
| Go | go.mod / main.go | 8080 |
**Prioridad de Detección de Puerto**: Usuario especificado > .env > archivo de config > args de scripts > puerto por defecto
---
## Archivos Generados
```
project/
├── ecosystem.config.cjs # Configuración PM2
├── {backend}/start.cjs # Wrapper Python (si aplica)
└── .claude/
├── commands/
│ ├── pm2-all.md # Iniciar todo + monit
│ ├── pm2-all-stop.md # Detener todo
│ ├── pm2-all-restart.md # Reiniciar todo
│ ├── pm2-{puerto}.md # Iniciar único + logs
│ ├── pm2-{puerto}-stop.md # Detener único
│ ├── pm2-{puerto}-restart.md # Reiniciar único
│ ├── pm2-logs.md # Ver todos los logs
│ └── pm2-status.md # Ver estado
└── scripts/
├── pm2-logs-{puerto}.ps1 # Logs de servicio único
└── pm2-monit.ps1 # Monitor PM2
```
---
## Configuración Windows (IMPORTANTE)
### ecosystem.config.cjs
**Debe usar extensión `.cjs`**
```javascript
module.exports = {
apps: [
// Node.js (Vite/Next/Nuxt)
{
name: 'project-3000',
cwd: './packages/web',
script: 'node_modules/vite/bin/vite.js',
args: '--port 3000',
interpreter: 'C:/Program Files/nodejs/node.exe',
env: { NODE_ENV: 'development' }
}
]
}
```
---
## Reglas Clave
1. **Archivo de config**: `ecosystem.config.cjs` (no .js)
2. **Node.js**: Especificar ruta del bin directamente + intérprete
3. **Python**: Script wrapper Node.js + `windowsHide: true`
4. **Abrir nueva ventana**: `start wt.exe -d "{ruta}" pwsh -NoExit -c "comando"`
5. **Contenido mínimo**: Cada archivo de comando tiene solo 1-2 líneas de descripción + bloque bash
6. **Ejecución directa**: Sin necesidad de parseo por IA, solo ejecutar el comando bash
---
## Resumen Post-Init
Después de generar todos los archivos:
```
## PM2 Init Completado
**Servicios:**
| Puerto | Nombre | Tipo |
|--------|--------|------|
| {puerto} | {nombre} | {tipo} |
**Comandos Claude:** /pm2-all, /pm2-all-stop, /pm2-{puerto}, /pm2-{puerto}-stop, /pm2-logs, /pm2-status
**Comandos de Terminal:**
pm2 start ecosystem.config.cjs # Primera vez
pm2 start all # Después de la primera vez
pm2 stop all / pm2 restart all
pm2 logs / pm2 status / pm2 monit
pm2 resurrect # Restaurar lista guardada
```
+81
View File
@@ -0,0 +1,81 @@
---
description: Identificar y eliminar de forma segura código muerto con verificación después de cada cambio.
---
# Refactor Clean
Identificar y eliminar de forma segura código muerto con verificación de pruebas en cada paso.
## Paso 1: Detectar Código Muerto
Ejecutar herramientas de análisis según el tipo de proyecto:
| Herramienta | Qué Encuentra | Comando |
|-------------|--------------|---------|
| knip | Exportaciones, archivos, dependencias no usadas | `npx knip` |
| depcheck | Dependencias npm no usadas | `npx depcheck` |
| ts-prune | Exportaciones TypeScript no usadas | `npx ts-prune` |
| vulture | Código Python no usado | `vulture src/` |
| deadcode | Código Go no usado | `deadcode ./...` |
| cargo-udeps | Dependencias Rust no usadas | `cargo +nightly udeps` |
Si no hay ninguna herramienta disponible, usar Grep para encontrar exportaciones con cero imports.
## Paso 2: Categorizar Hallazgos
Ordenar los hallazgos en niveles de seguridad:
| Nivel | Ejemplos | Acción |
|-------|----------|--------|
| **SEGURO** | Utilidades no usadas, helpers de prueba, funciones internas | Eliminar con confianza |
| **PRECAUCIÓN** | Componentes, rutas de API, middleware | Verificar que no haya imports dinámicos ni consumidores externos |
| **PELIGRO** | Archivos de config, puntos de entrada, definiciones de tipos | Investigar antes de tocar |
## Paso 3: Bucle de Eliminación Segura
Para cada elemento SEGURO:
1. **Ejecutar la suite de pruebas completa** — Establecer línea base (todo verde)
2. **Eliminar el código muerto** — Usar la herramienta Edit para eliminación quirúrgica
3. **Re-ejecutar la suite de pruebas** — Verificar que nada se rompió
4. **Si las pruebas fallan** — Revertir inmediatamente con `git checkout -- <archivo>` y omitir este elemento
5. **Si las pruebas pasan** — Continuar con el siguiente elemento
## Paso 4: Manejar Elementos de PRECAUCIÓN
Antes de eliminar elementos de PRECAUCIÓN:
- Buscar imports dinámicos: `import()`, `require()`, `__import__`
- Buscar referencias de string: nombres de rutas, nombres de componentes en configs
- Verificar si se exporta desde una API pública de paquete
- Verificar que no haya consumidores externos (revisar dependientes si está publicado)
## Paso 5: Consolidar Duplicados
Después de eliminar código muerto, buscar:
- Funciones casi duplicadas (>80% similares) — fusionar en una
- Definiciones de tipo redundantes — consolidar
- Funciones wrapper que no añaden valor — inline
- Re-exports que no tienen propósito — eliminar la indirección
## Paso 6: Resumen
Reportar resultados:
```
Limpieza de Código Muerto
──────────────────────────────
Eliminado: 12 funciones no usadas
3 archivos no usados
5 dependencias no usadas
Omitido: 2 elementos (pruebas fallaron)
Guardado: ~450 líneas eliminadas
──────────────────────────────
Todas las pruebas pasando ✓
```
## Reglas
- **Nunca eliminar sin ejecutar las pruebas primero**
- **Una eliminación a la vez** — Los cambios atómicos facilitan el rollback
- **Omitir si hay incertidumbre** — Mejor conservar código muerto que romper producción
- **No refactorizar mientras se limpia** — Separar las preocupaciones (limpiar primero, refactorizar después)
+119
View File
@@ -0,0 +1,119 @@
---
description: Gestionar el historial de sesiones de Claude Code, alias y metadatos de sesión.
---
# Comando Sessions
Gestionar el historial de sesiones de Claude Code - listar, cargar, crear alias y editar sesiones almacenadas en `~/.claude/session-data/` con lecturas heredadas desde `~/.claude/sessions/`.
## Uso
`/sessions [list|load|alias|info|help] [opciones]`
## Acciones
### Listar Sesiones
Mostrar todas las sesiones con metadatos, filtrado y paginación.
```bash
/sessions # Listar todas las sesiones (por defecto)
/sessions list # Igual que el anterior
/sessions list --limit 10 # Mostrar 10 sesiones
/sessions list --date 2026-02-01 # Filtrar por fecha
/sessions list --search abc # Buscar por ID de sesión
```
### Cargar Sesión
Cargar y mostrar el contenido de una sesión (por ID o alias).
```bash
/sessions load <id|alias> # Cargar sesión
/sessions load 2026-02-01 # Por fecha (para sesiones sin ID)
/sessions load a1b2c3d4 # Por ID corto
/sessions load my-alias # Por nombre de alias
```
### Crear Alias
Crear un alias memorable para una sesión.
```bash
/sessions alias <id> <nombre> # Crear alias
/sessions alias 2026-02-01 hoy-trabajo # Crear alias llamado "hoy-trabajo"
```
### Eliminar Alias
Eliminar un alias existente.
```bash
/sessions alias --remove <nombre> # Eliminar alias
/sessions unalias <nombre> # Igual que el anterior
```
### Información de Sesión
Mostrar información detallada sobre una sesión.
```bash
/sessions info <id|alias> # Mostrar detalles de la sesión
```
### Listar Aliases
Mostrar todos los aliases de sesión.
```bash
/sessions aliases # Listar todos los aliases
```
## Notas del Operador
- Los archivos de sesión persisten `Project`, `Branch` y `Worktree` en el encabezado para que `/sessions info` pueda distinguir ejecuciones paralelas de tmux/worktree.
- Para monitoreo estilo command-center, combinar `/sessions info`, `git diff --stat` y las métricas de costo emitidas por `scripts/hooks/cost-tracker.js`.
## Argumentos
$ARGUMENTS:
- `list [opciones]` - Listar sesiones
- `--limit <n>` - Máximo de sesiones a mostrar (por defecto: 50)
- `--date <AAAA-MM-DD>` - Filtrar por fecha
- `--search <patrón>` - Buscar en el ID de sesión
- `load <id|alias>` - Cargar contenido de sesión
- `alias <id> <nombre>` - Crear alias para la sesión
- `alias --remove <nombre>` - Eliminar alias
- `unalias <nombre>` - Igual que `--remove`
- `info <id|alias>` - Mostrar estadísticas de la sesión
- `aliases` - Listar todos los aliases
- `help` - Mostrar esta ayuda
## Ejemplos
```bash
# Listar todas las sesiones
/sessions list
# Crear un alias para la sesión de hoy
/sessions alias 2026-02-01 hoy
# Cargar sesión por alias
/sessions load hoy
# Mostrar información de la sesión
/sessions info hoy
# Eliminar alias
/sessions alias --remove hoy
# Listar todos los aliases
/sessions aliases
```
## Notas
- Las sesiones se almacenan como archivos markdown en `~/.claude/session-data/` con lecturas heredadas desde `~/.claude/sessions/`
- Los aliases se almacenan en `~/.claude/session-aliases.json`
- Los IDs de sesión pueden abreviarse (los primeros 4-8 caracteres suelen ser suficientemente únicos)
- Usar aliases para sesiones referenciadas frecuentemente
+80
View File
@@ -0,0 +1,80 @@
---
description: Configurar tu gestor de paquetes preferido (npm/pnpm/yarn/bun)
disable-model-invocation: true
---
# Configuración del Gestor de Paquetes
Configurar tu gestor de paquetes preferido para este proyecto o globalmente.
## Uso
```bash
# Detectar el gestor de paquetes actual
node scripts/setup-package-manager.js --detect
# Establecer preferencia global
node scripts/setup-package-manager.js --global pnpm
# Establecer preferencia del proyecto
node scripts/setup-package-manager.js --project bun
# Listar gestores de paquetes disponibles
node scripts/setup-package-manager.js --list
```
## Prioridad de Detección
Al determinar qué gestor de paquetes usar, se verifica el siguiente orden:
1. **Variable de entorno**: `CLAUDE_PACKAGE_MANAGER`
2. **Config del proyecto**: `.claude/package-manager.json`
3. **package.json**: campo `packageManager`
4. **Lock file**: Presencia de package-lock.json, yarn.lock, pnpm-lock.yaml o bun.lockb
5. **Config global**: `~/.claude/package-manager.json`
6. **Fallback**: Primer gestor de paquetes disponible (pnpm > bun > yarn > npm)
## Archivos de Configuración
### Configuración Global
```json
// ~/.claude/package-manager.json
{
"packageManager": "pnpm"
}
```
### Configuración del Proyecto
```json
// .claude/package-manager.json
{
"packageManager": "bun"
}
```
### package.json
```json
{
"packageManager": "pnpm@8.6.0"
}
```
## Variable de Entorno
Establecer `CLAUDE_PACKAGE_MANAGER` para anular todos los demás métodos de detección:
```bash
# Windows (PowerShell)
$env:CLAUDE_PACKAGE_MANAGER = "pnpm"
# macOS/Linux
export CLAUDE_PACKAGE_MANAGER=pnpm
```
## Ejecutar la Detección
Para ver los resultados actuales de detección del gestor de paquetes:
```bash
node scripts/setup-package-manager.js --detect
```
+89
View File
@@ -0,0 +1,89 @@
---
name: skill-create
description: Analizar el historial local de git para extraer patrones de codificación y generar archivos SKILL.md. Versión local de la Skill Creator GitHub App.
allowed_tools: ["Bash", "Read", "Write", "Grep", "Glob"]
---
# /skill-create - Generación Local de Skills
Analizar el historial de git de tu repositorio para extraer patrones de codificación y generar archivos SKILL.md que enseñan a Claude las prácticas de tu equipo.
## Uso
```bash
/skill-create # Analizar el repositorio actual
/skill-create --commits 100 # Analizar los últimos 100 commits
/skill-create --output ./skills # Directorio de salida personalizado
/skill-create --instincts # También generar instintos para continuous-learning-v2
```
## Qué Hace
1. **Parsear Historial de Git** - Analizar commits, cambios de archivos y patrones
2. **Detectar Patrones** - Identificar flujos de trabajo y convenciones recurrentes
3. **Generar SKILL.md** - Crear archivos de skill válidos de Claude Code
4. **Opcionalmente Crear Instintos** - Para el sistema continuous-learning-v2
## Pasos de Análisis
### Paso 1: Recopilar Datos de Git
```bash
# Obtener commits recientes con cambios de archivos
git log --oneline -n ${COMMITS:-200} --name-only --pretty=format:"%H|%s|%ad" --date=short
# Obtener frecuencia de commits por archivo
git log --oneline -n 200 --name-only | grep -v "^$" | grep -v "^[a-f0-9]" | sort | uniq -c | sort -rn | head -20
# Obtener patrones de mensajes de commit
git log --oneline -n 200 | cut -d' ' -f2- | head -50
```
### Paso 2: Detectar Patrones
| Patrón | Método de Detección |
|--------|---------------------|
| **Convenciones de commit** | Regex en mensajes de commit (feat:, fix:, chore:) |
| **Co-cambios de archivos** | Archivos que siempre cambian juntos |
| **Secuencias de flujo de trabajo** | Patrones de cambio de archivos repetidos |
| **Arquitectura** | Estructura de carpetas y convenciones de nomenclatura |
| **Patrones de testing** | Ubicaciones de archivos de prueba, nomenclatura, cobertura |
### Paso 3: Generar SKILL.md
```markdown
---
name: {nombre-repo}-patterns
description: Patrones de codificación extraídos de {nombre-repo}
version: 1.0.0
source: local-git-analysis
analyzed_commits: {cantidad}
---
# Patrones de {Nombre Repo}
## Convenciones de Commit
{patrones detectados en mensajes de commit}
## Arquitectura del Código
{estructura de carpetas y organización detectadas}
## Flujos de Trabajo
{patrones de cambio de archivos repetidos detectados}
## Patrones de Testing
{convenciones de pruebas detectadas}
```
## Integración con GitHub App
Para funciones avanzadas (10k+ commits, compartir en equipo, PRs automáticos), usar la [Skill Creator GitHub App](https://github.com/apps/skill-creator):
- Comentar `/skill-creator analyze` en cualquier issue
- Recibe un PR con las skills generadas
## Comandos Relacionados
- `/instinct-import` - Importar instintos generados
- `/instinct-status` - Ver instintos aprendidos
- `/evolve` - Agrupar instintos en skills/agentes
+328
View File
@@ -0,0 +1,328 @@
---
description: Aplicar el flujo de trabajo de desarrollo guiado por pruebas (TDD). Diseña interfaces, crea las pruebas PRIMERO, luego implementa el código mínimo. Garantiza 80%+ de cobertura de código.
---
# Comando TDD
Este comando invoca al agente **tdd-guide** para aplicar la metodología de desarrollo guiado por pruebas.
## Qué Hace Este Comando
1. **Diseñar Interfaces** - Definir primero los tipos/interfaces
2. **Crear Pruebas Primero** - Escribir pruebas que fallan (RED)
3. **Implementar Código Mínimo** - Escribir el código justo para que pasen (GREEN)
4. **Refactorizar** - Mejorar el código mientras las pruebas siguen en verde (REFACTOR)
5. **Verificar Cobertura** - Garantizar 80%+ de cobertura de pruebas
## Cuándo Usarlo
Usa el comando `/tdd` cuando:
- Implementes nuevas features
- Agregues nuevas funciones/componentes
- Corrijas bugs (primero escribe la prueba que reproduce el bug)
- Refactorices código existente
- Construyas lógica de negocio crítica
## Cómo Funciona
El agente tdd-guide:
1. **Definirá las interfaces** para entradas/salidas
2. **Escribirá pruebas que FALLARÁN** (porque el código aún no existe)
3. **Ejecutará las pruebas** y verificará que fallen por la razón correcta
4. **Escribirá la implementación mínima** para que las pruebas pasen
5. **Ejecutará las pruebas** y verificará que pasen
6. **Refactorizará el código** mientras las pruebas siguen en verde
7. **Verificará la cobertura** y agregará más pruebas si está por debajo del 80%
## El Ciclo TDD
```
ROJO → VERDE → REFACTORIZAR → REPETIR
ROJO: Escribir una prueba que falla
VERDE: Escribir el código mínimo para que pase
REFACTORIZAR: Mejorar el código, las pruebas siguen pasando
REPETIR: Siguiente feature/escenario
```
## Ejemplo de Uso
```
Usuario: /tdd Necesito una función para calcular el puntaje de liquidez de un mercado
Agente (tdd-guide):
# Sesión TDD: Calculadora de Puntaje de Liquidez de Mercado
## Paso 1: Definir Interface (SCAFFOLD)
```typescript
// lib/liquidity.ts
export interface MarketData {
totalVolume: number
bidAskSpread: number
activeTraders: number
lastTradeTime: Date
}
export function calculateLiquidityScore(market: MarketData): number {
// TODO: Implementación
throw new Error('Not implemented')
}
```
## Paso 2: Escribir Prueba que Falla (ROJO)
```typescript
// lib/liquidity.test.ts
import { calculateLiquidityScore } from './liquidity'
describe('calculateLiquidityScore', () => {
it('debe retornar puntaje alto para mercado líquido', () => {
const market = {
totalVolume: 100000,
bidAskSpread: 0.01,
activeTraders: 500,
lastTradeTime: new Date()
}
const score = calculateLiquidityScore(market)
expect(score).toBeGreaterThan(80)
expect(score).toBeLessThanOrEqual(100)
})
it('debe retornar puntaje bajo para mercado poco líquido', () => {
const market = {
totalVolume: 100,
bidAskSpread: 0.5,
activeTraders: 2,
lastTradeTime: new Date(Date.now() - 86400000) // hace 1 día
}
const score = calculateLiquidityScore(market)
expect(score).toBeLessThan(30)
expect(score).toBeGreaterThanOrEqual(0)
})
it('debe manejar caso límite: volumen cero', () => {
const market = {
totalVolume: 0,
bidAskSpread: 0,
activeTraders: 0,
lastTradeTime: new Date()
}
const score = calculateLiquidityScore(market)
expect(score).toBe(0)
})
})
```
## Paso 3: Ejecutar Pruebas - Verificar el Fallo
```bash
npm test lib/liquidity.test.ts
FAIL lib/liquidity.test.ts
✕ debe retornar puntaje alto para mercado líquido (2 ms)
Error: Not implemented
1 test failed, 0 passed
```
PASS: Las pruebas fallan como se esperaba. Listo para implementar.
## Paso 4: Implementar Código Mínimo (VERDE)
```typescript
// lib/liquidity.ts
export function calculateLiquidityScore(market: MarketData): number {
// Manejar caso límite de volumen cero
if (market.totalVolume === 0) {
return 0
}
// Calcular puntajes de componentes (escala 0-100)
const volumeScore = Math.min(market.totalVolume / 1000, 100)
const spreadScore = Math.max(100 - (market.bidAskSpread * 1000), 0)
const traderScore = Math.min(market.activeTraders / 10, 100)
// Bonus por actividad reciente
const hoursSinceLastTrade = (Date.now() - market.lastTradeTime.getTime()) / (1000 * 60 * 60)
const recencyScore = Math.max(100 - (hoursSinceLastTrade * 10), 0)
// Promedio ponderado
const score = (
volumeScore * 0.4 +
spreadScore * 0.3 +
traderScore * 0.2 +
recencyScore * 0.1
)
return Math.min(Math.max(score, 0), 100) // Limitar entre 0-100
}
```
## Paso 5: Ejecutar Pruebas - Verificar el Éxito
```bash
npm test lib/liquidity.test.ts
PASS lib/liquidity.test.ts
✓ debe retornar puntaje alto para mercado líquido (3 ms)
✓ debe retornar puntaje bajo para mercado poco líquido (2 ms)
✓ debe manejar caso límite: volumen cero (1 ms)
3 tests passed
```
PASS: ¡Todas las pruebas pasan!
## Paso 6: Refactorizar (MEJORAR)
```typescript
// lib/liquidity.ts - Refactorizado con constantes y mejor legibilidad
const WEIGHTS = {
VOLUME: 0.4,
SPREAD: 0.3,
TRADERS: 0.2,
RECENCY: 0.1,
} as const
const SCALE_FACTORS = {
VOLUME: 1000,
SPREAD: 1000,
TRADERS: 10,
RECENCY_PENALTY: 10,
} as const
function clamp(value: number, min: number, max: number): number {
return Math.min(Math.max(value, min), max)
}
export function calculateLiquidityScore(market: MarketData): number {
if (market.totalVolume === 0) return 0
const volumeScore = Math.min(market.totalVolume / SCALE_FACTORS.VOLUME, 100)
const spreadScore = clamp(100 - (market.bidAskSpread * SCALE_FACTORS.SPREAD), 0, 100)
const traderScore = Math.min(market.activeTraders / SCALE_FACTORS.TRADERS, 100)
const hoursSinceLastTrade = (Date.now() - market.lastTradeTime.getTime()) / (1000 * 60 * 60)
const recencyScore = clamp(100 - (hoursSinceLastTrade * SCALE_FACTORS.RECENCY_PENALTY), 0, 100)
const weightedScore =
volumeScore * WEIGHTS.VOLUME +
spreadScore * WEIGHTS.SPREAD +
traderScore * WEIGHTS.TRADERS +
recencyScore * WEIGHTS.RECENCY
return clamp(weightedScore, 0, 100)
}
```
## Paso 7: Verificar que las Pruebas Siguen Pasando
```bash
npm test lib/liquidity.test.ts
PASS lib/liquidity.test.ts
✓ debe retornar puntaje alto para mercado líquido (3 ms)
✓ debe retornar puntaje bajo para mercado poco líquido (2 ms)
✓ debe manejar caso límite: volumen cero (1 ms)
3 tests passed
```
PASS: ¡Refactoring completo, las pruebas siguen pasando!
## Paso 8: Verificar Cobertura
```bash
npm test -- --coverage lib/liquidity.test.ts
File | % Stmts | % Branch | % Funcs | % Lines
---------------|---------|----------|---------|--------
liquidity.ts | 100 | 100 | 100 | 100
Coverage: 100% PASS (Objetivo: 80%)
```
PASS: ¡Sesión TDD completada!
```
## Buenas Prácticas de TDD
**HAZ:**
- PASS: Escribe la prueba ANTES de cualquier implementación
- PASS: Ejecuta las pruebas y verifica que fallen antes de implementar
- PASS: Escribe el código mínimo para que las pruebas pasen
- PASS: Refactoriza después de que las pruebas estén en verde
- PASS: Agrega casos límite y escenarios de error
- PASS: Apunta a 80%+ de cobertura (100% para código crítico)
**NO HAGAS:**
- FAIL: No escribas implementación antes de las pruebas
- FAIL: No omitas ejecutar las pruebas después de cada cambio
- FAIL: No escribas demasiado código de una vez
- FAIL: No ignores pruebas que fallan
- FAIL: No pruebes detalles de implementación (prueba el comportamiento)
- FAIL: No hagas mock de todo (prefiere pruebas de integración)
## Tipos de Pruebas a Incluir
**Pruebas Unitarias** (nivel de función):
- Escenarios de camino feliz
- Casos límite (vacío, null, valores máximos)
- Condiciones de error
- Valores límite
**Pruebas de Integración** (nivel de componente):
- Endpoints de API
- Operaciones de base de datos
- Llamadas a servicios externos
- Componentes React con hooks
**Pruebas E2E** (usar el comando `/e2e`):
- Flujos de usuario críticos
- Procesos de múltiples pasos
- Integración full stack
## Requisitos de Cobertura
- **Mínimo 80%** para todo el código
- **100% requerido**:
- Cálculos financieros
- Lógica de autenticación
- Código crítico de seguridad
- Lógica de negocio principal
## Notas Importantes
**OBLIGATORIO**: Las pruebas deben escribirse ANTES de la implementación. El ciclo TDD:
1. **ROJO** - Escribir prueba que falla
2. **VERDE** - Implementar para que pase
3. **REFACTORIZAR** - Mejorar el código
Nunca omitas la fase ROJO. Nunca escribas código antes de las pruebas.
## Integración con Otros Comandos
- Usa `/plan` primero para entender qué construir
- Usa `/tdd` para implementar con pruebas
- Usa `/build-fix` si surgen errores de build
- Usa `/code-review` para revisar la implementación
- Usa `/test-coverage` para verificar la cobertura
## Agentes Relacionados
Este comando invoca al agente `tdd-guide` proporcionado por ECC.
La skill relacionada `tdd-workflow` también viene incluida con ECC.
Para instalaciones manuales, los archivos fuente se encuentran en:
- `agents/tdd-guide.md`
- `skills/tdd-workflow/SKILL.md`
+73
View File
@@ -0,0 +1,73 @@
---
description: Analizar la cobertura, identificar brechas y generar pruebas faltantes hacia el umbral objetivo.
---
# Cobertura de Pruebas
Analizar la cobertura de pruebas, identificar brechas y generar las pruebas faltantes para alcanzar 80%+ de cobertura.
## Paso 1: Detectar el Framework de Pruebas
| Indicador | Comando de Cobertura |
|-----------|---------------------|
| `jest.config.*` o `package.json` jest | `npx jest --coverage --coverageReporters=json-summary` |
| `vitest.config.*` | `npx vitest run --coverage` |
| `pytest.ini` / `pyproject.toml` pytest | `pytest --cov=src --cov-report=json` |
| `Cargo.toml` | `cargo llvm-cov --json` |
| `pom.xml` con JaCoCo | `mvn test jacoco:report` |
| `go.mod` | `go test -coverprofile=coverage.out ./...` |
## Paso 2: Analizar el Reporte de Cobertura
1. Ejecutar el comando de cobertura
2. Parsear la salida (resumen JSON o salida del terminal)
3. Listar archivos **por debajo del 80% de cobertura**, ordenados del peor al mejor
4. Para cada archivo con cobertura insuficiente, identificar:
- Funciones o métodos no probados
- Cobertura de ramas faltante (if/else, switch, rutas de error)
- Código muerto que infla el denominador
## Paso 3: Generar Pruebas Faltantes
Para cada archivo con cobertura insuficiente, generar pruebas siguiendo esta prioridad:
1. **Ruta feliz** — Funcionalidad principal con entradas válidas
2. **Manejo de errores** — Entradas inválidas, datos faltantes, fallos de red
3. **Casos límite** — Arrays vacíos, null/undefined, valores límite (0, -1, MAX_INT)
4. **Cobertura de ramas** — Cada if/else, case de switch, ternario
### Reglas de Generación de Pruebas
- Colocar pruebas adyacentes al fuente: `foo.ts``foo.test.ts` (o convención del proyecto)
- Usar patrones de prueba existentes del proyecto (estilo de import, librería de afirmaciones, enfoque de mocking)
- Mockear dependencias externas (base de datos, APIs, sistema de archivos)
- Cada prueba debe ser independiente — sin estado mutable compartido entre pruebas
- Nombrar las pruebas descriptivamente: `test_create_user_with_duplicate_email_returns_409`
## Paso 4: Verificar
1. Ejecutar la suite de pruebas completa — todas las pruebas deben pasar
2. Re-ejecutar la cobertura — verificar mejora
3. Si aún está por debajo del 80%, repetir el Paso 3 para las brechas restantes
## Paso 5: Reportar
Mostrar comparación antes/después:
```
Reporte de Cobertura
──────────────────────────────
Archivo Antes Después
src/services/auth.ts 45% 88%
src/utils/validation.ts 32% 82%
──────────────────────────────
Total: 67% 84% ✓
```
## Áreas de Enfoque
- Funciones con ramificación compleja (alta complejidad ciclomática)
- Manejadores de errores y bloques catch
- Funciones de utilidad usadas en toda la base de código
- Manejadores de endpoints de API (flujo solicitud → respuesta)
- Casos límite: null, undefined, string vacío, array vacío, cero, números negativos
+88
View File
@@ -0,0 +1,88 @@
---
description: Sincronizar la documentación desde archivos de fuente de verdad como scripts, schemas, rutas y exportaciones.
---
# Actualizar Documentación
Sincronizar la documentación con el código base, generándola desde archivos de fuente de verdad.
## Paso 1: Identificar Fuentes de Verdad
| Fuente | Genera |
|--------|--------|
| Scripts de `package.json` | Referencia de comandos disponibles |
| `.env.example` | Documentación de variables de entorno |
| `openapi.yaml` / archivos de rutas | Referencia de endpoints de API |
| Exportaciones del código fuente | Documentación de la API pública |
| `Dockerfile` / `docker-compose.yml` | Docs de configuración de infraestructura |
## Paso 2: Generar Referencia de Scripts
1. Leer `package.json` (o `Makefile`, `Cargo.toml`, `pyproject.toml`)
2. Extraer todos los scripts/comandos con sus descripciones
3. Generar una tabla de referencia:
```markdown
| Comando | Descripción |
|---------|-------------|
| `npm run dev` | Iniciar servidor de desarrollo con recarga en caliente |
| `npm run build` | Build de producción con verificación de tipos |
| `npm test` | Ejecutar suite de pruebas con cobertura |
```
## Paso 3: Generar Documentación de Entorno
1. Leer `.env.example` (o `.env.template`, `.env.sample`)
2. Extraer todas las variables con sus propósitos
3. Categorizar como requeridas vs opcionales
4. Documentar el formato esperado y los valores válidos
```markdown
| Variable | Requerida | Descripción | Ejemplo |
|----------|-----------|-------------|---------|
| `DATABASE_URL` | Sí | String de conexión PostgreSQL | `postgres://user:pass@host:5432/db` |
| `LOG_LEVEL` | No | Verbosidad de logging (por defecto: info) | `debug`, `info`, `warn`, `error` |
```
## Paso 4: Actualizar Guía de Contribución
Generar o actualizar `docs/CONTRIBUTING.md` con:
- Configuración del entorno de desarrollo (prerrequisitos, pasos de instalación)
- Scripts disponibles y sus propósitos
- Procedimientos de testing (cómo ejecutar, cómo escribir nuevas pruebas)
- Aplicación del estilo de código (linter, formateador, hooks de pre-commit)
- Lista de verificación para envío de PRs
## Paso 5: Actualizar Runbook
Generar o actualizar `docs/RUNBOOK.md` con:
- Procedimientos de despliegue (paso a paso)
- Endpoints de health check y monitoreo
- Problemas comunes y sus soluciones
- Procedimientos de rollback
- Rutas de alertas y escalada
## Paso 6: Verificación de Obsolescencia
1. Encontrar archivos de documentación no modificados en 90+ días
2. Hacer referencia cruzada con cambios recientes en el código fuente
3. Marcar documentos potencialmente desactualizados para revisión manual
## Paso 7: Mostrar Resumen
```
Actualización de Documentación
──────────────────────────────
Actualizado: docs/CONTRIBUTING.md (tabla de scripts)
Actualizado: docs/ENV.md (3 nuevas variables)
Marcado: docs/DEPLOY.md (142 días sin actualizar)
Omitido: docs/API.md (sin cambios detectados)
──────────────────────────────
```
## Reglas
- **Fuente única de verdad**: Siempre generar desde el código, nunca editar manualmente secciones generadas
- **Preservar secciones manuales**: Solo actualizar secciones generadas; dejar la prosa escrita a mano intacta
- **Marcar contenido generado**: Usar marcadores `<!-- AUTO-GENERATED -->` alrededor de las secciones generadas
- **No crear docs sin instrucción**: Solo crear nuevos archivos de documentación si el comando lo solicita explícitamente
+59
View File
@@ -0,0 +1,59 @@
# Comando Verify
Ejecutar verificación exhaustiva sobre el estado actual del código base.
## Instrucciones
Ejecutar la verificación exactamente en este orden:
1. **Verificación de Build**
- Ejecutar el comando de build para este proyecto
- Si falla, reportar los errores y DETENER
2. **Verificación de Tipos**
- Ejecutar TypeScript/verificador de tipos
- Reportar todos los errores con archivo:línea
3. **Verificación de Lint**
- Ejecutar el linter
- Reportar advertencias y errores
4. **Suite de Pruebas**
- Ejecutar todas las pruebas
- Reportar cantidad de pasadas/fallidas
- Reportar porcentaje de cobertura
5. **Auditoría de console.log**
- Buscar console.log en los archivos fuente
- Reportar las ubicaciones
6. **Estado de Git**
- Mostrar cambios no confirmados
- Mostrar archivos modificados desde el último commit
## Salida
Generar un reporte de verificación resumido:
```
VERIFICACIÓN: [PASÓ/FALLÓ]
Build: [OK/FALLÓ]
Tipos: [OK/X errores]
Lint: [OK/X problemas]
Pruebas: [X/Y pasaron, Z% cobertura]
Secretos: [OK/X encontrados]
Logs: [OK/X console.log]
Listo para PR: [SÍ/NO]
```
Si hay algún problema crítico, listarlos con sugerencias de corrección.
## Argumentos
$ARGUMENTS puede ser:
- `quick` - Solo build + tipos
- `full` - Todas las verificaciones (por defecto)
- `pre-commit` - Verificaciones relevantes para commits
- `pre-pr` - Escaneo de seguridad más verificaciones completas