README Reviewer & Generator
Analyze a codebase and produce a high-quality README.md that follows industry best practices.
Philosophy
A README is the front door to a project. It should answer five questions in under 60 seconds:
- •What does this project do?
- •Why does it exist (and why should I care)?
- •How do I get it running?
- •How do I use it?
- •How can I contribute or get help?
Everything else is secondary. The skill prioritizes accuracy over boilerplate — every claim in the README must be verifiable from the codebase.
Workflow
Phase 1 — Deep Scan
Before writing a single line of the README, gather facts. Do NOT hallucinate features or commands. Every statement must come from the codebase.
# 1. Project structure overview find . -maxdepth 3 -type f | head -80 ls -la # 2. Package manifest & dependencies cat package.json 2>/dev/null # Node.js cat Cargo.toml 2>/dev/null # Rust cat pyproject.toml setup.py setup.cfg requirements.txt 2>/dev/null # Python cat go.mod 2>/dev/null # Go cat Gemfile 2>/dev/null # Ruby cat composer.json 2>/dev/null # PHP cat pom.xml build.gradle 2>/dev/null # Java/Kotlin # 3. Available scripts & entry points # Node: extract "scripts" from package.json # Python: look for __main__.py, cli.py, manage.py, app.py # Rust/Go: look for main.rs / main.go # 4. Config files that reveal tooling ls .github/workflows/ 2>/dev/null # CI/CD cat Dockerfile docker-compose.yml 2>/dev/null # Docker cat .env.example .env.sample 2>/dev/null # Environment vars cat Makefile 2>/dev/null # Make targets cat tsconfig.json 2>/dev/null # TypeScript config cat .eslintrc* .prettierrc* 2>/dev/null # Linting # 5. Existing documentation cat README.md 2>/dev/null cat CONTRIBUTING.md 2>/dev/null cat LICENSE* 2>/dev/null cat CHANGELOG.md 2>/dev/null ls docs/ 2>/dev/null # 6. Tests ls tests/ test/ __tests__/ spec/ 2>/dev/null grep -r "test" package.json 2>/dev/null | head -5 # 7. Git info (if available) git remote -v 2>/dev/null git log --oneline -5 2>/dev/null
Extract from the scan:
| Fact | Source |
|---|---|
| Project name | Directory name, package manifest name field |
| One-line description | Manifest description, or infer from code |
| Language & runtime | File extensions, manifest, lock files |
| Framework / major deps | Manifest dependencies |
| Install command | Manifest scripts, Makefile, Dockerfile |
| Run / start command | scripts.start, scripts.dev, entry point |
| Test command | scripts.test, pytest, cargo test, etc. |
| Build command | scripts.build, Makefile, Dockerfile |
| Environment variables | .env.example, config files, code references |
| CI/CD | .github/workflows/, .gitlab-ci.yml, etc. |
| License | LICENSE file, manifest license field |
| Existing docs quality | Current README completeness and accuracy |
Phase 2 — Assess (if updating existing README)
If a README already exists, evaluate it against the quality checklist (see below). Identify:
- •Missing sections — required sections that don't exist
- •Stale information — commands or versions that don't match the current codebase
- •Inaccurate claims — features described that don't exist in code
- •Poor structure — walls of text, missing headers, broken links
- •Missing quick-start — no way for a newcomer to get running fast
Present findings to the user as a brief assessment before rewriting.
Phase 3 — Write / Rewrite
Generate the README using the structure below. Adapt sections to the project type — not every project needs every section. A 50-line CLI tool doesn't need an architecture diagram.
README Structure (Canonical Order)
Use this as the reference structure. Include sections that apply; skip those that don't.
1. Title & Badges (required)
# Project Name [](license-url) [](ci-url) [](package-url)
- •Project name as H1 — must match the repo/package name
- •Badges: only include badges that are real and resolve (CI status, version, license, coverage)
- •Do NOT invent badge URLs. Only add badges if you can determine the actual URLs from the CI config, package registry, etc.
2. One-liner / Tagline (required)
A single sentence (or short paragraph) explaining what this project does in plain language. No jargon. A non-technical person should understand the gist.
3. Key Features (if applicable)
A short bullet list (3–7 items) of what makes this project useful or unique. Only list features that actually exist in the codebase.
4. Quick Start (required for apps/tools)
The fastest path from zero to working. Should be copy-pasteable.
## Quick Start \```bash git clone <repo-url> cd <project> npm install npm run dev \```
- •Use the actual commands from the project (verify they exist in package.json / Makefile / etc.)
- •Include prerequisite versions if they matter (e.g., "Requires Node.js >= 18")
- •If env vars are needed, show how to set them up
5. Installation (required)
Detailed installation instructions. May overlap with Quick Start for simple projects.
- •System prerequisites (runtime versions, OS requirements, external services)
- •Package manager install command (npm, pip, cargo, etc.)
- •Building from source (if applicable)
- •Docker-based setup (if Dockerfile exists)
6. Usage (required)
How to actually use the project after installation.
- •CLI tools: show 2–3 common command examples with expected output
- •Libraries/packages: show import + basic usage code snippet
- •APIs: show a sample request/response
- •Web apps: describe how to access (URL, default credentials if any)
7. Configuration (if applicable)
Document all configuration options:
- •Environment variables (table format: name, description, default, required?)
- •Config files and their format
- •Command-line flags
If an .env.example exists, reference it and explain each variable.
| Variable | Description | Default | Required | |----------|-------------|---------|----------| | `DATABASE_URL` | PostgreSQL connection string | — | Yes | | `PORT` | Server port | `3000` | No |
8. Project Structure (if applicable)
A simplified directory tree showing the most important files/folders. Useful for medium-to-large projects. Keep it under 20 lines.
## Project Structure \``` ├── src/ │ ├── index.ts # Entry point │ ├── routes/ # API route handlers │ └── models/ # Database models ├── tests/ # Test suite ├── docker-compose.yml # Local development stack └── package.json \```
9. API Reference / Documentation (if applicable)
- •For libraries: link to full API docs or include a summary of main exports
- •For APIs: link to OpenAPI/Swagger docs or list key endpoints
- •For complex projects: link to a
docs/folder or external site
10. Development (recommended)
How to contribute as a developer:
- •How to run in development mode
- •How to run tests
- •How to lint / format
- •How to build for production
- •Branch/PR conventions (if described in CONTRIBUTING.md, link to it)
11. Deployment (if applicable)
- •How to deploy (platform-specific instructions if CI/CD configs exist)
- •Docker deployment
- •Environment-specific notes
12. Tech Stack (optional)
A brief list of the main technologies used. Useful for larger projects.
13. Roadmap (optional)
Link to issues/milestones or list planned features. Only if the project actively maintains one.
14. Contributing (recommended)
- •Link to CONTRIBUTING.md if it exists
- •Or a brief "PRs welcome" with basic guidelines
- •How to report bugs
15. License (required if LICENSE file exists)
State the license and link to the LICENSE file.
## License This project is licensed under the MIT License — see the [LICENSE](LICENSE) file for details.
16. Acknowledgments / Credits (optional)
Credit major dependencies, inspiration, or contributors.
Quality Checklist
After writing the README, verify every item:
Accuracy
- • Every command shown actually works (exists in scripts/Makefile/etc.)
- • Version requirements match what's in the codebase
- • Features listed actually exist in the code
- • Environment variables match
.env.exampleor code references - • License matches the actual LICENSE file
- • No placeholder text remains (no "TODO", "lorem ipsum", "[your-name]")
Completeness
- • A newcomer can go from zero to running in under 5 minutes with only the README
- • All prerequisites are listed
- • Both install AND usage are covered
- • If Docker is available, Docker instructions are included
Style
- • Title is H1, sections are H2, subsections are H3 (consistent hierarchy)
- • Code blocks specify the language (
bash,python, etc.) - • No walls of text — paragraphs are short, lists are used for scanability
- • Links work (relative links to files in the repo use correct paths)
- • Consistent formatting (backticks for inline code, bold for emphasis)
- • No emojis in section headers (keep it professional unless the project's style uses them)
Tone
- • Written for the reader, not the author
- • Concise — no filler phrases ("In order to", "Please note that")
- • Technical but approachable
- • Active voice preferred
Project Type Adaptations
Not all READMEs are equal. Adapt based on what the project is:
Library / Package
- •Emphasize: Installation via package manager, API usage examples, TypeDoc/Sphinx links
- •De-emphasize: Deployment, project structure
CLI Tool
- •Emphasize: Installation, command examples with output, flags/options table
- •De-emphasize: API reference, project structure
Web Application
- •Emphasize: Quick start with Docker, environment setup, screenshots/demo link
- •De-emphasize: API usage examples (unless it's also an API)
API Service
- •Emphasize: Authentication, endpoint documentation, request/response examples
- •De-emphasize: UI screenshots
Monorepo
- •Emphasize: Project structure, per-package summaries with links, shared tooling
- •De-emphasize: Single install command (may need per-package)
Anti-Patterns to Avoid
These are common README mistakes. Never do these:
- •Invented commands — Never write
npm run deployif it doesn't exist in package.json - •Aspirational features — Only document what exists, not what's planned
- •Giant tables of contents — Only add a TOC if the README exceeds ~200 lines
- •Badge overload — Max 5-6 badges. Only include ones that are real and useful
- •Undated screenshots — Screenshots get stale. Mention the version they depict
- •Copy-paste from other projects — Every sentence must be specific to THIS project
- •"This project is a..." openers — Start with what it does, not what it is
- •Placeholder sections — Never leave a section that says "Coming soon" or "TBD"
Output Format
The final output should be:
- •Assessment (if updating): A brief summary of what was found and what's changing
- •The README.md file: Written to the project root, ready to commit
- •Verification notes: Any commands you couldn't verify, assumptions made, or suggestions for the user to confirm
Always write the README as a file (not just in chat) so the user can review and use it directly.
Example Assessment Output
When reviewing an existing README, present findings like this:
## README Assessment **Overall**: The README covers basics but has gaps that would frustrate a new contributor. ### ✅ What's Good - Clear project description - License section present ### ⚠️ Issues Found - Install instructions reference `yarn` but the lock file is `pnpm-lock.yaml` - Missing: environment variable documentation (project uses 8 env vars) - `npm run test` is listed but the actual script is `npm run test:unit` - No quick-start section — takes 4 scrolls to find how to run locally ### 📋 Sections to Add - Quick Start - Configuration / Environment Variables - Project Structure (15+ directories with no map) Shall I proceed with the rewrite?