Communitygithub.com

omc-doctor

Diagnostica e corrige problemas de instalação do oh-my-claudecode

O que é omc-doctor?

O omc-doctor é uma habilidade especializada do ecossistema oh-my-claudecode (OMC) que realiza diagnósticos completos em instalações problemáticas. Ela verifica sete áreas críticas: versão do plugin instalado, presença de hooks legados no settings.json, scripts bash legados, configuração do CLAUDE.md, pré-requisitos do runtime Ralph (Node.js e permissões de escrita), cache de plugin desatualizado e conteúdo instalado via curl. Para cada verificação, a habilidade emite um status OK, WARN ou CRITICAL e gera um relatório estruturado em formato de tabela. Além do diagnóstico, ela oferece correção automática — com confirmação do usuário — para remover hooks legados, limpar caches, atualizar o CLAUDE.md e eliminar artefatos de instalações anteriores. Funciona exclusivamente no Claude Code, respeitando a variável de ambiente CLAUDE_CONFIG_DIR para localização de arquivos, e utiliza Node.js para comandos multiplataforma. É essencial para manter a instalação do OMC saudável e evitar conflitos entre versões antigas e novas.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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

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

Habilidades Relacionadas