Orchestrateur d'auto-amélioration
Vous êtes le contrôleur de boucle du système d'auto-amélioration. Vous gérez l'ensemble du cycle de vie : configuration, recherche, planification, exécution, sélection par tournoi, enregistrement de l'historique, visualisation et évaluation des conditions d'arrêt. Vous déléguez à des agents OMC spécialisés et coordonnez leurs entrées et sorties.
Politique d'exécution autonome
NE vous ARRÊTEZ JAMAIS et ne faites pas de pause pour demander à l'utilisateur pendant la boucle d'amélioration. Une fois le contrôle de porte passé et la boucle lancée, vous fonctionnez en totale autonomie jusqu'à ce qu'une condition d'arrêt soit remplie.
- Ne demandez pas de confirmation entre les itérations ou entre les étapes d'une itération.
- Ne résumez pas et n'attendez pas — exécutez l'étape suivante immédiatement.
- En cas d'échec d'un agent : réessayez une fois, puis sautez cet agent et continuez avec les agents restants. Enregistrez l'échec dans l'historique de l'itération.
- Si tous les plans sont rejetés : enregistrez-le, passez automatiquement à l'itération suivante.
- Si tous les exécuteurs échouent : enregistrez-le, passez automatiquement à l'itération suivante.
- En cas d'erreur de benchmark : enregistrez l'erreur, marquez l'exécuteur comme ayant échoué, continuez avec les autres exécuteurs.
- Les seules choses qui arrêtent la boucle sont les conditions d'arrêt de l'étape 11.
- Limite de confiance : la boucle exécute les commandes de benchmark telles quelles dans le dépôt cible. L'utilisateur confirme explicitement le chemin du dépôt et la commande de benchmark lors de la configuration. La boucle n'INSTALLE PAS de paquets, ne modifie pas la configuration système ni n'accède aux ressources réseau au-delà de ce que fait la commande de benchmark.
- Fichiers scellés : validate.sh garantit que le code de benchmark ne peut pas être modifié par la boucle, empêchant l'auto-modification de l'évaluation.
Suivi d'état
Les artefacts d'auto-amélioration résident dans une racine résolue renvoyée par scripts/resolve-paths.mjs.
- Les nouvelles exécutions sont par défaut dans
.omc/self-improve/topics/default/. - Lorsque l'utilisateur fournit un sujet ou un slug, utilisez
.omc/self-improve/topics/{topic_slug}/. - L'état mono-piste hérité à
.omc/self-improve/reste valide uniquement comme solution de repli de compatibilité lorsqu'aucun sujet/slug explicite n'est fourni et que cette structure plate existe déjà.
Traitez <self-improve-root>/ ci-dessous comme cette racine résolue :
<self-improve-root>/
├── config/ # Configuration utilisateur
│ ├── settings.json # agents, benchmark, thresholds, sealed_files
│ ├── goal.md # Objectif d'amélioration + métrique cible
│ ├── harness.md # Règles de garde (H001/H002/H003)
│ └── idea.md # Idées d'expérimentation utilisateur
├── state/ # État d'exécution
│ ├── agent-settings.json # itérations, best_score, statut, compteurs
│ ├── iteration_state.json # Progrès intra-itération (reprise)
│ ├── research_briefs/ # Résultat de recherche par cycle
│ ├── iteration_history/ # Historique complet par cycle
│ ├── merge_reports/ # Résultats du tournoi
│ └── plan_archive/ # Plans archivés (permanents)
├── plans/ # Plans actifs (cycle en cours)
└── tracking/ # Données de visualisation
├── raw_data.json # Scores de tous les candidats
├── baseline.json # Score de benchmark initial
├── events.json # Changements de configuration
└── progress.png # Graphique généré
Cycle de vie du mode OMC : .omc/state/sessions/{sessionId}/self-improve-state.json
Correspondance des agents
Toutes les augmentations sont fournies via le contexte de description de tâche au moment de la création. Aucune modification des fichiers .md d'agent existants.
| Étape | Rôle | Agent OMC | Modèle |
|---|---|---|---|
| Recherche | Analyse du codebase + génération d'hypothèses | agent généraliste | opus |
| Planification | Hypothèse → plan structuré | oh-my-claudecode:planner | opus |
| Revue d'architecture | Revue du plan en 6 points | oh-my-claudecode:architect | opus |
| Revue critique | Application des règles de garde | oh-my-claudecode:critic | opus |
| Exécution | Implémentation du plan + exécution du benchmark | oh-my-claudecode:executor | opus |
| Opérations Git | Fusion/Tag/PR atomiques | oh-my-claudecode:git-master | sonnet |
| Configuration de l'objectif | Entretien interactif | (directement dans cette compétence) | N/A |
| Configuration du benchmark | Création + validation du benchmark | agent personnalisé | opus |
Prompt de recherche : Lisez si-researcher.md depuis ce répertoire de compétence et transmettez son contenu comme prompt de l'agent.
Constructeur de benchmark : Lisez si-benchmark-builder.md depuis ce répertoire de compétence et transmettez son contenu comme prompt de l'agent.
Clarificateur d'objectif : Lisez si-goal-clarifier.md depuis ce répertoire de compétence et exécutez l'entretien directement (interactif, nécessite l'utilisateur).
Entrées
Lisez ces fichiers au démarrage et au début de chaque itération :
| Fichier | Objectif |
|---|---|
<self-improve-root>/config/settings.json | Configuration utilisateur : number_of_agents, benchmark_command, benchmark_format, benchmark_direction, max_iterations, plateau_threshold, plateau_window, target_value, primary_metric, sealed_files, regression_threshold, circuit_breaker_threshold, target_branch, current_repo_url, fork_url, upstream_url, topic_slug |
<self-improve-root>/state/agent-settings.json | Exécution : iterations, best_score, plateau_consecutive_count, circuit_breaker_count, status, goal_slug (dérivé : minuscules soulignées de l'objectif, persistant pour la cohérence inter-session) |
<self-improve-root>/state/iteration_state.json | Progrès par itération pour la reprise |
<self-improve-root>/config/goal.md | Objectif d'amélioration, métrique cible, périmètre |
<self-improve-root>/config/harness.md | Règles de garde (H001, H002, H003) |
Phase de configuration
- Vérifiez si le chemin du dépôt cible existe. S'il n'est pas configuré, demandez à l'utilisateur le chemin du dépôt à améliorer.
- Résolvez
<self-improve-root>en exécutantnode {skill_dir}/scripts/resolve-paths.mjs --project-root {repo_path} [--topic "..."] [--slug "..."] --ensure-dirs. - Créez la structure de répertoires
<self-improve-root>/en copiant depuistemplates/dans ce répertoire de compétence vers la racineconfig/résolue. - Lisez
<self-improve-root>/state/agent-settings.json. Vérifiezsi_setting_goal,si_setting_benchmark,si_setting_harness. - Confirmation de confiance (obligatoire, ne peut être ignorée) :
a. Si
trust_confirmedest déjàtruedans agent-settings.json, passez à l'étape 5 (chemin de reprise). b. Affichez le chemin du dépôt cible et demandez à l'utilisateur de confirmer :"Self-improve exécutera des commandes de benchmark dans {repo_path}. Cela exécute du code arbitraire dans ce dépôt. Confirmez ? [oui/non]"c. Si l'utilisateur refuse : abandonnez la configuration et quittez. NE continuez PAS. d. Enregistrez le consentement : définisseztrust_confirmed: truedans agent-settings.json. - Persistez
topic_slugdansconfig/settings.jsonlorsque la racine résolue est limitée à un sujet afin que les futures reprises restent sur la même piste. - Si l'objectif n'est pas défini → lisez
si-goal-clarifier.mddepuis ce répertoire de compétence et exécutez l'entretien socratique en 4 dimensions directement dans ce contexte (Objectif, Métrique, Cible, Périmètre). Écrivez le résultat dans<self-improve-root>/config/goal.md. - Si le benchmark n'est pas défini → lisez
si-benchmark-builder.mddepuis ce répertoire de compétence, créez un Agent personnalisé(model=opus) avec son contenu comme prompt. L'agent examine le dépôt, crée ou adapte un benchmark, valide 3 fois et enregistre la référence. Une fois le benchmark défini, confirmez la commande de benchmark avec l'utilisateur :"Commande de benchmark : {benchmark_command}. Celle-ci sera exécutée de manière répétée pendant la boucle. Confirmez ? [oui/non]"Si l'utilisateur refuse : abandonnez la configuration et quittez. - Si le harnais n'est pas défini → confirmez les règles de garde par défaut (H001/H002/H003) avec l'utilisateur ou personnalisez-les.
- Porte : Tous les
si_setting_goal,si_setting_benchmark,si_setting_harness,trust_confirmeddoivent être true. - Créez la branche d'amélioration (si elle n'existe pas) :
Oùgit -C {repo_path} checkout -b improve/{goal_slug} {target_branch} git -C {repo_path} checkout {target_branch}{goal_slug}est dérivé de l'objectif (minuscules, soulignées). Si la branche existe déjà, ignorez la création. Persistezgoal_slugdans agent-settings.json. - Exclusivité de mode : Appelez
state_list_active. Si autopilot ou ralph est actif, refusez de démarrer. - Écrivez l'état initial :
state_write(mode='self-improve', active=true, iteration=0, started_at=<now>)
Stratégie Git
Toutes les opérations Git se produisent dans le dépôt cible, PAS dans la racine du projet OMC.
- Branche d'amélioration :
improve/{goal_slug}— accumule uniquement les changements gagnants. - Branches d'expérimentation :
experiment/round_{n}_executor_{id}— éphémères, par exécuteur. - Tags d'archive :
archive/round_{n}_executor_{id}— branches perdantes taguées avant suppression. - Configuration de l'arbre de travail (SKILL.md crée avant chaque exécuteur) :
git -C {repo_path} worktree add worktrees/round_{n}_executor_{id} -b experiment/round_{n}_executor_{id} improve/{goal_slug} - Fusions gagnantes via
oh-my-claudecode:git-master:Fusionner experiment/round_{n}_executor_{winner_id} dans improve/{goal_slug} avec --no-ff Message : "Itération {n} : {hypothèse} (score : {avant} → {après})" - Push après fusion :
git -C {repo_path} push origin improve/{goal_slug}(sauvegarde, non bloquant) - Perdants archivés : Tag + suppression via git-master.
Boucle d'amélioration
Porte : Tous les paramètres doivent être true. Une fois la porte passée, exécutez en continu sans vous arrêter.
Mettez à jour state_write(mode='self-improve', active=true, status="running").
Étape 0 — Nettoyage des arbres de travail obsolètes (obligatoire, s'exécute à chaque itération)
PRÉREQUIS : Cette étape DOIT s'exécuter complètement avant toute autre étape, y compris la logique de reprise. Elle est idempotente et peut être exécutée plusieurs fois en toute sécurité.
- Listez tous les arbres de travail dans le dépôt cible :
git -C {repo_path} worktree list - Pour tout arbre de travail correspondant à
worktrees/round_*qui n'appartient PAS à l'itération en cours : supprimez-le avecgit -C {repo_path} worktree remove {path} --force - Exécutez
git -C {repo_path} worktree prunepour nettoyer les références obsolètes - Cela gère la récupération après crash — les arbres de travail orphelins des itérations interrompues sont nettoyés avant le début de la nouvelle itération
Étape 1 — Rafraîchir l'état
state_write(mode='self-improve', active=true, iteration=N) pour réinitialiser le TTL de 30 min.
Étape 2 — Vérifier la demande d'arrêt
Lisez l'état via state_read(mode='self-improve').
Si l'état est effacé (annulation invoquée) OU le statut est user_stopped :
a. Définissez status: "user_stopped" dans <self-improve-root>/state/agent-settings.json
b. Mettez à jour iteration_state.json : définissez status: "interrupted", enregistrez current_step
c. Nettoyez tous les arbres de travail actifs pour le cycle en cours (logique de l'étape 0)
d. Enregistrez : "Self-improve arrêté par l'utilisateur à l'itération {N}, étape {current_step}"
e. Quittez proprement — n'invoquez PAS /cancel à nouveau (déjà annulé)
Étape 3 — Vérifier les idées utilisateur
Lisez <self-improve-root>/config/idea.md. S'il n'est pas vide, prenez un instantané du contenu pour les planificateurs. Effacez après que les planificateurs l'ont consommé.
Étape 4 — Recherche
Créez 1 agent généraliste(model=opus) avec le contenu de si-researcher.md comme prompt.
Transmettez dans le prompt :
- Numéro d'itération actuel
- Chemin vers le dépôt cible
- Chemin vers
<self-improve-root>/config/goal.md - Chemin vers
<self-improve-root>/state/iteration_history/(tous les enregistrements précédents) - Chemin vers
<self-improve-root>/state/research_briefs/(briefs précédents) - Contenu de la section 3 de
data_contracts.md(schéma du brief de recherche)
Sortie attendue : JSON du brief de recherche → <self-improve-root>/state/research_briefs/round_{n}.json
Si le chercheur échoue, continuez avec l'historique seulement.
Étape 5 — Planifier
Créez N agents oh-my-claudecode:planner(model=opus) en parallèle (N = number_of_agents de la configuration).
Transmettez dans le prompt de chaque planificateur :
- Identité du planificateur (planner_a, planner_b, planner_c...)
- Chemin du brief de recherche
- Chemin de l'historique de l'itération
- Règles de garde depuis
<self-improve-root>/config/harness.md - Schéma du contrat de données pour le document de plan
- Instructions de remplacement : Sortie JSON (pas de markdown), ignorez le mode entretien, générez EXACTEMENT UNE hypothèse testable par plan, incluez le tag approach_family et history_reference.
- Idées utilisateur (le cas échéant, planner_a a la priorité)
Sortie attendue : JSON du document de plan → <self-improve-root>/plans/round_{n}/plan_planner_{id}.json
Étape 6 — Examiner
Pour chaque plan, séquentiellement (architecte avant critique) :
6a. Revue d'architecture : Créez oh-my-claudecode:architect avec le plan + liste de contrôle en 6 points :
- Testabilité — l'hypothèse est-elle testable ?
- Nouveauté — différente des tentatives précédentes ?
- Périmètre — de taille appropriée ?
- Fichiers cibles — existent-ils, ne sont-ils pas scellés ?
- Clarté de l'implémentation — l'exécuteur peut-il implémenter sans deviner ?
- Résultat attendu — réaliste compte tenu des preuves ?
Le verdict de l'architecte est uniquement consultatif.
6b. Revue critique : Créez oh-my-claudecode:critic avec le plan + règles de garde :
- H001 : Exactement une hypothèse (rejeter si zéro ou multiples)
- H002 : Pas de répétition d'approach_family >= 3
- H003 : Diversité intra-cycle (pas deux plans de la même famille dans le même cycle)
- Validation du schéma par rapport à data_contracts.md
- Vérification de la conscience de l'historique
Le critique définit critic_approved: true ou false. Les plans avec false sont exclus de l'exécution.
Si TOUS les plans sont rejetés, enregistrez et passez à l'étape 9.
Étape 7 — Exécuter
Pour chaque plan approuvé, créez oh-my-claudecode:executor(model=opus) en parallèle.
Avant la création, créez un arbre de travail :
git -C {repo_path} worktree add worktrees/round_{n}_executor_{id} -b experiment/round_{n}_executor_{id} improve/{goal_slug}
Transmettez dans le prompt de chaque exécuteur :
- Le JSON du plan approuvé
- Chemin du répertoire de l'arbre de travail
- Commande de benchmark depuis la configuration
- Liste des fichiers scellés depuis la configuration
- Chemin vers
scripts/validate.shdans ce répertoire de compétence - Schéma du contrat de données pour le résultat de benchmark
- Instructions de remplacement : Implémentez le plan fidèlement, exécutez validate.sh avant le benchmark, exécutez la commande de benchmark, produisez le JSON du résultat de benchmark en sortie.
Sortie attendue : JSON du résultat de benchmark (écrit par l'exécuteur ou renvoyé en sortie).
Étape 8 — Sélection par tournoi
SKILL.md le fait directement (non délégué) :
- Collectez tous les résul...