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".
65
82%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
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.
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:
./CLAUDE.md does not exist → init../README.md does not exist and the user mentioned "README" → readme.update.State the detected mode in one line before continuing:
Mode: update
Target: this repoRegardless 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.
init — bootstrap docs from scratchUse when a project has no Claude configuration and (optionally) no documentation. Produces a tiered setup sized to the project's complexity.
CLAUDE.md, .claude/, AGENTS.md,
README.md, docs/. If any exist, ask via AskUserQuestion:
Overwrite / Merge missing / Skip / Abort.references/archetypes.md
for the small / medium / large thresholds and the per-tier file matrix.nx.json,
turbo.json, pnpm-workspace.yaml).templates/claude-md.md,
templates/readme.md, and the docs/* templates listed in
rules/docs-folder.md..gitignore. Add .claude/settings.local.json idempotently.initCLAUDE.md /
.claude/rules/; narrative goes to docs/; marketing goes to README.md.
See rules/content-routing.md.rules/readme.md for the
above-the-fold checklist.CLAUDE.md, README.md, and docs/.
Pick one owner; link from the others.update — sync docs with the codebaseUse 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 | 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. |
rules/drift-detection.md §1 for git diff
commands and the area-classification table).CLAUDE.md, .claude/rules/*.md,
docs/**/*.md, AGENTS.md. Build a map of what's documented today.@imports); then semantic checks (architecture
claims, style claims, stale gotchas). See rules/drift-detection.md.holistic was passed) — see
rules/drift-detection.md §4.content-routing.md, and
placed via placement-resolver.md.
Priority tiers: P0 stale fixes apply immediately; P1 new patterns ask
for confirmation; P2 polish skips unless requested.updateupdate nested <dir> — see rules/placement-resolver.md §4.update pattern <glob> — see rules/placement-resolver.md §5.readme — write or audit a READMEUse when the README is the asset under work. Two sub-modes detected from context:
templates/readme.md with the structure from the standard-readme
spec — see rules/readme.md for the mandatory section
order and the badge selection rules.rules/readme.md §4.
Score each item PASS / WARN / FAIL with one line of evidence.audit — comprehensive documentation health checkRead-only by default. Produces a structured report covering every doc surface.
CLAUDE.md and .claude/rules/ — see rules/claude-md.md §5.README.md and any per-package READMEs — see rules/readme.md §4.docs/ tree — see rules/docs-folder.md §3.rules/drift-detection.md §3 (dead paths, removed commands, broken @imports, hot-path leakage).rules/maintenance.md for the recommended markdownlint / Vale / alex / lychee stack.If the user asks to apply fixes, route to update mode with the audit findings as the input.
Each mode has a closing gate. Treat any unchecked item as a defect.
initCLAUDE.md ≤ 200 lines.README.md first viewport (~600 px) carries name, tagline, hero,
primary badges, install line.docs/ tree (medium / large only) has README.md, architecture.md,
contributing.md, and (large only) per-package nested folders..gitignore contains .claude/settings.local.json.CLAUDE.md, README.md, and docs/.updatedrift-detection.md §3 either fixed or
explicitly skipped with reason.placement-resolver.md — no pattern-scoped
rule landed in root CLAUDE.md.@import added resolves to a real file.docs/ while a duplicate remains in
CLAUDE.md (or vice versa).readmeauditaudit is read-only.CLAUDE.md is auto-loaded — every
line is a recurring token cost. README.md is read once by humans
evaluating the project. docs/ is loaded on demand. Route by these
costs, not by what feels natural to write.CLAUDE.md files load only when the agent
is in that subtree. A rule about packages/foo/** placed in
packages/foo/CLAUDE.md costs zero tokens for someone in
packages/bar/. The same rule in root costs everyone, every turn.rules/ per surface)CLAUDE.md over 200 lines (Anthropic's own threshold — adherence drops).CLAUDE.md instead of .claude/rules/
with paths:.docs/ files unreferenced from anywhere (orphans).CLAUDE.md and docs/ — one will drift.CLAUDE.md instead of docs/.docs/.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:
ln -s CLAUDE.md AGENTS.md (simplest; one source of truth).@import — keep both files but have CLAUDE.md start with @AGENTS.md and put shared content in AGENTS.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.
39b3f44
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.