Compétence Docteur
Remarque : Tous les chemins ~/.claude/... de ce guide respectent CLAUDE_CONFIG_DIR lorsque cette variable d'environnement est définie.
Tâche : Exécuter les diagnostics d'installation
Vous êtes le Docteur OMC - diagnostiquez et corrigez les problèmes d'installation.
Étape 1 : Vérifier la version du plugin
# Obtenir les versions installée et la plus récente (multi-plateforme)
node -e "const p=require('path'),f=require('fs'),h=require('os').homedir(),d=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude'),b=p.join(d,'plugins','cache','omc','oh-my-claudecode');try{const v=f.readdirSync(b).filter(x=>/^\d/.test(x)).sort((a,c)=>a.localeCompare(c,void 0,{numeric:true}));console.log('Installed:',v.length?v[v.length-1]:'(none)')}catch{console.log('Installed: (none)')}"
npm view oh-my-claude-sisyphus version 2>/dev/null || echo "Latest: (unavailable)"
Diagnostic :
- Si aucune version installée : CRITIQUE - plugin non installé
- Si INSTALLÉ != DERNIÈRE : AVERTISSEMENT - plugin obsolète
- Si plusieurs versions existent : AVERTISSEMENT - cache obsolète
Étape 2 : Vérifier la présence de Hooks hérités dans settings.json
Lisez ${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json (niveau profil) et ./.claude/settings.json (niveau projet) et vérifiez s'il existe une clé "hooks" avec des entrées comme :
bash ${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hooks/keyword-detector.shbash ${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hooks/persistent-mode.shbash ${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hooks/session-start.sh
Diagnostic :
- Si trouvé : CRITIQUE - hooks hérités provoquant des doublons
Étape 3 : Vérifier les scripts Bash hérités
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/hooks/*.sh 2>/dev/null
Diagnostic :
- Si
keyword-detector.sh,persistent-mode.sh,session-start.sh, oustop-continuation.shexistent : AVERTISSEMENT - scripts hérités (peuvent causer des confusions)
Étape 4 : Vérifier CLAUDE.md
# Vérifier si CLAUDE.md existe
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/CLAUDE.md 2>/dev/null
# Vérifier les marqueurs OMC (<!-- OMC:START --> est le marqueur canonique)
grep -q "<!-- OMC:START -->" "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/CLAUDE.md" 2>/dev/null && echo "Has OMC config" || echo "Missing OMC config in CLAUDE.md"
# Vérifier le marqueur de version dans CLAUDE.md (ou son compagnon déterministe) et le comparer avec la dernière version du cache du plugin installé
node -e "const p=require('path'),f=require('fs'),h=require('os').homedir(),d=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const base=p.join(d,'CLAUDE.md');let baseContent='';try{baseContent=f.readFileSync(base,'utf8')}catch{};let candidates=[base];let referenced='';const importMatch=baseContent.match(/CLAUDE-[^ )]*\.md/);if(importMatch){referenced=p.join(d,importMatch[0]);candidates.push(referenced)}else{const defaultCompanion=p.join(d,'CLAUDE-omc.md');if(f.existsSync(defaultCompanion))candidates.push(defaultCompanion);try{const others=f.readdirSync(d).filter(n=>/^CLAUDE-.*\.md$/i.test(n)).sort().map(n=>p.join(d,n));for(const o of others){if(candidates.includes(o)===false)candidates.push(o)}}catch{}};let claudeV='(missing)';let claudeSource='(none)';for(const file of candidates){try{const c=f.readFileSync(file,'utf8');const m=c.match(/<!--\s*OMC:VERSION:([^\s]+)\s*-->/i);if(m){claudeV=m[1];claudeSource=file;break}}catch{}};if(claudeV==='(missing)'&&candidates.length>0){claudeV='(missing marker)';claudeSource='scanned deterministic CLAUDE sources';};let pluginV='(none)';try{const b=p.join(d,'plugins','cache','omc','oh-my-claudecode');const v=f.readdirSync(b).filter(x=>/^\d/.test(x)).sort((a,c)=>a.localeCompare(c,void 0,{numeric:true}));pluginV=v.length?v[v.length-1]:'(none)';}catch{};console.log('CLAUDE.md OMC version:',claudeV);console.log('OMC version source:',claudeSource);console.log('Latest cached plugin version:',pluginV);if(claudeV==='(missing)'||claudeV==='(missing marker)'||pluginV==='(none)'){console.log('VERSION CHECK SKIPPED: missing CLAUDE marker or plugin cache')}else if(claudeV===pluginV){console.log('VERSION MATCH: CLAUDE and plugin cache are aligned')}else{console.log('VERSION DRIFT: CLAUDE.md and plugin versions differ')}"
# Vérifier les fichiers compagnons pour le modèle de fichier divisé (ex : CLAUDE-omc.md)
find "${CLAUDE_CONFIG_DIR:-$HOME/.claude}" -maxdepth 1 -type f -name 'CLAUDE-*.md' -print 2>/dev/null
while IFS= read -r f; do
grep -q "<!-- OMC:START -->" "$f" 2>/dev/null && echo "Has OMC config in companion: $f"
done < <(find "${CLAUDE_CONFIG_DIR:-$HOME/.claude}" -maxdepth 1 -type f -name 'CLAUDE-*.md' -print 2>/dev/null)
# Vérifier si CLAUDE.md référence un fichier compagnon
grep -o "CLAUDE-[^ )]*\.md" "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/CLAUDE.md" 2>/dev/null
Diagnostic :
- Si CLAUDE.md manquant : CRITIQUE - CLAUDE.md non configuré
- Si
<!-- OMC:START -->trouvé dans CLAUDE.md : OK - Si
<!-- OMC:START -->trouvé dans un fichier compagnon (ex :CLAUDE-omc.md) : OK - modèle de fichier divisé détecté - Si aucun marqueur OMC dans CLAUDE.md ou dans un fichier compagnon : AVERTISSEMENT - CLAUDE.md obsolète
- Si le marqueur
OMC:VERSIONest manquant dans l'analyse de la source CLAUDE déterministe (base + compagnon référencé) : AVERTISSEMENT - impossibilité de vérifier la fraîcheur de CLAUDE.md - Si
CLAUDE.md OMC version!=Latest cached plugin version: AVERTISSEMENT - dérive de version détectée (lancezomc updateouomc setup)
Étape 5 : Vérifier les prérequis d'exécution de Ralph
Ralph est une boucle de persistance pilotée par un agent, pas un programme compilé : ses seuls prérequis d'exécution stricts sont l'environnement d'exécution Node qui exécute les scripts de hook d'OMC (persistent-mode.mjs, keyword-detector.mjs) et un répertoire de configuration accessible en écriture pour les fichiers d'état .omc/state/ tels que ralph-state.json.
node --version || echo "Node for Ralph: MISSING"
mkdir -p "${CLAUDE_CONFIG_DIR:-$HOME/.claude}" 2>/dev/null
touch "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-write-probe" 2>/dev/null && rm -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/.omc-write-probe" && echo "Config dir writable" || echo "Config dir NOT writable"
Diagnostic :
- Si Node s'exécute et affiche une version : OK - prérequis d'exécution Ralph présent
- Si
nodeest manquant ou échoue : CRITIQUE - Les hooks OMC et Ralph ne peuvent pas fonctionner sans Node (voir https://nodejs.org pour les installeurs ; les utilisateurs de nvm/fnm ont besoin de Node dans le PATH des shells non interactifs) - Si le répertoire de configuration n'est pas accessible en écriture : AVERTISSEMENT - La persistance d'état Ralph échouera jusqu'à ce qu'il soit accessible en écriture
Étape 6 : Vérifier le cache du plugin obsolète
# Compter les versions dans le cache (multi-plateforme)
node -e "const p=require('path'),f=require('fs'),h=require('os').homedir(),d=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude'),b=p.join(d,'plugins','cache','omc','oh-my-claudecode');try{const v=f.readdirSync(b).filter(x=>/^\d/.test(x));console.log(v.length+' version(s):',v.join(', '))}catch{console.log('0 versions')}"
Diagnostic :
- Si > 1 version : AVERTISSEMENT - plusieurs versions en cache (nettoyage recommandé)
Étape 7 : Vérifier le contenu installé via curl hérité
Vérifiez les agents, commandes et compétences hérités installés via curl (avant le système de plugins). Important : Signalez uniquement les fichiers dont les noms correspondent aux noms fournis par le plugin. Ne signalez PAS les agents/commandes/compétences personnalisés de l'utilisateur qui ne sont pas liés à OMC.
# Vérifier le répertoire des agents hérités
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/agents/ 2>/dev/null
# Vérifier le répertoire des commandes héritées
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/commands/ 2>/dev/null
# Vérifier le répertoire des compétences héritées
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/skills/ 2>/dev/null
Diagnostic :
- Si
~/.claude/agents/existe avec des fichiers correspondant aux noms des agents du plugin : AVERTISSEMENT - agents hérités (maintenant fournis par le plugin) - Si
~/.claude/commands/existe avec des fichiers correspondant aux noms des commandes du plugin : AVERTISSEMENT - commandes héritées (maintenant fournies par le plugin) - Si
~/.claude/skills/existe avec des fichiers correspondant aux noms des compétences du plugin : AVERTISSEMENT - compétences héritées (maintenant fournies par le plugin) - Si des fichiers personnalisés existent et ne correspondent PAS aux noms des plugins : OK - il s'agit de contenu personnalisé utilisateur, ne les signalez pas
Noms d'agents connus du plugin (vérifiez agents/ pour ceux-ci) :
architect.md, document-specialist.md, explore.md, executor.md, debugger.md, planner.md, analyst.md, critic.md, verifier.md, test-engineer.md, designer.md, writer.md, qa-tester.md, scientist.md, security-reviewer.md, code-reviewer.md, git-master.md, code-simplifier.md
Noms de compétences connus du plugin (vérifiez skills/ pour ceux-ci) :
ai-slop-cleaner, ask, autopilot, cancel, configure-notifications, deep-interview, deepinit, external-context, hud, omc-doctor, omc-setup, plan, project-session-manager, ralph, ralplan, release, skill, team, visual-verdict, wiki
Noms de commandes connus du plugin (vérifiez commands/ pour ceux-ci) :
deepsearch.md
Format du rapport
Après avoir effectué toutes les vérifications, générez un rapport :
## Rapport du Docteur OMC
### Résumé
[SAIN / PROBLÈMES TROUVÉS]
### Vérifications
| Vérification | Statut | Détails |
|-------------|--------|---------|
| Version du plugin | OK/AVERTISSEMENT/CRITIQUE | ... |
| Hooks hérités (settings.json) | OK/CRITIQUE | ... |
| Scripts hérités (~/.claude/hooks/) | OK/AVERTISSEMENT | ... |
| CLAUDE.md | OK/AVERTISSEMENT/CRITIQUE | ... |
| Prérequis d'exécution Ralph (Node, répertoire config) | OK/CRITIQUE | ... |
| Cache du plugin | OK/AVERTISSEMENT | ... |
| Agents hérités (~/.claude/agents/) | OK/AVERTISSEMENT | ... |
| Commandes héritées (~/.claude/commands/) | OK/AVERTISSEMENT | ... |
| Compétences héritées (~/.claude/skills/) | OK/AVERTISSEMENT | ... |
### Problèmes trouvés
1. [Description du problème]
2. [Description du problème]
### Correctifs recommandés
[Liste des correctifs basés sur les problèmes]
Correction automatique (si l'utilisateur confirme)
Si des problèmes sont trouvés, demandez à l'utilisateur : "Souhaitez-vous que je corrige ces problèmes automatiquement ?"
Si oui, appliquez les correctifs :
Correctif : Hooks hérités dans settings.json
Supprimez la section "hooks" de ${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json (conservez les autres paramètres intacts)
Correctif : Scripts Bash hérités
rm -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/hooks/keyword-detector.sh
rm -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/hooks/persistent-mode.sh
rm -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/hooks/session-start.sh
rm -f "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/hooks/stop-continuation.sh
Correctif : Plugin obsolète
# Vider le cache du plugin (multi-plateforme)
node -e "const p=require('path'),f=require('fs'),d=process.env.CLAUDE_CONFIG_DIR||p.join(require('os').homedir(),'.claude'),b=p.join(d,'plugins','cache','omc','oh-my-claudecode');try{f.rmSync(b,{recursive:true,force:true});console.log('Plugin cache cleared. Restart Claude Code to fetch latest version.')}catch{console.log('No plugin cache found')}"
Correctif : Cache obsolète (plusieurs versions)
# Conserver uniquement la dernière version (multi-plateforme)
node -e "const p=require('path'),f=require('fs'),h=require('os').homedir(),d=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude'),b=p.join(d,'plugins','cache','omc','oh-my-claudecode');try{const v=f.readdirSync(b).filter(x=>/^\d/.test(x)).sort((a,c)=>a.localeCompare(c,void 0,{numeric:true}));v.slice(0,-1).forEach(x=>f.rmSync(p.join(b,x),{recursive:true,force:true}));console.log('Removed',v.length-1,'old version(s)')}catch(e){console.log('No cache to clean')}"
Correctif : CLAUDE.md manquant/obsolète
Récupérez la dernière version depuis GitHub et écrivez-la dans ${CLAUDE_CONFIG_DIR:-~/.claude}/CLAUDE.md :
WebFetch(url: "https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claudecode/main/docs/CLAUDE.md", prompt: "Return the complete raw markdown content exactly as-is")
Correctif : Contenu installé via curl hérité
Supprimez les répertoires d'agents, commandes et compétences hérités (maintenant fournis par le plugin) :
# Sauvegardez d'abord (facultatif - demandez à l'utilisateur)
# mv "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/agents "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/agents.bak
# mv "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/commands "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/commands.bak
# mv "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/skills "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/skills.bak
# Ou supprimez directement
rm -rf "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/agents
rm -rf "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/commands
rm -rf "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/skills
Remarque : Supprimez uniquement si ceux-ci contiennent des fichiers liés à oh-my-claudecode. Si l'utilisateur a des agents/commandes/compétences personnalisés, avertissez-le et demandez avant de supprimer.
Après la correction
Après avoir appliqué les correctifs, informez l'utilisateur :
Correctifs appliqués. Redémarrez Claude Code pour que les changements prennent effet.