This identifies configuration errors in oh-my-claudecode environments and provides step-by-step instructions to fix them.
Install
mkdir -p .claude/skills/doctor && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/2984" && unzip -o skill.zip -d .claude/skills/doctor && rm skill.zipInstalls to .claude/skills/doctor
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Diagnose and fix oh-my-claudecode installation issuesKey capabilities
- →Diagnose oh-my-claudecode plugin version drift
- →Identify legacy hook scripts in settings.json
- →Verify CLAUDE.md markers and companion file structure
- →Check Ruby dependency for Ralph workflows
- →Clean up stale plugin cache versions
How it works
The skill executes a series of diagnostic scripts to check file markers, plugin versions, and environment dependencies, then offers to remove legacy files or clear caches.
Inputs & outputs
When to use doctor
- →Fix broken oh-my-claudecode installation
- →Resolve configuration path issues
- →Troubleshoot environment setup
About this skill
Doctor Skill
Note: All ~/.claude/... paths in this guide respect CLAUDE_CONFIG_DIR when that environment variable is set.
Task: Run Installation Diagnostics
You are the OMC Doctor - diagnose and fix installation issues.
Step 1: Check Plugin Version
# Get installed and latest versions (cross-platform)
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)"
Diagnosis:
- If no version installed: CRITICAL - plugin not installed
- If INSTALLED != LATEST: WARN - outdated plugin
- If multiple versions exist: WARN - stale cache
Step 2: Check for Legacy Hooks in settings.json
Read both ${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json (profile-level) and ./.claude/settings.json (project-level) and check if there's a "hooks" key with entries like:
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
Diagnosis:
- If found: CRITICAL - legacy hooks causing duplicates
Step 3: Check for Legacy Bash Hook Scripts
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/hooks/*.sh 2>/dev/null
Diagnosis:
- If
keyword-detector.sh,persistent-mode.sh,session-start.sh, orstop-continuation.shexist: WARN - legacy scripts (can cause confusion)
Step 4: Check CLAUDE.md
# Check if CLAUDE.md exists
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/CLAUDE.md 2>/dev/null
# Check for OMC markers (<!-- OMC:START --> is the canonical marker)
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"
# Check CLAUDE.md (or deterministic companion) version marker and compare with latest installed plugin cache version
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')}"
# Check companion files for file-split pattern (e.g. 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)
# Check if CLAUDE.md references a companion file
grep -o "CLAUDE-[^ )]*\.md" "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/CLAUDE.md" 2>/dev/null
Diagnosis:
- If CLAUDE.md missing: CRITICAL - CLAUDE.md not configured
- If
<!-- OMC:START -->found in CLAUDE.md: OK - If
<!-- OMC:START -->found in a companion file (e.g.CLAUDE-omc.md): OK - file-split pattern detected - If no OMC markers in CLAUDE.md or any companion file: WARN - outdated CLAUDE.md
- If
OMC:VERSIONmarker is missing from deterministic CLAUDE source scan (base + referenced companion): WARN - cannot verify CLAUDE.md freshness - If
CLAUDE.md OMC version!=Latest cached plugin version: WARN - version drift detected (runomc updateoromc setup)
Step 5: Check Ralph Ruby Dependency
Ralph workflows require Ruby. Check for Ruby explicitly so fresh installations get actionable guidance instead of a later opaque Ralph failure.
if command -v ruby >/dev/null 2>&1; then
echo "Ruby for Ralph: $(ruby --version 2>/dev/null | head -1)"
else
echo "Ruby for Ralph: MISSING"
echo "Install Ruby before using Ralph. Ubuntu/Debian: sudo apt update && sudo apt install ruby-full"
echo "macOS: brew install ruby"
fi
Diagnosis:
- If Ruby is found: OK - Ralph dependency present
- If Ruby is missing: WARN - Ralph workflows may fail until Ruby is installed
Step 6: Check for Stale Plugin Cache
# Count versions in cache (cross-platform)
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')}"
Diagnosis:
- If > 1 version: WARN - multiple cached versions (cleanup recommended)
Step 7: Check for Legacy Curl-Installed Content
Check for legacy agents, commands, and skills installed via curl (before plugin system). Important: Only flag files whose names match actual plugin-provided names. Do NOT flag user's custom agents/commands/skills that are unrelated to OMC.
# Check for legacy agents directory
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/agents/ 2>/dev/null
# Check for legacy commands directory
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/commands/ 2>/dev/null
# Check for legacy skills directory
ls -la "${CLAUDE_CONFIG_DIR:-$HOME/.claude}"/skills/ 2>/dev/null
Diagnosis:
- If
~/.claude/agents/exists with files matching plugin agent names: WARN - legacy agents (now provided by plugin) - If
~/.claude/commands/exists with files matching plugin command names: WARN - legacy commands (now provided by plugin) - If
~/.claude/skills/exists with files matching plugin skill names: WARN - legacy skills (now provided by plugin) - If custom files exist that do NOT match plugin names: OK - these are user custom content, do not flag them
Known plugin agent names (check agents/ for these):
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
Known plugin skill names (check skills/ for these):
ai-slop-cleaner, ask, autopilot, cancel, ccg, configure-notifications, deep-interview, deepinit, external-context, hud, skillify, learner, mcp-setup, omc-doctor, omc-setup, omc-teams, plan, project-session-manager, ralph, ralplan, release, sciomc, setup, skill, team, ultraqa, ultrawork, visual-verdict, writer-memory
Known plugin command names (check commands/ for these):
ultrawork.md, deepsearch.md
Report Format
After running all checks, output a report:
## OMC Doctor Report
### Summary
[HEALTHY / ISSUES FOUND]
### Checks
| Check | Status | Details |
|-------|--------|---------|
| Plugin Version | OK/WARN/CRITICAL | ... |
| Legacy Hooks (settings.json) | OK/CRITICAL | ... |
| Legacy Scripts (~/.claude/hooks/) | OK/WARN | ... |
| CLAUDE.md | OK/WARN/CRITICAL | ... |
| Ralph Ruby Dependency | OK/WARN | ... |
| Plugin Cache | OK/WARN | ... |
| Legacy Agents (~/.claude/agents/) | OK/WARN | ... |
| Legacy Commands (~/.claude/commands/) | OK/WARN | ... |
| Legacy Skills (~/.claude/skills/) | OK/WARN | ... |
### Issues Found
1. [Issue description]
2. [Issue description]
### Recommended Fixes
[List fixes based on issues]
Auto-Fix (if user confirms)
If issues found, ask user: "Would you like me to fix these issues automatically?"
If yes, apply fixes:
Fix: Legacy Hooks in settings.json
Remove the "hooks" section from ${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json (keep other settings intact)
Fix: Legacy Bash Scripts
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
Fix: Outdated Plugin
# Clear plugin cache (cross-platform)
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 C
---
*Content truncated.*
When not to use it
- →Troubleshooting issues unrelated to oh-my-claudecode
- →Modifying user-defined custom agents or commands
Prerequisites
Limitations
- →Requires user confirmation for automated fixes
- →Cannot automatically resolve custom user agent conflicts
How it compares
It provides targeted, automated remediation for specific oh-my-claudecode configuration issues instead of generic troubleshooting.
Compared to similar skills
doctor side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| doctor (this skill) | 1 | 3mo | Caution | Beginner |
| network-info | 3 | 5mo | Review | Beginner |
| debug-cluster | 2 | 8mo | Review | Intermediate |
| replit-advanced-troubleshooting | 0 | 27d | Caution | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by Yeachan-Heo
View all by Yeachan-Heo →You might also like
network-info
UKGovernmentBEIS
Gather network configuration and connectivity information including interfaces, routes, and DNS
debug-cluster
openshift
Provides systematic debugging approaches for HyperShift hosted-cluster issues. Auto-applies when debugging cluster problems, investigating stuck deletions, or troubleshooting control plane issues.
replit-advanced-troubleshooting
jeremylongshore
Apply Replit advanced debugging techniques for hard-to-diagnose issues. Use when standard troubleshooting fails, investigating complex race conditions, or preparing evidence bundles for Replit support escalation. Trigger with phrases like "replit hard bug", "replit mystery error", "replit impossible to debug", "difficult replit issue", "replit deep debug".
devops-troubleshooter
sickn33
Expert DevOps troubleshooter specializing in rapid incident response, advanced debugging, and modern observability. Masters log analysis, distributed tracing, Kubernetes debugging, performance optimization, and root cause analysis. Handles production outages, system reliability, and preventive monitoring. Use PROACTIVELY for debugging, incident response, or system troubleshooting.
vastai-common-errors
jeremylongshore
Diagnose and fix Vast.ai common errors and exceptions. Use when encountering Vast.ai errors, debugging failed requests, or troubleshooting integration issues. Trigger with phrases like "vastai error", "fix vastai", "vastai not working", "debug vastai".
environment-triage
parcadei
Environment Triage