Communitygithub.com

omc-doctor

Diagnostique et résout les problèmes d'installation d'oh-my-claudecode.

Qu'est-ce que omc-doctor ?

La compétence « omc-doctor » est conçue pour diagnostiquer et résoudre les problèmes d'installation de l'outil oh-my-claudecode (OMC). Elle suit un processus en plusieurs étapes : vérification de la version du plugin, détection de hooks hérités dans les fichiers settings.json, recherche de scripts shell hérités, inspection de CLAUDE.md pour les marqueurs OMC, et vérification des prérequis d'exécution de Ralph (notamment la présence de Node.js et les droits d'écriture). Cette compétence est destinée aux utilisateurs de Claude Code et d'autres agents AI, permettant un dépannage rapide et automatisé des configurations OMC. Elle prend en charge les distributions Linux, macOS et Windows via WSL, et s'intègre avec les fichiers de configuration CLAUDE.md et les hooks d'OMC.

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

Demander à votre IA préférée

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

Documentation

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.sh
  • bash ${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hooks/persistent-mode.sh
  • bash ${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, ou stop-continuation.sh existent : 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:VERSION est 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 (lancez omc update ou omc 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 node est 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.

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