Run the check-docs diagnostic. Read-only. Produce a structured findings
report; do NOT edit any file.
Local-only skill. This lives in .claude/skills/check-docs/ with no twin in
templates/, so the installer never stamps it into target repos. It audits
this kit's own README and docs — it is a maintainer tool, not a distributed
workflow. See .claude/LOCAL-ONLY-COMMANDS.md. (Its own file, and any
other local-only skill, is therefore expected to be absent from the
distributed roster — do not flag that as drift.)
Why this exists
Docs drift silently: a feature adds a command, a skill, or a stamped file, and
the prose roster, the What You Get tree, and the counts scattered across the
docs quietly fall behind the code. verify/drift//check-drift guard the
target-repo knowledge layer (ai/), not the kit's own public docs. This
skill closes that gap.
Ground truth — derive these FIRST, from the code, before reading any prose
The distributed reality is defined by templates/, not by .claude/
(which also holds local-only extras like this skill and /implement-spec).
Derive, deterministically:
- Distributed workflows = the sub-directories of
templates/claude/skills/ (the Claude surface — custom commands merged into
skills). This is the canonical "what users get" roster. Cross-check parity with
templates/github/prompts/, templates/agents/workflows/, and
templates/cursor/rules/ (a workflow is "universal" only if present in all).
- Distributed skills = the sub-directories of
templates/claude/skills/
and templates/agents/skills/.
- CLI commands = the members of the authoritative
const COMMANDS = new Set([…])
in install.mjs (the CLI's own routing source, also used by
test/release-check.mjs) — do not count command === "…" comparisons, which
also appear for sub-flows. Mirrored in the docs/CLI-REFERENCE.md "Command index" table.
- Stamped
ai/ tree = the structure under templates/ai/ plus the files
install.mjs writes directly (ai/repo-profile.json,
ai/install-manifest.json, optionally ai/repo-indepth.json).
- Local-only skills = present in
.claude/skills/ but absent from
templates/claude/skills/; the intended list is .claude/LOCAL-ONLY-COMMANDS.md.
Use ls/Glob and grep for these — do not eyeball. Every count you assert in a
finding must trace to one of these sources.
Docs in scope
README.md, docs/README.md, docs/FAQ.md, docs/MULTI-TOOL-SETUP.md,
docs/METHODOLOGY.md, docs/CLI-REFERENCE.md, docs/GETTING-STARTED.md,
docs/reports/technical-report-draft.md, and the root CLAUDE.md / AGENTS.md.
Checks
Section D — Command & skill roster
| ID |
Check |
Severity |
| D1 |
Every prose count of workflows (e.g. README's "The Eleven Workflows" heading, "eleven workflows") equals the number of sub-directories in templates/claude/skills/ |
❌ |
| D2 |
Every explicit workflow list/table (README roster table, MULTI-TOOL cross-tool table, technical-report §9.1) names exactly the sub-directories in templates/claude/skills/ — none missing, none removed |
❌ |
| D3 |
Every skill reference (README tree + highlights, FAQ, MULTI-TOOL-SETUP, technical-report §9.3) matches the sub-dirs of templates/claude/skills/ / templates/agents/skills/ — no skill named that isn't shipped, none shipped that isn't named |
❌ |
| D4 |
No local-only command (per .claude/LOCAL-ONLY-COMMANDS.md) is described anywhere as "stamped", "installed", or part of the distributed roster |
⚠️ |
Section E — CLI-command & stamped-tree drift
| ID |
Check |
Severity |
| E1 |
Every "all N commands" claim (e.g. docs/README.md's CLI-REFERENCE blurb) equals the size of the COMMANDS set in install.mjs |
❌ |
| E2 |
The docs/CLI-REFERENCE.md "Command index" table has one row per member of the COMMANDS set in install.mjs — none missing, none stale |
❌ |
| E3 |
The README "What You Get" tree lists every path templates/ai/ stamps and every directly-written ai/ file (spot-check: START-HERE.html, INDEX.md, lab/WORKLOG.md, lab/reviews/, guide/*, analysis/*) |
❌ |
| E4 |
The technical-report §8.1 directory tree agrees with the same stamped-tree ground truth |
⚠️ |
Section F — Cross-doc consistency
| ID |
Check |
Severity |
| F1 |
The command / skill / CLI counts agree with each other across all in-scope docs (a number stated in two places must match) |
❌ |
| F2 |
Version strings agree: package.json version vs the README citation version: vs CITATION.cff vs the newest CHANGELOG.md section |
⚠️ |
| F3 |
No doc references a file, command, or stack that no longer exists (e.g. a removed install.py / Python path, a renamed command) |
⚠️ |
Section G — Path-claim resolution
| ID |
Check |
Severity |
| G1 |
Every backtick-wrapped repo-relative path in the in-scope docs resolves on disk (same discipline verify applies to ai/, extended to README + docs/). Run node install.mjs verify . --strict first to clear the ai/ layer, then apply the path check to the docs above |
❌ |
| G2 |
Every relative markdown link [text](path) in README.md and docs/README.md resolves on disk |
⚠️ |
Output format
Emit the report directly to the user (do NOT write a file). Use this structure:
check-docs — findings
══════════════════════════════════════════════════
Ground truth (from templates/ + install.mjs)
────────────────────────────────────────────
Workflow commands: <N> · Skills: <list> · CLI commands: <M>
Local-only (not distributed): <list>
Roster (Section D)
──────────────────
✅/⚠️/❌ <ID> <check name>
→ <where it's wrong>: <one-line concrete fix> ← omit for ✅
CLI & tree (Section E)
──────────────────────
✅/⚠️/❌ <ID> <check name>
→ <one-line concrete fix>
Cross-doc (Section F)
─────────────────────
✅/⚠️/❌ <ID> <check name>
→ <one-line concrete fix>
Path claims (Section G)
───────────────────────
✅/⚠️/❌ <ID> <check name>
→ <file:line>: <one-line concrete fix>
Summary
───────
X passed · Y warnings · Z errors
Next step: <single highest-priority action — one sentence>
Reporting discipline
- Report every check, not just failures — passing checks build confidence.
- For every ❌/⚠️, cite the exact file and, where possible, the line or
heading that is wrong, and give a concrete one-line fix — never just "this
is stale."
- When prose and code disagree, the code (
templates/ + install.mjs) is the
source of truth; the fix always adjusts the prose, never the code.
- The "Next step" names only the single highest-priority action.
What this command does NOT do
- Does not auto-edit any file — it diagnoses and reports only.
- Does not audit the target-repo
ai/ knowledge layer's file-path claims for
drift against source — that is verify / drift / /check-drift.
- Does not judge
ai/guide/ content quality — that is
/post-cold-start-verification / /verify-ai-readiness.
- Does not get distributed to target repos — it is local to this kit (see
.claude/LOCAL-ONLY-COMMANDS.md).
1---2name: check-docs3description: Kit-maintainer diagnostic (LOCAL-ONLY, not distributed) that audits the README and docs/ for staleness against the repo's real command/skill/CLI roster, stamped tree, and cross-doc consistency. Read-only; produces a severity-ranked findings report.4---5<!-- Copyright (c) 2026 Kunal Suri (CEA LIST). All rights reserved. -->67Run the **check-docs** diagnostic. Read-only. Produce a structured findings8report; do NOT edit any file.910> **Local-only skill.** This lives in `.claude/skills/check-docs/` with no twin in11> `templates/`, so the installer never stamps it into target repos. It audits12> *this kit's own* README and docs — it is a maintainer tool, not a distributed13> workflow. See `.claude/LOCAL-ONLY-COMMANDS.md`. (Its own file, and any14> other local-only skill, is therefore expected to be absent from the15> distributed roster — do not flag that as drift.)1617## Why this exists18Docs drift silently: a feature adds a command, a skill, or a stamped file, and19the prose roster, the `What You Get` tree, and the counts scattered across the20docs quietly fall behind the code. `verify`/`drift`/`/check-drift` guard the21*target-repo* knowledge layer (`ai/`), not the kit's *own* public docs. This22skill closes that gap.2324## Ground truth — derive these FIRST, from the code, before reading any prose25The distributed reality is defined by `templates/`, **not** by `.claude/`26(which also holds local-only extras like this skill and `/implement-spec`).27Derive, deterministically:2829- **Distributed workflows** = the sub-directories of30 `templates/claude/skills/` (the Claude surface — custom commands merged into31 skills). This is the canonical "what users get" roster. Cross-check parity with32 `templates/github/prompts/`, `templates/agents/workflows/`, and33 `templates/cursor/rules/` (a workflow is "universal" only if present in all).34- **Distributed skills** = the sub-directories of `templates/claude/skills/`35 and `templates/agents/skills/`.36- **CLI commands** = the members of the authoritative `const COMMANDS = new Set([…])`37 in `install.mjs` (the CLI's own routing source, also used by38 `test/release-check.mjs`) — do **not** count `command === "…"` comparisons, which39 also appear for sub-flows. Mirrored in the `docs/CLI-REFERENCE.md` "Command index" table.40- **Stamped `ai/` tree** = the structure under `templates/ai/` plus the files41 `install.mjs` writes directly (`ai/repo-profile.json`,42 `ai/install-manifest.json`, optionally `ai/repo-indepth.json`).43- **Local-only skills** = present in `.claude/skills/` but absent from44 `templates/claude/skills/`; the intended list is `.claude/LOCAL-ONLY-COMMANDS.md`.4546Use `ls`/Glob and grep for these — do not eyeball. Every count you assert in a47finding must trace to one of these sources.4849## Docs in scope50`README.md`, `docs/README.md`, `docs/FAQ.md`, `docs/MULTI-TOOL-SETUP.md`,51`docs/METHODOLOGY.md`, `docs/CLI-REFERENCE.md`, `docs/GETTING-STARTED.md`,52`docs/reports/technical-report-draft.md`, and the root `CLAUDE.md` / `AGENTS.md`.5354## Checks5556### Section D — Command & skill roster57| ID | Check | Severity |58|----|-------|----------|59| D1 | Every prose count of workflows (e.g. README's "The Eleven Workflows" heading, "eleven workflows") equals the number of sub-directories in `templates/claude/skills/` | ❌ |60| D2 | Every explicit workflow **list/table** (README roster table, MULTI-TOOL cross-tool table, technical-report §9.1) names exactly the sub-directories in `templates/claude/skills/` — none missing, none removed | ❌ |61| D3 | Every skill reference (README tree + highlights, FAQ, MULTI-TOOL-SETUP, technical-report §9.3) matches the sub-dirs of `templates/claude/skills/` / `templates/agents/skills/` — no skill named that isn't shipped, none shipped that isn't named | ❌ |62| D4 | No local-only command (per `.claude/LOCAL-ONLY-COMMANDS.md`) is described anywhere as "stamped", "installed", or part of the distributed roster | ⚠️ |6364### Section E — CLI-command & stamped-tree drift65| ID | Check | Severity |66|----|-------|----------|67| E1 | Every "all N commands" claim (e.g. docs/README.md's CLI-REFERENCE blurb) equals the size of the `COMMANDS` set in `install.mjs` | ❌ |68| E2 | The `docs/CLI-REFERENCE.md` "Command index" table has one row per member of the `COMMANDS` set in `install.mjs` — none missing, none stale | ❌ |69| E3 | The README "What You Get" tree lists every path `templates/ai/` stamps and every directly-written `ai/` file (spot-check: `START-HERE.html`, `INDEX.md`, `lab/WORKLOG.md`, `lab/reviews/`, `guide/*`, `analysis/*`) | ❌ |70| E4 | The technical-report §8.1 directory tree agrees with the same stamped-tree ground truth | ⚠️ |7172### Section F — Cross-doc consistency73| ID | Check | Severity |74|----|-------|----------|75| F1 | The command / skill / CLI counts agree with each other across all in-scope docs (a number stated in two places must match) | ❌ |76| F2 | Version strings agree: `package.json` `version` vs the README citation `version:` vs `CITATION.cff` vs the newest `CHANGELOG.md` section | ⚠️ |77| F3 | No doc references a file, command, or stack that no longer exists (e.g. a removed `install.py` / Python path, a renamed command) | ⚠️ |7879### Section G — Path-claim resolution80| ID | Check | Severity |81|----|-------|----------|82| G1 | Every backtick-wrapped repo-relative path in the in-scope docs resolves on disk (same discipline `verify` applies to `ai/`, extended to README + docs/). Run `node install.mjs verify . --strict` first to clear the `ai/` layer, then apply the path check to the docs above | ❌ |83| G2 | Every relative markdown link `[text](path)` in `README.md` and `docs/README.md` resolves on disk | ⚠️ |8485## Output format86Emit the report directly to the user (do NOT write a file). Use this structure:8788```89check-docs — findings90══════════════════════════════════════════════════9192Ground truth (from templates/ + install.mjs)93────────────────────────────────────────────94Workflow commands: <N> · Skills: <list> · CLI commands: <M>95Local-only (not distributed): <list>9697Roster (Section D)98──────────────────99✅/⚠️/❌ <ID> <check name>100 → <where it's wrong>: <one-line concrete fix> ← omit for ✅101102CLI & tree (Section E)103──────────────────────104✅/⚠️/❌ <ID> <check name>105 → <one-line concrete fix>106107Cross-doc (Section F)108─────────────────────109✅/⚠️/❌ <ID> <check name>110 → <one-line concrete fix>111112Path claims (Section G)113───────────────────────114✅/⚠️/❌ <ID> <check name>115 → <file:line>: <one-line concrete fix>116117Summary118───────119X passed · Y warnings · Z errors120Next step: <single highest-priority action — one sentence>121```122123## Reporting discipline124- Report **every** check, not just failures — passing checks build confidence.125- For every ❌/⚠️, cite the **exact file and, where possible, the line or126 heading** that is wrong, and give a concrete one-line fix — never just "this127 is stale."128- When prose and code disagree, the **code (`templates/` + `install.mjs`) is the129 source of truth**; the fix always adjusts the prose, never the code.130- The "Next step" names only the single highest-priority action.131132## What this command does NOT do133- Does not auto-edit any file — it diagnoses and reports only.134- Does not audit the target-repo `ai/` knowledge layer's file-path claims for135 drift against source — that is `verify` / `drift` / `/check-drift`.136- Does not judge `ai/guide/` content quality — that is137 `/post-cold-start-verification` / `/verify-ai-readiness`.138- Does not get distributed to target repos — it is local to this kit (see139 `.claude/LOCAL-ONLY-COMMANDS.md`).