audit-docs
Skill23 starsChanged 50 days agoMITView on GitHub
Audit cross-document coherence: docs ↔ READMEs ↔ roadmap ↔ code ↔ fix index ↔ issues. Finds drift — features in docs/ not in the roadmap (or vice versa), fix-index entries already merged/closed, broken documentation-map links, dependency cycles, artifacts in the wrong language, naming-convention violations, project-charter coverage — and reports them ranked by severity, fixing only low-risk items on request. Model-agnostic: the skill inherits whatever model and effort your agent session is already using. Triggers: "check doc consistency", "are the docs in sync", "audit the docs", "doc coherence review", "did the docs drift", "validate the roadmap".
17 other projects use a version of this.
Adopted by
Most recently taken up by
- TserenTserenov/FMT-exocortex-templatetheir own version, first seen Nov 2, 2026
- iwesys/IWEtheir own version, first seen Nov 1, 2026
- driangle/vibeviewtheir own version, first seen Nov 1, 2026
- Evan-Daruwalla/claude-skill-suitetheir own version, first seen Oct 20, 2026
- LandonTomaine/LT-Agentstheir own version, first seen Oct 20, 2026
- faparicior/sdlc-skillstheir own version, first seen Oct 20, 2026
Used with
Projects with it also use diagnose and skill-creator.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MicrosoftSkilldiagnose
Use to systematically diagnose why scenarios fail — identifies root causes by analyzing agent traces, codebase, and behavioral patterns
Also in 3 projects that use this
SentrySkillskill-creator
Create new agent skills following the Agent Skills specification. Use when asked to "create a skill", "add a new skill", "write a skill", "make a skill", "build a skill", or scaffold a new skill with SKILL.md. Guides through requirements, writing, registration, and verification.
Also in 4 projects that use this
Other versions17 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 17
- opsmill/infrahub★ 548same name
- frankarobotics/franka_ros2★ 392same name
- chrisguidry/docket★ 148same name
- TserenTserenov/FMT-exocortex-template★ 63same name
- DGouron/review-flow★ 42same name
- fritzprix/libr-agent★ 11same name
- driangle/vibeview★ 4same name
- bmaltais/skills★ 2same name
- faparicior/sdlc-skills★ 2same name
- krixon/skills★ 1same name
7 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository30 other files it gives its agents.
- AGENTS.mdAGENTS.md
- template/AGENTS.mdAGENTS.md
- audit-prSkill
- batch-schedulerSkill
- discover-repository-stateSkill
- execute-phaseSkill
- fold-findingsSkill
- init-workspaceSkill
- log-sessionSkill
- orchestration-envelopeSkill
- phase-contractSkill
- pre-execution-reviewSkill
- product-auditSkill
- resolve-repository-stateSkill
- review-a11ySkill
- review-brandSkill
- review-changeSkill
- review-codeSkill
- review-debtSkill
- review-designSkill
- review-implementationSkill
- review-perfSkill
- review-securitySkill
- review-seoSkill
- review-verifySkill
- skill-lintSkill
- triage-issueSkill
- unit-laneSkill
- verification-contractSkill
- workflow-statusSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. 0 are common, 6 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 16 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 40
Before a release or milestone, after merging several features/fixes, or whenever the doc set might have drifted from the code and issues.
- Very specific: line 51
Run these and collect findings (cite paths/lines/issue numbers each):
- Very specific: line 53
Roadmap ↔ feature folders: Every docs/features/<NN>-<slug>/ is in the roadmap, and every roadmap entry has a folder (or is explicitly …
- Distinctive: line 57
Fix index hygiene: Every entry maps to an open issue and an unmerged branch.
- Distinctive: line 60
Documentation-map links resolve: Every file the map references exists.
- Very specific: line 69
Invariant tags: If the project uses invariant/decision IDs (e.g.
- Very specific: line 71
PR-link integrity on
donerows: Every roadmap row (and fix-index entry) with status done carries a linked PR reference — done · #<pr>. - Very specific: line 131
README currency against what shipped: Run each README against the tree: rg -n '<a retired name or stale claim>' README.md …
- Very specific: line 153
no unfilled charter slot survives — a bullet whose entire value is a <…> placeholder is the raw-template failure.
- Very specific: line 197
Only high and low are defined in this legend
- Distinctive: line 204
Read-first; never bulk-rewrite docs unprompted.
- Distinctive: line 207
Keep changes surgical and within docs.
- Distinctive: line 226
Run standalone anytime; no required predecessor.
“Common” is measured: kept by at least 6 in 10 of the 16 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Audit Docs
A read-first audit answering "do the docs still match reality?" Produces a findings report; it does not silently rewrite docs.
Turn contract — verify before ending the turn
✓ The AUDIT DOCS fixed-format report was printed, ending in `Decision: PASS | FAIL`
✓ No doc was rewritten without explicit --fix / user go-ahead
✓ The closing `→ Next:` block is printed as the ABSOLUTE last outputAbout to end the turn with any box unchecked? The turn is NOT done — complete the missing box first (weak models drop end-of-document duties; this list is first on purpose).
When to use
- Before a release or milestone, after merging several features/fixes, or whenever the doc set might have drifted from the code and issues.
Step 0 — Discover the project (always first)
Per the agent guide's Workflow conventions + documentation map, then read what THIS skill needs: the roadmap, the fix index + template, and the feature folder layout — the map tells you which links and invariants to check.
Checks
Run these and collect findings (cite paths/lines/issue numbers each):
- Roadmap ↔ feature folders. Every
docs/features/<NN>-<slug>/is in the roadmap, and every roadmap entry has a folder (or is explicitly "scheduled"). - Feature dependencies. SPEC
Depends on/Branchfields are valid; no dependency cycles; ordering is consistent with the roadmap. - Fix index hygiene. Every entry maps to an open issue and an unmerged branch; flag entries whose issue is closed or whose PR merged (should have been removed). Flag open fix branches missing from the index.
- Documentation-map links resolve. Every file the map references exists; flag "scheduled, not yet authored" items so they aren't mistaken for drift.
- Broken intra-doc links. Relative links/anchors point at real files/sections.
- Issue references. Acceptance/known-issues lines referencing
#Naren't pointing at long-closed issues without note. - Language & naming conventions. Artifacts in the project's docs language (this repo: English); file/dir naming matches conventions (e.g. kebab-case TS files, PascalCase components).
- Invariant tags. If the project uses invariant/decision IDs (e.g. INV-/D-/KI-), spot-check that referenced IDs exist where claimed.
- PR-link integrity on
donerows. Every roadmap row (and fix-index entry) with statusdonecarries a linked PR reference —done · [#<pr>](<pr-url>). For each baredone, find its PR in the forge (gh pr list --state all --head feat/<NN>-<slug>or by title) and propose the row update; adonewith no PR found at all is HIGH severity (the unit may never have been closed out).
Workflow discipline (checks 10–14) — the executor skills enforce these at write time; this audit verifies they actually held. Each check is mechanical: run the command shown, don't infer.
- Phase naming — keyed on the carrier, like check 11.
- lane-era —
bun scripts/phase-lint.mjs <unit-doc>(ownerskills/phase-contract/SKILL.md) must printverdict PASS, andbun scripts/ceremony.mjs docs check-phase-labels --slug <slug>must answervalid: true. AS#hit in a lane-era doc is not a phase label: since #308S#is the requirement id. - legacy carriers only —
grep -rnE '\bS[0-9]+\b|\bStep [0-9]' docs/features/*/{PLAN,TASKS,progress}.mdmust return nothing: plans useP1, P2, …("phases") only. Any hit: LOW (rename), plus check the executor argument still resolves. Today's 22 hits are all literalStep 0 — Discover the projectcitations; the grep is the legacy carrier's, so a lane-eraS#is never read through it.
- lane-era —
- Per-phase doc discipline — keyed on the unit's own carrier. Pick the
carrier mechanically, never by guess:
TASKS.mdin the unit folder means legacy carriage; its absence means the unit doc's## Tasks/## Log.- lane-era —
bun scripts/ceremony.mjs docs check-tasks-ticks --slug <slug>andbun scripts/ceremony.mjs docs check-progress-entry --slug <slug>must both reportvalid: true: every- [x] P<n>has itsP<n>line in## Log, and no task lacks one. Cite those two fields, nevercheck-all(itscommit-format/docs-languagefields are checks 14 and 7). A doc with no## Taskssection answersn/a—no ## Tasks section — legacy carrier— so the vacuous case routes to the legacy branch, never to a silent pass. - legacy — the original assertions on that unit's own files: completed
phases ticked in
TASKS.md, oneprogress.mdentry per completed phase, the literal close-out tasks in the final phase. - Severity — a
doneunit whose ledger disagrees with its tasks: HIGH. The same on anin-progressunit: LOW (it may still be settling). Onlyhigh/lowexist in this report's legend. - Close-out is
audit-pr's contract (receipt + ordered gates): cite its verdict, never re-derive the retired literal tasks here.
- lane-era —
- Branch & PR discipline vs the forge. For every
doneunit: its PR exists, targets the default branch, has a non-empty body, and carriesCloses #<n>when the unit is issue-born (SPEC references an issue). Also scan recent default-branch history (git log --first-parent) for feature/fix-scoped changes committed directly without a PR: HIGH. - Generated-docs provenance (only when the documentation map declares a
Docs siteblock; otherwise state n/a). Scan the declared content dir for orphan pages each: (a) itssource-unitexists in the roadmap or fix index — no match is an orphan (low: propose deletion or re-attribution); (b) the unit's PR merged after the page'supdateddate with commits touching the page's subject paths — that page is stale (LOW: propose ). Cite page path + unit per finding. - Commit format & dependency discipline. Sample the unit branches'
commits:
<type>(<scope>): <summary>conventional format (violations: LOW). Everyin-progress/donerow'sDepends on:closure was merged — a unit built on unmerged deps is HIGH unlessdecisions.mdrecords a user-forced override (--force), which downgrades it to LOW (documented risk). - README currency against what shipped. Run each README against the
tree:
rg -n '<a retired name or stale claim>' README.md packages/*/README.mdand every hit that names a surface the tree no longer carries (a retired skill in an install/uninstall example, a command count or package count the tree contradicts, a "none yet" beside shipped subcommands) is HIGH — the claim misleads a reader who acts on it. Its mirror: a shipped, consumer-facing surface with no README entry at all is HIGH (the document-or-don't-coin residue read at README scope —product-auditowns the product-wide sweep, this check is the docs-tree half). Superseded prose left standing beside its replacement is LOW. Owners: the rule isAGENTS.md§Working rules, the step isskills/unit-lane/references/DOCS.md. - Project-charter coverage (issue #435). Applies when the agent guide
declares the charter — a
## Project chartersection or a documentation-map row for the criteria catalogue; an older install that declares neither is statedn/a(absent structure, never a finding). Mechanical, the CAPABILITIES pattern — run the commands, never infer:- the declared map row's file exists — a row naming
docs/workflow/VERIFICATION_CRITERIA.mdwith no such file is HIGH (the map points at nothing); - the charter section is present when either the section or the row is
declared — a missing
## Project chartersection is HIGH (identity answers with no tier-0 home push agents back to guessing); no unfilled charter slot survives — a bullet whose entire value is a
<…>placeholder is the raw-template failure. The scan is bounded to the## Project chartersection, because the guide's other honest placeholders — the Hard-rules stubsinit-workspaceleaves unfilled by design — are not the charter's finding, and a guide-wide scan reports them forever:awk '/^## Project charter/{f=1; next} f && /^## /{f=0} f && /^- \*\*[^*]+:\*\* `?<[^>]+>`?$/ {print FILENAME":"FNR":"$0}' AGENTS.md → prints nothing(the template's own file is the positive case — its 11 slots print with
path:line; a legalunresolved — <question>value never matches; an identity bullet — the five the template names — is HIGH, a domain bullet LOW);- the catalogue carries no raw placeholder cell — same scan as the
capability seed:
rg -n '\| *\?<[^>]+>`? *|' docs/workflow/VERIFICATION_CRITERIA.mdmust print nothing, and every criterion row's provenance cell is one of the closed set (workflow-generic/project-declared/stamped assumption (dated)`) — a row naming none is LOW (it cannot be consumed as declared);
- the declared map row's file exists — a row naming
Adapt the list to what the project has; skip checks for absent structures and say so.
Process
- Discover, then run the checks with
grep, file reads, and the forge CLI (per Workflow conventions; examples usegh). Produce the findings report — return exactly (fixed output contract):
AUDIT DOCS — scope: <docs tree / roadmap / fix index / issues checked> | # | Check (1-16) | Finding | Sev | Evidence | Proposed fix | |---|-------------|---------|-----|----------|--------------| | 1 | <which> | <what> | high|low | <path:line / #issue> | <smallest action> | Checks run: <n>/16 (skipped: <which + why — absent structures only>) Summary: <1-2 sentences> Decision: PASS | FAIL (FAIL if any high-severity finding is open)Sev: high = misleading or broken; low = cosmetic. Only
highandloware defined in this legend- Fix only on request. With explicit
--fix(or user go-ahead), apply the low-risk corrections (remove a merged fix-index row, fix a dead link, register a missing roadmap entry, add a verified PR link to a baredonerow). Leave judgment calls to the user.
Guardrails
- Read-first; never bulk-rewrite docs unprompted.
- Distinguish genuine drift from intentionally "scheduled/deferred" items — don't report deliberate tradeoffs as errors.
- Keep changes surgical and within docs; no code or behavior changes.
Portability (agents other than Claude Code)
The workflow is the contract; Claude Code features are conveniences. On an agent that lacks one, apply the fallback — never skip the step the feature enables:
- No slash-command menu — where this skill says
/<skill>, open that skill'sSKILL.md(wherever your agent installed the skills) and follow it literally, in a fresh conversation: hand-offs assume a clean context. - No per-skill
model:/effort:— no skill pins a tier; pick tiers yourself: these are mostly mechanical cross-document checks — a mid-tier model is enough; escalate to your strongest only for a deep audit.
Relationship to other skills
- Complements
unit-lane(which creates the docs this audits) andtriage-issue(which keeps the fix index honest). - Run standalone anytime; no required predecessor.
Done when
- A severity-ranked findings report exists, and any approved low-risk fixes are applied — with genuine deferrals left untouched and labeled as such.
The closing
→ Next:block is printed:→ Next: apply the approved low-risk fixes, then re-run /audit-docs to confirm clean · real drift (not cosmetic) → /triage-issue · a concrete defect → /unit-lane --fix <n> · already clean → nothing to do
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

