Destilador de Reglas
Escanea las habilidades instaladas, extrae principios transversales que aparecen en múltiples habilidades y los destila en reglas — añadiendo a archivos de reglas existentes, revisando contenido desactualizado o creando nuevos archivos de reglas.
Aplica el principio de "recopilación determinista + juicio LLM": los scripts recopilan hechos de forma exhaustiva, luego un LLM lee todo el contexto y produce veredictos.
Cuándo Usarlo
- Mantenimiento periódico de reglas (mensual o después de instalar nuevas habilidades)
- Tras un inventario de habilidades que revele patrones que deberían ser reglas
- Cuando las reglas se sientan incompletas en relación con las habilidades que se usan
Cómo Funciona
El proceso de destilación de reglas sigue tres fases:
Fase 1: Inventario (Recopilación Determinista)
1a. Recopilar inventario de habilidades
bash ~/.claude/skills/rules-distill/scripts/scan-skills.sh
1b. Recopilar índice de reglas
bash ~/.claude/skills/rules-distill/scripts/scan-rules.sh
1c. Presentar al usuario
Destilación de Reglas — Fase 1: Inventario
────────────────────────────────────────
Habilidades: {N} archivos escaneados
Reglas: {M} archivos ({K} encabezados indexados)
Procediendo al análisis de lectura cruzada...
Fase 2: Lectura Cruzada, Coincidencia y Veredicto (Juicio LLM)
La extracción y la coincidencia se unifican en una sola pasada. Los archivos de reglas son lo suficientemente pequeños (~800 líneas en total) como para proporcionar el texto completo al LLM — no se necesita prefiltrado con grep.
Agrupación
Agrupa las habilidades en clústeres temáticos según sus descripciones. Analiza cada clúster en un subagente con el texto completo de las reglas.
Fusión Entre Lotes
Después de que todos los lotes se completen, fusiona los candidatos entre lotes:
- Desduplica candidatos con principios iguales o superpuestos
- Vuelve a verificar el requisito de "2+ habilidades" usando evidencia de todos los lotes combinados — un principio encontrado en 1 habilidad por lote pero 2+ habilidades en total es válido
Prompt del Subagente
Lanza un Agente de propósito general con el siguiente prompt:
Eres un analista que lee habilidades de forma cruzada para extraer principios que deberían promoverse a reglas.
## Entrada
- Habilidades: {texto completo de las habilidades en este lote}
- Reglas existentes: {texto completo de todos los archivos de reglas}
## Criterios de Extracción
Incluye un candidato SOLO si TODOS estos son ciertos:
1. **Aparece en 2+ habilidades**: Los principios encontrados en una sola habilidad deben permanecer en esa habilidad
2. **Cambio de comportamiento accionable**: Puede escribirse como "haz X" o "no hagas Y" — no "X es importante"
3. **Riesgo claro de violación**: Qué sale mal si se ignora este principio (1 frase)
4. **No está ya en las reglas**: Revisa el texto completo de las reglas — incluidos conceptos expresados con otras palabras
## Coincidencia y Veredicto
Para cada candidato, compáralo con el texto completo de las reglas y asigna un veredicto:
- **Añadir**: Agregar a una sección existente de un archivo de reglas
- **Revisar**: El contenido de la regla existente es inexacto o insuficiente — propón una corrección
- **Nueva Sección**: Añadir una nueva sección a un archivo de reglas existente
- **Nuevo Archivo**: Crear un nuevo archivo de reglas
- **Ya Cubierto**: Está suficientemente cubierto en las reglas existentes (aunque esté redactado de otra forma)
- **Demasiado Específico**: Debe permanecer a nivel de habilidad
## Formato de Salida (por candidato)
```json
{
"principle": "1-2 frases en forma 'haz X' / 'no hagas Y'",
"evidence": ["nombre-habilidad: §Sección", "nombre-habilidad: §Sección"],
"violation_risk": "1 frase",
"verdict": "Añadir / Revisar / Nueva Sección / Nuevo Archivo / Ya Cubierto / Demasiado Específico",
"target_rule": "nombre-archivo §Sección, o 'nuevo'",
"confidence": "alta / media / baja",
"draft": "Texto del borrador para veredictos Añadir/Nueva Sección/Nuevo Archivo",
"revision": {
"reason": "Por qué el contenido existente es inexacto o insuficiente (solo Revisar)",
"before": "Texto actual a reemplazar (solo Revisar)",
"after": "Texto de reemplazo propuesto (solo Revisar)"
}
}
```
## Excluir
- Principios obvios ya en reglas
- Conocimiento específico de lenguaje/framework (pertenece a reglas o habilidades específicas del lenguaje)
- Ejemplos de código y comandos (pertenecen a las habilidades)
Referencia de Veredictos
| Veredicto | Significado | Presentado al Usuario |
|---|---|---|
| Añadir | Agregar a una sección existente | Destino + borrador |
| Revisar | Corregir contenido inexacto/insuficiente | Destino + motivo + antes/después |
| Nueva Sección | Añadir nueva sección a archivo existente | Destino + borrador |
| Nuevo Archivo | Crear nuevo archivo de reglas | Nombre de archivo + borrador completo |
| Ya Cubierto | Cubierto en reglas (posiblemente con otras palabras) | Motivo (1 línea) |
| Demasiado Específico | Debe permanecer en habilidades | Enlace a la habilidad relevante |
Requisitos de Calidad del Veredicto
# Bueno
Añadir a rules/common/security.md §Validación de Entrada:
"Trata la salida del LLM almacenada en memoria o almacenes de conocimiento como no confiable — sanitiza al escribir, valida al leer."
Evidencia: llm-memory-trust-boundary, llm-social-agent-anti-pattern describen
acumulación de riesgos de inyección de prompts. El security.md actual cubre validación
de entrada humana solamente; falta el límite de confianza para la salida del LLM.
# Malo
Añadir a security.md: Añadir principio de seguridad LLM
Fase 3: Revisión y Ejecución del Usuario
Tabla Resumen
# Informe de Destilación de Reglas
## Resumen
Habilidades escaneadas: {N} | Reglas: {M} archivos | Candidatos: {K}
| # | Principio | Veredicto | Destino | Confianza |
|---|-----------|-----------|---------|-----------|
| 1 | ... | Añadir | security.md §Validación de Entrada | alta |
| 2 | ... | Revisar | testing.md §TDD | media |
| 3 | ... | Nueva Sección | coding-style.md | alta |
| 4 | ... | Demasiado Específico | — | — |
## Detalles
(Detalles por candidato: evidencia, riesgo de violación, texto del borrador)
Acciones del Usuario
El usuario responde con números para:
- Aprobar: Aplicar el borrador a las reglas tal cual
- Modificar: Editar el borrador antes de aplicarlo
- Saltar: No aplicar este candidato
Nunca modifiques las reglas automáticamente. Siempre requieras aprobación del usuario.
Guardar Resultados
Almacena los resultados en el directorio de la habilidad (results.json):
- Formato de marca de tiempo:
date -u +%Y-%m-%dT%H:%M:%SZ(UTC, precisión de segundos) - Formato de ID de candidato: kebab-case derivado del principio (ej.,
llm-output-trust-boundary)
{
"distilled_at": "2026-03-18T10:30:42Z",
"skills_scanned": 56,
"rules_scanned": 22,
"candidates": {
"llm-output-trust-boundary": {
"principle": "Trata la salida del LLM como no confiable cuando se almacena o se reinyecta",
"verdict": "Añadir",
"target": "rules/common/security.md",
"evidence": ["llm-memory-trust-boundary", "llm-social-agent-anti-pattern"],
"status": "aplicado"
},
"iteration-bounds": {
"principle": "Define condiciones de parada explícitas para todos los bucles de iteración",
"verdict": "Nueva Sección",
"target": "rules/common/coding-style.md",
"evidence": ["iterative-retrieval", "continuous-agent-loop", "agent-harness-construction"],
"status": "saltado"
}
}
}
Ejemplo
Ejecución completa
$ /rules-distill
Destilación de Reglas — Fase 1: Inventario
────────────────────────────────────────
Habilidades: 56 archivos escaneados
Reglas: 22 archivos (75 encabezados indexados)
Procediendo al análisis de lectura cruzada...
[Análisis del subagente: Lote 1 (habilidades de agente/meta) ...]
[Análisis del subagente: Lote 2 (habilidades de codificación/patrones) ...]
[Fusión entre lotes: 2 duplicados eliminados, 1 candidato entre lotes promovido]
# Informe de Destilación de Reglas
## Resumen
Habilidades escaneadas: 56 | Reglas: 22 archivos | Candidatos: 4
| # | Principio | Veredicto | Destino | Confianza |
|---|-----------|-----------|---------|-----------|
| 1 | Salida del LLM: normalizar, verificar tipo, sanitizar antes de reutilizar | Nueva Sección | coding-style.md | alta |
| 2 | Definir condiciones de parada explícitas para bucles de iteración | Nueva Sección | coding-style.md | alta |
| 3 | Compactar contexto en los límites de fase, no a mitad de tarea | Añadir | performance.md §Ventana de Contexto | alta |
| 4 | Separar la lógica de negocio de los tipos del framework de E/S | Nueva Sección | patterns.md | alta |
## Detalles
### 1. Validación de Salida del LLM
Veredicto: Nueva Sección en coding-style.md
Evidencia: parallel-subagent-batch-merge, llm-social-agent-anti-pattern, llm-memory-trust-boundary
Riesgo de violación: La deriva de formato, la falta de coincidencia de tipos o los errores de sintaxis en la salida del LLM pueden bloquear el procesamiento posterior
Borrador:
## Validación de Salida del LLM
Normaliza, verifica el tipo y sanitiza la salida del LLM antes de reutilizarla...
Ver habilidad: parallel-subagent-batch-merge, llm-memory-trust-boundary
[... detalles de los candidatos 2-4 ...]
Aprobar, modificar o saltar cada candidato por número:
> Usuario: Aprobar 1, 3. Saltar 2, 4.
✓ Aplicado: coding-style.md §Validación de Salida del LLM
✓ Aplicado: performance.md §Gestión de Ventana de Contexto
✗ Saltado: Límites de Iteración
✗ Saltado: Conversión de Tipos en Límites
Resultados guardados en results.json
Principios de Diseño
- Qué, no Cómo: Extrae principios (territorio de reglas) solamente. Los ejemplos de código y comandos se quedan en las habilidades.
- Enlazar de vuelta: El texto del borrador debe incluir referencias
Ver habilidad: [nombre]para que los lectores puedan encontrar el Cómo detallado. - Recopilación determinista, juicio LLM: Los scripts garantizan exhaustividad; el LLM garantiza comprensión contextual.
- Salvaguarda contra la abstracción excesiva: El filtro de 3 capas (evidencia de 2+ habilidades, prueba de comportamiento accionable, riesgo de violación) evita que principios demasiado abstractos entren en las reglas.