Create README and CHANGELOG
Overview
Transforms a raw repository into a well-documented project by generating professional README.md and CHANGELOG.md files based on empirical evidence from the codebase, git history, and configuration files. Every claim in the generated documentation must be traceable to a file, commit, or config in the repository.
When to Use
- When a project lacks a README or CHANGELOG.
- When existing documentation is outdated, incomplete, or inconsistent.
- Before shipping a new version to ensure the changelog is up to date.
- When restructuring a project and the existing documentation no longer reflects the architecture.
- When onboarding new contributors and the README doesn't answer "what is this, how do I run it, how do I test it?"
When NOT to Use
- API reference docs — use OpenAPI/Swagger, TypeDoc, Sphinx, or docfx instead.
- License files — copy the appropriate license text directly (MIT, Apache-2.0, etc.).
- Internal code documentation — use docstrings, JSDoc, TSDoc, or XML doc comments.
- Architecture diagrams — use the
drawio-architecture skill for visual system design.
- Agent harness setup — use
create-agent-harness for CLAUDE.md/AGENTS.md and skill scaffolding.
Process
Phase 1: Discovery (Evidence Gathering)
Before writing a single line, analyze the target repository:
Structure analysis:
- Root directory tree and top-level files (
ls -la, find . -maxdepth 2 -type f)
- Identify entry points (
main.ts, Program.cs, __main__.py, index.js)
- Detect monorepo vs. single-package layout
Stack detection:
- Node.js:
package.json (name, version, scripts, dependencies, engines)
- .NET:
*.csproj, *.sln (TargetFramework, PackageReferences, SDK version)
- Python:
pyproject.toml, setup.py, requirements.txt, Pipfile
- Java:
pom.xml, build.gradle (groupId, artifactId, Java version)
- Go:
go.mod (module path, Go version, requires)
- Rust:
Cargo.toml (name, edition, dependencies)
- Docker:
Dockerfile, docker-compose.yml (base image, exposed ports, services)
- CI/CD:
.github/workflows/, .gitlab-ci.yml, Jenkinsfile, azure-pipelines.yml
History analysis:
git log --oneline -n 50 — recent features and fixes
git tag --sort=-creatordate | head -10 — recent releases
git log --since="last tag" --oneline — unreleased changes
Existing docs:
- Current
README.md and CHANGELOG.md (if any) — reuse valid content
docs/ directory — reference but don't duplicate
LICENSE file — extract license type
Requirement: Output a "Discovery Summary" containing:
## Discovery Summary
- **Stack**: [languages, frameworks, versions]
- **Architecture**: [monorepo/single, layers, patterns]
- **CI/CD**: [platforms, pipelines, badges available]
- **Entry points**: [main files]
- **Test command**: [how to run tests]
- **Recent releases**: [last 3 tags]
- **Unreleased changes**: [commits since last tag]
- **Gaps**: [what's missing from current docs]
Wait for confirmation before proceeding to Phase 2.
Phase 2: README.md Authoring
Generate the README following this strict order. Skip sections where no evidence exists — do not invent content.
2.1 Title & Badges
- Project name from
package.json/*.csproj/pyproject.toml or directory name
- Badges: CI status (from workflow file), license (from LICENSE file), version (from package manifest), language coverage (if configured)
- Badge format:
[](link)
2.2 Project Description
- One-sentence summary (what it does, for whom)
- Rich paragraph (functional and strategic overview)
- Evidence: derive from code comments, existing docs, commit messages — never guess
2.3 Repository Structure
project-root/
├── src/ # Source code
├── tests/ # Test suite
├── docs/ # Documentation
├── .github/workflows # CI/CD pipelines
└── package.json # Node.js manifest
- One-line description per top-level directory
- Only include directories that actually exist
2.4 Tech Stack
| Layer |
Technology |
Version |
| Language |
TypeScript |
5.x |
| Framework |
Next.js |
15.x |
| Database |
PostgreSQL |
16 |
| CI |
GitHub Actions |
— |
- Versions from package manifests, not guesses
- Include runtime requirements (Node version, Python version, .NET version)
2.5 Architecture
- Layers and patterns (Clean Architecture, DDD, MVC, microservices)
- Mermaid diagram if the system has 3+ interacting components
- Evidence: derive from directory structure and dependency graph
2.6 System Flow
- Mermaid sequence/flow diagram for the main use case
- Or textual step-by-step description for simple systems
- Only include if the flow is non-obvious from the code
2.7 Getting Started
# Prerequisites
node >= 20.x
# Install
npm install
# Configure
cp .env.example .env # then edit values
# Run
npm run dev
- Prerequisites with specific versions
- Environment variables (names only, never values — link to
.env.example)
- Install and run commands from
scripts in package manifest or Makefile
2.8 Tests & Coverage
npm test # Run all tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
- Commands from package manifest scripts or Makefile
- Coverage threshold if configured (
.nycrc, jest.config, coverlet)
- Badge if coverage reporting is set up
2.9 Business & Technical Views
- Business: strategic goals, target users, problem solved
- Technical: key design decisions, trade-offs, constraints
- Only include if evidence exists in docs, comments, or commit messages
2.10 License & Status
- License type from
LICENSE file
- Project status: active, maintained, experimental, deprecated (from recent commit activity)
- Link to full license text
2.11 Links
- Internal references (
docs/, CHANGELOG.md, contributing guide)
- External references (homepage, demo, API docs) if they exist
2.12 Language routing and docs/ structure
Create a bilingual documentation layout:
README.md — English (en-us), always the primary landing page.
README.pt-br.md — Portuguese (pt-br) translation of README.md.
docs/en/ — auxiliary English documents generated from repository evidence.
docs/pt/ — same documents in pt-br.
Rules for docs/:
- Place every auxiliary document in both
docs/en/ and docs/pt/.
- Each README links to its counterpart at the top:
[Português](README.pt-br.md) in README.md; [English](README.md) in README.pt-br.md.
- Each README links to
docs/en/ or docs/pt/ for deeper docs.
- Do not duplicate
README.md content inside docs/. Put extended/auxiliary content there (e.g., ARCHITECTURE.md, CONTRIBUTING.md, API.md, INSTALL.md).
- Generate a doc only when evidence exists in the repo. Never invent auxiliary docs.
- Keep the same filename in both folders (e.g.,
docs/en/CONTRIBUTING.md and docs/pt/CONTRIBUTING.md).
Evidence-based docs to consider:
ARCHITECTURE.md — if architecture patterns or diagrams were identified.
CONTRIBUTING.md — if .github/CONTRIBUTING.md or commit conventions exist.
API.md — if the project exposes a REST/GraphQL API (link to OpenAPI/Swagger if present).
INSTALL.md — if setup has platform-specific steps beyond the README.
Rules:
- Reuse existing content where applicable — don't rewrite what's already correct
- Only include sections where concrete evidence exists
README.md is always en-us; README.pt-br.md is the pt-br translation
- Auxiliary docs live under
docs/en/ and docs/pt/ and must not duplicate README content
- Never hardcode secrets, API keys, or environment variable values
Phase 3: CHANGELOG.md Authoring
Follow the Keep a Changelog and SemVer standards:
3.1 Structure
# Changelog
All notable changes to this project are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/),
and this project adheres to [Semantic Versioning](https://semver.org/).
## [Unreleased]
### Added
- New feature X (commit abc123)
### Fixed
- Bug Y in module Z (commit def456)
## [1.2.0] - 2025-01-15
### Added
- Feature A
### Changed
- Updated dependency B to v2.0
[Unreleased]: https://github.com/user/repo/compare/v1.2.0...HEAD
[1.2.0]: https://github.com/user/repo/releases/tag/v1.2.0
3.2 Categories
Added — new features
Changed — changes in existing functionality
Deprecated — soon-to-be removed features
Removed — removed features
Fixed — bug fixes
Security — vulnerability fixes
3.3 Source
- Populate
[Unreleased] by analyzing git log --since="last tag" --oneline
- Map commit prefixes (
feat:, fix:, breaking:) to changelog categories
- For past versions, use
git log v1.1.0..v1.2.0 --oneline between tags
- If no tags exist, create
[Unreleased] from the last 50 commits
3.4 Linking
- Link version numbers to GitHub compare URLs:
https://github.com/{owner}/{repo}/compare/v{prev}...v{curr}
- Link tags to release pages:
https://github.com/{owner}/{repo}/releases/tag/v{version}
Phase 4: Delivery & Verification
4.1 Branching
Create a dedicated branch:
git checkout -b feature/{YYYYMMDD}-readme-changelog
4.2 Linting
- Run a Markdown linter if available (
markdownlint, remark, vale)
- Check for broken internal links
- Verify Mermaid diagram syntax (if included)
4.3 Commit
Use Conventional Commits:
git commit -m "docs(readme): update README and CHANGELOG
- Add tech stack table from package.json analysis
- Add getting started section with verified commands
- Populate CHANGELOG [Unreleased] from git log since v1.2.0
Generated with [Devin](https://devin.ai)"
4.4 Reporting
Provide a summary of changes:
## Summary
- **README.md**: [created/updated] — en-us primary, added sections X, Y, Z
- **README.pt-br.md**: [created/updated] — pt-br translation
- **docs/en/** and **docs/pt/**: [created/updated] — auxiliary docs by language
- **CHANGELOG.md**: [created/updated] — added [Unreleased] with N entries
- **Evidence**: all claims traced to files/commits in Discovery Summary
Do not open the PR automatically — let the human reviewer decide.
Common Mistakes
| Mistake |
Impact |
Fix |
| Inventing info |
README claims a feature that doesn't exist |
Every claim must trace to a file, commit, or config |
| Generic templates |
README doesn't reflect the actual architecture |
Use Discovery Summary to tailor every section |
| Ignoring history |
Changelog doesn't match git commits |
Use git log between tags as the source of truth |
| Hardcoded secrets |
API keys or passwords in README |
Use env var names only; link to .env.example |
| Stale badges |
CI badge points to wrong workflow |
Verify badge URL matches actual workflow filename |
| Manual PRs |
PR opened without review |
Summarize changes first; let human open the PR |
| Wrong language |
README in English for a pt-BR project |
Match the language of existing documentation |
|
Only one language |
Repository misses pt-br users |
|
Docs duplicate README |
docs/en/README.md or docs/pt/README.md copies the README |
Verification Checklist
References
1---2name: create-readme3description: Use when generating or updating professional README.md and CHANGELOG.md files for a project. Covers repository analysis, stack detection, badge generation, structure diagrams, and alignment with Keep a Changelog and SemVer standards. Do NOT use for API-reference docs (use dedicated doc tooling), licenses/governance documents, or internal code documentation (use docstrings/JSDoc). Part of the afonsoft/skills collection.4license: MIT5---67# Create README and CHANGELOG89## Overview1011Transforms a raw repository into a well-documented project by generating professional `README.md` and `CHANGELOG.md` files based on empirical evidence from the codebase, git history, and configuration files. Every claim in the generated documentation must be traceable to a file, commit, or config in the repository.1213## When to Use1415- When a project lacks a README or CHANGELOG.16- When existing documentation is outdated, incomplete, or inconsistent.17- Before shipping a new version to ensure the changelog is up to date.18- When restructuring a project and the existing documentation no longer reflects the architecture.19- When onboarding new contributors and the README doesn't answer "what is this, how do I run it, how do I test it?"2021## When NOT to Use2223- **API reference docs** — use OpenAPI/Swagger, TypeDoc, Sphinx, or docfx instead.24- **License files** — copy the appropriate license text directly (MIT, Apache-2.0, etc.).25- **Internal code documentation** — use docstrings, JSDoc, TSDoc, or XML doc comments.26- **Architecture diagrams** — use the `drawio-architecture` skill for visual system design.27- **Agent harness setup** — use `create-agent-harness` for CLAUDE.md/AGENTS.md and skill scaffolding.2829## Process3031### Phase 1: Discovery (Evidence Gathering)3233Before writing a single line, analyze the target repository:3435**Structure analysis:**36- Root directory tree and top-level files (`ls -la`, `find . -maxdepth 2 -type f`)37- Identify entry points (`main.ts`, `Program.cs`, `__main__.py`, `index.js`)38- Detect monorepo vs. single-package layout3940**Stack detection:**41- **Node.js**: `package.json` (name, version, scripts, dependencies, engines)42- **.NET**: `*.csproj`, `*.sln` (TargetFramework, PackageReferences, SDK version)43- **Python**: `pyproject.toml`, `setup.py`, `requirements.txt`, `Pipfile`44- **Java**: `pom.xml`, `build.gradle` (groupId, artifactId, Java version)45- **Go**: `go.mod` (module path, Go version, requires)46- **Rust**: `Cargo.toml` (name, edition, dependencies)47- **Docker**: `Dockerfile`, `docker-compose.yml` (base image, exposed ports, services)48- **CI/CD**: `.github/workflows/`, `.gitlab-ci.yml`, `Jenkinsfile`, `azure-pipelines.yml`4950**History analysis:**51- `git log --oneline -n 50` — recent features and fixes52- `git tag --sort=-creatordate | head -10` — recent releases53- `git log --since="last tag" --oneline` — unreleased changes5455**Existing docs:**56- Current `README.md` and `CHANGELOG.md` (if any) — reuse valid content57- `docs/` directory — reference but don't duplicate58- `LICENSE` file — extract license type5960**Requirement**: Output a "Discovery Summary" containing:61```markdown62## Discovery Summary63- **Stack**: [languages, frameworks, versions]64- **Architecture**: [monorepo/single, layers, patterns]65- **CI/CD**: [platforms, pipelines, badges available]66- **Entry points**: [main files]67- **Test command**: [how to run tests]68- **Recent releases**: [last 3 tags]69- **Unreleased changes**: [commits since last tag]70- **Gaps**: [what's missing from current docs]71```7273Wait for confirmation before proceeding to Phase 2.7475### Phase 2: README.md Authoring7677Generate the README following this strict order. Skip sections where no evidence exists — do not invent content.7879#### 2.1 Title & Badges80- Project name from `package.json`/`*.csproj`/`pyproject.toml` or directory name81- Badges: CI status (from workflow file), license (from LICENSE file), version (from package manifest), language coverage (if configured)82- Badge format: `[](link)`8384#### 2.2 Project Description85- **One-sentence summary** (what it does, for whom)86- **Rich paragraph** (functional and strategic overview)87- Evidence: derive from code comments, existing docs, commit messages — never guess8889#### 2.3 Repository Structure90```text91project-root/92├── src/ # Source code93├── tests/ # Test suite94├── docs/ # Documentation95├── .github/workflows # CI/CD pipelines96└── package.json # Node.js manifest97```98- One-line description per top-level directory99- Only include directories that actually exist100101#### 2.4 Tech Stack102| Layer | Technology | Version |103|-------|-----------|---------|104| Language | TypeScript | 5.x |105| Framework | Next.js | 15.x |106| Database | PostgreSQL | 16 |107| CI | GitHub Actions | — |108109- Versions from package manifests, not guesses110- Include runtime requirements (Node version, Python version, .NET version)111112#### 2.5 Architecture113- Layers and patterns (Clean Architecture, DDD, MVC, microservices)114- Mermaid diagram if the system has 3+ interacting components115- Evidence: derive from directory structure and dependency graph116117#### 2.6 System Flow118- Mermaid sequence/flow diagram for the main use case119- Or textual step-by-step description for simple systems120- Only include if the flow is non-obvious from the code121122#### 2.7 Getting Started123```bash124# Prerequisites125node >= 20.x126127# Install128npm install129130# Configure131cp .env.example .env # then edit values132133# Run134npm run dev135```136- Prerequisites with specific versions137- Environment variables (names only, never values — link to `.env.example`)138- Install and run commands from `scripts` in package manifest or Makefile139140#### 2.8 Tests & Coverage141```bash142npm test # Run all tests143npm run test:watch # Watch mode144npm run test:coverage # Coverage report145```146- Commands from package manifest scripts or Makefile147- Coverage threshold if configured (`.nycrc`, `jest.config`, `coverlet`)148- Badge if coverage reporting is set up149150#### 2.9 Business & Technical Views151- **Business**: strategic goals, target users, problem solved152- **Technical**: key design decisions, trade-offs, constraints153- Only include if evidence exists in docs, comments, or commit messages154155#### 2.10 License & Status156- License type from `LICENSE` file157- Project status: active, maintained, experimental, deprecated (from recent commit activity)158- Link to full license text159160#### 2.11 Links161- Internal references (`docs/`, `CHANGELOG.md`, contributing guide)162- External references (homepage, demo, API docs) if they exist163164#### 2.12 Language routing and `docs/` structure165166Create a bilingual documentation layout:167168- `README.md` — English (en-us), always the primary landing page.169- `README.pt-br.md` — Portuguese (pt-br) translation of `README.md`.170- `docs/en/` — auxiliary English documents generated from repository evidence.171- `docs/pt/` — same documents in pt-br.172173Rules for `docs/`:174175- Place every auxiliary document in both `docs/en/` and `docs/pt/`.176- Each README links to its counterpart at the top: `[Português](README.pt-br.md)` in `README.md`; `[English](README.md)` in `README.pt-br.md`.177- Each README links to `docs/en/` or `docs/pt/` for deeper docs.178- Do not duplicate `README.md` content inside `docs/`. Put extended/auxiliary content there (e.g., `ARCHITECTURE.md`, `CONTRIBUTING.md`, `API.md`, `INSTALL.md`).179- Generate a doc only when evidence exists in the repo. Never invent auxiliary docs.180- Keep the same filename in both folders (e.g., `docs/en/CONTRIBUTING.md` and `docs/pt/CONTRIBUTING.md`).181182Evidence-based docs to consider:183184- `ARCHITECTURE.md` — if architecture patterns or diagrams were identified.185- `CONTRIBUTING.md` — if `.github/CONTRIBUTING.md` or commit conventions exist.186- `API.md` — if the project exposes a REST/GraphQL API (link to OpenAPI/Swagger if present).187- `INSTALL.md` — if setup has platform-specific steps beyond the README.188189**Rules:**190- Reuse existing content where applicable — don't rewrite what's already correct191- Only include sections where concrete evidence exists192- `README.md` is always en-us; `README.pt-br.md` is the pt-br translation193- Auxiliary docs live under `docs/en/` and `docs/pt/` and must not duplicate README content194- Never hardcode secrets, API keys, or environment variable values195196### Phase 3: CHANGELOG.md Authoring197198Follow the [Keep a Changelog](https://keepachangelog.com/) and [SemVer](https://semver.org/) standards:199200#### 3.1 Structure201```markdown202# Changelog203204All notable changes to this project are documented in this file.205206The format is based on [Keep a Changelog](https://keepachangelog.com/),207and this project adheres to [Semantic Versioning](https://semver.org/).208209## [Unreleased]210211### Added212- New feature X (commit abc123)213214### Fixed215- Bug Y in module Z (commit def456)216217## [1.2.0] - 2025-01-15218219### Added220- Feature A221222### Changed223- Updated dependency B to v2.0224225[Unreleased]: https://github.com/user/repo/compare/v1.2.0...HEAD226[1.2.0]: https://github.com/user/repo/releases/tag/v1.2.0227```228229#### 3.2 Categories230- `Added` — new features231- `Changed` — changes in existing functionality232- `Deprecated` — soon-to-be removed features233- `Removed` — removed features234- `Fixed` — bug fixes235- `Security` — vulnerability fixes236237#### 3.3 Source238- Populate `[Unreleased]` by analyzing `git log --since="last tag" --oneline`239- Map commit prefixes (`feat:`, `fix:`, `breaking:`) to changelog categories240- For past versions, use `git log v1.1.0..v1.2.0 --oneline` between tags241- If no tags exist, create `[Unreleased]` from the last 50 commits242243#### 3.4 Linking244- Link version numbers to GitHub compare URLs: `https://github.com/{owner}/{repo}/compare/v{prev}...v{curr}`245- Link tags to release pages: `https://github.com/{owner}/{repo}/releases/tag/v{version}`246247### Phase 4: Delivery & Verification248249#### 4.1 Branching250Create a dedicated branch:251```bash252git checkout -b feature/{YYYYMMDD}-readme-changelog253```254255#### 4.2 Linting256- Run a Markdown linter if available (`markdownlint`, `remark`, `vale`)257- Check for broken internal links258- Verify Mermaid diagram syntax (if included)259260#### 4.3 Commit261Use Conventional Commits:262```bash263git commit -m "docs(readme): update README and CHANGELOG264265- Add tech stack table from package.json analysis266- Add getting started section with verified commands267- Populate CHANGELOG [Unreleased] from git log since v1.2.0268269Generated with [Devin](https://devin.ai)"270```271272#### 4.4 Reporting273Provide a summary of changes:274```markdown275## Summary276- **README.md**: [created/updated] — en-us primary, added sections X, Y, Z277- **README.pt-br.md**: [created/updated] — pt-br translation278- **docs/en/** and **docs/pt/**: [created/updated] — auxiliary docs by language279- **CHANGELOG.md**: [created/updated] — added [Unreleased] with N entries280- **Evidence**: all claims traced to files/commits in Discovery Summary281```282Do not open the PR automatically — let the human reviewer decide.283284## Common Mistakes285286| Mistake | Impact | Fix |287|----------|--------|-----|288| **Inventing info** | README claims a feature that doesn't exist | Every claim must trace to a file, commit, or config |289| **Generic templates** | README doesn't reflect the actual architecture | Use Discovery Summary to tailor every section |290| **Ignoring history** | Changelog doesn't match git commits | Use `git log` between tags as the source of truth |291| **Hardcoded secrets** | API keys or passwords in README | Use env var names only; link to `.env.example` |292| **Stale badges** | CI badge points to wrong workflow | Verify badge URL matches actual workflow filename |293| **Manual PRs** | PR opened without review | Summarize changes first; let human open the PR |294| **Wrong language** | README in English for a pt-BR project | Match the language of existing documentation |295|| **Only one language** | Repository misses pt-br users | Always generate `README.pt-br.md` and `docs/pt/` alongside the English versions |296|| **Docs duplicate README** | `docs/en/README.md` or `docs/pt/README.md` copies the README | Use `docs/` only for extended/auxiliary documents, not another README |297298## Verification Checklist299300- [ ] Discovery Summary was produced and confirmed before generation301- [ ] README includes all required sections based on available evidence302- [ ] No section contains invented or unverifiable information303- [ ] Tech stack versions match package manifests exactly304- [ ] Getting Started commands were verified against `scripts`/Makefile305- [ ] No secrets, API keys, or environment variable values are present306- [ ] CHANGELOG follows the "Keep a Changelog" format with all 6 categories307- [ ] CHANGELOG `[Unreleased]` section matches `git log` since last tag308- [ ] Version links point to valid compare/release URLs309- [ ] Mermaid diagrams (if any) have valid syntax310- [ ] Branch naming follows the project's convention311- [ ] Commit message follows Conventional Commits312- [ ] `README.pt-br.md` is generated as a pt-br translation of `README.md`313- [ ] `docs/en/` and `docs/pt/` exist for auxiliary docs314- [ ] Language switcher links connect `README.md` and `README.pt-br.md`315- [ ] No `README.md` content is duplicated inside `docs/`316317## References318319- [Keep a Changelog](https://keepachangelog.com/)320- [Semantic Versioning](https://semver.org/)321- [Conventional Commits](https://www.conventionalcommits.org/)322- [Shields.io](https://shields.io/) — badge generation323- [makeareadme.com](https://www.makeareadme.com/) — README best practices