Habilidade Doctor
Nota: Todos os caminhos ~/.claude/... neste guia respeitam CLAUDE_CONFIG_DIR quando essa variável de ambiente estiver definida.
Tarefa: Executar Diagnóstico de Instalação
Você é o OMC Doctor — diagnostique e corrija problemas de instalação.
Passo 1: Verificar Versão do Plugin
# Obtém versões instalada e mais recente (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]:'(nenhuma)')}catch{console.log('Instalada: (nenhuma)')}"
npm view oh-my-claude-sisyphus version 2>/dev/null || echo "Mais recente: (indisponível)"
Diagnóstico:
- Se nenhuma versão instalada: CRÍTICO — plugin não instalado
- Se INSTALADA != MAIS RECENTE: AVISO — plugin desatualizado
- Se múltiplas versões existirem: AVISO — cache obsoleto
Passo 2: Verificar Hooks Legados em settings.json
Leia ambos ${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json (nível de perfil) e ./.claude/settings.json (nível de projeto) e verifique se há uma chave "hooks" com 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:
- Se encontrado: CRÍTICO — hooks legados causando duplicatas
Passo 3: Verificar Scripts Bash Hook Legados
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/hooks/*.sh 2>/dev/null
Diagnóstico:
- Se
keyword-detector.sh,persistent-mode.sh,session-start.shoustop-continuation.shexistirem: AVISO — scripts legados (podem causar confusão)
Passo 4: Verificar CLAUDE.md
# Verificar se CLAUDE.md existe
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/CLAUDE.md 2>/dev/null
# Verificar marcadores OMC (<!-- OMC:START --> é o marcador canônico)
grep -q "<!-- OMC:START -->" "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/CLAUDE.md" 2>/dev/null && echo "Tem configuração OMC" || echo "Configuração OMC ausente em CLAUDE.md"
# Verificar marcador de versão no CLAUDE.md (ou companion determinístico) e comparar com a versão mais recente do cache do 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='(ausente)';let claudeSource='(nenhum)';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==='(ausente)'&&candidates.length>0){claudeV='(marcador ausente)';claudeSource='fontes CLAUDE determinísticas varridas';};let pluginV='(nenhuma)';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]:'(nenhuma)';}catch{};console.log('Versão OMC no CLAUDE.md:',claudeV);console.log('Fonte da versão OMC:',claudeSource);console.log('Última versão do plugin em cache:',pluginV);if(claudeV==='(ausente)'||claudeV==='(marcador ausente)'||pluginV==='(nenhuma)'){console.log('VERIFICAÇÃO DE VERSÃO IGNORADA: marcador CLAUDE ou cache do plugin ausente')}else if(claudeV===pluginV){console.log('VERSÃO CORRESPONDE: CLAUDE e cache do plugin estão alinhados')}else{console.log('DIVERGÊNCIA DE VERSÃO: CLAUDE.md e versões do plugin diferem')}"
# Verificar arquivos companion para padrão de divisão de arquivo (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 "Tem configuração OMC em companion: $f"
done < <(find "${CLAUDE_CONFIG_DIR:-$HOME/.claude}" -maxdepth 1 -type f -name 'CLAUDE-*.md' -print 2>/dev/null)
# Verificar se CLAUDE.md referencia um arquivo companion
grep -o "CLAUDE-[^ )]*\.md" "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/CLAUDE.md" 2>/dev/null
Diagnóstico:
- Se CLAUDE.md estiver faltando: CRÍTICO — CLAUDE.md não configurado
- Se
<!-- OMC:START -->encontrado no CLAUDE.md: OK - Se
<!-- OMC:START -->encontrado em um arquivo companion (ex.:CLAUDE-omc.md): OK — padrão de divisão de arquivo detectado - Se nenhum marcador OMC no CLAUDE.md ou em qualquer arquivo companion: AVISO — CLAUDE.md desatualizado
- Se o marcador
OMC:VERSIONestiver ausente da varredura de fontes CLAUDE determinísticas (base + companion referenciado): AVISO — não é possível verificar frescor do CLAUDE.md - Se
Versão OMC no CLAUDE.md!=Última versão do plugin em cache: AVISO — divergência de versão detectada (executeomc updateouomc setup)
Passo 5: Verificar Pré-requisitos do Runtime Ralph
Ralph é um loop de persistência orientado por agente, não um programa compilado: seus únicos pré-requisitos de runtime rígidos são o runtime Node que executa os scripts hook do OMC (persistent-mode.mjs, keyword-detector.mjs) e um diretório de configuração gravável para arquivos de estado .omc/state/, como ralph-state.json.
node --version || echo "Node para Ralph: AUSENTE"
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 "Diretório de config gravável" || echo "Diretório de config NÃO gravável"
Diagnóstico:
- Se o Node executa e imprime uma versão: OK — pré-requisito de runtime Ralph presente
- Se
nodeestiver ausente ou falhar: CRÍTICO — hooks OMC e Ralph não podem executar sem Node (veja https://nodejs.org para instaladores; usuários de nvm/fnm precisam do Node no PATH de shells não interativos) - Se o diretório de config não for gravável: AVISO — a persistência de estado do Ralph falhará até que esteja gravável
Passo 6: Verificar Cache de Plugin Desatualizado
# Contar versões no cache (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+' versão(ões):',v.join(', '))}catch{console.log('0 versões')}"
Diagnóstico:
- Se > 1 versão: AVISO — múltiplas versões em cache (limpeza recomendada)
Passo 7: Verificar Conteúdo Instalado via curl Legado
Verifique agents, commands e skills legados instalados via curl (antes do sistema de plugins). Importante: Sinalize apenas arquivos cujos nomes correspondam a nomes reais fornecidos pelo plugin. Não sinalize agents/commands/skills personalizados do usuário que não estejam relacionados ao OMC.
# Verificar diretório agents legado
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/agents/ 2>/dev/null
# Verificar diretório commands legado
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/commands/ 2>/dev/null
# Verificar diretório skills legado
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/skills/ 2>/dev/null
Diagnóstico:
- Se
~/.claude/agents/existir com arquivos correspondentes a nomes de agentes do plugin: AVISO — agents legados (agora fornecidos pelo plugin) - Se
~/.claude/commands/existir com arquivos correspondentes a nomes de commands do plugin: AVISO — commands legados (agora fornecidos pelo plugin) - Se
~/.claude/skills/existir com arquivos correspondentes a nomes de skills do plugin: AVISO — skills legados (agora fornecidos pelo plugin) - Se arquivos personalizados existirem que NÃO correspondam a nomes de plugin: OK — são conteúdos personalizados do usuário, não sinalize
Nomes conhecidos de agentes do plugin (verifique agents/ para estes):
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
Nomes conhecidos de skills do plugin (verifique skills/ para estes):
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
Nomes conhecidos de commands do plugin (verifique commands/ para estes):
deepsearch.md
Formato do Relatório
Após executar todas as verificações, produza um relatório:
## Relatório OMC Doctor
### Resumo
[SAUDÁVEL / PROBLEMAS ENCONTRADOS]
### Verificações
| Verificação | Status | Detalhes |
|-------------|--------|----------|
| Versão do Plugin | OK/AVISO/CRÍTICO | ... |
| Hooks Legados (settings.json) | OK/CRÍTICO | ... |
| Scripts Legados (~/.claude/hooks/) | OK/AVISO | ... |
| CLAUDE.md | OK/AVISO/CRÍTICO | ... |
| Pré-requisitos Runtime Ralph (Node, dir config) | OK/CRÍTICO | ... |
| Cache do Plugin | OK/AVISO | ... |
| Agents Legados (~/.claude/agents/) | OK/AVISO | ... |
| Commands Legados (~/.claude/commands/) | OK/AVISO | ... |
| Skills Legados (~/.claude/skills/) | OK/AVISO | ... |
### Problemas Encontrados
1. [Descrição do problema]
2. [Descrição do problema]
### Correções Recomendadas
[Listar correções baseadas nos problemas]
Correção Automática (se o usuário confirmar)
Se problemas forem encontrados, pergunte ao usuário: "Gostaria que eu corrigisse esses problemas automaticamente?"
Se sim, aplique as correções:
Corrigir: Hooks Legados em settings.json
Remova a seção "hooks" de ${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json (mantenha as outras configurações intactas)
Corrigir: Scripts Bash Legados
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
Corrigir: Plugin Desatualizado
# Limpar cache do 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('Cache do plugin limpo. Reinicie o Claude Code para obter a versão mais recente.')}catch{console.log('Nenhum cache de plugin encontrado')}"
Corrigir: Cache Desatualizado (múltiplas versões)
# Manter apenas a versão mais recente (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('Removida(s)',v.length-1,'versão(ões) antiga(s)')}catch(e){console.log('Nenhum cache para limpar')}"```
### Corrigir: CLAUDE.md Ausente/Desatualizado
Baixe a versão mais recente do GitHub e escreva em `${CLAUDE_CONFIG_DIR:-~/.claude}/CLAUDE.md`:
WebFetch(url: "https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claudecode/main/docs/CLAUDE.md", prompt: "Retorne o conteúdo raw markdown completo exatamente como está")
### Corrigir: Conteúdo Instalado via curl Legado
Remova os diretórios agents, commands e skills legados (agora fornecidos pelo plugin):
```bash
# Fazer backup primeiro (opcional — pergunte ao usuário)
# 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 remover diretamente
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: Remova apenas se estes diretórios contiverem arquivos relacionados ao oh-my-claudecode. Se o usuário tiver agents/commands/skills personalizados, avise-o e pergunte antes de remover.
Pós-Correção
Após aplicar as correções, informe o usuário:
Correções aplicadas. Reinicie o Claude Code para que as alterações tenham efeito.