System diagnostics and health checks for Diverga plugin. OpenClaw-style Check-Report-Fix pattern with 5-layer diagnostics. Triggers: /diverga:doctor, diverga doctor, system check, diagnose, 진단
Version: 11.1.0
Trigger: /diverga:doctor
System diagnostics for the Diverga plugin. Checks plugin health, skill sync, hook enforcement, configuration validity, API keys, and project state. Reports issues with actionable fix commands.
Follows OpenClaw Check-Report-Fix pattern: every detected issue includes a fix recommendation.
When user invokes /diverga:doctor, execute all 7 diagnostic layers sequentially and display results.
Check plugin registration:
~/.claude/plugins/installed_plugins.jsondiverga@diverga entry existsCheck config JSON validity:
~/.claude/plugins/diverga/config/diverga-config.jsonversion, human_checkpoints, languageReport format:
PLUGIN HEALTH
Registration: [PASS - diverga@diverga v11.1.0 | FAIL - not found in installed_plugins.json]
Config file: [PASS - valid JSON | FAIL - missing or invalid]
Config fields: [PASS - all required fields present | WARN - missing: field1, field2]
Fix if FAIL:
Check skill counts match between plugin and local cache:
~/.claude/plugins/diverga/skills/*/SKILL.md~/.claude/skills/diverga-*/SKILL.md (exclude diverga-diverga prefix duplication — count unique skill names)Check for missing skills in local cache:
diverga-{name} exists in local skillsReport format:
SKILL SYNC
Plugin skills: [count] skills in plugin directory
Local skills: [count] skills in local cache
Sync status: [PASS - all synced | WARN - X skills missing locally]
Missing: [list of missing skill names, if any]
Fix if WARN:
Check that the plugin cache matches the installed version:
~/.claude/plugins/diverga/plugin.json → extract version~/.claude/plugins/cache/diverga/diverga/*/plugin.json → list cached versionshooks/hooks.jsonReport format:
PLUGIN CACHE
Installed version: [11.1.0 | FAIL - plugin.json missing]
Cached version: [11.1.0 | WARN - stale cache: 8.0.1 | FAIL - no cache found]
Cache has hooks: [PASS - hooks.json present | FAIL - hooks missing from cache]
Cache has agents: [PASS - agents/ present | WARN - agents/ missing]
Fix if WARN/FAIL:
REPO="/Volumes/External SSD/Projects/Diverga/Diverga-core"
CACHE="$HOME/.claude/plugins/cache/diverga/diverga/11.1.0"
rm -rf "$HOME/.claude/plugins/cache/diverga/diverga/8.0.1"
mkdir -p "$CACHE"
cp -R "$REPO"/{skills,agents,config,hooks,mcp,CLAUDE.md,AGENTS.md,README.md} "$CACHE/"
cp "$REPO/.claude-plugin/plugin.json" "$CACHE/"
Check hook configuration:
~/.claude/plugins/diverga/hooks/hooks.json → verify it exists and has PreToolUse entries~/.claude/settings.json → check if hooks are also configured at global levelecho '{"tool_name":"Skill","tool_input":{"skill":"diverga:c1"}}' | node ~/.claude/plugins/diverga/hooks/prereq-enforcer.mjs → verify it returns valid JSON with continue fieldReport format:
HOOK ENFORCEMENT
Plugin hooks.json: [PASS - exists with Agent+Skill matchers | FAIL - missing or wrong matchers]
Global hooks: [PASS - configured in settings.json | WARN - not in settings.json (relies on plugin)]
Hook executable: [PASS - returns valid JSON | FAIL - execution error]
Matcher check: [PASS - uses "Agent" | FAIL - uses stale "Task" matcher]
Fix if issues found:
Deep validation of diverga-config.json:
~/.claude/plugins/diverga/config/diverga-config.jsonversion field matches "11.1.0"human_checkpoints object exists and has enabled (boolean) and required (array)language is one of: "en", "ko", "auto"model_routing has high, medium, low keys if presentReport format:
CONFIG VALIDITY
Version field: [PASS - 11.1.0 | WARN - version mismatch: found X.Y.Z]
Checkpoints: [PASS - configured | FAIL - missing or malformed]
Language: [PASS - "en" | WARN - unexpected value: "XX"]
Model routing: [PASS - configured | SKIP - not set (using defaults)]
Fix if issues found:
Check 8 environment variables using Bash tool (echo $VAR_NAME):
| Variable | Purpose | Required? |
|---|---|---|
GROQ_API_KEY | LLM screening (recommended) | Recommended |
ANTHROPIC_API_KEY | Claude API | Recommended |
OPENAI_API_KEY | OpenAI screening | Optional |
GEMINI_API_KEY | Gemini visualization | Optional |
SEMANTIC_SCHOLAR_API_KEY | Paper retrieval | Optional |
OPENALEX_EMAIL | OpenAlex polite pool | Optional |
SCOPUS_API_KEY | Scopus access | Optional |
WOS_API_KEY | Web of Science | Optional |
For each variable, use Bash: echo "${VAR_NAME:+configured}" — if output is "configured", it's set; if empty, it's not set.
Report format:
API STATUS
Groq: [configured | NOT SET -> export GROQ_API_KEY=your_key]
Anthropic: [configured | NOT SET -> export ANTHROPIC_API_KEY=your_key]
OpenAI: [configured | not set (optional)]
Gemini: [configured | not set (optional)]
Semantic Scholar: [configured | not set (optional)]
OpenAlex: [configured | not set (optional)]
Scopus: [configured | not set (optional)]
Web of Science: [configured | not set (optional)]
Fix if NOT SET (recommended keys):
export VAR_NAME=your_key_here for each missing recommended keyCheck for active research project:
.research/project-state.yaml exists in current working directoryproject_name, current_stage).research/ directory exists with expected subdirectoriesReport format:
PROJECT STATE
Active project: [project name | No active project]
State file: [PASS - valid | WARN - invalid YAML | SKIP - no project]
Research dir: [PASS - structure intact | WARN - missing subdirs | SKIP - no project]
Fix if issues:
After all 7 layers, display overall status:
══════════════════════════════════════════════
DIVERGA SYSTEM DIAGNOSTICS v11.1.0
══════════════════════════════════════════════
[Layer 1-7 results as shown above]
------------------------------------------
OVERALL: [HEALTHY | X WARNING(S) | X ERROR(S)]
[If issues found, numbered list:]
1. [Issue description] -> [Fix command]
2. [Issue description] -> [Fix command]
...
[If healthy:]
All systems operational. Diverga is ready to use.
Run /diverga:help to see all 24 agents and commands.
══════════════════════════════════════════════