Docs
Authors, audits, and maintains project documentation across CLAUDE.md / .claude/rules/, AGENTS.md, README.md, and Diátaxis docs/ trees (root + nested for monorepos). Four modes: init scaffolds a tiered docs setup from scratch; update detects drift (dead @imports, renamed commands, stale narrative) and incrementally refreshes via a Placement Resolver that pushes rules to the innermost-ancestor destination; readme writes or audits a README against the standard-readme spec; audit produces a documentation health report across every surface. Routes by kind: hard rules to CLAUDE.md, path-scoped patterns to .claude/rules/, narrative to docs/, marketing to README.md. Triggers on "init claude", "bootstrap docs", "scaffold CLAUDE.md", "update docs", "sync CLAUDE.md", "docs drift", "write a README", "audit our docs", "review the README", "Diátaxis", "/docs".From its SKILL.md
npx -y skills add mthines/agent-skills --skill docsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 8 stars8 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
16.2 KB, as published. Nobody here has run it
Documentation
Author, audit, and maintain project documentation across every surface that matters: the agent hot path (CLAUDE.md, AGENTS.md, .claude/rules/), the human entry point (README.md), and the narrative tier (docs/).
This is the single home for "make our docs good" work — bootstrapping a new project, refreshing docs after a sprint, writing a README that converts readers into users, or auditing the whole estate for drift.
This
SKILL.mdis a thin index. Detailed authoring rules live inrules/*.mdand load on demand. Worked examples are inreferences/*.md. Literal scaffolding skeletons are intemplates/*.md. Do not preload everything — load only what the current phase asks for.
Mode Detection
Parse $ARGUMENTS (first token) and route to one of four modes.
A second token of --auto is a cross-cutting modifier (see below).
| Mode | Default | Trigger |
|---|---|---|
init | "init", "bootstrap", "scaffold", or $ARGUMENTS == "init" (no existing CLAUDE.md). | |
update | yes | Default when a CLAUDE.md already exists. "update", "sync", "refresh", "drift". |
readme | "readme", "write a README", "audit the README", or $ARGUMENTS == "readme". | |
audit | "audit", "review the docs", "doc health check", or $ARGUMENTS == "audit". |
--auto modifier — append to any mode token to enable the autonomous-workflow guardrails.
Always passed by autonomous-workflow Phase 5 as Skill("docs", "update --auto").
When --auto is present, also load auto-update-loop.md before executing the mode's phases.
Disambiguation rule when no mode token is passed:
- If
./CLAUDE.mddoes not exist →init. - Else if
./README.mddoes not exist and the user mentioned "README" →readme. - Else →
update.
State the detected mode in one line before continuing:
Mode: update
Target: this repo
Shared Foundations (every mode loads these)
Regardless of mode, every run is governed by three rule files. Load them once on first need; do not reload them per phase.
| File | What it gives you |
|---|---|
rules/content-routing.md | The Content Routing Rubric — which surface owns which kind of content, and why. |
rules/placement-resolver.md | The innermost-wins algorithm for picking the specific file (root vs nested CLAUDE.md, .claude/rules/ with paths:, etc.). |
rules/writing-style.md | Google + Microsoft style highlights, plain-language rules, and the agent-readable docs pattern. |
Then add the rule files specific to the mode:
| Mode | Additional rules to load |
|---|---|
init | claude-md.md, readme.md, docs-folder.md |
update | drift-detection.md, claude-md.md |
readme | readme.md |
audit | All of the above, plus maintenance.md for CI lint stack guidance. |
When invoked from a non-interactive caller (autonomous-workflow Phase 5) — passed as --auto — also load auto-update-loop.md.
That rule adds four non-negotiable gates (hot-path budget, recurrence threshold ≥ 2, removed-rules ledger, optional ablation) plus the JSON run-summary contract the caller logs.
Mode: init — bootstrap docs from scratch
Use when a project has no Claude configuration and (optionally) no documentation. Produces a tiered setup sized to the project's complexity.
Phases
- Detect existing config. Check for
CLAUDE.md,.claude/,AGENTS.md,README.md,docs/. If any exist, ask viaAskUserQuestion: Overwrite / Merge missing / Skip / Abort. - Triage complexity. Count source files, directories, monorepo
packages, CI/CD presence. See
references/archetypes.mdfor the small / medium / large thresholds and the per-tier file matrix. - Detect tech stack. Package manager (pnpm / npm / yarn / bun / poetry /
cargo / go.mod), test framework, linters, monorepo signal (
nx.json,turbo.json,pnpm-workspace.yaml). - Scaffold the tier's files. Use
templates/claude-md.md,templates/readme.md, and thedocs/*templates listed inrules/docs-folder.md. - Wire
.gitignore. Add.claude/settings.local.jsonidempotently. - Summarize. Print a table of created files with line counts and audience.
Hard rules during init
- Route by kind, not by file pattern. Rules go to
CLAUDE.md/.claude/rules/; narrative goes todocs/; marketing goes toREADME.md. Seerules/content-routing.md. - CLAUDE.md ≤ 200 lines. Anthropic's own threshold — beyond it, adherence drops measurably.
- README first viewport must answer what is this, does it solve my
problem, can I trust it? See
rules/readme.mdfor the above-the-fold checklist. - Never duplicate content between
CLAUDE.md,README.md, anddocs/. Pick one owner; link from the others.
Mode: update — sync docs with the codebase
Use after work has landed on a branch. Detects drift, applies targeted fixes, and pushes new rules to the innermost-ancestor destination so the hot path does not bloat over time.
Argument parsing
| Argument | Default | Effect |
|---|---|---|
branch | yes | Compare current branch vs the default branch. Default for update. |
recent [N] | Diff the last N commits (default 10). | |
paths <glob> | Limit the diff to <glob>. The Placement Resolver still decides destinations. | |
nested <dir> | Route all updates for changes under <dir> to <dir>/CLAUDE.md (scaffold if missing). | |
pattern <glob> | Discovery-driven — scan files matching <glob> for shared structure, emit one rule. | |
holistic | Run holistic-analysis refactor on each affected area before drafting docs updates. | |
dry-run | Preview only. Print proposed changes; do not write. | |
all | Full audit against the current codebase (no diff). Equivalent to audit mode for sync only. |
Phases
- Detect changes (see
rules/drift-detection.md§1 forgit diffcommands and the area-classification table). - Read current docs — every
CLAUDE.md,.claude/rules/*.md,docs/**/*.md,AGENTS.md. Build a map of what's documented today. - Drift analysis. Run deterministic checks first (dead paths,
removed commands, broken
@imports); then semantic checks (architecture claims, style claims, stale gotchas). Seerules/drift-detection.md. - Holistic analysis (if
holisticwas passed) — seerules/drift-detection.md§4. - Generate updates. Each proposed change is classified by content
kind, routed via
content-routing.md, and placed viaplacement-resolver.md. Priority tiers: P0 stale fixes apply immediately; P1 new patterns ask for confirmation; P2 polish skips unless requested. - Apply (or dry-run report).
- Summarize. Per-file table of changes plus a list of areas intentionally skipped because Claude can infer them.
Sub-modes inside update
update nested <dir>— seerules/placement-resolver.md§4.update pattern <glob>— seerules/placement-resolver.md§5.
Mode: readme — write or audit a README
Use when the README is the asset under work. Two sub-modes detected from context:
- No README exists or user says "write a README" → scaffold mode.
- README exists and user says "audit / review / improve" → audit mode.
Scaffold sub-mode
- Detect tech stack and project type (library / app / monorepo root / CLI tool).
- Render
templates/readme.mdwith the structure from the standard-readme spec — seerules/readme.mdfor the mandatory section order and the badge selection rules. - Apply the above-the-fold checklist before declaring done — the first viewport must carry name, one-line tagline, hero visual or demo, primary CTA badges, and one install line.
Audit sub-mode
- Read the README.
- Run the README audit rubric in
rules/readme.md§4. Score each item PASS / WARN / FAIL with one line of evidence. - End with a prioritized Top 3 fixes list — biggest reader-time wins first.
Mode: audit — comprehensive documentation health check
Read-only by default. Produces a structured report covering every doc surface.
Phases
- Inventory. List every documentation file across the repo.
- Per-surface audits:
CLAUDE.mdand.claude/rules/— seerules/claude-md.md§5.README.mdand any per-package READMEs — seerules/readme.md§4.docs/tree — seerules/docs-folder.md§3.
- Drift checks — full set from
rules/drift-detection.md§3 (dead paths, removed commands, broken@imports, hot-path leakage). - CI lint coverage — see
rules/maintenance.mdfor the recommendedmarkdownlint/ Vale / alex / lychee stack. - Prioritized report. P0 (stale / wrong) → P1 (missing high-value content) → P2 (polish).
If the user asks to apply fixes, route to update mode with the audit findings as the input.
Definition of Done
Each mode has a closing gate. Treat any unchecked item as a defect.
init
- Tier picked and the per-tier files matrix matches the output.
-
CLAUDE.md≤ 200 lines. -
README.mdfirst viewport (~600 px) carries name, tagline, hero, primary badges, install line. -
docs/tree (medium / large only) hasREADME.md,architecture.md,contributing.md, and (large only) per-package nested folders. -
.gitignorecontains.claude/settings.local.json. - No content is duplicated across
CLAUDE.md,README.md, anddocs/.
update
- Every P0 drift item from
drift-detection.md§3 either fixed or explicitly skipped with reason. - Every new rule placed via
placement-resolver.md— no pattern-scoped rule landed in rootCLAUDE.md. - Every
@importadded resolves to a real file. - No content moved into
docs/while a duplicate remains inCLAUDE.md(or vice versa). - Summary table delivered.
readme
- All mandatory standard-readme sections present in correct order.
- Above-the-fold checklist passes.
- Badge count between 0 and 10, and every badge represents signal (build / version / license / coverage / security / contributors), not noise (stars / forks / "made with love").
- Every relative link resolves.
audit
- Every file in the inventory has a row in the report (PASS / WARN / FAIL or N/A).
- Top 3 fixes list at the end, ordered by reader-time impact.
- No file mutations —
auditis read-only.
Core Principles
- Right surface, right cost.
CLAUDE.mdis auto-loaded — every line is a recurring token cost.README.mdis read once by humans evaluating the project.docs/is loaded on demand. Route by these costs, not by what feels natural to write. - Innermost-wins. Nested
CLAUDE.mdfiles load only when the agent is in that subtree. A rule aboutpackages/foo/**placed inpackages/foo/CLAUDE.mdcosts zero tokens for someone inpackages/bar/. The same rule in root costs everyone, every turn. - Be prescriptive, not descriptive. Tell the agent what to do; do not explain concepts. Decision tables and numbered lists beat prose.
- Each document serves exactly one Diátaxis quadrant. Tutorial or how-to or reference or explanation. If a doc serves two, split it.
- Never duplicate facts across surfaces. Pick one owner; link from the others. Duplicates always drift.
- Test the docs by removal. "Would removing this cause Claude or a reader to make a mistake?" If no, delete it.
Anti-patterns (one-liner — full list in rules/ per surface)
CLAUDE.mdover 200 lines (Anthropic's own threshold — adherence drops).- Pattern-scoped rule placed in root
CLAUDE.mdinstead of.claude/rules/withpaths:. - README wall-of-badges (>10 badges); TOC for a 60-line README.
docs/files unreferenced from anywhere (orphans).- Same fact written in
CLAUDE.mdanddocs/— one will drift. - Narrative paragraphs ("we picked X because Y, the system grew as Z…") in
CLAUDE.mdinstead ofdocs/. - Marketing prose ("blazingly fast," "simply," "easily") with no benchmark.
- README API reference dump — move to
docs/. - Backslash paths anywhere.
- Time-sensitive claims ("after August 2025…") in any surface.
Cross-tool note: AGENTS.md
agents.md is the cross-tool open spec read by
Codex CLI, Cursor, Aider, Devin, GitHub Copilot, Gemini CLI, and others.
Claude Code reads CLAUDE.md, not AGENTS.md directly.
Two interop options:
- Symlink —
ln -s CLAUDE.md AGENTS.md(simplest; one source of truth). @import— keep both files but haveCLAUDE.mdstart with@AGENTS.mdand put shared content inAGENTS.md.
For mixed-tool teams, prefer the symlink.
For Claude-Code-first teams with cross-tool readers as secondary, prefer the @import.
See rules/claude-md.md §6 for the trade-offs.