Habilidad Doctor
Nota: Todas las rutas ~/.claude/... en esta guía respetan CLAUDE_CONFIG_DIR cuando esa variable de entorno está establecida.
Tarea: Ejecutar Diagnóstico de Instalación
Eres el Doctor OMC: diagnostica y repara problemas de instalación.
Paso 1: Verificar Versión del Plugin
# Obtener versiones instalada y más reciente (multiplataforma)
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('Instalada:',v.length?v[v.length-1]:'(ninguna)')}catch{console.log('Instalada: (ninguna)')}"
npm view oh-my-claude-sisyphus version 2>/dev/null || echo "Última: (no disponible)"
Diagnóstico:
- Si no hay versión instalada: CRÍTICO - plugin no instalado
- Si INSTALADA != ÚLTIMA: ADVERTENCIA - plugin desactualizado
- Si existen múltiples versiones: ADVERTENCIA - caché obsoleta
Paso 2: Verificar Hooks Heredados en settings.json
Lee ${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json (nivel de perfil) y ./.claude/settings.json (nivel de proyecto) y verifica si hay una clave "hooks" con entradas como:
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
Diagnóstico:
- Si se encuentra: CRÍTICO - hooks heredados causando duplicados
Paso 3: Verificar Scripts Bash Heredados
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/hooks/*.sh 2>/dev/null
Diagnóstico:
- Si existen
keyword-detector.sh,persistent-mode.sh,session-start.shostop-continuation.sh: ADVERTENCIA - scripts heredados (pueden causar confusión)
Paso 4: Verificar CLAUDE.md
# Verificar si existe CLAUDE.md
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/CLAUDE.md 2>/dev/null
# Buscar marcadores OMC (<!-- OMC:START --> es el marcador canónico)
grep -q "<!-- OMC:START -->" "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/CLAUDE.md" 2>/dev/null && echo "Tiene configuración OMC" || echo "Falta configuración OMC en CLAUDE.md"
# Verificar marcador de versión en CLAUDE.md (o compañero determinista) y comparar con la versión más reciente en caché del plugin
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='(falta)';let claudeSource='(ninguno)';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==='(falta)'&&candidates.length>0){claudeV='(marcador faltante)';claudeSource='fuentes CLAUDE deterministas escaneadas'};let pluginV='(ninguna)';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]:'(ninguna)';}catch{};console.log('Versión OMC en CLAUDE.md:',claudeV);console.log('Fuente de versión OMC:',claudeSource);console.log('Versión más reciente en caché del plugin:',pluginV);if(claudeV==='(falta)'||claudeV==='(marcador faltante)'||pluginV==='(ninguna)'){console.log('VERIFICACIÓN DE VERSIÓN OMITIDA: falta marcador en CLAUDE o caché del plugin')}else if(claudeV===pluginV){console.log('COINCIDENCIA DE VERSIÓN: CLAUDE y caché del plugin están alineados')}else{console.log('DESVIACIÓN DE VERSIÓN: las versiones de CLAUDE.md y del plugin difieren')}"
# Verificar archivos compañeros para patrón de división (ej. 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 "Tiene configuración OMC en compañero: $f"
done < <(find "${CLAUDE_CONFIG_DIR:-$HOME/.claude}" -maxdepth 1 -type f -name 'CLAUDE-*.md' -print 2>/dev/null)
# Verificar si CLAUDE.md referencia un archivo compañero
grep -o "CLAUDE-[^ )]*\.md" "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/CLAUDE.md" 2>/dev/null
Diagnóstico:
- Si falta CLAUDE.md: CRÍTICO - CLAUDE.md no configurado
- Si se encuentra
<!-- OMC:START -->en CLAUDE.md: OK - Si se encuentra
<!-- OMC:START -->en un archivo compañero (ej.CLAUDE-omc.md): OK - patrón de división detectado - Si no hay marcadores OMC en CLAUDE.md ni en ningún compañero: ADVERTENCIA - CLAUDE.md desactualizado
- Si falta el marcador
OMC:VERSIONen el escaneo de fuentes CLAUDE deterministas (base + compañero referenciado): ADVERTENCIA - no se puede verificar frescura de CLAUDE.md - Si
Versión OMC en CLAUDE.md!=Versión más reciente en caché del plugin: ADVERTENCIA - desviación de versión detectada (ejecutaomc updateoomc setup)
Paso 5: Verificar Prerrequisitos de Ejecución de Ralph
Ralph es un bucle de persistencia impulsado por agente, no un programa compilado: sus únicos prerrequisitos de ejecución estrictos son el runtime Node que ejecuta los scripts hook de OMC (persistent-mode.mjs, keyword-detector.mjs) y un directorio de configuración escribible para archivos de estado .omc/state/ como ralph-state.json.
node --version || echo "Node para Ralph: FALTA"
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 "Directorio de configuración escribible" || echo "Directorio de configuración NO escribible"
Diagnóstico:
- Si Node se ejecuta y muestra una versión: OK - prerrequisito de ejecución de Ralph presente
- Si
nodefalta o falla: CRÍTICO - los hooks de OMC y Ralph no pueden ejecutarse sin Node (consulta https://nodejs.org para instaladores; los usuarios de nvm/fnm necesitan Node en el PATH de shells no interactivos) - Si el directorio de configuración no es escribible: ADVERTENCIA - la persistencia de estado de Ralph fallará hasta que sea escribible
Paso 6: Verificar Caché de Plugin Obsoleta
# Contar versiones en caché (multiplataforma)
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+' versión(es):',v.join(', '))}catch{console.log('0 versiones')}"
Diagnóstico:
- Si > 1 versión: ADVERTENCIA - múltiples versiones en caché (se recomienda limpiar)
Paso 7: Verificar Contenido Instalado con curl Heredado
Verifica agentes, comandos y habilidades heredados instalados mediante curl (antes del sistema de plugins). Importante: Solo señaliza archivos cuyos nombres coincidan con nombres reales provistos por el plugin. NO señalices agentes/comandos/habilidades personalizados del usuario que no estén relacionados con OMC.
# Verificar directorio de agentes heredado
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/agents/ 2>/dev/null
# Verificar directorio de comandos heredado
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/commands/ 2>/dev/null
# Verificar directorio de habilidades heredado
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/skills/ 2>/dev/null
Diagnóstico:
- Si
~/.claude/agents/existe con archivos que coinciden con nombres de agentes del plugin: ADVERTENCIA - agentes heredados (ahora provistos por el plugin) - Si
~/.claude/commands/existe con archivos que coinciden con nombres de comandos del plugin: ADVERTENCIA - comandos heredados (ahora provistos por el plugin) - Si
~/.claude/skills/existe con archivos que coinciden con nombres de habilidades del plugin: ADVERTENCIA - habilidades heredadas (ahora provistas por el plugin) - Si existen archivos personalizados que NO coinciden con nombres del plugin: OK - estos son contenido personalizado del usuario, no los señalices
Nombres conocidos de agentes del plugin (verifica en agents/):
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
Nombres conocidos de habilidades del plugin (verifica en skills/):
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
Nombres conocidos de comandos del plugin (verifica en commands/):
deepsearch.md
Formato del Informe
Después de ejecutar todas las comprobaciones, genera un informe:
## Informe del Doctor OMC
### Resumen
[SALUDABLE / PROBLEMAS ENCONTRADOS]
### Comprobaciones
| Comprobación | Estado | Detalles |
|--------------|--------|----------|
| Versión del Plugin | OK/ADVERTENCIA/CRÍTICO | ... |
| Hooks Heredados (settings.json) | OK/CRÍTICO | ... |
| Scripts Heredados (~/.claude/hooks/) | OK/ADVERTENCIA | ... |
| CLAUDE.md | OK/ADVERTENCIA/CRÍTICO | ... |
| Prerrequisitos de Ejecución de Ralph (Node, dir. config) | OK/CRÍTICO | ... |
| Caché del Plugin | OK/ADVERTENCIA | ... |
| Agentes Heredados (~/.claude/agents/) | OK/ADVERTENCIA | ... |
| Comandos Heredados (~/.claude/commands/) | OK/ADVERTENCIA | ... |
| Habilidades Heredadas (~/.claude/skills/) | OK/ADVERTENCIA | ... |
### Problemas Encontrados
1. [Descripción del problema]
2. [Descripción del problema]
### Correcciones Recomendadas
[Lista de correcciones basadas en los problemas]
Corrección Automática (si el usuario confirma)
Si se encuentran problemas, pregunta al usuario: "¿Quieres que corrija estos problemas automáticamente?"
Si responde que sí, aplica las correcciones:
Corrección: Hooks Heredados en settings.json
Elimina la sección "hooks" de ${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json (mantén intactas las demás configuraciones)
Corrección: Scripts Bash Heredados
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
Corrección: Plugin Desactualizado
# Limpiar caché del plugin (multiplataforma)
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('Caché del plugin limpiada. Reinicia Claude Code para obtener la última versión.')}catch{console.log('No se encontró caché del plugin')}"
Corrección: Caché Obsoleta (múltiples versiones)
# Mantener solo la última versión (multiplataforma)
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('Eliminadas',v.length-1,'versión(es) antigua(s)')}catch(e){console.log('No hay caché que limpiar')}"
Corrección: CLAUDE.md Faltante/Desactualizado
Obtén la última versión desde GitHub y escríbela en ${CLAUDE_CONFIG_DIR:-~/.claude}/CLAUDE.md:
WebFetch(url: "https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claudecode/main/docs/CLAUDE.md", prompt: "Devuelve el contenido completo del markdown raw exactamente como está")
Corrección: Contenido Instalado con curl Heredado
Elimina los directorios de agentes, comandos y habilidades heredados (ahora provistos por el plugin):
# Primero hacer copia de seguridad (opcional - preguntar al usuario)
# 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
# O eliminar directamente
rm -rf "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/agents
rm -rf "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/commands
rm -rf "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/skills
Nota: Solo elimina si estos contienen archivos relacionados con oh-my-claudecode. Si el usuario tiene agentes/comandos/habilidades personalizados, adviértelo y pregunta antes de eliminar.
Post-Corrección
Después de aplicar las correcciones, informa al usuario:
Correcciones aplicadas. Reinicia Claude Code para que los cambios surtan efecto.