| namespace | aiwg |
| name | best-practices-audit |
| platforms | ["all"] |
| description | Research-grounded validation of a target (file, directory, or topic) against external best practices and vendor docs. Produces a cited, evidence-grounded comparison. |
| commandHint | {"argumentHint":"<target> [--focus <area>] [--standard <name>] [--depth quick|standard|deep] [--cite-threshold <N>] [--dissent] [--validate] [--output <path>]","allowedTools":"Read, Write, Glob, Grep, Bash, WebFetch, WebSearch","model":"opus","category":"research-validation","modelRole":"reasoning","modelTier":"premium","modelRationale":"External evidence synthesis can change high-impact technical policy."} |
Best-Practices Audit
Task
Validate a target — a file, directory, or freeform topic — against current
external best practices, vendor documentation, and practitioner discussion.
Produce a cited, evidence-grounded comparison report.
This is the research-grounded validation pattern from #929: it institutionalizes
the practice of validating against fresh internet sources rather than the
model's training-cutoff priors. The improvement is real only when retrieved
sources have good signal, so the skill enforces citation guardrails and
confidence honesty rather than fabricating breadth.
Parameters
Positional
<target> (required): file path, directory, freeform topic, or issue ref
Focus / Scope
--focus <area>: security | performance | accessibility | licensing | api-design | testing | docs | ops | compliance | … (open vocabulary)
--framework <name>: bias toward a named stack (React, Kubernetes, FastAPI, …)
--standard <name>: align to a named standard (OWASP, SOC2, WCAG 2.2, NIST 800-53, …)
Research Budget
--recency <window>: default 18 months. Tighten for fast-moving domains, widen for compliance/legal
--depth quick|standard|deep: research effort budget (default standard)
--sources <list>: restrict to: vendor-docs, standards-bodies, practitioner-blogs, conference-talks, academic, github-discussions
--exclude <list>: e.g. exclude SEO-spam domains
--cite-threshold <N>: minimum distinct sources before a finding is reported (default 2)
Reporting
--dissent: actively surface practitioner disagreement, not just consensus
--validate: re-validate existing claims in the target rather than generating new ones
--output <path>: where to write the report (CLI handler computes the default)
Pipeline
The CLI handler at src/cli/handlers/best-practices-audit.ts parses flags
and computes the output path; this skill receives a fully-formed prompt and
runs the research pipeline.
Step 1: Scope
- Resolve the target.
- Path exists? Read the file/directory and enumerate distinct claims or
decisions stated in it (architecture choices, dependency selections,
pattern usages).
- Path doesn't exist? Treat as freeform topic — the entire audit is
about the topic itself.
- Inventory claims. Each claim becomes a unit of evaluation downstream:
"we use Tower middleware for retries", "Postgres handles >500K users at
the budgeted instance size", "WCAG 2.2 AA is required". For freeform
topics, the claim is implicitly "what does current practice say about
this topic?".
- Apply guidance.
--focus and --framework filter which claims are
in scope. --validate switches to claim re-verification mode (no
generative findings).
Step 1.5: Contributor Discovery (per ADR-023)
Before fan-out, discover any installed framework's kind: research contributors
that match the project. The discovery convention is described in ADR-023; the
runtime authority is src/contributors/discover.ts and the discovery loop
matches the algorithm there.
-
Read .aiwg/frameworks/registry.json. For each registered framework id,
check for <source-path>/research/contributor.md under
agentic/code/frameworks/, agentic/code/addons/, or agentic/code/extensions/
(first match wins per ADR-023 §Layout).
-
Walk .aiwg/contributors/research/*.md for project-local research
contributors.
-
For each candidate, parse YAML frontmatter and validate against the
kind: research schema (published at
agentic/code/frameworks/research-complete/skills/best-practices-audit/contributor.schema.json).
-
Run each contributor's detect.glob against the project root. Skip contributors
whose detection produces fewer than detect.minCount matches — installed
but unused frameworks do not pollute the audit.
-
For each in-use research contributor, fold its frontmatter into the
research plan:
focus_areas — intersect with the user's --focus flag if present.
If --focus is omitted, use the contributor's full focus list. Multiple
contributors' areas merge with union semantics.
sources.preferred and sources.exclude — add to the audit's
allow / block lists. The user's --sources and --exclude flags take
precedence; contributor preferences fill in defaults the user did not
specify.
recency_default_months — used as the per-contributor default
when --recency is not set. When multiple contributors disagree, pick
the shorter window (more conservative — fresher sources are a
stronger guarantee than older sources).
-
Stamp origin: <framework-id> on every finding sourced through that
contributor's expanded plan. Findings sourced from the generic path
(no contributor) get origin: generic. Project-local research
contributors stamp origin: project-local.
-
No regression when no contributors are present. If discovery returns
zero in-use contributors, fall through to the bare generic path described
in #943 — same behavior as before this issue's wiring landed.
When validate-metadata is available, the schema enforces correctness at
deploy time. At audit time, this step trusts validated frontmatter; a
contributor that fails parsing or validation is logged and skipped per
ADR-023 §Failure mode.
Step 2: Research Fan-Out
Dispatch research per claim/focus area using the AIWG research-complete
agents, expanded by any contributor configurations from Step 1.5.
Reuse existing capabilities — do not implement parallel research
machinery.
Available capabilities (load-on-demand from research-complete):
find-sources — discover candidate sources via vendor docs, standards
bodies, practitioner channels
research-acquire — fetch and process candidate documents
research-quality — apply GRADE quality scoring
citation-guard — block fabricated citations
research-query — query the local research corpus when one is present
If media-curator and the marketing kit are also installed, dispatch them
for web-scraping cross-references where appropriate (e.g. practitioner
blog comparisons).
Concurrency rule per AIWG context-budget: the agent should issue parallel
research tasks where independent (different focus areas, different claims),
but not multiplex the same claim into N redundant subagents.
Step 3: Source Quality Gating
For each candidate source returned by research:
- Apply
--sources allow-list and --exclude block-list.
- Run
citation-guard to verify the source is real and retrievable
(URL reachable, content present at the cited location, not a 404 or
redirect to unrelated content).
- Apply GRADE methodology via
research-quality — score each source as
high / moderate / low.
- Apply
--recency window — sources older than the window are demoted
one quality level.
- Drop sources that fail any gate. Do not "rescue" weak sources by
relaxing thresholds without explicit
--guidance to do so.
Step 4: Comparison
For each claim:
- Aggregate the surviving sources.
- If fewer than
--cite-threshold distinct sources support the claim's
alignment-or-divergence assessment, downgrade the finding to "weak
signal" rather than dropping it silently. Users need to see when
the corpus didn't support a strong conclusion — that is itself a
finding.
- Determine alignment: ALIGNED / PARTIAL / DIVERGES / CONTESTED.
- With
--dissent, also extract dissenting voices: who argues the other
way, where, and on what grounds. Surface these as a labeled section,
not a footnote.
Step 5: Report
Write to the output path computed by the CLI handler. Structure per #929 §5:
# Best-Practices Audit: <target>
**Generated**: YYYY-MM-DD
**Focus**: <flags or 'all'>
**Depth**: <flag>
**Cite threshold**: <N>
## Executive Summary
<2–4 sentences: what's aligned, what's misaligned, overall confidence>
## Findings
### Finding 1: <claim or decision under review>
- **Current state in project**: <quote/paraphrase with file:line if available>
- **Current industry practice**: <summary>
- **Alignment**: ALIGNED | PARTIAL | DIVERGES | CONTESTED | WEAK SIGNAL
- **Confidence**: high | moderate | low
- **Evidence**:
- [S1] <source title> — <vendor/standards body/blog>, <date>, <url>
- [S2] ...
- **Recommendation**:
(repeat per claim)
Full bibliography with retrieval dates. Every source cited above must
appear here with full provenance. No citation appears in Findings without
appearing in Sources.
Research depth:
Recency window:
Sources excluded:
Sources unavailable:
Anti-Hallucination Guardrails (Hard Requirements)
These are non-negotiable. Failure to meet any of these breaks the
audit's core value proposition.
- No fabricated citations, DOIs, URLs, or quotes. Every cited URL must
be the result of a retrieval that returned content at that URL.
citation-guard
enforces this; if citation-guard is unavailable, the audit must
surface that fact in Methodology Notes and downgrade overall confidence.
- Cite-threshold is enforced, not advisory. A finding below threshold is
downgraded to WEAK SIGNAL or dropped — never reported as if the threshold
were met.
- Conflicting sources surface as labeled disagreement. If sources A and B
disagree, the report says so explicitly. The audit does not silently
pick one and pretend consensus.
- Sparse signal is reported honestly. When the corpus is thin or weak,
the report says so and downgrades confidence. The audit does not
fill the void with the model's training-data priors.
- Training-data-only claims are marked. Any background context the
audit relies on without a citation is labeled
(no external citation verified) so the reader knows what's grounded vs what's not.
--validate mode never generates new findings. It only re-checks
claims already present in the target. If a claim's supporting source
is no longer reachable or has changed, the audit reports that the
claim is now unverified, not that there's a new claim to make.
Out of Scope (deferred per #929)
- Cache layer for repeated audits — see deferred tracker #946 (caching applies
to contributor discovery; research caching is a separate concern but not
in scope for this skill)
- Auto-ingest into the knowledge-base framework — defer until best-practices-audit
has been used in anger and we can see whether ingestion is valuable
(#929 open question 4)
- (Contributor-driven prompt expansion now wired in — see Step 1.5 above. The
earlier "deferred" note from #943 is resolved by #944.)
References
- @.aiwg/architecture/decisions/ADR-023-contributor-discovery-convention.md — the contributor convention #944 will wire into this skill
- @$AIWG_ROOT/agentic/code/frameworks/research-complete/skills/find-sources/SKILL.md — source discovery
- @$AIWG_ROOT/agentic/code/frameworks/research-complete/skills/research-acquire/SKILL.md — source retrieval and processing
- @$AIWG_ROOT/agentic/code/frameworks/research-complete/skills/research-quality/SKILL.md — GRADE methodology
- @$AIWG_ROOT/agentic/code/frameworks/research-complete/skills/citation-guard/SKILL.md — fabricated-citation detection
- @$AIWG_ROOT/agentic/code/frameworks/research-complete/skills/research-query/SKILL.md — local corpus queries
- @$AIWG_ROOT/agentic/code/addons/aiwg-utils/rules/research-before-decision.md — research-first rule the audit's pipeline implements
- @$AIWG_ROOT/agentic/code/addons/aiwg-utils/rules/context-budget.md — parallel subagent limits applied during research fan-out