From loop-recipes
Plugin health monitor that validates installed Claude Code plugins, checks for marketplace updates, and surfaces issues by severity with delta reporting. Designed for /loop — runs periodically to keep your plugins healthy. Usage: /loop 1h /check-plugins
How this skill is triggered — by the user, by Claude, or both
Slash command
/loop-recipes:check-pluginsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a plugin health monitor running as a recurring `/loop` iteration. Your job: scan installed plugins, validate their structure, check for marketplace updates, classify findings by severity, and only alert on changes since the last check.
You are a plugin health monitor running as a recurring /loop iteration. Your job: scan installed plugins, validate their structure, check for marketplace updates, classify findings by severity, and only alert on changes since the last check.
State file: ~/.claude/loop-recipes/check-plugins-state.md
Read ~/.claude/loop-recipes/check-plugins-state.md. If it does not exist, initialize:
---
status: idle
last_check: "1970-01-01T00:00:00Z"
previous_findings: []
---
# Plugin Health Log
If status: in-progress with a locked_by field set:
locked_by timestamp is less than 2 hours old: a previous iteration is still running. Output "Previous iteration still running — skipping." and stop.locked_by is older than 2 hours: treat as stale lock (previous iteration likely crashed), clear it, and proceed.Set locked_by: <current_timestamp> and status: in-progress.
Ensure ~/.claude/loop-recipes/ directory exists (mkdir -p).
After every iteration:
locked_by, set status: idlelast_check timestampprevious_findings for delta comparison next timeScan the plugin cache directory:
ls -d ~/.claude/plugins/cache/*/* 2>/dev/null
For each installed plugin directory, read its plugin.json (or .claude-plugin/plugin.json). Build an inventory:
If no plugins are installed: output "No plugins installed." Stop.
Scan marketplace sources:
ls -d ~/.claude/plugins/marketplaces/*/ 2>/dev/null
For each marketplace, check if any installed plugin has a newer version available by comparing the installed plugin's version against the marketplace's listing. Read marketplace manifests (e.g., marketplace.json) to find available versions.
Record any plugins with updates available.
For each installed plugin, run a quick health check:
plugin.json validity:
name, version, description?Skill file validation (for each declared skill):
name and description?name in frontmatter kebab-case?Agent/Hook file validation:
Orphan detection:
| Severity | Criteria | Alert? |
|---|---|---|
| Critical | Missing plugin.json, invalid JSON, missing required fields | Yes — always |
| Warning | Missing skill files, outdated version, orphan components | Yes — always |
| Info | Available updates, minor frontmatter issues, naming suggestions | No — log only |
Compare current findings against previous_findings from state:
If there are new critical or warning findings, output them:
## Plugin Health Check — <timestamp>
### New Issues
#### Critical
- <plugin-name>: <description of issue>
#### Warning
- <plugin-name>: <description of issue>
### Updates Available
- <plugin-name>: <installed> → <available>
### Resolved Since Last Check
- <plugin-name>: <what was fixed>
If there are only info-level findings or no new findings: output "All plugins healthy. No new issues." (brief, non-intrusive).
If there are new critical findings, suggest running a manual validation. Note: /plugin validate may not exist in all Claude Code versions — if unavailable, suggest reading the plugin's plugin.json and SKILL.md files directly to diagnose issues.
This skill is designed to run periodically (e.g., hourly). The user should stop the loop when:
npx claudepluginhub mocraimer/mo-cc-plugins --plugin loop-recipesThis skill should be used when the user asks to "check dependencies", "verify plugin requirements", "what plugins am I missing", "validate plugin dependencies", "missing plugin dependencies", "unmet requirements", "are my dependencies satisfied", "which dependencies are broken", or invokes /midnight-plugin-utils:dependency-checker. Validates declared dependencies in extends-plugin.json files against installed and enabled plugins.
Audits .claude/ structure, naming, hooks, and plugin versions. Runs hygiene and sync checks, outputs health report with fix commands.
Audits Claude Code plugins for manifest validity, component organization, namespace compliance, documentation, and marketplace readiness before releases or periodic checks.