Rules Distill
Analyse les compétences installées, extrait les principes transversaux qui apparaissent dans plusieurs compétences et les distille en règles — en ajoutant aux fichiers de règles existants, en révisant le contenu obsolète, ou en créant de nouveaux fichiers de règles.
Applique le principe de « collecte déterministe + jugement LLM » : les scripts collectent les faits de manière exhaustive, puis un LLM lit l'ensemble du contexte et rend des verdicts.
Quand l'utiliser
- Maintenance périodique des règles (mensuelle ou après installation de nouvelles compétences)
- Après un inventaire des compétences révélant des motifs qui devraient être des règles
- Lorsque les règles semblent incomplètes par rapport aux compétences utilisées
Comment ça fonctionne
Le processus de distillation des règles suit trois phases :
Phase 1 : Inventaire (Collecte déterministe)
1a. Collecter l'inventaire des compétences
bash ~/.claude/skills/rules-distill/scripts/scan-skills.sh
1b. Collecter l'index des règles
bash ~/.claude/skills/rules-distill/scripts/scan-rules.sh
1c. Présenter à l'utilisateur
Rules Distillation — Phase 1 : Inventaire
─────────────────────────────────────────
Compétences : {N} fichiers scannés
Règles : {M} fichiers ({K} titres indexés)
Passage à l'analyse croisée...
Phase 2 : Lecture croisée, Correspondance & Verdict (Jugement LLM)
L'extraction et la mise en correspondance sont unifiées en un seul passage. Les fichiers de règles sont suffisamment petits (~800 lignes au total) pour que le texte complet puisse être fourni au LLM — aucun pré-filtrage par grep n'est nécessaire.
Regroupement par lots
Regrouper les compétences en clusters thématiques basés sur leurs descriptions. Analyser chaque cluster dans un sous-agent avec le texte complet des règles.
Fusion inter-lots
Après la fin de tous les lots, fusionner les candidats entre les lots :
- Dédupliquer les candidats ayant des principes identiques ou se chevauchant
- Revérifier l'exigence des « 2+ compétences » en utilisant les preuves de tous les lots combinés — un principe trouvé dans 1 compétence par lot mais 2+ compétences au total est valide
Prompt du sous-agent
Lancer un agent à usage général avec le prompt suivant :
Vous êtes un analyste qui lit en croisant les compétences pour en extraire les principes qui devraient être promus en règles.
## Entrée
- Compétences : {texte complet des compétences de ce lot}
- Règles existantes : {texte complet de tous les fichiers de règles}
## Critères d'extraction
Inclure un candidat UNIQUEMENT si TOUS ces critères sont vrais :
1. **Apparaît dans 2+ compétences** : Les principes trouvés dans une seule compétence doivent y rester
2. **Changement de comportement actionnable** : Peut être rédigé sous forme « faites X » ou « ne faites pas Y » — pas « X est important »
3. **Risque de violation clair** : Ce qui se passe si ce principe est ignoré (1 phrase)
4. **Pas déjà dans les règles** : Vérifier le texte complet des règles — y compris les concepts exprimés avec des mots différents
## Correspondance & Verdict
Pour chaque candidat, comparer avec le texte complet des règles et attribuer un verdict :
- **Ajouter** : Ajouter à une section existante d'un fichier de règles existant
- **Réviser** : Le contenu de la règle existante est inexact ou insuffisant — proposer une correction
- **Nouvelle Section** : Ajouter une nouvelle section à un fichier de règles existant
- **Nouveau Fichier** : Créer un nouveau fichier de règles
- **Déjà Couvert** : Suffisamment couvert dans les règles existantes (même si formulé différemment)
- **Trop Spécifique** : Doit rester au niveau de la compétence
## Format de sortie (par candidat)
```json
{
"principle": "1-2 phrases sous forme 'faites X' / 'ne faites pas Y'",
"evidence": ["nom-compétence: §Section", "nom-compétence: §Section"],
"violation_risk": "1 phrase",
"verdict": "Ajouter / Réviser / Nouvelle Section / Nouveau Fichier / Déjà Couvert / Trop Spécifique",
"target_rule": "nomfichier §Section, ou 'nouveau'",
"confidence": "haute / moyenne / faible",
"draft": "Texte de brouillon pour les verdicts Ajouter/Nouvelle Section/Nouveau Fichier",
"revision": {
"reason": "Pourquoi le contenu existant est inexact ou insuffisant (Réviser uniquement)",
"before": "Texte actuel à remplacer (Réviser uniquement)",
"after": "Texte de remplacement proposé (Réviser uniquement)"
}
}
```
## Exclure
- Principes évidents déjà dans les règles
- Connaissances spécifiques à un langage/framework (appartient aux règles ou compétences spécifiques au langage)
- Exemples de code et commandes (appartient aux compétences)
Référence des verdicts
| Verdict | Signification | Présenté à l'utilisateur |
|---|---|---|
| Ajouter | Ajouter à une section existante | Cible + brouillon |
| Réviser | Corriger un contenu inexact/insuffisant | Cible + raison + avant/après |
| Nouvelle Section | Ajouter une nouvelle section à un fichier existant | Cible + brouillon |
| Nouveau Fichier | Créer un nouveau fichier de règles | Nom de fichier + brouillon complet |
| Déjà Couvert | Couvert dans les règles (possiblement formulation différente) | Raison (1 ligne) |
| Trop Spécifique | Doit rester dans les compétences | Lien vers la compétence concernée |
Exigences de qualité des verdicts
# Bon
Ajouter à rules/common/security.md §Validation des entrées :
« Traitez la sortie LLM stockée en mémoire ou dans des bases de connaissances comme non fiable — nettoyez à l'écriture, validez à la lecture. »
Preuves : llm-memory-trust-boundary, llm-social-agent-anti-pattern décrivent tous deux
les risques d'injection de prompt accumulés. Le security.md actuel couvre uniquement
la validation des entrées humaines ; la frontière de confiance des sorties LLM est manquante.
# Mauvais
Ajouter à security.md : Ajouter un principe de sécurité LLM
Phase 3 : Revue utilisateur & Exécution
Tableau récapitulatif
# Rapport de distillation des règles
## Résumé
Compétences scannées : {N} | Règles : {M} fichiers | Candidats : {K}
| # | Principe | Verdict | Cible | Confiance |
|---|----------|---------|-------|-----------|
| 1 | ... | Ajouter | security.md §Validation des entrées | haute |
| 2 | ... | Réviser | testing.md §TDD | moyenne |
| 3 | ... | Nouvelle Section | coding-style.md | haute |
| 4 | ... | Trop Spécifique | — | — |
## Détails
(Détails par candidat : preuves, risque de violation, texte du brouillon)
Actions utilisateur
L'utilisateur répond avec les numéros pour :
- Approuver : Appliquer le brouillon aux règles tel quel
- Modifier : Éditer le brouillon avant de l'appliquer
- Ignorer : Ne pas appliquer ce candidat
Ne jamais modifier les règles automatiquement. Toujours exiger l'approbation de l'utilisateur.
Sauvegarder les résultats
Stocker les résultats dans le répertoire de la compétence (results.json) :
- Format d'horodatage :
date -u +%Y-%m-%dT%H:%M:%SZ(UTC, précision à la seconde) - Format d'ID candidat : kebab-case dérivé du principe (ex.
llm-output-trust-boundary)
{
"distilled_at": "2026-03-18T10:30:42Z",
"skills_scanned": 56,
"rules_scanned": 22,
"candidates": {
"llm-output-trust-boundary": {
"principle": "Traiter la sortie LLM comme non fiable lorsqu'elle est stockée ou réinjectée",
"verdict": "Ajouter",
"target": "rules/common/security.md",
"evidence": ["llm-memory-trust-boundary", "llm-social-agent-anti-pattern"],
"status": "applied"
},
"iteration-bounds": {
"principle": "Définir des conditions d'arrêt explicites pour toutes les boucles d'itération",
"verdict": "Nouvelle Section",
"target": "rules/common/coding-style.md",
"evidence": ["iterative-retrieval", "continuous-agent-loop", "agent-harness-construction"],
"status": "skipped"
}
}
}
Exemple
Exécution complète
$ /rules-distill
Rules Distillation — Phase 1 : Inventaire
─────────────────────────────────────────
Compétences : 56 fichiers scannés
Règles : 22 fichiers (75 titres indexés)
Passage à l'analyse croisée...
[Analyse du sous-agent : Lot 1 (compétences agent/méta) ...]
[Analyse du sous-agent : Lot 2 (compétences codage/modèles) ...]
[Fusion inter-lots : 2 doublons supprimés, 1 candidat inter-lots promu]
# Rapport de distillation des règles
## Résumé
Compétences scannées : 56 | Règles : 22 fichiers | Candidats : 4
| # | Principe | Verdict | Cible | Confiance |
|---|----------|---------|-------|-----------|
| 1 | Sortie LLM : normaliser, vérifier le type, nettoyer avant réutilisation | Nouvelle Section | coding-style.md | haute |
| 2 | Définir des conditions d'arrêt explicites pour les boucles d'itération | Nouvelle Section | coding-style.md | haute |
| 3 | Compacter le contexte aux frontières de phase, pas en milieu de tâche | Ajouter | performance.md §Fenêtre de contexte | haute |
| 4 | Séparer la logique métier des types d'E/S framework | Nouvelle Section | patterns.md | haute |
## Détails
### 1. Validation des sorties LLM
Verdict : Nouvelle Section dans coding-style.md
Preuves : parallel-subagent-batch-merge, llm-social-agent-anti-pattern, llm-memory-trust-boundary
Risque de violation : La dérive de format, l'incompatibilité de type ou les erreurs de syntaxe dans les sorties LLM plantent le traitement en aval
Brouillon :
## Validation des sorties LLM
Normaliser, vérifier le type et nettoyer la sortie LLM avant réutilisation...
Voir compétence : parallel-subagent-batch-merge, llm-memory-trust-boundary
[... détails pour les candidats 2-4 ...]
Approuver, modifier ou ignorer chaque candidat par numéro :
> Utilisateur : Approuver 1, 3. Ignorer 2, 4.
✓ Appliqué : coding-style.md §Validation des sorties LLM
✓ Appliqué : performance.md §Gestion de la fenêtre de contexte
✗ Ignoré : Bornes d'itération
✗ Ignoré : Conversion de types aux frontières
Résultats sauvegardés dans results.json
Principes de conception
- Quoi, pas Comment : Extraire uniquement les principes (territoire des règles). Les exemples de code et commandes restent dans les compétences.
- Lien en retour : Le texte du brouillon doit inclure des références
Voir compétence : [nom]pour que les lecteurs puissent trouver le Comment détaillé. - Collecte déterministe, jugement LLM : Les scripts garantissent l'exhaustivité ; le LLM garantit la compréhension contextuelle.
- Garde-fou anti-abstraction : Le filtre en 3 couches (preuves de 2+ compétences, test de comportement actionnable, risque de violation) empêche les principes trop abstraits d'entrer dans les règles.