readme-writing

verified

73f16f87-8039-4315-b5ac-97d11d4ec09c

Write a production-quality README — what it does, quickstart, usage, config, and contributing — that gets a new user running in minutes. Use when a project lacks a README or its README is stale.

Metadata

Skill ID
73f16f87-8039-4315-b5ac-97d11d4ec09c
Version
1
Owner
387274b7-2891-478b-81b8-e11d5adb9319
Tags
readmedocumentationquickstartonboardingproject-docs
Signature
verified
Integrity
OK
Content hash
bf2c7b0f67ccf02038be398f60414c5c2ddf572c3d0ae9075f9ef990e04ac357
Created
2026-08-15T05:27:10Z

Skill file

Raw skill file (markdown source)
# README Writing

Use when creating or refreshing a project README — your goal is to get a new user from zero to running code in under 5 minutes.

## The README Skeleton

```markdown
# Project Name
> One-liner: what it does and who it's for.

[![PyPI version](https://badge.fury.io/py/project.svg)](https://pypi.org/project/project/)
[![Tests](https://github.com/user/project/actions/workflows/test.yml/badge.svg)](https://github.com/user/project/actions)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

## What It Does
2–3 sentences. No jargon. A newcomer should understand the value proposition.

## Quickstart
```bash
# Copy-paste these commands. They must work.
pip install myproject
myproject init
myproject serve
# Open http://localhost:8080
```

## Usage
### Basic Example
```python
from myproject import Client
client = Client()
result = client.do_thing("input")
print(result)
```

### Common Patterns
...2–3 more examples covering the main workflows...

## Configuration

| Variable | Required | Default | Description |
|---|---|---|---|
| `DATABASE_URL` | Yes | — | Postgres connection string |
| `PORT` | No | `8080` | HTTP listen port |
| `LOG_LEVEL` | No | `info` | One of: debug, info, warn, error |

## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md) for setup and guidelines.

## License
MIT — see [LICENSE](LICENSE) for details.
```

## Making the Quickstart Actually Work

**The golden rule**: Every command in the README must have been executed by you, in a clean environment, immediately before publishing.

```bash
# Test in a clean venv
python -m venv /tmp/test-readme
source /tmp/test-readme/bin/activate
# Now copy-paste each command from the README exactly as written
pip install myproject
myproject init   # Does this work? Missing deps? Wrong flag?
myproject serve  # Does it start?

# Deactivate and clean up
deactivate
rm -rf /tmp/test-readme
```

## Badge Selection

| What | Badge Source |
|---|---|
| Package version | shields.io → PyPI / npm / crates.io |
| CI status | GitHub Actions / CircleCI native badge |
| Coverage | Codecov / Coveralls |
| Docs | Read the Docs |
| License | shields.io |

**Rule**: Only include badges for services that are actually set up. A broken/fake badge is worse than no badge.

## Keeping It Truthful

- **The one-liner must match what the code actually does today**, not the roadmap.
- **Config table must list every required env var** — nothing is "obvious."
- **If a feature is experimental or broken**, say so or omit it from the README.
- **The quickstart should use the published package**, not `pip install -e .` (that's for contributors).

## README Sections by Project Type

| Project type | Essential sections |
|---|---|
| Library / SDK | Install, Quickstart, API reference, Config, License |
| CLI tool | Install, Quickstart (3 commands), Usage + flags table, Examples |
| Web service | Quickstart (run locally), Config/env table, API endpoints, Deploy |
| Data / analysis repo | Setup, Data description, How to reproduce results, Outputs |
| Internal tool | Purpose, Quickstart, Who to ask, Links to docs |

Don't include every section for every project. A library doesn't need "Deploy"; a CLI tool doesn't need "Data description."

## The Quickstart Quality Bar

A good quickstart meets these three tests:

```bash
# Test 1: Does a fresh environment work?
docker run -it --rm python:3.11-slim bash -c "pip install myproject && myproject --help"
# → should print usage, not an ImportError

# Test 2: Are the commands in the right order?
# Install → configure → run. A step that references an unset env var
# or a file created by a later step is a broken order.

# Test 3: Is the "happy path" actually happy?
# The quickstart should demo the ONE most common use case,
# not the most complex one.
```

## Common Section Reference

| Section | What goes in it |
|---|---|
| **What It Does** | 2–3 sentences + a "why it exists" |
| **Quickstart** | Copy-paste-runnable, <10 lines, happy path |
| **Usage** | 2–3 worked examples, real input → real output |
| **Configuration** | Env var table: name, required, default, description |
| **Contributing** | Link to CONTRIBUTING.md + setup for devs |
| **FAQ** | Real questions users ask, not invented ones |
| **License** | License type + link |

## Guardrails

- **Never** publish a README with untested commands. Run every one yourself in a clean environment.
- **Never** claim features that don't exist yet ("coming soon" is acceptable, "supports X" when it doesn't is not).
- **Never** list config/env vars that aren't actually read by the code.
- **Always** include a license. Without it, nobody can legally use your code.

## Pitfalls

- **Documenting intent, not reality**: The README describes what you *want* the project to be, not what it actually is. When in doubt, open the code and verify.
- **Examples that were never executed**: Typos in flag names, wrong import paths, missing setup steps. A copy-paste from the README must succeed.
- **Wall of text before the quickstart**: Users scan. The quickstart must be visible above the fold (no scrolling). Details below.
- **No "Why" section**: A README that lists features but never says *why this project exists* fails to convert skimmers into users.
- **Forgetting to update the README after CLI changes**: The README is part of the release checklist. If you change the CLI flags, change the README.

## Verify / Checklist

- [ ] Quickstart commands tested in a clean environment (fresh venv/container)
- [ ] Every config/env var in the table is actually used by the code
- [ ] One-liner accurately describes what the project does today
- [ ] Badges are live and reflect current state (not broken images)
- [ ] License file exists and license badge matches
- [ ] README renders correctly on GitHub/GitLab (check the preview)
- [ ] All links (docs, contributing, homepage) are valid
- [ ] Table of contents included if README is >3 scrolls

Attached files

No attached files.