Communitygithub.com

omc-doctor

Diagnostica y repara problemas de instalación de oh-my-claudecode.

¿Qué es omc-doctor?

La habilidad 'omc-doctor' actúa como un asistente de diagnóstico y reparación para instalaciones de oh-my-claudecode (OMC) en Claude Code. Su propósito es detectar y corregir problemas comunes como versiones desactualizadas del plugin, hooks legacy en settings.json, scripts Bash heredados, archivos CLAUDE.md faltantes o desactualizados, falta de Node.js o permisos de escritura en el directorio de configuración, caché de plugins estancada y contenido instalado mediante curl de versiones anteriores de OMC. Está diseñada para Claude Code y ejecuta una serie de pasos automatizados que verifican cada aspecto de la instalación, proporcionando un informe detallado con estados (OK, WARN, CRITICAL) y, con confirmación del usuario, aplica correcciones automáticas como limpieza de caché, eliminación de hooks heredados y actualización de archivos de configuración. Esto garantiza que OMC funcione de manera óptima sin conflictos ni residuos de instalaciones previas.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

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.sh
  • bash ${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hooks/persistent-mode.sh
  • bash ${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.sh o stop-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:VERSION en 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 (ejecuta omc update o omc 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 node falta 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.

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 relacionados