Files
holocron/plugins/kyberforge/skills/agent-audit/SKILL.md
Defame1297 0f2bb242ad chore(plugins): sync generated content mirrors
Regenerates `plugins/*/skills`, `plugins/*/agents`, both per-plugin `plugin.json` manifests and the
two marketplace mirrors from `.apm/` per ADR-0017, via `scripts/sync-plugin-content.sh --all`.

The manifests matter beyond tidiness here: `plugin.json` carries the plugin version and wins over
the marketplace entry at install time (calculatePluginVersion precedence). Until this ran, the patch
bumps in the preceding commit were inert for anyone installing these plugins.

ADR: 0017
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EeH8SCbcrCAQrtymkNuhKP
2026-09-09 05:15:53 +00:00

5.8 KiB

name, description, allowed-tools, metadata
name description allowed-tools metadata
agent-audit Use when the user wants an agent definition audited — "audit this agent", "review my agent file", "is this ready to ship" — or after hand-editing an agent outside agent-author. Not applying fixes -> agent-author. Not a skill directory -> skill-audit. Bash Read
version category source_keys
1.0.1 factory
context7-websites-code-claude
claude-code-plugins-docs
claude-code-subagents-docs
context7-github-en-copilot
github-custom-agents-configuration

Gotchas

  • Do not narrate PASS/FAIL per check while auditing. Gather findings internally and surface them only in the Step 4 report. Narrating each check as you go is the default failure mode here.
  • Agents take the same 250/400-character description gates as skills and no body word gate at all — an agent body becomes the system prompt of a fresh context, so the 900-word skill ceiling does not transfer. Judge an over-long agent body through the delegation check, never by word count.
  • At plugin/APM scope the agent is a single vendor-neutral file by design, so provider safety stops meaning Claude-Code-versus-Copilot field leakage there.
  • Vale reporting 0 files scanned means NOT RUN, not clean. Fall back to full Step 3 judgment for every dimension it would have covered.

Step 1 — Deterministic checks

Resolve all three paths against this skill's own directory so they work from a repo checkout and an installed plugin cache alike. Run exactly:

bash scripts/validate.sh <agent-file>
bash scripts/validate-provenance.sh <agent-file>
bash scripts/vale-wrap.sh <agent-file> [<counterpart-file>]

validate.sh takes either half of a project/user-scope pair or the single plugin/APM-scope file, detects the provider from the extension and the scope by walking up, then checks required fields, kebab-case name, FILL IN: placeholders, template HTML comments left in frontmatter, the ADR-0020 description budget (250 chars SUGGESTION, 400 FAIL, measured on the folded YAML value) and the fields that scope permits. Its findings become the ### Structure dimension — its FAILs and its SUGGESTIONs both — except the ones the Step 2 scope contract re-routes.

If a validation script fails or cannot run — Bash denied, python3 or vale absent, references/field-inventory.md missing — read references/validation-scripts.md; what these scripts measure is not reproducible by reading.

validate-provenance.sh prints nothing on success, so read its exit code before you read its silence. 0 is a genuine pass, including the silent exit 0 at project or user scope, where plugin-scope provenance does not apply. 1 means real findings: its FAILs and INFOs become a separate ### Provenance dimension, and it emits Why and Fix itself — surface those verbatim. 2 means the check never ran — a bad argument or a missing dependency, reason on stderr, no findings and often no stdout at all. On a 2, report ### Provenance as unverified and quote the stderr reason; never grade it as a clean pass. validate.sh uses the same 2 tier.

vale-wrap.sh applies the bundled Kyberforge style as a prefilter. Pass no --config; the wrapper locates its own. At project/user scope pass both files of the pair, not only the one you were handed. Every rule is graded error, so every alert is a FAIL. Report each one citing its rule ID, filed under the dimension it belongs to, and do not re-derive it by judgment:

Rule Dimension
Kyberforge.DescriptionOpener, Kyberforge.CompositionNote, Kyberforge.VagueWording, KyberforgeCopilot.ProactivePhrase description
Kyberforge.SentenceOpenerThereIs, Kyberforge.PaddingPhrase body

Step 2 — Read the agent and load its scope contract

Read the agent file end to end, and at project/user scope its counterpart too. A path containing .apm/agents/ is plugin/APM scope; anything else is project or user scope. Each contract names the dimensions that apply there and where validate.sh findings other than Structure belong:

Scope Read
plugin/APM references/scope-plugin-apm.md
project, user references/scope-project-user.md

Step 3 — Qualitative audit

Read references/finding-criteria.md first — every dimension's FAIL and SUGGESTION criteria. Load the rubric below only for a dimension the criteria put in play: one carrying a candidate finding, or one where the criterion alone does not settle the call.

Dimension Rubric
description references/description-quality.md
body, delegation, comment-discipline references/body-and-delegation.md

Each rubric is the reasoning behind its criteria, not a second copy of them. Cite file and line number for every finding.

Step 4 — Report

Open with a coverage line naming every dimension checked. At project/user scope:

Checked: structure · provider-safety · description · body · delegation · comment-discipline · pair-consistency · provenance

At plugin/APM scope, drop pair-consistency — there is no pair to check.

Then output only the dimensions that have findings, grouped under H3 headings, FAILs before SUGGESTIONs within each. Omit clean dimensions — their absence is what confirms they passed.

Each finding:

FAIL/SUGGESTION  <finding> — file:line
                 Why: <why this is a problem>
                 Fix: <exact change — quote before/after where applicable>

Close with a ## Result block holding one line: PASS, PASS (N suggestions), or FAIL (N fails · M suggestions), each optionally followed by · P info. INFO findings are observational and never change PASS/FAIL; omit · P info when there are none. Add a second line, Run agent-author to address findings., whenever there is at least one finding. Do not apply fixes — report and propose only.