validate.sh's detect_scope() and validate-provenance.sh's find_plugin_root() disagreed with new-agent.sh's already-correct, documented walk-up semantics on three points, each causing validate.sh to false-FAIL a legitimately-scaffolded project-scope agent pair: - a marker-less directory walked up into $HOME (no .git/apm.yml of its own) was classified as user scope instead of project scope - the .git-boundary branch returned the walked-to .git location instead of the conventional scope root, breaking any <root> that is a subdirectory of a larger git-tracked tree (monorepo package dirs) - the new conventional-root arithmetic introduced to fix the above two cases had no guard against non-conventional/hand-placed file paths, which could point it at the wrong ancestor Also adds scripts/check-scope-walkup-sync.sh, a behavioral drift-guard (per ADR-0014's no-cross-skill-path precedent) that cross-checks the four independently hand-ported walk-up implementations (validate.sh, validate-provenance.sh, new-agent.sh, new-skill.sh) against real fixture scaffolds, wired into .pre-commit-config.yaml at pre-push so future drift between the ports is caught automatically. Verified via bash tests/run-tests.sh (13/13) and targeted before/after reproduction of each bug this closes.
agent-audit
Audits an agent definition for correctness and quality — a single vendor-neutral file at plugin/APM scope, or a Claude Code and Copilot file pair at project/user scope.
What it does
At plugin/APM scope, accepts the single .apm/agents/<name>.agent.md file — there is no
counterpart. Structural checks via validate.sh hard-FAIL any frontmatter field outside the
vendor-neutral allowlist (name, description, model — see ADR-0016), since apm compile
copies frontmatter verbatim to both harnesses and an unsafe field can't be silently dropped for
just one of them.
At project/user scope, accepts either file in a CC .md / Copilot .agent.md pair, derives
the counterpart automatically, and validates both. Runs structural checks via validate.sh
(required fields, kebab-case name, no placeholders, no CC-only fields in the Copilot file, no
Copilot-only fields in the CC file), provenance chain validation via validate-provenance.sh
(checks source_keys against sources.md at the plugin root — plugin/APM scope only), then
qualitative checks on description phrasing and system prompt quality. Step 1 also runs a
Vale-based prose sub-check via vale-wrap.sh against both files of the pair, using the
Kyberforge style (both files) and KyberforgeCopilot style (Copilot file only) — every alert
is a FAIL, cited by rule ID — falling back to Step 2 judgment when the vale binary is
unavailable or reports 0 files scanned. Produces a compact findings report in the same format
as skill-audit.
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/DescriptionOpener.yml |
Flags descriptions opening with "This skill/agent" 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 |
Qualitative guide for borderline description findings |
references/field-inventory.md |
Authoritative list of valid CC and Copilot agent fields |
references/sources.md |
Research provenance for skill content |
scripts/README.md |
Directory documentation for scripts/ |
scripts/validate.sh |
Structural validation script for agent file pairs |
scripts/validate-provenance.sh |
Provenance chain validation script for agent pairs against sources.md (plugin root) |
scripts/vale-wrap.sh |
Drop-in vale wrapper that works around a frontmatter-description NLP scope limitation |
tests/README.md |
Bats test dependency and run instructions |
tests/validate.bats |
Bats tests for validate.sh |
tests/validate-provenance.bats |
Bats tests for validate-provenance.sh |