readme-writing · git:20260921.b628018 · 2026-09-21 · sha256 665863b1b5efe31d
readme-writing git:20260921.b628018A
Immutable. This exact content is served forever at /api/v1/blob/665863b1b5efe31d.
--- name: readme-writing description: "Write or restructure a README that gets a reader from landing to first success in minutes: a one-line purpose, a working quick start verified against the actual code, then usage, configuration, and contribution pointers in the order a new user needs them, with nothing the code contradicts. Reads the repository first and never documents behaviour it has not confirmed. Use when a project has no README, when the README has drifted from the code, or before publishing a package or repository." argument-hint: "(optional) the audience (users, contributors, both) and anything the README must cover" --- A README is the front door. Its first screen must answer three questions: what is this, is it for me, how do I try it. Everything after that is in order of how soon a new user needs it. The README is verified against the code, not written from memory of the code. ## Read before writing 1. The manifest (`package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`): name, version, entry points, scripts, dependencies, engines. 2. The entry point and the public surface: CLI flags (`--help` output if it runs), exported functions, routes, config schema. 3. Existing docs, `CONTRIBUTING`, `LICENSE`, CI config, examples directory, tests (they show real usage). 4. Run the quick start you intend to document. If it does not work, the README says what actually works. ## Structure ```markdown # name One sentence: what it does and for whom. (Badges on the next line, at most four: CI, version, license, one more.) Two or three sentences: the problem it solves and the one thing that distinguishes it. Optional: a screenshot or a 10-line example that shows the payoff. ## Quick start Prerequisites in one line (runtime version, accounts, keys). The minimal commands, copy-pasteable, that produce a visible result. Nothing optional here. What the user should see when it worked. ## Usage The three to five most common tasks, each: one sentence, one code block, one sentence on the result. Link to full reference docs for the rest. ## Configuration Table: option, env var or flag, default, what it does. Only options a user will actually set. ## How it works (optional) Three to six sentences or a diagram, for the reader deciding whether to trust or extend it. ## Development Clone, install, test, lint, in four commands. Link to CONTRIBUTING for the rest. ## License ``` Omit a section rather than fill it with filler. A library README leads with the API example; a CLI README leads with the command; a service README leads with the deploy or run command. ## Rules - **Verify every command** by running it (or by reading the script it invokes when running is not possible) and say the runtime version it was verified with. - **Match the manifest**: the install command uses the real package name and manager; scripts named in the README exist in the manifest. - **No aspirational features.** If it is planned, it goes in a roadmap section or an issue, not in Usage. - **Sentence case headings**, short paragraphs, no em dashes, no "simply", no "just". - **Keep the top stable**: the first screen changes rarely; volatile detail (options, versions) lives lower or in generated sections between markers so a script can update it. - **Badges are signals, not decoration**: a red CI badge on the README is honest; ten badges are noise. - **Link, do not duplicate**: the changelog, the API reference, and the contribution guide each live in one place. - Run `humanize` on the prose before returning. ## Restructuring an existing README 1. Inventory: list every section and what question it answers. 2. Check each claim against the code; mark stale ones. 3. Reorder by the new user's timeline; move contributor material below user material. 4. Cut what the code no longer does; move history to the changelog. 5. Keep the URL anchors people may have linked (`#install`, `#usage`) even when renaming headings, via a short redirect line if needed. Report what was removed and why, separately from the new text.