Destilación 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 obsoleto o creando nuevos archivos de reglas.
Aplica el principio de "recolección determinista + juicio LLM": los scripts recopilan hechos exhaustivamente, 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)
- Después de un inventario de habilidades que revele patrones que deberían ser reglas
- Cuando las reglas se sienten 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 (Recolecció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 coincidencia se unifican en una sola pasada. Los archivos de reglas son lo suficientemente pequeños (~800 líneas en total) como para proporcionar todo el texto al LLM; no se necesita un prefiltrado con grep.
Agrupación en Lotes
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:
- Deduplica 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 en 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 deben 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 los siguientes son ciertos:
1. **Aparece en 2+ habilidades**: Los principios encontrados en una sola habilidad deben permanecer en esa habilidad
2. **Cambio de comportamiento accionable**: Se puede escribir 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 incorrecto 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**: Ya 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": "alto / medio / bajo",
"draft": "Borrador de texto para veredictos Añadir/Nueva Sección/Nuevo Archivo",
"revision": {
"reason": "Por qué el contenido existente es incorrecto 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 habilidades)
Referencia de Veredictos
| Veredicto | Significado | Presentado al Usuario |
|---|---|---|
| Añadir | Agregar a sección existente | Destino + borrador |
| Revisar | Arreglar contenido incorrecto/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 otra redacción) | 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
riesgos acumulados 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 por el 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 | alto |
| 2 | ... | Revisar | testing.md §TDD | medio |
| 3 | ... | Nueva Sección | coding-style.md | alto |
| 4 | ... | Demasiado Específico | — | — |
## Detalles
(Detalles por candidato: evidencia, riesgo de violación, borrador de texto)
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 reglas automáticamente. Siempre requiere aprobación del usuario.
Guardar Resultados
Almacena los resultados en el directorio del skill (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": "applied"
},
"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": "skipped"
}
}
}
Ejemplo
Ejecución de principio a fin
$ /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 de subagente: Lote 1 (habilidades de agente/meta) ...]
[Análisis de 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 LLM: normalizar, verificar tipo, sanitizar antes de reutilizar | Nueva Sección | coding-style.md | alto |
| 2 | Definir condiciones de parada explícitas para bucles de iteración | Nueva Sección | coding-style.md | alto |
| 3 | Compactar contexto en los límites de fase, no a mitad de tarea | Añadir | performance.md §Ventana de Contexto | alto |
| 4 | Separar lógica de negocio de tipos de marco I/O | Nueva Sección | patterns.md | alto |
## Detalles
### 1. Validación de Salida 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 errores de sintaxis en la salida del LLM pueden bloquear el procesamiento descendente
Borrador:
## Validación de Salida LLM
Normalizar, verificar tipo y sanitizar la salida del LLM antes de reutilizar...
Ver habilidad: parallel-subagent-batch-merge, llm-memory-trust-boundary
[... detalles para 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 LLM
✓ Aplicado: performance.md §Gestión de Ventana de Contexto
✗ Saltado: Límites de Iteración
✗ Saltado: Conversión de Tipos en Límite
Resultados guardados en results.json
Principios de Diseño
- Qué, no Cómo: Extrae solo principios (territorio de reglas). Los ejemplos de código y comandos se quedan en las habilidades.
- Enlazar hacia atrás: El texto del borrador debe incluir referencias
Ver habilidad: [nombre]para que los lectores puedan encontrar el Cómo detallado. - Recolección determinista, juicio LLM: Los scripts garantizan exhaustividad; el LLM garantiza comprensión contextual.
- Salvaguarda contra 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.