Claude Cursor Skill

ops-doctor

Health check and auto-repair for the ops plugin. Diagnoses manifest errors, broken permissions, invalid configs, stale caches, and missing files — then spawns an agent to fix everything automatically.

LLM Mart · 0 points · 3 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download davepoon-buildwithclaude-plugins_claude-ops_skills_ops-doctor-a6c484b.zip · 2 KB
Part of davepoon/buildwithclaude — 187 skills

Install

skills CLI npx skills add https://github.com/davepoon/buildwithclaude/tree/main/plugins/claude-ops/skills/ops-doctor
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install davepoon-buildwithclaude@llmmart
Git git clone https://github.com/davepoon/buildwithclaude.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole davepoon/buildwithclaude collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Runtime Context

Before diagnosing, load:

  1. Preferences: cat ${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json — check all configured channels and services
  2. Daemon health: cat ${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json — primary diagnostic input
  3. Secrets: Verify secret resolution chain works: Doppler MCP → env → Doppler CLI → password manager

OPS ► DOCTOR

CLI/API Reference

ops-doctor bin script

Command Usage Output
${CLAUDE_PLUGIN_ROOT}/bin/ops-doctor Run full health diagnostics JSON with errors, warnings, tools, env_vars, registry
${CLAUDE_PLUGIN_ROOT}/bin/ops-doctor 2>/dev/null \|\| echo '{"errors":["diagnostic_script_failed"]}' Run with fallback JSON or error sentinel

Key files read by diagnostics

File Purpose
${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json Primary daemon health input
${CLAUDE_PLUGIN_DATA_DIR}/preferences.json Configured channels and services
${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json Plugin manifest validation
${CLAUDE_PLUGIN_ROOT}/scripts/registry.json Project registry validation

Phase 1 — Run diagnostics

Run the diagnostic script to get a full health report:

${CLAUDE_PLUGIN_ROOT}/bin/ops-doctor 2>/dev/null || echo '{"errors":["diagnostic_script_failed"],"warnings":[]}'

Parse the JSON output. Display a summary:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 OPS ► DOCTOR — [timestamp]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 Plugin:     [version] at [plugin_root]
 Skills:     [count] defined
 Agents:     [count] defined
 Bin scripts:[count] available

 ERRORS      [count]
 [list each error with description]

 WARNINGS    [count]
 [list each warning with description]

 TOOLS
 [table of CLI tool availability]

 ENV VARS
 [table of env var status]

 Registry:   [status] ([project_count] projects)
 Preferences:[status]
 Cache:      [versions list]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Agent Teams support

If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set, use Agent Teams when multiple independent fix categories are identified (e.g., manifest issues + permission issues + registry issues). This enables:

  • Fix agents work in parallel on different issue categories without stepping on each other
  • You can prioritize: "fix manifest errors first, then permissions"
  • Agents share context so a manifest fix can inform the registry repair

Team setup (only when flag is enabled, multiple issue categories):

TeamCreate("doctor-fixers")
Agent(team_name="doctor-fixers", name="fix-manifest", subagent_type="ops:doctor-agent", ...)
Agent(team_name="doctor-fixers", name="fix-permissions", subagent_type="ops:doctor-agent", ...)
Agent(team_name="doctor-fixers", name="fix-registry", subagent_type="ops:doctor-agent", ...)

If the flag is NOT set or only one issue category exists, use a single doctor-agent subagent.

Phase 2 — Decision

If $ARGUMENTS contains --check-only: stop here, display results only.

If there are errors or warnings:

Display: "Found [N] issues. Spawning doctor agent to auto-fix..."

Then spawn the doctor agent (or Agent Team — see above):

Agent({
  subagent_type: "ops:doctor-agent",
  prompt: "Fix the following ops plugin issues.\n\nDIAGNOSTIC_JSON: [paste full JSON]\nPLUGIN_ROOT: ${CLAUDE_PLUGIN_ROOT}\nCACHE_DIR: ~/.claude/plugins/cache/ops-marketplace/ops\n\nFix all errors and warnings. Re-run diagnostics after to verify.",
  description: "Fix ops plugin issues"
})

If there are no errors and no warnings:

Display: "All checks passed. Plugin is healthy."

Phase 3 — Post-fix verification

After the agent completes, re-run diagnostics:

${CLAUDE_PLUGIN_ROOT}/bin/ops-doctor 2>/dev/null

Display updated results. If errors remain, report them to the user with manual fix instructions.


Native tool usage

WebSearch — known issue lookup

When diagnostics find errors, use WebSearch to check if the issue is a known Claude Code plugin bug, MCP server issue, or configuration problem. Include links to relevant GitHub issues or docs.

WebFetch — MCP health check

For MCP servers that appear disconnected, use WebFetch to test their underlying APIs directly (e.g., https://api.linear.app/graphql with a simple query) to distinguish between "MCP broken" and "API down".

Files (buildwithclaude)
  • SKILL.md 5.2 KB
    ---
    name: ops-doctor
    description: Health check and auto-repair for the ops plugin. Diagnoses manifest errors, broken permissions, invalid configs, stale caches, and missing files — then spawns an agent to fix everything automatically.
    argument-hint: "[--check-only|--verbose]"
    allowed-tools:
      - Bash
      - Read
      - Grep
      - Glob
      - Agent
      - AskUserQuestion
      - WebSearch
      - WebFetch
      - TeamCreate
      - SendMessage
    effort: medium
    maxTurns: 30
    ---
    
    ## Runtime Context
    
    Before diagnosing, load:
    1. **Preferences**: `cat ${CLAUDE_PLUGIN_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json` — check all configured channels and services
    2. **Daemon health**: `cat ${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json` — primary diagnostic input
    3. **Secrets**: Verify secret resolution chain works: Doppler MCP → env → Doppler CLI → password manager
    
    
    # OPS ► DOCTOR
    
    ## CLI/API Reference
    
    ### ops-doctor bin script
    
    | Command | Usage | Output |
    |---------|-------|--------|
    | `${CLAUDE_PLUGIN_ROOT}/bin/ops-doctor` | Run full health diagnostics | JSON with `errors`, `warnings`, `tools`, `env_vars`, `registry` |
    | `${CLAUDE_PLUGIN_ROOT}/bin/ops-doctor 2>/dev/null \|\| echo '{"errors":["diagnostic_script_failed"]}'` | Run with fallback | JSON or error sentinel |
    
    ### Key files read by diagnostics
    
    | File | Purpose |
    |------|---------|
    | `${CLAUDE_PLUGIN_DATA_DIR}/daemon-health.json` | Primary daemon health input |
    | `${CLAUDE_PLUGIN_DATA_DIR}/preferences.json` | Configured channels and services |
    | `${CLAUDE_PLUGIN_ROOT}/.claude-plugin/plugin.json` | Plugin manifest validation |
    | `${CLAUDE_PLUGIN_ROOT}/scripts/registry.json` | Project registry validation |
    
    ---
    
    ## Phase 1 — Run diagnostics
    
    Run the diagnostic script to get a full health report:
    
    ```!
    ${CLAUDE_PLUGIN_ROOT}/bin/ops-doctor 2>/dev/null || echo '{"errors":["diagnostic_script_failed"],"warnings":[]}'
    ```
    
    Parse the JSON output. Display a summary:
    
    ```
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
     OPS ► DOCTOR — [timestamp]
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    
     Plugin:     [version] at [plugin_root]
     Skills:     [count] defined
     Agents:     [count] defined
     Bin scripts:[count] available
    
     ERRORS      [count]
     [list each error with description]
    
     WARNINGS    [count]
     [list each warning with description]
    
     TOOLS
     [table of CLI tool availability]
    
     ENV VARS
     [table of env var status]
    
     Registry:   [status] ([project_count] projects)
     Preferences:[status]
     Cache:      [versions list]
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    ```
    
    ## Agent Teams support
    
    If `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` is set, use **Agent Teams** when multiple independent fix categories are identified (e.g., manifest issues + permission issues + registry issues). This enables:
    - Fix agents work in parallel on different issue categories without stepping on each other
    - You can prioritize: "fix manifest errors first, then permissions"
    - Agents share context so a manifest fix can inform the registry repair
    
    **Team setup** (only when flag is enabled, multiple issue categories):
    ```
    TeamCreate("doctor-fixers")
    Agent(team_name="doctor-fixers", name="fix-manifest", subagent_type="ops:doctor-agent", ...)
    Agent(team_name="doctor-fixers", name="fix-permissions", subagent_type="ops:doctor-agent", ...)
    Agent(team_name="doctor-fixers", name="fix-registry", subagent_type="ops:doctor-agent", ...)
    ```
    
    If the flag is NOT set or only one issue category exists, use a single `doctor-agent` subagent.
    
    ## Phase 2 — Decision
    
    If `$ARGUMENTS` contains `--check-only`: stop here, display results only.
    
    If there are **errors or warnings**:
    
    Display: "Found [N] issues. Spawning doctor agent to auto-fix..."
    
    Then spawn the doctor agent (or Agent Team — see above):
    
    ```
    Agent({
      subagent_type: "ops:doctor-agent",
      prompt: "Fix the following ops plugin issues.\n\nDIAGNOSTIC_JSON: [paste full JSON]\nPLUGIN_ROOT: ${CLAUDE_PLUGIN_ROOT}\nCACHE_DIR: ~/.claude/plugins/cache/ops-marketplace/ops\n\nFix all errors and warnings. Re-run diagnostics after to verify.",
      description: "Fix ops plugin issues"
    })
    ```
    
    If there are **no errors and no warnings**:
    
    Display: "All checks passed. Plugin is healthy."
    
    ## Phase 3 — Post-fix verification
    
    After the agent completes, re-run diagnostics:
    
    ```!
    ${CLAUDE_PLUGIN_ROOT}/bin/ops-doctor 2>/dev/null
    ```
    
    Display updated results. If errors remain, report them to the user with manual fix instructions.
    
    ---
    
    ## Native tool usage
    
    ### WebSearch — known issue lookup
    
    When diagnostics find errors, use `WebSearch` to check if the issue is a known Claude Code plugin bug, MCP server issue, or configuration problem. Include links to relevant GitHub issues or docs.
    
    ### WebFetch — MCP health check
    
    For MCP servers that appear disconnected, use `WebFetch` to test their underlying APIs directly (e.g., `https://api.linear.app/graphql` with a simple query) to distinguish between "MCP broken" and "API down".
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related