with one click
entropy-scan
// Scan the marketplace for documentation drift, registration gaps, convention violations, stale memory, and HARNESS_SPEC invariant compliance. Reports only — no writes.
// Scan the marketplace for documentation drift, registration gaps, convention violations, stale memory, and HARNESS_SPEC invariant compliance. Reports only — no writes.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | entropy-scan |
| description | Scan the marketplace for documentation drift, registration gaps, convention violations, stale memory, and HARNESS_SPEC invariant compliance. Reports only — no writes. |
| when_to_use | Run weekly, before releases, after large refactors, or whenever the README header counts feel suspect — catches drift between documentation and reality. Do NOT use for pre-commit correctness checks (will the marketplace install cleanly?) — that is `/validate-marketplace`; entropy-scan is the broader drift sweep, validate-marketplace is the focused gate. |
| disable-model-invocation | true |
| effort | high |
| allowed-tools | ["Read","Bash","Glob","Grep"] |
| logical | report shows PASS / DRIFT for each of the 13 checks with concrete fix lines for any drift |
Detect drift between documentation and reality. Run periodically (weekly recommended) or before releases.
Run all 13 checks (1–8, 9a, 9b, 10–13). Report results in the structured format below. Do not modify any files — report issues and propose fixes only.
Compare the README.md header line <N> plugins. <M> skills. <H> hooks. <A> agents. <R> behavioral rules. against actual counts:
bash plugins/diagnostics/skills/entropy-scan/scripts/count.sh
Compare against the README header. Report any mismatch.
# Actual plugin directories
ls -d plugins/*/ | xargs -I{} basename {}
# Registered names in marketplace.json
python3 -c "
import json
data = json.load(open('.claude-plugin/marketplace.json'))
for p in data['plugins']:
print(p['name'])
"
Report: directories without marketplace entries, and marketplace entries without directories.
For each SKILL.md found via find plugins -name "SKILL.md":
description: field exists.effort: is set, value must be low|medium|high|xhigh|max.context: fork, an agent: field is strongly recommended.name, description, when_to_use, argument-hint, arguments, disable-model-invocation, user-invocable, allowed-tools, model, effort, context, agent, hooks, paths, shell, scheduling, structural, logical, compatibility, license, metadata, mode.skills: preload list references a skill with disable-model-invocation: true (silently skipped per official docs).find plugins -name "*.sh" -path "*/hooks/*" ! -perm -u+x
Report any non-executable hook scripts.
If .claude/memory/ exists, check topic files for dates:
If no memory directory exists, report "N/A — no memory directory found."
Read HARNESS_SPEC.md and validate these invariants:
plugins/*/ directory that has hooks also has hooks/hooks.jsonplugins/*/agents/*.md — verify planner/reviewer don't have Write/Edit in allowed-toolsexit 2 in hooks not under PreToolUse or PreCompact (informational — may have false positives)exit 2 or {"decision":"block"} while also having "async": true — async hooks cannot block. Flag as misconfiguration.monitors key, validate entries have description and command fieldsbash plugins/diagnostics/skills/entropy-scan/scripts/check-skill-size-quick.sh
Approximates tokens as chars / 4 and flags any SKILL.md over 2000 tokens. Thresholds:
Skills survive compaction with first 5,000 tokens per skill, shared 25,000-token budget across all invoked skills.
Every rule in plugins/behavioral-core/hooks/rules.d/*.txt (excluding archive/) should declare its origin on its first non-blank line:
# origin: <source>
Accepted sources: postmortem:<id>, trace:<session-id-or-slug>, ledger:<entry-id>, external:<short-reason>.
bash plugins/diagnostics/skills/entropy-scan/scripts/check-rule-provenance.sh
Advisory only — do not block. Rationale: Osmani, 2026 (Agent Harness Engineering) — every rule must trace to a specific past failure or external constraint, else rule bloat accumulates. Mark external-policy rules as external:<reason> (e.g. external: tone preference). Traceability, not gatekeeping.
/rest-audit; propagate its Reliability/Efficiency/Security/Traceability statuses verbatim. Outcome-oriented counterpart to the structural checks above./md-structure on ./CLAUDE.md; propagate PRESENT/WEAK/MISSING statuses.For each agent definition (plugins/*/agents/*.md) and each SKILL.md, count entries in tools: / allowed-tools: frontmatter. Warn if the count exceeds FORGE_TOOL_MENU_MAX (default 10).
python3 plugins/diagnostics/skills/entropy-scan/scripts/check-tool-menu.py
Advisory only. Rationale: Osmani, 2026 — large tool menus compete for working memory and degrade selection accuracy.
Every Do NOT use for X — use \/sibling` insteadline in a SKILL.mdwhen_to_usefield must point to a skill that exists somewhere inplugins/*/skills/`. Broken references produce dead routing advice that drifts as skills are renamed or removed.
python3 plugins/diagnostics/skills/entropy-scan/scripts/check-sibling-refs.py
Per CLAUDE.md, description + when_to_use combined must stay under 1536 characters. Past that, the skill description gets truncated when surfaced in the skill picker, which degrades model-side skill matching.
python3 plugins/diagnostics/skills/entropy-scan/scripts/check-desc-length.py
The cross-plugin policy index at plugins/diagnostics/registry/policies.json must stay in sync with the enforcement scripts on disk: every registered FS-id's implementation path must exist, and every enforcement script under behavioral-core/hooks/, policy-gateway/hooks/, research-gate/hooks/ (excluding bootstrap and healthcheck files) must appear in the registry. Drift either way produces silent inconsistency between /policies-list and reality.
python3 plugins/diagnostics/skills/entropy-scan/scripts/check-policy-registry.py
## Entropy Scan Report
**Date:** {YYYY-MM-DD}
**Overall:** {CLEAN / {N} issues found}
### Check {1..8, 10..13}: <name>
**Status:** {PASS / DRIFT / GAP / {N} <issue>}
{Per-check details — counts, file lists, mismatch deltas — only when status is non-clean}
### Check 9: Sub-audits
- 9a R.E.S.T. — Reliability/Efficiency/Security/Traceability statuses
- 9b CLAUDE.md structure — PRESENT/WEAK/MISSING per section
### Proposed Fixes
{For each issue: one-line fix command or description}
One section per check. Keep the report factual: no opinions, no suggestions beyond fixing detected issues.