readme-reviewer
When to use
- Reviewing a newly created or rewritten README
- Validating a README matches the actual repository
- Auditing README quality across repos
- Checking for hallucinated setup, commands, or features
Do NOT use when:
- Only proofreading grammar or formatting
- Writing a README from scratch → use
readme-writing or readme-writing-package
Goal
Ensure the README is correct (no invented content), aligned with the repo,
useful for the intended audience, and has a strong quickstart path.
Core principles
- Evidence over assumption — verify every claim against the repo
- Commands must exist — check
Taskfile.yml, Makefile, package.json scripts
- Examples must match real APIs — compare against source code
- Quickstart quality matters more than completeness
- A clean-looking README can still be technically wrong
Procedure
1. Identify README type and audience
Determine repo type (package, app, CLI, internal, framework) and target audience
(consumers, contributors, team). Check if README structure matches this type.
2. Cross-check against repository
Inspect truth-defining files:
package.json / composer.json — name, scripts, dependencies
Dockerfile / docker-compose.yml — runtime setup
Taskfile.yml / Makefile — available commands
- CI workflows — what gets tested
- Source entrypoints — actual public API
- Config files, tests, existing docs
Verify: install steps exist, commands work, features are implemented,
dependencies are real.
3. Validate installation and setup
Check:
- Install command is correct and complete
- Required post-install steps are documented
- No hidden setup assumptions
- Environment/config requirements are listed
Flag: missing steps, incorrect steps, implied-but-unwritten steps.
4. Validate usage examples
Check:
- First example is minimal and realistic
- Example matches actual API (verify against source)
- Example does not rely on undocumented setup
- Example is not overly complex or abstract
Flag: pseudo-code, oversized examples, API mismatches.
5. Validate compatibility and requirements
Check:
- Runtime versions stated (PHP, Node, etc.)
- Framework compatibility is explicit
- Dependencies are declared
Flag: missing compatibility, vague claims ("works with most versions"),
unconfirmed broad support.
6. Evaluate structure and clarity
Check:
- Strong first screen (what + why + quickstart visible before scrolling)
- Logical section order for repo type
- No unnecessary sections (padded boilerplate)
- No missing critical sections
Common issues: architecture before installation, no quickstart,
buried usage instructions, generic template sections.
7. Detect hallucinations
Explicitly search for:
- Commands not present in repo
- Features not implemented
- Setup steps not supported by scripts/configs
- Assumptions about environment or tools
Classify each finding:
- Confirmed incorrect — verifiably wrong
- Likely incorrect — no evidence found, needs verification
- Unclear — cannot confirm or deny, needs human input
8. Check scope, size, and splitting
- README not overloaded with deep technical detail
- Complex content belongs in
/docs, not README
- Important onboarding info not missing due to over-condensation
Size checks:
- < 150 lines — healthy
- 150–300 lines — expect a Table of Contents; flag if missing
- 300–500 lines — flag as overloaded; deep content should be in
/docs/
- > 500 lines — flag as broken entry point; split strongly recommended
- The enforced lint limit is 750 lines (
lint_readme_size.ts fails above it); the 150/300/500 bands are editorial
Structure checks:
- ToC present if > 150 lines or > 6 top-level (
##) sections
- Multi-platform install (> 5 variants) uses a table with deep links, not stacked blocks
<details> used only for secondary, bulky content — never for install, first example, or requirements
- No duplication between README and
/docs/ (same content in two places drifts)
- Each
/docs/ file linked from README is self-contained (not just a fragment)
→ See docs/guidelines/docs/readme-size-and-splitting.md for full thresholds,
splitting strategies, and anti-patterns.
9. Validate every link and detect orphans — MANDATORY
For every internal link in the README:
- Resolve the path.
test -f files, test -d directories. Strip
#anchor and ?query before the check.
- For every anchor link (
file.md#section), grep the target file for
the heading slug. Missing slug = broken anchor.
- Group findings:
- broken — target does not exist (❌ Critical)
- anchor-broken — file exists, anchor does not (⚠️ Major)
- path-drift — target moved but a valid path exists elsewhere
(⚠️ Major, propose the corrected path)
For every documentation file referenced by the README, check whether
it has any other references in the repo (grep -r over
AGENTS.md, docs/, dist/agent-src*/, .augment/, packages/).
Files referenced only by this README are single-use — note them
so they can be moved or inlined later.
For every doc under /docs/ that the README does not link, check
whether anything else in the repo links it. Files with zero inbound
references are orphan-candidates — surface them, never delete
silently.
10. Currency check — drift detection
The README may have been correct at write-time but drifted since.
Compare the README's claims to the live repository:
- Counts (badges like "Skills: 218") — recount from the source tree
and flag any drift > 0
- Commands — every documented
task, npm run, npx, or bash
call must exist in Taskfile.yml, package.json scripts, or the
named script file at its claimed path
- Profiles / user-types / packs — list members against the live
directory listing
- Version pins — runtime, framework, peer-dep versions stated in
README vs. the manifest's
engines / require / dependencies
- Visual identity — banner / hero image references resolve to real
files (not 404s in GitHub rendering)
Output format
- Produce three subsections in order: Summary, Findings, Confidence; no prose outside them.
- Findings table must use the severity vocabulary (❌ Critical / ⚠️ Major / ℹ️ Minor) and cite the exact section name.
- Close the report with a Confidence block that separates confirmed-correct, needs-verification, and unclear-due-to-missing-context.
1. Summary
| Field |
Value |
| Repo type |
{type} |
| Audience |
{audience} |
| Overall |
{short assessment} |
2. Findings
| # |
Severity |
Section |
Issue |
Fix |
| 1 |
❌ Critical |
Install |
Command X does not exist |
Replace with Y |
| 2 |
❌ Critical |
Profile grid |
Link src/agent-src/profiles/ 404s |
Repoint to packages/core/src/agent-src/profiles/ |
| 3 |
⚠️ Major |
Badges |
"Skills: 218" — live count is 207 |
Update badge or note drift |
| 4 |
⚠️ Major |
Usage |
Example uses deprecated API |
Update to current API |
| 5 |
ℹ️ Minor |
Structure |
Requirements buried below usage |
Move above install |
| 6 |
ℹ️ Minor |
Docs |
docs/foo.md only linked by README |
Either inline or keep as standalone |
Severity levels:
- ❌ Critical — breaks onboarding or is factually incorrect
- ⚠️ Major — confusing, incomplete, or misleading
- ℹ️ Minor — clarity improvement, formatting, structure
3. Confidence
- What is confirmed correct
- What needs human verification
- What is unclear due to missing context
Gotcha
- Model tends to trust the README instead of verifying against the repo
- Model may miss subtle mismatches between examples and real APIs
- Model may focus on wording/style instead of correctness
- A well-formatted README with wrong commands is worse than ugly but correct
- Model may accept "looks reasonable" compatibility without checking CI matrix
Do NOT
- Do NOT assume README is correct without checking the repo
- Do NOT ignore missing or broken setup steps
- Do NOT accept vague compatibility statements as valid
- Do NOT focus only on wording while missing structural/correctness issues
- Do NOT overlook mismatches between examples and actual source code
- Do NOT soften findings — state issues clearly with severity
1---2name: readme-reviewer3description: Use when reviewing a README for accuracy, usability, and alignment with the actual repository. Detects invented content, broken setup steps, and structural issues.4---56# readme-reviewer78## When to use910- Reviewing a newly created or rewritten README11- Validating a README matches the actual repository12- Auditing README quality across repos13- Checking for hallucinated setup, commands, or features1415Do NOT use when:1617- Only proofreading grammar or formatting18- Writing a README from scratch → use `readme-writing` or `readme-writing-package`1920## Goal2122Ensure the README is correct (no invented content), aligned with the repo,23useful for the intended audience, and has a strong quickstart path.2425## Core principles2627- Evidence over assumption — verify every claim against the repo28- Commands must exist — check `Taskfile.yml`, `Makefile`, `package.json scripts`29- Examples must match real APIs — compare against source code30- Quickstart quality matters more than completeness31- A clean-looking README can still be technically wrong3233## Procedure3435### 1. Identify README type and audience3637Determine repo type (package, app, CLI, internal, framework) and target audience38(consumers, contributors, team). Check if README structure matches this type.3940### 2. Cross-check against repository4142Inspect truth-defining files:4344- `package.json` / `composer.json` — name, scripts, dependencies45- `Dockerfile` / `docker-compose.yml` — runtime setup46- `Taskfile.yml` / `Makefile` — available commands47- CI workflows — what gets tested48- Source entrypoints — actual public API49- Config files, tests, existing docs5051Verify: install steps exist, commands work, features are implemented,52dependencies are real.5354### 3. Validate installation and setup5556Check:5758- Install command is correct and complete59- Required post-install steps are documented60- No hidden setup assumptions61- Environment/config requirements are listed6263Flag: missing steps, incorrect steps, implied-but-unwritten steps.6465### 4. Validate usage examples6667Check:6869- First example is minimal and realistic70- Example matches actual API (verify against source)71- Example does not rely on undocumented setup72- Example is not overly complex or abstract7374Flag: pseudo-code, oversized examples, API mismatches.7576### 5. Validate compatibility and requirements7778Check:7980- Runtime versions stated (PHP, Node, etc.)81- Framework compatibility is explicit82- Dependencies are declared8384Flag: missing compatibility, vague claims ("works with most versions"),85unconfirmed broad support.8687### 6. Evaluate structure and clarity8889Check:9091- Strong first screen (what + why + quickstart visible before scrolling)92- Logical section order for repo type93- No unnecessary sections (padded boilerplate)94- No missing critical sections9596Common issues: architecture before installation, no quickstart,97buried usage instructions, generic template sections.9899### 7. Detect hallucinations100101Explicitly search for:102103- Commands not present in repo104- Features not implemented105- Setup steps not supported by scripts/configs106- Assumptions about environment or tools107108Classify each finding:109110- **Confirmed incorrect** — verifiably wrong111- **Likely incorrect** — no evidence found, needs verification112- **Unclear** — cannot confirm or deny, needs human input113114### 8. Check scope, size, and splitting115116- README not overloaded with deep technical detail117- Complex content belongs in `/docs`, not README118- Important onboarding info not missing due to over-condensation119120Size checks:121122- **< 150 lines** — healthy123- **150–300 lines** — expect a Table of Contents; flag if missing124- **300–500 lines** — flag as overloaded; deep content should be in `/docs/`125- **> 500 lines** — flag as broken entry point; split strongly recommended126- The enforced lint limit is **750 lines** (`lint_readme_size.ts` fails above it); the 150/300/500 bands are editorial127128Structure checks:129130- ToC present if > 150 lines or > 6 top-level (`##`) sections131- Multi-platform install (> 5 variants) uses a table with deep links, not stacked blocks132- `<details>` used only for secondary, bulky content — never for install, first example, or requirements133- No duplication between README and `/docs/` (same content in two places drifts)134- Each `/docs/` file linked from README is self-contained (not just a fragment)135136→ See `docs/guidelines/docs/readme-size-and-splitting.md` for full thresholds,137splitting strategies, and anti-patterns.138139### 9. Validate every link and detect orphans — MANDATORY140141For every internal link in the README:1421431. Resolve the path. `test -f` files, `test -d` directories. Strip144 `#anchor` and `?query` before the check.1452. For every anchor link (`file.md#section`), grep the target file for146 the heading slug. Missing slug = broken anchor.1473. Group findings:148 - **broken** — target does not exist (❌ Critical)149 - **anchor-broken** — file exists, anchor does not (⚠️ Major)150 - **path-drift** — target moved but a valid path exists elsewhere151 (⚠️ Major, propose the corrected path)152153For every documentation file referenced by the README, check whether154it has any **other** references in the repo (`grep -r` over155`AGENTS.md`, `docs/`, `dist/agent-src*/`, `.augment/`, `packages/`).156Files referenced only by this README are **single-use** — note them157so they can be moved or inlined later.158159For every doc under `/docs/` that the README **does not** link, check160whether anything else in the repo links it. Files with zero inbound161references are **orphan-candidates** — surface them, never delete162silently.163164### 10. Currency check — drift detection165166The README may have been correct at write-time but drifted since.167Compare the README's claims to the live repository:168169- **Counts** (badges like "Skills: 218") — recount from the source tree170 and flag any drift > 0171- **Commands** — every documented `task`, `npm run`, `npx`, or `bash`172 call must exist in `Taskfile.yml`, `package.json scripts`, or the173 named script file at its claimed path174- **Profiles / user-types / packs** — list members against the live175 directory listing176- **Version pins** — runtime, framework, peer-dep versions stated in177 README vs. the manifest's `engines` / `require` / `dependencies`178- **Visual identity** — banner / hero image references resolve to real179 files (not 404s in GitHub rendering)180181## Output format1821831. Produce three subsections in order: Summary, Findings, Confidence; no prose outside them.1842. Findings table must use the severity vocabulary (❌ Critical / ⚠️ Major / ℹ️ Minor) and cite the exact section name.1853. Close the report with a *Confidence* block that separates confirmed-correct, needs-verification, and unclear-due-to-missing-context.186187### 1. Summary188189| Field | Value |190|---|---|191| Repo type | {type} |192| Audience | {audience} |193| Overall | {short assessment} |194195### 2. Findings196197| # | Severity | Section | Issue | Fix |198|---|---|---|---|---|199| 1 | ❌ Critical | Install | Command `X` does not exist | Replace with `Y` |200| 2 | ❌ Critical | Profile grid | Link `src/agent-src/profiles/` 404s | Repoint to `packages/core/src/agent-src/profiles/` |201| 3 | ⚠️ Major | Badges | "Skills: 218" — live count is 207 | Update badge or note drift |202| 4 | ⚠️ Major | Usage | Example uses deprecated API | Update to current API |203| 5 | ℹ️ Minor | Structure | Requirements buried below usage | Move above install |204| 6 | ℹ️ Minor | Docs | `docs/foo.md` only linked by README | Either inline or keep as standalone |205206Severity levels:207208- **❌ Critical** — breaks onboarding or is factually incorrect209- **⚠️ Major** — confusing, incomplete, or misleading210- **ℹ️ Minor** — clarity improvement, formatting, structure211212### 3. Confidence213214- What is confirmed correct215- What needs human verification216- What is unclear due to missing context217218## Gotcha219220- Model tends to trust the README instead of verifying against the repo221- Model may miss subtle mismatches between examples and real APIs222- Model may focus on wording/style instead of correctness223- A well-formatted README with wrong commands is worse than ugly but correct224- Model may accept "looks reasonable" compatibility without checking CI matrix225226## Do NOT227228- Do NOT assume README is correct without checking the repo229- Do NOT ignore missing or broken setup steps230- Do NOT accept vague compatibility statements as valid231- Do NOT focus only on wording while missing structural/correctness issues232- Do NOT overlook mismatches between examples and actual source code233- Do NOT soften findings — state issues clearly with severity