From writing-docs
Use when writing or revising project documentation of any kind, including a README, docs site, tutorial, quickstart, how-to guide, reference page, API doc, or changelog. Applies the Diataxis framework (one mode per page), a technical-builder voice (first-person, confident, hands-on), runnable code-sample rules, quickstart and README anatomy, accessibility, and a required slop-cop prose-lint pass before you finish. Triggers on "write/rewrite/improve the docs", "write a README", "write a tutorial", "document this", "getting-started page", or any natural-language documentation task.
How this skill is triggered — by the user, by Claude, or both
Slash command
/writing-docs:writing-docsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill is opinionated and checklist-driven. Documentation is not one thing. It is four kinds of page that serve four different reader needs, and the largest source of bad docs is letting those kinds bleed into each other. Pick the mode first, write to its rules, then run the pre-merge checklist at the end. A wrong doc is worse than a missing one, because readers trust and act on it.
This skill is opinionated and checklist-driven. Documentation is not one thing. It is four kinds of page that serve four different reader needs, and the largest source of bad docs is letting those kinds bleed into each other. Pick the mode first, write to its rules, then run the pre-merge checklist at the end. A wrong doc is worse than a missing one, because readers trust and act on it.
Run slop-cop check <file> --lang=markdown on every page you touch and triage every finding: fix the genuine tells, keep deliberate voice moves. This is not optional.
Hold every draft to the Write the Docs guardrails. The docs should be skimmable, exemplary so they always show an example, consistent, current, nearby so the source sits next to the code, unique so no two sources overlap, cumulative so prerequisites come first, and complete. Prefer ARID over strict DRY. Let a task page restate a key fact instead of forcing the reader to chase a link, but never duplicate whole sections. Link instead.
Classify the page before writing a line. The mode dictates the allowed content.
| Mode | Serves | Contains | Never contains |
|---|---|---|---|
| Tutorial | Learning by doing | One guaranteed-to-work path from zero to a first result | Alternatives, options, "you could also", deep why |
| How-to | Doing one real task | The shortest correct path for a competent reader | Concept teaching, exhaustive option lists |
| Reference | Looking a fact up | Accurate, complete, neutral tables and signatures | Narrative, opinion, step-by-step |
| Explanation | Understanding | Concepts, tradeoffs, history, the why | Step-by-step instructions, first statement of a fact |
Decide by the reader's goal. Learning-by-doing with guaranteed success is a tutorial; accomplishing one real task is a how-to; a fact to look up is reference; understanding a concept is explanation. If a tutorial makes you want to explain a concept, link out to an explanation page instead of inlining it. That is the top tutorial smell.
Map repo directories to modes. getting-started/ is the single tutorial plus thin onboarding, guide/ is how-to plus a few labelled concept pages, examples/ is runnable how-to specimens, and reference/ is generated and curated facts. Do not build empty four-folder scaffolding; assign each existing page one mode.
See references/diataxis.md for the required sections per page type.
Write as a technical builder: someone who has already built the thing, explains it clearly, and has opinions about what's good and what's a mess. The voice governs narrative prose — the README pitch and why-sections, explanation pages, and the framing around tutorial and how-to steps. Procedure steps stay imperative, and reference pages stay neutral facts (see the Diataxis table above). slop-cop flags some of these devices deliberately — see the slop-cop section for how to triage.
See references/voice-and-style.md for the full list.
Keep example code in real source files that are under test, and embed it into the page instead of retyping. One source means the rendered page and the tested code cannot diverge. Make the examples run in CI so a stale example fails the build. If the page shows output, generate it by running the code.
State the run convention once and use it verbatim everywhere. For a tool distributed through uvx or pipx, every command is the full ephemeral form such as uvx <tool> ..., never the bare binary, except where a config file must hold it. Leading with the ephemeral invocation is the uv and Ruff house style.
A quickstart is a Diataxis tutorial with one language, one use case, and zero branches. State the destination and a time budget up front, as in "Write your first hook in under five minutes". End in one tangible, verifiable outcome the reader can see. Aim for first success under five minutes and at most around ten steps. Give complete copy-paste snippets that say exactly where the code goes, surface every needed value inline, and show the expected output so the reader self-verifies. Defer concepts; give the most minimal inline reason and link to depth. Test the quickstart on a clean machine each release.
Order the README broad to specific, by cognitive funnel. Lead with the title, badges, and a one-line pitch under 120 characters, then what and why, install, the smallest working example with its output, deeper usage, a documentation link, contributing, and the license as SPDX. The README is the front door, not the house. Link to the docs site for full usage and API reference; never duplicate them, so there is one source of truth. The minimum viable docs set is README, LICENSE, CONTRIBUTING, and CHANGELOG. Use relative links within the repo and badges for live status instead of prose claims.
Before you call any doc done, run it through slop-cop and triage every finding.
slop-cop check path/to/page.md --lang=markdown
Use --lang=markdown for .md, .mdx, and .qmd so code blocks, links, headings, and front matter are masked, since .qmd is not auto-detected. Cut the genuine tells: throat-clearing, hedge stacks, negation pivots, filler adverbs in procedure steps, unicode arrows (replace with words), and the leading bold from bold-first-bullet walls. The builder voice deliberately uses em-dashes, casual intensifiers, and short fragments — when slop-cop flags one, keep it if it's doing voice work and rewrite it if it's reflex. The tell isn't the device; it's the device used formulaically. A colon before a code block is fine, and table-cell and Quarto-div false positives are acceptable to leave. Run slop-cop in CI as a report, not a hard gate.
Mode-mixing; a branchy or wall-of-text quickstart; pseudocode or paste-breaking fragments; hand-typed or stale output; bare-ellipsis omissions; retyped instead of embedded examples; untested illustrative-only code; real secrets or domains in samples; hidden credentials in a quickstart; a README that duplicates the docs site; a git-log changelog; future tense or passive that hides the actor; editorial we with no shared technical reality; hedged, buildup-first prose that buries the verdict; fillers like "simply" and "just" in procedure steps; "click here" links; missing alt text; skipped heading levels; generic he or she; biased technical terms; self-referential page or section intros such as "This page explains" or "What to learn"; pre-announced structure such as "three properties follow"; pre-emptive nannying such as "be careful", "make sure", or "don't forget" without real stakes; internal, packaging, or docs-generation detail on task or reference pages; and gratuitous history or legacy references outside explanation pages and the changelog.
Run this before merging any docs change. The full version is in references/checklist.md.
slop-cop check <file> --lang=markdown findings are triaged: genuine tells fixed, deliberate voice moves consciously kept.When the project uses Great Docs with Quarto, see references/great-docs-quarto.md for the stack specifics. They cover great-docs.yml sections, the curated symbol reference from the package __init__ re-exports, Google-style docstrings on the public API only, .qmd front matter, the gd-embed marker workflow for single-sourcing example code, and building green with uv run great-docs build after uv sync --group docs.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies a firm's KYC/AML rules grid to parsed onboarding records: assigns risk rating, checks required documents, outputs rule outcomes with citations, and routes for escalation.
Generates daily or weekly digests of activity from connected sources (chat, email, docs, tasks, CRM), highlighting action items, decisions, mentions, and project updates.
npx claudepluginhub yasyf/cc-skills --plugin writing-docs