Communitygithub.com

self-improve

Moteur autonome d'amélioration de code par évolution avec sélection par tournoi.

Qu'est-ce que self-improve ?

Cette compétence met en place un système d'amélioration de code entièrement autonome, qui fonctionne en boucle itérative. Elle orchestre des agents spécialisés pour la recherche, la planification, la revue architecturale et critique, l'exécution et la sélection par tournoi des meilleures modifications. L'objectif est d'optimiser un dépôt de code vers un objectif défini (par exemple, améliorer un score de benchmark, réduire la latence) sans intervention humaine une fois la boucle lancée. La compétence est conçue pour fonctionner avec Claude Code et d'autres agents OMC, en utilisant des modèles comme Opus et Sonnet pour différentes étapes. Elle assure la robustesse via des règles de garde, la gestion des échecs et un nettoyage automatique des artefacts de travail, et génère un historique détaillé et des visualisations de progression.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/self-improve

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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.

ÉtapeRôleAgent OMCModèle
RechercheAnalyse du codebase + génération d'hypothèsesagent généralisteopus
PlanificationHypothèse → plan structuréoh-my-claudecode:planneropus
Revue d'architectureRevue du plan en 6 pointsoh-my-claudecode:architectopus
Revue critiqueApplication des règles de gardeoh-my-claudecode:criticopus
ExécutionImplémentation du plan + exécution du benchmarkoh-my-claudecode:executoropus
Opérations GitFusion/Tag/PR atomiquesoh-my-claudecode:git-mastersonnet
Configuration de l'objectifEntretien interactif(directement dans cette compétence)N/A
Configuration du benchmarkCréation + validation du benchmarkagent 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 :

FichierObjectif
<self-improve-root>/config/settings.jsonConfiguration 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.jsonExé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.jsonProgrès par itération pour la reprise
<self-improve-root>/config/goal.mdObjectif d'amélioration, métrique cible, périmètre
<self-improve-root>/config/harness.mdRègles de garde (H001, H002, H003)

Phase de configuration

  1. 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.
  2. Résolvez <self-improve-root> en exécutant node {skill_dir}/scripts/resolve-paths.mjs --project-root {repo_path} [--topic "..."] [--slug "..."] --ensure-dirs.
  3. Créez la structure de répertoires <self-improve-root>/ en copiant depuis templates/ dans ce répertoire de compétence vers la racine config/ résolue.
  4. Lisez <self-improve-root>/state/agent-settings.json. Vérifiez si_setting_goal, si_setting_benchmark, si_setting_harness.
  5. Confirmation de confiance (obligatoire, ne peut être ignorée) : a. Si trust_confirmed est déjà true dans 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éfinissez trust_confirmed: true dans agent-settings.json.
  6. Persistez topic_slug dans config/settings.json lorsque la racine résolue est limitée à un sujet afin que les futures reprises restent sur la même piste.
  7. Si l'objectif n'est pas défini → lisez si-goal-clarifier.md depuis 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.
  8. Si le benchmark n'est pas défini → lisez si-benchmark-builder.md depuis 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.
  9. 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.
  10. Porte : Tous les si_setting_goal, si_setting_benchmark, si_setting_harness, trust_confirmed doivent être true.
  11. Créez la branche d'amélioration (si elle n'existe pas) :
    git -C {repo_path} checkout -b improve/{goal_slug} {target_branch}
    git -C {repo_path} checkout {target_branch}
    
    Où {goal_slug} est dérivé de l'objectif (minuscules, soulignées). Si la branche existe déjà, ignorez la création. Persistez goal_slug dans agent-settings.json.
  12. Exclusivité de mode : Appelez state_list_active. Si autopilot ou ralph est actif, refusez de démarrer.
  13. É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é.

  1. Listez tous les arbres de travail dans le dépôt cible : git -C {repo_path} worktree list
  2. Pour tout arbre de travail correspondant à worktrees/round_* qui n'appartient PAS à l'itération en cours : supprimez-le avec git -C {repo_path} worktree remove {path} --force
  3. Exécutez git -C {repo_path} worktree prune pour nettoyer les références obsolètes
  4. 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 :

  1. Testabilité — l'hypothèse est-elle testable ?
  2. Nouveauté — différente des tentatives précédentes ?
  3. Périmètre — de taille appropriée ?
  4. Fichiers cibles — existent-ils, ne sont-ils pas scellés ?
  5. Clarté de l'implémentation — l'exécuteur peut-il implémenter sans deviner ?
  6. 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.sh dans 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é) :

  1. Collectez tous les résul...

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

agent-doc-discipline

Writing-time discipline for documents agents consume (the five surfaces, specs, tickets, .omc/skills/) — every rule checkable and carrying a why, steps before reference, one meaning in one home, no restating what the environment already says. Mandatory at drydock seed generation and the launch C5 sediment pass; opt-in for any other agent-facing doc edit. The companion of minimal-code-discipline: that one disciplines code, this one disciplines papers.

ai-slop-cleaner

Clean AI-generated code slop with a regression-safe, deletion-first workflow and optional reviewer-only mode

ask

Process-first advisor routing for Claude, Codex, Gemini, Antigravity, Grok, or Cursor via `omc ask`, with artifact capture and no raw CLI assembly

ask-navigator

Shipyard

autopilot

Full autonomous execution from idea to working code

autoresearch

Stateful single-mission improvement loop with strict evaluator contract, markdown decision logs, and max-runtime stop behavior

cancel

Cancel any active OMC mode (autopilot, ralph, ultragoal, swarm, ultrapilot, pipeline, team) and clean up retired legacy state

configure-notifications

Configure notification integrations (Telegram, Discord, Slack) via natural language

debug

Diagnose the current OMC session or repo state using logs, traces, state, and focused reproduction

deepinit

Deep codebase initialization with hierarchical AGENTS.md documentation

deep-interview

Socratic deep interview with mathematical ambiguity gating before explicit execution approval

drydock

Lay the keel of the shipyard harness in any repo — the 4-pillar shared environment (Context, Rules, Tools, Standards) across 5 surfaces (CLAUDE.md, skills, design-system, mcp/cli, shared context) so that every human and agent inherits the same design language and anyone can ship. Run once per repo; re-run with --check to audit drift.

execute

Carry an approved task through to working, verified code

external-context

Invoke parallel document-specialist agents for external web searches and documentation lookup

graph

Deterministic orchestration graph runtime - declarative DAG pipelines with journal-based crash recovery

harbor

Harbor intake for external work — the captain only handles unresolved decisions. Sweeps incoming issues and PRs, verifies every claim before disposition, reuses every decision already made, and hands the maintainer a docket whose pending items each carry one question with options, recommendation, impact and evidence. Agent-autonomous for facts and for actions covered by standing authorization; signed for every new judgment. Never merges.

hud

Configure HUD display options (layout, presets, display elements)

launch

Shipyard

loft

Loft the shape before cutting steel — answer a design question that prose cannot settle by building a throwaway artifact: a pure logic module in a clickable shell, or structurally different UI variants behind one route. The captain reacts to the artifact; the answer folds into the decision; the artifact never docks. Use when a design question stalls in words, when a navigator map carries a loft ticket, or when a spec discussion reaches

minimal-code-discipline

YAGNI-ladder coding discipline for writing changes — existence-first, reuse before writing, dependency ladder, shortest correct diff, with non-negotiables that must never be minimized away

Skills associés