readme-best-practices
Skill275 starsChanged 35 days agoApache-2.0View on GitHub
Structure, tone, and content conventions for writing effective project README files, covering hooks, quick starts, feature presentation, badges, and common documentation sections. Use when writing a new README, rewriting an existing one, or reviewing README quality for a repository, library, or CLI tool.
- Installs packages
2 other projects use a version of this.
Adopted by
Most recently taken up by
- d-o-hub/github-template-ai-agentstheir own version, first seen Nov 3, 2026
- rolandtolnay/llm-toolkittheir own version, first seen Oct 11, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- d-o-hub/github-template-ai-agents★ 2same name
- rolandtolnay/llm-toolkit★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository264 other files it gives its agents.
- accessibility-a11ySkill
- alpine-jsSkill
- analytics-data-analysisSkill
- android-developmentSkill
- angular-developmentSkill
- angularSkill
- anime-jsSkill
- anthropic-claude-developmentSkill
- api-developmentSkill
- apollo-graphqlSkill
- aspnet-coreSkill
- astroSkill
- auth0-authenticationSkill
- autogen-developmentSkill
- automl-hyperparameter-optimizationSkill
- aws-developmentSkill
- azureSkill
- backend-developmentSkill
- bash-scriptingSkill
- beautifulsoup-parsingSkill
- bitbucket-workflowSkill
- blazorSkill
- blender-python-addonSkill
- blockchainSkill
- bootstrapSkill
- business-central-developmentSkill
- cheerio-parsingSkill
- chrome-extension-developmentSkill
- ci-cd-best-practicesSkill
- clean-architectureSkill
- clean-codeSkill
- clerk-authenticationSkill
- cloudflare-developmentSkill
- computer-vision-opencvSkill
- convexSkill
- cppSkill
- c-sharpSkill
- cssSkill
- cypressSkill
- data-analysis-jupyterSkill
- data-analystSkill
- data-jupyter-pythonSkill
- deep-learning-pythonSkill
- deep-learning-pytorchSkill
- deep-learningSkill
- deno-typescriptSkill
- design-systemsSkill
- devopsSkill
- django-pythonSkill
- django-rest-api-developmentSkill
- dockerSkill
- dotnetSkill
- drizzle-ormSkill
- drupal-developmentSkill
- elasticsearch-best-practicesSkill
- electron-developmentSkill
- elixirSkill
- embedded-stm32Skill
- esbuild-bundlerSkill
- ethereumSkill
- The first 60 shown.
The file
Show its rules and text
We split this skill into the rules it gives an agent
16 rules. About 0 are common, 12 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈12
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 25
Start with a bold one-liner saying what the project does and why someone should care — not "A tool that...", a punchline.
- Distinctive: line 26
Put a working code example in the first 5 lines.
- Distinctive: line 27
Never open with "In today's fast-paced world..." or similar throat-clearing.
- Distinctive: line 28
Never close with "Happy coding!" or similar filler sign-offs.
- Distinctive: line 29
Avoid AI-marketing words: "seamless", "robust", "comprehensive", "cutting-edge", "powerful", "effortless".
- Very specific: line 50
Use feature tables (two columns: feature, description) instead of Feature: bullet lists — tables scan faster than repeated bold-prefix …
- Distinctive: line 62
Must be copy-paste ready: zero to running in 30 seconds.
- Very specific: line 63
Do not prefix shell commands with $ — it breaks copy-paste.
- Distinctive: line 82
Use headings to let readers jump straight to the section they need.
- Distinctive: line 83
Prefer runnable examples over prose descriptions of behavior wherever both are possible.
- Very specific: line 84
Keep line-level formatting consistent: one fenced code block per language/command, explicit language tags (
bash ,json ) for syntax … - Distinctive: line 88
Use badges for objective, machine-checkable facts: CI status, published version, license, downloads, coverage.
- Distinctive: line 89
Keep the badge row short — 3-6 badges.
- Very specific: line 94
Check that referenced assets (demo.gif, screenshots) actually exist on disk before adding image links — a broken image in the first screen …
- Distinctive: line 95
Verify internal anchor links (table of contents, "see Configuration below") resolve to real headings.
- Distinctive: line 96
Prefer relative paths for repo-local assets so they render correctly on the git host and in package registries alike.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
README Best Practices
This skill covers how to write a README that reads like a landing page rather than an API reference — the reader decides whether to keep reading within 3-5 seconds, so the first screen has to earn the rest.
Workflow for Writing a README
- Draft the one-liner — Write a bold, specific sentence stating what the project does and why someone should care. Avoid "A tool that..."; aim for a punchline.
- Write a working code example first — Put a copy-pasteable example in the first 5-10 lines of content, before installation instructions. Show the value proposition immediately.
- Add badges — Build status, version, license, and coverage badges directly under the title, if the project has CI/publishing set up.
- Write Quick Start — Zero-to-running in under 30 seconds, with no placeholder values the reader has to mentally substitute.
- Fill in supporting sections — Features, Usage, Configuration, Contributing, License — using the structure below, only including sections that carry real information.
- Verify every asset and link — Confirm referenced images (screenshots, demo.gif) exist on disk and that internal links resolve before publishing.
- Read it cold — Reread the first screen as if seeing the project for the first time; cut anything that doesn't help a decision to keep reading or stop.
Opening Hook
- Start with a bold one-liner saying what the project does and why someone should care — not "A tool that...", a punchline.
- Put a working code example in the first 5 lines. Show the value proposition immediately, before explaining installation.
- Never open with "In today's fast-paced world..." or similar throat-clearing.
- Never close with "Happy coding!" or similar filler sign-offs.
- Avoid AI-marketing words: "seamless", "robust", "comprehensive", "cutting-edge", "powerful", "effortless". State what it does instead of how impressive it sounds.
Standard Structure
A typical README benefits from these sections, roughly in this order — include only the ones that add real information for this project:
- Title + one-liner — project name and the bold hook sentence.
- Badges — build status, latest version, license, test coverage.
- Quick demo — a code snippet, GIF, or screenshot showing the thing working.
- Features — a two-column table, not a wall of bullets (see below).
- Installation — the exact command(s) to install, per package manager if there's more than one.
- Quick Start / Usage — copy-paste-ready minimal example, then a couple of more advanced examples.
- Configuration — options, environment variables, config file format, with defaults noted.
- API Reference (or a link to one) — for libraries with a non-trivial public surface.
- FAQ / Troubleshooting — the 3-5 questions people actually ask in issues.
- Contributing — how to set up the dev environment, run tests, and submit a PR; link to
CONTRIBUTING.mdif it exists. - License — name and link to the license file.
- Author / Acknowledgments — credit maintainers and major dependencies.
Feature Presentation
- Use feature tables (two columns: feature, description) instead of
**Feature:**bullet lists — tables scan faster than repeated bold-prefix bullets.
| Feature | Description |
|---|---|
| Zero-config | Works out of the box with sensible defaults |
| Streaming | Handles gigabyte-scale files without loading them into memory |
| Type-safe | Full TypeScript definitions, no `any` in the public API |Quick Start Requirements
- Must be copy-paste ready: zero to running in 30 seconds.
- Do not prefix shell commands with
$— it breaks copy-paste. - Show the install command and the minimal usage example together, not split across distant sections.
npm install awesome-lib
awesome-lib run --input data.csv --output report.jsonimport { parse } from "awesome-lib";
const result = parse("data.csv");
console.log(result.summary);Prose and Formatting
- Vary sentence length and structure — mix one-liners with short paragraphs and tables. Walls of same-length bullets read as filler.
- Use headings to let readers jump straight to the section they need; don't force a linear read.
- Prefer runnable examples over prose descriptions of behavior wherever both are possible.
- Keep line-level formatting consistent: one fenced code block per language/command, explicit language tags (
```bash,```json) for syntax highlighting.
Badges
- Use badges for objective, machine-checkable facts: CI status, published version, license, downloads, coverage.
- Keep the badge row short — 3-6 badges. A wall of badges is as noisy as a wall of bullets.
- Common sources: shields.io for custom badges, the CI provider's own badge markdown, npm/PyPI's official badge snippets.
Assets and Links
- Check that referenced assets (
demo.gif, screenshots) actually exist on disk before adding image links — a broken image in the first screen kills credibility instantly. - Verify internal anchor links (table of contents, "see Configuration below") resolve to real headings.
- Prefer relative paths for repo-local assets so they render correctly on the git host and in package registries alike.
Author / Contact Section
- Include a visual card or badge for the author/maintainer rather than plain text like "Made by username" — a GitHub profile badge, a small avatar + link, or a sponsor button reads as more intentional.
- For multi-maintainer projects, list maintainers with their role or area of ownership rather than a flat name list.
Common Mistakes to Avoid
- Leading with installation instead of value — readers don't know why they should install it yet.
- Documenting every configuration option in prose instead of a table.
- Letting the README drift from the actual CLI/API surface — stale examples that no longer run are worse than no examples.
- Mixing marketing language ("blazing fast", "enterprise-grade") with technical documentation — pick one register and stay technical.
- Duplicating full API docs in the README when a generated reference (TypeDoc, Sphinx, godoc) already exists — link to it instead.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

