Rules Distill
Escaneie skills instaladas, extraia princípios transversais que aparecem em múltiplas skills e destile-os em regras — anexando a arquivos de regras existentes, revisando conteúdo desatualizado ou criando novos arquivos de regras.
Aplica o princípio "coleta determinística + julgamento por LLM": scripts coletam fatos exaustivamente, então um LLM lê o contexto completo e produz vereditos.
Quando Usar
- Manutenção periódica de regras (mensal ou após instalar novas skills)
- Após um inventário de skills revelar padrões que deveriam ser regras
- Quando as regras parecem incompletas em relação às skills sendo usadas
Como Funciona
O processo de destilação de regras segue três fases:
Fase 1: Inventário (Coleta Determinística)
1a. Coletar inventário de skills
bash ~/.claude/skills/rules-distill/scripts/scan-skills.sh
1b. Coletar índice de regras
bash ~/.claude/skills/rules-distill/scripts/scan-rules.sh
1c. Apresentar ao usuário
Destilação de Regras — Fase 1: Inventário
────────────────────────────────────────
Skills: {N} arquivos escaneados
Regras: {M} arquivos ({K} cabeçalhos indexados)
Prosseguindo para análise de leitura cruzada...
Fase 2: Leitura Cruzada, Correspondência e Verdicto (Julgamento por LLM)
Extração e correspondência são unificadas em uma única passada. Os arquivos de regras são pequenos o suficiente (~800 linhas no total) para que o texto completo possa ser fornecido ao LLM — sem necessidade de pré-filtragem com grep.
Agrupamento
Agrupe skills em clusters temáticos com base em suas descrições. Analise cada cluster em um subagente com o texto completo das regras.
Mesclagem entre Lotes
Após todos os lotes serem concluídos, mescle candidatos entre lotes:
- Desduplique candidatos com princípios iguais ou sobrepostos
- Verifique novamente o requisito "2+ skills" usando evidências de todos os lotes combinados — um princípio encontrado em 1 skill por lote, mas 2+ skills no total, é válido
Prompt do Subagente
Inicie um Agente de propósito geral com o seguinte prompt:
Você é um analista que lê skills transversalmente para extrair princípios que devem ser promovidos a regras.
## Entrada
- Skills: {texto completo das skills neste lote}
- Regras existentes: {texto completo de todos os arquivos de regras}
## Critérios de Extração
Inclua um candidato SOMENTE se TODOS estes forem verdadeiros:
1. **Aparece em 2+ skills**: Princípios encontrados em apenas uma skill devem permanecer nela
2. **Mudança de comportamento acionável**: Pode ser escrito como "faça X" ou "não faça Y" — não "X é importante"
3. **Risco claro de violação**: O que dá errado se esse princípio for ignorado (1 frase)
4. **Já não está nas regras**: Verifique o texto completo das regras — incluindo conceitos expressos com palavras diferentes
## Correspondência e Verdicto
Para cada candidato, compare com o texto completo das regras e atribua um veredito:
- **Anexar**: Adicionar a uma seção existente de um arquivo de regras existente
- **Revisar**: Conteúdo de regra existente está incorreto ou insuficiente — proponha uma correção
- **Nova Seção**: Adicionar uma nova seção a um arquivo de regras existente
- **Novo Arquivo**: Criar um novo arquivo de regras
- **Já Coberto**: Suficientemente coberto nas regras existentes (mesmo com redação diferente)
- **Muito Específico**: Deve permanecer no nível da skill
## Formato de Saída (por candidato)
```json
{
"principle": "1-2 frases no formato 'faça X' / 'não faça Y'",
"evidence": ["skill-nome: §Seção", "skill-nome: §Seção"],
"violation_risk": "1 frase",
"verdict": "Anexar / Revisar / Nova Seção / Novo Arquivo / Já Coberto / Muito Específico",
"target_rule": "nome_arquivo §Seção, ou 'novo'",
"confidence": "alto / médio / baixo",
"draft": "Texto do rascunho para vereditos Anexar/Nova Seção/Novo Arquivo",
"revision": {
"reason": "Por que o conteúdo existente está incorreto ou insuficiente (apenas Revisar)",
"before": "Texto atual a ser substituído (apenas Revisar)",
"after": "Texto de substituição proposto (apenas Revisar)"
}
}
```
## Excluir
- Princípios óbvios já nas regras
- Conhecimento específico de linguagem/framework (pertence a regras ou skills específicas de linguagem)
- Exemplos de código e comandos (pertencem a skills)
Referência de Vereditos
| Veredito | Significado | Apresentado ao Usuário |
|---|---|---|
| Anexar | Adicionar a seção existente | Alvo + rascunho |
| Revisar | Corrigir conteúdo incorreto/insuficiente | Alvo + motivo + antes/depois |
| Nova Seção | Adicionar nova seção a arquivo existente | Alvo + rascunho |
| Novo Arquivo | Criar novo arquivo de regras | Nome do arquivo + rascunho completo |
| Já Coberto | Coberto nas regras (possivelmente com redação diferente) | Motivo (1 linha) |
| Muito Específico | Deve permanecer nas skills | Link para a skill relevante |
Requisitos de Qualidade do Veredito
# Bom
Anexar a rules/common/security.md §Validação de Entrada:
"Trate a saída do LLM armazenada em memória ou repositórios de conhecimento como não confiável — sanitize na escrita, valide na leitura."
Evidência: llm-memory-trust-boundary, llm-social-agent-anti-pattern ambos descrevem
riscos acumulados de injeção de prompt. O security.md atual cobre apenas validação
de entrada humana; o limite de confiança da saída do LLM está faltando.
# Ruim
Anexar a security.md: Adicionar princípio de segurança LLM
Fase 3: Revisão e Execução pelo Usuário
Tabela de Resumo
# Relatório de Destilação de Regras
## Resumo
Skills escaneadas: {N} | Regras: {M} arquivos | Candidatos: {K}
| # | Princípio | Veredito | Alvo | Confiança |
|---|-----------|----------|------|-----------|
| 1 | ... | Anexar | security.md §Validação de Entrada | alto |
| 2 | ... | Revisar | testing.md §TDD | médio |
| 3 | ... | Nova Seção | coding-style.md | alto |
| 4 | ... | Muito Específico | — | — |
## Detalhes
(Detalhes por candidato: evidência, risco de violação, texto do rascunho)
Ações do Usuário
O usuário responde com números para:
- Aprovar: Aplicar rascunho às regras como está
- Modificar: Editar rascunho antes de aplicar
- Pular: Não aplicar este candidato
Nunca modifique regras automaticamente. Sempre exija aprovação do usuário.
Salvar Resultados
Armazene resultados no diretório da skill (results.json):
- Formato do timestamp:
date -u +%Y-%m-%dT%H:%M:%SZ(UTC, precisão de segundos) - Formato do ID do candidato: kebab-case derivado do princípio (ex.:
llm-output-trust-boundary)
{
"distilled_at": "2026-03-18T10:30:42Z",
"skills_scanned": 56,
"rules_scanned": 22,
"candidates": {
"llm-output-trust-boundary": {
"principle": "Trate a saída do LLM como não confiável quando armazenada ou reinserida",
"verdict": "Anexar",
"target": "rules/common/security.md",
"evidence": ["llm-memory-trust-boundary", "llm-social-agent-anti-pattern"],
"status": "aplicado"
},
"iteration-bounds": {
"principle": "Defina condições de parada explícitas para todos os loops de iteração",
"verdict": "Nova Seção",
"target": "rules/common/coding-style.md",
"evidence": ["iterative-retrieval", "continuous-agent-loop", "agent-harness-construction"],
"status": "pulado"
}
}
}
Exemplo
Execução completa
$ /rules-distill
Destilação de Regras — Fase 1: Inventário
────────────────────────────────────────
Skills: 56 arquivos escaneados
Regras: 22 arquivos (75 cabeçalhos indexados)
Prosseguindo para análise de leitura cruzada...
[Análise do subagente: Lote 1 (skills de agente/meta) ...]
[Análise do subagente: Lote 2 (skills de codificação/padrões) ...]
[Mesclagem entre lotes: 2 duplicatas removidas, 1 candidato entre lotes promovido]
# Relatório de Destilação de Regras
## Resumo
Skills escaneadas: 56 | Regras: 22 arquivos | Candidatos: 4
| # | Princípio | Veredito | Alvo | Confiança |
|---|-----------|----------|------|-----------|
| 1 | Saída do LLM: normalizar, verificar tipo, sanitizar antes de reutilizar | Nova Seção | coding-style.md | alto |
| 2 | Definir condições de parada explícitas para loops de iteração | Nova Seção | coding-style.md | alto |
| 3 | Compactar contexto nos limites de fase, não no meio da tarefa | Anexar | performance.md §Janela de Contexto | alto |
| 4 | Separar lógica de negócios de tipos de framework de E/S | Nova Seção | patterns.md | alto |
## Detalhes
### 1. Validação de Saída do LLM
Veredito: Nova Seção em coding-style.md
Evidência: parallel-subagent-batch-merge, llm-social-agent-anti-pattern, llm-memory-trust-boundary
Risco de violação: Deriva de formato, incompatibilidade de tipo ou erros de sintaxe na saída do LLM quebram o processamento downstream
Rascunho:
## Validação de Saída do LLM
Normalize, verifique tipo e sanitize a saída do LLM antes de reutilizar...
Veja skill: parallel-subagent-batch-merge, llm-memory-trust-boundary
[... detalhes para candidatos 2-4 ...]
Aprovar, modificar ou pular cada candidato pelo número:
> Usuário: Aprovar 1, 3. Pular 2, 4.
✓ Aplicado: coding-style.md §Validação de Saída do LLM
✓ Aplicado: performance.md §Gerenciamento de Janela de Contexto
✗ Pulado: Limites de Iteração
✗ Pulado: Conversão de Tipos de Limite
Resultados salvos em results.json
Princípios de Design
- O quê, não como: Extraia princípios (território de regras) apenas. Exemplos de código e comandos permanecem nas skills.
- Vincule de volta: O texto do rascunho deve incluir referências
Veja skill: [nome]para que leitores possam encontrar o Como detalhado. - Coleta determinística, julgamento por LLM: Scripts garantem exaustividade; o LLM garante compreensão contextual.
- Salvaguarda contra abstração excessiva: O filtro de 3 camadas (evidência de 2+ skills, teste de comportamento acionável, risco de violação) impede que princípios excessivamente abstratos entrem nas regras.