Skip to main content

plugin-audit

Generalized structural compliance check for any Claude Code plugin. Audits architectural decisions only — agent type appropriateness (markdown vs script), frontmatter compliance, eval coverage, and body line-count budgets. Use when adding or modifying any agent or skill in a plugin, after scaffolding a new plugin, before a migration PR lands, or for a periodic health check. Accepts any plugin directory path; not hardcoded to one plugin's internal structure.

Source facts

Repository
bdfinst/agentic-dev-team
Last source activity
July 22, 2026 at 13:55
Detected SKILL.md language
English
Stars
302
Forks
35

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
plugin-audit
description
Generalized structural compliance check for any Claude Code plugin. Audits architectural decisions only — agent type appropriateness (markdown vs script), frontmatter compliance, eval coverage, and body line-count budgets. Use when adding or modifying any agent or skill in a plugin, after scaffolding a new plugin, before a migration PR lands, or for a periodic health check. Accepts any plugin directory path; not hardcoded to one plugin's internal structure.
argument-hint
[plugin-dir] [--fix]
role
orchestrator
allowed-tools
Read, Edit, Grep, Glob
# Plugin Audit Role: orchestrator. Mechanical, deterministic structural compliance — pattern matching against the plugin contract. This is the generalized successor to dev-team's internal `agent-audit`, scoped to **architectural decisions only**. ## Scope boundary | In scope (this skill) | Out of scope | |---|---| | Agent type appropriateness (markdown vs script) | Detection-logic *quality* (→ the plugin's own `agent-eval`) | | Frontmatter compliance | Shipping hygiene / `${CLAUDE_PLUGIN_ROOT}` ref resolution | | Eval coverage presence | Shell portability (bash 3.2 / BSD / Git Bash) | | Body line-count budgets | Catalog/version sync (→ release-please config) | Architecture only. Do not evaluate whether a detector is *good* — only whether the unit is the *right type*, well-formed, covered, and within budget. ## Orchestrator constraints 1. **Check structure, not semantics.** Verify fields/sections/patterns exist and the type matches the job. Never grade detection rules. 2. **Deterministic checks only.** Every check is reproducible — does the field exist? Is the format correct? Is the body within budget? 3. **Generalized.** Resolve every path from the target plugin dir. Never assume `plugins/dev-team`, an `agent-registry.md`, or a `.claude/docs/eval-system.md`. 4. **`--fix` applies minimal structural fixes** (insert missing sections/fields from templates). Never rewrite existing content. 5. **Be concise.** Output the report table and action items only. ## Step 1 — Resolve target plugin Parse `$ARGUMENTS`: - A directory path → audit that plugin. - No path → if exactly one `plugins/*/` exists, use it; if several, list them and ask which to audit; if the cwd is itself a plugin dir (`.claude-plugin/plugin.json` present), use it. - `--fix` → after the report, apply fixes for FAIL/WARN items. Let `PLUGIN` = the resolved dir, `NAME` = its `.claude-plugin/plugin.json` `name`. Eval fixtures are expected at the repo-root sibling `evals/<NAME>/` (never shipped inside `PLUGIN`); accept `evals/<NAME>/fixtures/` or flat `evals/<NAME>/` layouts. ## Step 2 — Audit agents (`$PLUGIN/agents/*.md`) For every agent file: 1. **Frontmatter compliance** — the native Claude Code sub-agent contract is the only source of truth: `name` and `description` are the sole required fields. Run `python3 ${CLAUDE_PLUGIN_ROOT}/scripts/validate_agent_contract.py <file>` and fold every `error` into FAIL and every `warning` into WARN in this table — this covers required-field presence, `name` pattern, enum membership on any field present (`model`, `effort`, `permissionMode`, `memory`, `isolation`, `color`, `background`, `maxTurns`), unknown-key warnings, and the plugin-ignored-field warning (`hooks`/`mcpServers`/ `permissionMode` are inert for plugin-supplied agents). There is no separate hand-rolled `effort` check — a plugin's own convention (e.g. dev-team's `effort: high` on every agent) is that plugin's local preference, not a requirement this generalized gate enforces. 2. **No colon in `description`** — the value must not contain `:` (breaks argument-hints). FAIL on a colon. 3. **Skills–Skill invariant** — if the body has a `## Skills` heading, `tools:` must include `Skill`. FAIL otherwise. 4. **Agent type appropriateness** — read `${CLAUDE_PLUGIN_ROOT}/knowledge/agent-type-decision-rules.md` and classify the file by its observable behavior (the same R1–R10 walk as `/agent-type-advisor`'s retrospective mode). A `CHANGE` verdict is a WARN with the cited rule IDs; a `KEEP` is PASS. (For a deeper, dispatched review, the user can run the `plugin-best-practices-review` agent separately.) 5. **Review-agent shape** — a body containing the JSON status schema (`"status": "pass|warn|fail|skip"`) must declare the output schema (`status`, `issues`, `summary`), severity definitions, a `## Skip` section, and `Context needs:`. WARN on any missing. 6. **Body line-count** — count body lines (after frontmatter). Review agents (JSON-output) over 40 → WARN; team agents (persona `You are…` body) over 75 → WARN. ## Step 3 — Audit skills (`$PLUGIN/skills/*/SKILL.md`) 1. **Frontmatter** — `name`, `description` (no colon), and `role` present. FAIL on missing `name`/`description`; WARN on missing `role`. 2. **Structured steps** — the body has an ordered procedure (numbered `##`/`###` steps or a `## Steps` section). FAIL if absent. 3. **Arguments documented** — a user-invocable skill (`user-invocable: true`) declares its arguments (`argument-hint` or an arguments section). WARN if missing. 4. **Conciseness directive** — the skill instructs concise output somewhere ("Be concise" / "no preamble" / output-only). WARN if absent. ## Step 4 — Eval coverage For every **review agent** found in Step 2, check that at least one fixture references it under `evals/<NAME>/`. WARN (not FAIL) when a review agent has no fixture — eval authoring is a follow-up, but the gap must be visible. ## Step 5 — Report ```text # Plugin Audit — <NAME> (<PLUGIN>) ## Agents | Agent | Frontmatter | No-Colon Desc | Skills-Tool | Type | Review Shape | Body Budget | Status | | --- | --- | --- | --- | --- | --- | --- | --- | ## Skills | Skill | Frontmatter | Steps | Arguments | Concise | Status | | --- | --- | --- | --- | --- | --- | ## Eval coverage | Review agent | Fixture under evals/<NAME>/ | Status | | --- | --- | --- | ## Summary - Agents: N OK, N WARN, N FAIL - Skills: N OK, N WARN, N FAIL - Eval coverage: N covered, N gaps - Action items: <list> ``` A clean plugin reports **zero findings** (every cell PASS / N/A). That is the bar `/scaffold-plugin` output and a migrated skill must clear. ## Step 6 — Apply fixes (only when `--fix` is passed) Without `--fix`, list action items and stop. With `--fix`, apply minimal structural fixes and re-verify each: - Missing review-agent output schema → insert the JSON block after the H1. - Missing `## Skip` → insert the skip stub before `## Detect`. - Colon in `description` → rewrite the value to remove colons (use `–`/`and`). - `## Skills` without `Skill` in tools → append `, Skill` to the `tools:` line. After each fix: re-read the file, re-run the specific check, report `FIXED: <unit> — <what>`. Type mismatches (Step 2.4) are **never** auto-fixed — converting markdown↔script is a human decision; report them as action items.
View on GitHub