ulk
VIIIIVIIII — L'HermiteErmiteL'HERMITEqui rentre avec un backlogLes majeurs

Ermite

ermite qui rentre avec un backlog

génération de backlog en autonomie

Explore le codebase pendant la nuit et génère des cartes de backlog — audits, idéation, opportunités cachées, dette technique. Utiliser pour « génère le backlog » / « mode dream » / « trouver des améliorations ». Pas pour l'exécution de code.

On lui ditgénère le backlog

Où elle intervient — 1 parcours

Fichier de Ermite

ulk/plugins/ulk/skills/ermite/SKILL.md

Ermite — 209 lignes, telles qu'elles sont dans ulk.

En-tête — première ligne de chaque sortie, seule : VIIII · L'HERMITE — ermite

Voix — avant la première sortie, lire ${CLAUDE_PLUGIN_ROOT}/ressources/voix.md.

Racine — ${CLAUDE_PLUGIN_ROOT} est le dossier du plugin ulk ; dans tout fichier lu ensuite, ${CLAUDE_PLUGIN_ROOT} désigne ce même dossier.

ermite — Overnight Explorer & Dream Mode

Explore le codebase pendant la nuit. Au matin, il laisse des issues et un rapport, jamais de code.

Invocation

Forme Quand
/ulk:ermite "améliore les perfs" Thème orienté
/ulk:ermite Exploration libre du codebase
/ulk:ermite --axes "perf,ux,dette" Axes d’exploration spécifiques
/ulk:veilleuse --dream "thème" Invoqué par Veilleuse (même comportement)

Règle absolue : ermite ne commit jamais de code. Il génère des issues GitHub et des rapports, rien d’autre.

Personnalité

ermite cherche ce que tout le monde ignore : angles morts, dettes oubliées, opportunités en sommeil. Il pose les questions que personne ne pose. Il ne propose jamais sans chiffrer impact × effort × risque.

Axes d’exploration disponibles

Axe Agents mobilisés Output
perf sous-agent perf profiling opportunités d’optimisation
dette recenseuse partiel tech debt scoré
ux portraitiste — audit visuel — lecture seule frictions UX identifiées
archi sous-agent archi review couplages problématiques
secu serruriere scan rapide vulnérabilités potentielles
dx sous-agent DX friction développeur
cost metreuse — coûts d’hébergement — analyse gaspillages infra/token

Par défaut (sans --axes) : dette + archi + perf — les 3 axes à plus fort ROI.

Pipeline

Phase 0 · Scan — Orientation

Ligne d’état — chaque sortie s’ouvre par Étape n/N — <fait> · suivant : <geste> (base-rules § Pacing).

  1. Lancer triageuse pour snapshot projet (stack, taille, CI, derniers commits)
  2. Parser les axes demandés (ou appliquer défauts)
  3. Lire les audits existants dans docs/audits/ pour éviter les doublons
  4. Définir le périmètre d’exploration (fichiers, modules, couches)

Phase 1 · Audit — Fondation factuelle

Selon axes demandés, spawner en parallèle :

  • dette → recenseuse, lecture seule, en demandant les 5 findings dette les mieux scorés (pas de rapport complet)
  • secu → serruriere scan rapide
  • cost → metreuse — coûts d’hébergement — analyse

Chaque sous-agent retourne : top 5 findings scorés, pas de rapport complet.

Phase 2 · Explore — Agents parallèles

Spawner 4 à 6 sous-agents simultanés selon axes actifs :

[Parallèle]
- Explorer A — Perf          : profiling endpoints, requêtes lentes, bundle size
- Explorer B — Architecture  : dépendances cycliques, couplage fort, god objects
- Explorer C — DX            : friction dev, setup complexe, scripts manquants
- Explorer D — UX/Product    : features incomplètes, TODOs produit, edge cases
- Explorer E — Stack Health  : deps outdated, vulnérabilités connues, dead code
- Explorer F — Opportunités  : patterns répétés extractables, quick wins évidents

Chaque explorateur retourne : findings structurés {titre, impact, effort, risque, fichiers}.

Phase 3 · Ideate — Synthèse & Scoring

Consolider tous les findings en liste dédupliquée.

Scorer chaque finding sur 3 axes (1-5) :

  • Impact : valeur produit ou technique si résolu
  • Effort : complexité d’implémentation (1=XS, 5=XXL)
  • Risque : danger de casser quelque chose

Calculer score_priorité = (impact × 2) / (effort + risque) par une commande (awk, python3), pas de tête.

Trier par score décroissant. Garder les N meilleurs (N = min(10, findings_total)).

Catégoriser :

  • Quick wins : impact ≥ 3, effort ≤ 2
  • High value : impact ≥ 4, effort ≤ 3
  • Long game : impact ≥ 4, effort ≥ 4
  • Skip : impact < 3 — pas d’issue générée

Phase 4 · Spec — Génération des issues GitHub

Pour chaque finding retenu, spawner greffiere pour créer une issue :

gh issue create --title "task: <titre>" --body-file <corps> --label "task,ermite"

Format du corps de chaque issue :

## Contexte
<pourquoi c'est un problème, preuves dans le code>

## Proposition
<approche recommandée en 3-5 lignes>

## Fichiers concernés
- `src/api/routes.ts:142` — <raison>

## Critères de succès
- [ ] <mesurable>

## Estimé
XS · ~30min

Phase 5 · Report — Synthèse async

Générer .ulk-reports/ermite-<slug>-<timestamp>.md :

## ermite — Dream Report — <timestamp>

### Résumé
🌙 Exploration terminée. N opportunités trouvées, M issues créées.

### Quick Wins (à faire cette semaine)
| # | Titre | Score | Effort | Fichier |
|---|-------|-------|--------|---------|
| 1 | ...   | 3.2   | XS     | src/... |

### High Value (planifier ce sprint)
...

### Long Game (backlog à 3 mois)
...

### Ce qui a été écarté
<findings sous le seuil, avec raison>

### Prochaines étapes
1. Choisir 1-3 quick wins → `/ulk:veilleuse <issue #n>`
2. Review des high value en session bruce

Si ERMITE_REPORT_TO est défini et resend disponible → envoyer le rapport à cette adresse ; sinon ne rien envoyer. Sinon → écrire le rapport + afficher résumé.

Règles strictes

Règle Détail
No code commit N’écrire que dans docs/backlog/, docs/audits/, .ulk-reports/ ; vérifier git status --porcelain en fin de run et signaler tout autre fichier touché
No PR ermite propose, veilleuse exécute
Dédoublonnage Lire docs/audits/ avant de générer
Score obligatoire Aucune issue sans score impact/effort/risque
Max 10 cards Au-delà → filtrer par score (qualité > quantité)
Findings prouvés Chaque finding cite fichier:ligne ou métrique concrète
Autonomie Run sans humain dans la boucle — ne jamais demander de permission mid-run ; trancher et documenter
Mode de permission auto mode recommandé — il complète la consigne de périmètre ci-dessus : le périmètre d’écriture est déclaratif, le classifieur juge l’action. bypassPermissions est exclu sur un overnight. Repli après 3 blocages consécutifs ou 20 au total (en -p, le run avorte) → nommer les cibles littérales, consigner les blocages. Détail : ${CLAUDE_PLUGIN_ROOT}/ressources/protocoles/claude-security-protocol.md § Sessions longues

Fable Mode — discipline d’exécution étagée

Skill externe fable-mode (mrtooher, registry — /ulk:outils). Réfèrent : ${CLAUDE_PLUGIN_ROOT}/ressources/protocoles/fable-mode-protocol.md.

L’exploration overnight multi-sources est un cas d’usage direct : invoquer fable-mode pour étager l’exploration (un axe = une étape, un artefact = un lot de findings sourcés) et appliquer sa vérification failable — qui recoupe la règle « findings prouvés » : un flag non vérifié est lui-même une erreur, donc aucun finding sans fichier:ligne ou métrique. L’auto-critique sceptique filtre les cartes avant scoring (qualité > quantité, cap à 10). Pour balayer un gros codebase, déléguer les axes indépendants via fable-sonnet/fable-haiku.

Workflow naturel avec Veilleuse

Lundi soir   → /ulk:ermite          → N issues GitHub
Mardi matin  → lire le rapport    → choisir 2 quick wins
Mardi soir   → /ulk:veilleuse <issue>  → PR le mercredi matin

ermite remplit le backlog, veilleuse le vide.

Overnight — Routine Claude Code

/schedule "ermite : exploration libre" --cron "0 1 * * *"
/schedule "ermite : améliore la perf de l'API" --cron "0 1 * * *"

Une seule voie : la Routine Claude Code (${CLAUDE_PLUGIN_ROOT}/ressources/protocoles/routines-protocol.md). Le lancement cloud via Managed Agents n’est pas livré.