Files
holocron/plugins/kyberforge/skills/agent-audit
Defame1297 ede3f06689 fix(kyberforge): restore the authoring rules the ADR-0020 trim dropped
Diffing each retrofitted SKILL.md against its replacement references/ files found
rules that existed on main and now existed nowhere — relocated in intent, deleted in
fact. A trim that loses a rule is not progressive disclosure, it is data loss with a
smaller word count.

Three had no survivor. The least-privilege guidance for `tools` kept its mechanics
and lost the "restrict to what the agent needs" half, so the remaining text read as
encouragement to omit the field. The improve flow lost its regression check, so
nothing compared the closing audit against the pre-edit state and a PASS quietly
becoming a SUGGESTION went unnoticed — restored on both halves of the author pair,
since agent-author had dropped its equivalent too. And agent bodies lost "would the
agent get this wrong without it?", which mattered more than it looks: ADR-0020
deliberately sets no body word gate for agents, three of the four already sit
between 933 and 1,199 words, and the delegation check only fires on procedure a
skill already owns. That heuristic was the only brake left.

Two more were reachable only from the wrong scope. agent-author tells the reader to
load only the file for the resolved scope, but the mcp__ glob syntax for
disallowedTools and the five tools no subagent ever receives had both landed in
project-user-scope.md. disallowedTools is the ONLY permitted fence at plugin/APM
scope, so the scope that needs the syntax most could not reach it, and a plugin-scope
run could write a body telling the agent to ask the user a question.

Two documents were actively wrong rather than merely thin. agent-audit told auditors
that validate.sh resolves boundary targets for skills only; it runs at both scopes,
so the auditor was hand-resolving what the script had already decided and could
contradict it. And skill-audit routed to its script-troubleshooting reference
whenever validate.sh "fails" — but it exits 1 on ordinary content FAILs, the normal
outcome for the whole #99 population, so 1,302 words loaded on nearly every audit.
A context-budget regression inside the skill that enforces the context budget.

Finally, two illustrations taught the shape the gate ERRORs on, unfenced, while an
adjacent rubric called it a hard ERROR.

LESSONS.md records the reference-chain depth rule flipping from "one level deep" to
"two hops, never three". ADR-0020 is silent on it and the reversal rode entirely on
the diff; the looser rule is what mandatory dispatch requires.

Refs: #99
ADR: 0020

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015W3iwF9ncfRZddGBxsMCYi
2026-08-16 19:49:38 +00:00
..

agent-audit

Audits an agent definition for correctness and quality against the Claude Code and Copilot agent references and the house context-budget contract (ADR-0020) — a single vendor-neutral file at plugin/APM scope, or a Claude Code and Copilot file pair at project/user scope.

What it does

  1. Runs scripts/validate.sh and scripts/validate-provenance.sh for structural and provenance checks, plus scripts/vale-wrap.sh — a Vale prefilter that deterministically flags non-imperative description openers, composition and architecture notes, vague wording, padding phrases, "There is/are" sentence openers, and CC-specific "Use proactively" phrasing in a Copilot or vendor-neutral description
  2. Reads the agent file, and its counterpart when one exists, then loads the contract for its scope
  3. Applies qualitative checks across description, body, delegation and comment discipline, loading one rubric from references/ per group
  4. Outputs a compact findings report — findings only, grouped by dimension, each with Why and Fix — and a result block with handoff to agent-author

Two things follow from ADR-0020 and are easy to get backwards. Agents take the same description gates a skill takes — 250 characters SUGGESTION, 400 FAIL, since a name + description is preloaded into every session either way — and no body word gate at all, because an agent body becomes the system prompt of a fresh context rather than competing with the caller's live conversation. Body length is judged through the delegation check instead: an agent body that restates a procedure owned by a skill it can invoke is a FAIL, because a plugin-scope agent has no sibling references/ directory to disclose to and can only delegate.

At plugin/APM scope the audit accepts the single .apm/agents/<name>.agent.md file — there is no counterpart, and pair consistency does not apply. validate.sh hard-FAILs any frontmatter field outside the vendor-neutral allowlist, since apm compile copies frontmatter verbatim to both harnesses and an unsafe field cannot be silently dropped for just one of them. The allowlist lives in the apm-agent-allowlist section of references/field-inventory.md, is read from there as data by the script, and is deliberately not restated anywhere else in this skill (ADR-0009).

At project/user scope the audit accepts either file in a CC .md / Copilot .agent.md pair, derives the counterpart automatically, and validates both, including the field-leakage checks in each direction.

Usage

/agent-audit

Pass the path to either agent file as the argument.

Files

File Purpose
SKILL.md Skill instructions for agents
assets/vale/.vale.ini Vale config: scopes Kyberforge to **/agents/*.md, Kyberforge+KyberforgeCopilot to **/*.agent.md
assets/vale/styles/Kyberforge/CompositionNote.yml Flags composition and architecture notes in a description ("cross-cutting", "entry point", "composes", "rather than duplicating") that belong in README.md
assets/vale/styles/Kyberforge/DescriptionOpener.yml Flags descriptions opening with "This..." instead of an imperative "Use when..."
assets/vale/styles/Kyberforge/PaddingPhrase.yml Flags generic "see references/ for info" pointers instead of specific file references
assets/vale/styles/Kyberforge/SentenceOpenerThereIs.yml Flags sentences opening with "There is/are" instead of naming the subject directly
assets/vale/styles/Kyberforge/VagueWording.yml Flags vague capability wording ("helps with", "utilize", "assists with", "used for") in descriptions
assets/vale/styles/KyberforgeCopilot/ProactivePhrase.yml Flags CC-specific "Use proactively" phrasing with no effect in Copilot descriptions
references/README.md Directory documentation for references/
references/description-quality.md Rubric for the description dimension — three-part shape, the 250/400-character budget, the hand-invoked contract, and the internal-mechanics FAIL
references/body-and-delegation.md Rubric for the body, delegation and comment-discipline dimensions — the delegation FAIL and why agents take no body word gate
references/scope-plugin-apm.md Scope contract for a single vendor-neutral APM agent file — allowlist, dimension routing, and the dimensions that do not apply
references/scope-project-user.md Scope contract for a CC / Copilot pair — counterpart derivation, provider field rules, pair consistency
references/validation-scripts.md Loaded only when a Step 1 script fails or cannot run — scope-detection walk-up, manual fallback checks, known script failures
references/field-inventory.md Authoritative field lists read as data by validate.sh: valid CC and Copilot agent fields, and the vendor-neutral plugin/APM-scope allowlist
references/sources.md Research provenance for skill content
scripts/README.md Directory documentation for scripts/
scripts/validate.sh Structural validator — required fields, name format, placeholder detection, the ADR-0020 description budget, and the field rules for the detected scope
scripts/validate-provenance.sh Provenance chain validation against sources.md at the package root (plugin/APM scope only)
scripts/vale-wrap.sh Drop-in vale wrapper that works around a frontmatter-description NLP scope limitation
tests/README.md (source-only) Bats test dependency and run instructions
tests/validate.bats (source-only) Bats tests for validate.sh
tests/validate-provenance.bats (source-only) Bats tests for validate-provenance.sh

Rows marked (source-only) exist in the authoring source (.apm/skills/agent-audit/) but are not present in an installed plugin: scripts/sync-plugin-content.sh strips <category>/<name>/tests when it generates the flat mirror, because these are dev-time fixtures no plugin host needs to discover (ADR-0017). Run them from a repo checkout, not from an install.