Best for
- Use when the user asks to create/rewrite/standardize README, improve documentation structure, or produce maintainable README templates for different project types (service/library/CLI/monorepo).
johnqtcg/awesome-skills/skills/readme-generator/SKILL.md
Generate or refactor project README.md files using repository evidence. Use when the user asks to create/rewrite/standardize README, improve documentation structure, or produce maintainable README templates for different project types (service/library/CLI/monorepo).
Decision brief
Generate high-quality README documents from codebase evidence, with clear structure, runnable commands, and maintenance rules.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/johnqtcg/awesome-skills --skill "skills/readme-generator"Inspect the Agent Skill "readme-generator" from https://github.com/johnqtcg/awesome-skills/blob/d933bc88237f7a18a7ecf01e5d97a745b083df0f/skills/readme-generator/SKILL.md at commit d933bc88237f7a18a7ecf01e5d97a745b083df0f. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Detect audience — end users, contributors, operators, or mixed. 2. Detect language — English, Chinese, or bilingual. 3. Run discovery — scripts/discoverreadmeneeds.sh; read verdict and entrypoints. 4. Collect evidence — entrypoints, Makefile, manifests, workflows, config, exi…
One rule, applied by section class — there is no third case:
One rule, applied by section class — there is no third case:
A manifest proves a toolchain; only an artifact proves a result.
Review the “Quick Reference” section in the pinned source before continuing.
Permission review
The documentation asks the agent to create, modify, or delete local files.
| **Required** for the project type (§Structure Policy) | Write it | Keep the heading, write `Not found in repo` |The documentation asks the agent to run terminal commands or scripts.
bash "<path-to-skill>/scripts/discover_readme_needs.sh"Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 95/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 30 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Generate high-quality README documents from codebase evidence, with clear structure, runnable commands, and maintenance rules.
.codex/) unless asked.README.md as a user-facing homepage first, a maintainer reference second.One rule, applied by section class — there is no third case:
| Section class | Evidence present | Evidence missing |
|---|---|---|
| Required for the project type (§Structure Policy) | Write it | Keep the heading, write Not found in repo |
| Optional (§Optional Sections) | Write it | Omit entirely and list it in sections_omitted |
A manifest proves a toolchain; only an artifact proves a result.
go test ./... when go.mod exists, pytest when pyproject.toml
exists, make <target> when that exact target is in the Makefile.benchstat output, a golden fixture, a committed coverage report)..codecov.yml with target: 80%
licenses "the coverage target is 80%", not "coverage is 80%" — the latter asserts a
result the repo does not record. The linter enforces that split.No test files found in repo — the command is real, the coverage claim would not be.| When you need to… | Jump to |
|---|---|
| Generate from scratch | §Pre-Generation Gates → §Project Type Routing → §Generation Workflow |
| Update an existing README | §Refactor Mode + references/checklist.md |
| Chinese or bilingual output | §Chinese / Bilingual + references/bilingual-guidelines.md |
| Monorepo / Lightweight | §Monorepo Rules + references/monorepo-rules.md · §Lightweight Template Mode |
| Calibrate ToC, check quality | §README Navigation Rule · §README Quality Scorecard + scripts/lint_readme.py |
| Evidence mapping, anti-patterns | §Evidence Mapping Output · §Anti-Examples (catalog in references/anti-examples.md) |
Decide target readers (contributors / operators / API consumers / end users) and output language (Chinese / English / bilingual). If unspecified, follow the existing repo docs and keep audience assumptions in working notes, not in the README. This gate also owns the lightweight decision (§Project Type Routing).
Two independent questions, two sources:
| Question | Answered by |
|---|---|
| Which sections, in what order | project_type effective → the template |
| What the commands say | the manifest in the repo (go.mod, package.json, Cargo.toml, pyproject.toml) → references/language-snippets.md |
project_type detected classifies the repo as Service, Library, CLI, or Monorepo, and is
kept alongside effective so a lightweight promotion does not erase what the project
structurally is. It does not choose the command snippets — a Go CLI and a Node CLI
share a type and share no commands.
effective is the single answer — generation, the Output Contract, and
scripts/lint_readme.py all read it, so they cannot disagree.
Discovery never promotes to lightweight on its own. It reports
lightweight_eligible plus a named lightweight_blocked_by list (5+ dirs · CI present ·
deployment surface · public distribution surface · unclassified). Promotion is your call
at the Audience Gate, because the deciding trigger — audience is internal contributors only
— is a judgement no probe can make. Inferring it was harmful: a minimal public Go SDK
(go.mod + pkg/, no CI, few dirs) was silently downgraded and lost Installation and API.
Absence of CI is not evidence of absence of users, and a library is a public surface by
definition. When the Gate does establish an internal audience on an eligible repo, record it
with lint_readme.py --type=lightweight and report lightweight in the Output Contract.
Routing logic lives in
scripts/discover_readme_needs.sh— it reads Go, Node, Rust, and Python manifests, workspace markers (go.work,apps/,packages/, npmworkspaces, Cargo[workspace]), and entrypoint locations. Change prose and script together; sync is guarded byscripts/tests/test_discovery_script.py::TestRoutingSync.
Run discovery first and read its verdict — do not re-derive these by hand:
bash "<path-to-skill>/scripts/discover_readme_needs.sh"
Minimum evidence: at least one entrypoint (the script emits an inventory), a determined
project type, a located command source. verdict status DEGRADED names which is missing.
When degraded: output Project Overview plus Not found in repo sections only, set
degraded: true in the response, and list each missing item with a suggested resolution.
Scan for badge evidence before drafting: CI workflow files (an empty
.github/workflows/ is not evidence), coverage config, language version, license file. Add
a badge only when its evidence exists. Record the outcome in badges_added.
Hard rule, no exceptions. Verification-state language — Verified, Not verified,
not executed in this environment, PASS/FAIL, scorecard output, degraded: true — never
appears inside README.md; it belongs in the assistant response. This holds even when the
user asks for a "verification table": produce it in the response and say why it is not in
the file, because the label goes stale the moment it is committed. Inside the README, write
evidence-backed install/run commands plus prerequisites.
Detection order, which is also render order: CI status → Coverage → Language version → License → Release.
Only emit badges whose URL is derivable from repo evidence. For a private repo, skip the
external URLs and add:
Badge note: repository is private; external badge URLs may not render outside authorized viewers.
→ URL templates and the community-file mapping: references/badges-and-governance.md.
Detect LICENSE, CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, CHANGELOG.md;
link each present file from the matching section. License is the one exception to
§Evidence Precedence — an absent license is itself information, so the section never just
disappears: present → name it; absent → License: Not found in repo — consider adding a LICENSE file. Only Lightweight mode on an internal repo omits it. Every other governance
file follows the normal optional rule. → references/badges-and-governance.md.
Scan before drafting; absent targets are recorded per §Evidence Precedence, never guessed.
| Class | Files |
|---|---|
| Entrypoints | main.go, cmd/*, package.json bin/main, src/main.rs, [project.scripts], executable scripts |
| Build/test hubs | Makefile, go.mod, package.json, pyproject.toml, Cargo.toml |
| CI, config, governance, docs | .github/workflows/* · .env.example, config/*, docker-compose.yml · LICENSE, CONTRIBUTING.md, SECURITY.md, CHANGELOG.md · README*.md, docs/* |
Makefile target → language-native manifest (go.mod, package.json, pyproject.toml,
Cargo.toml) → CI workflow command → direct tool invocation.
Every command must resolve against one of these — a make target absent from the Makefile
is a fabrication, and each half of make test && make deploy is checked separately, as is
anything behind sudo/VAR=x. On conflict, load references/command-priority.md.
Required sections are per project type, not one flat list. A Library README carrying a Configuration section, or a CLI README carrying Deployment, is noise.
| Project type | Required sections |
|---|---|
| service | Quick Start, Prerequisites, Structure, Commands, Configuration, Testing, Maintenance |
| cli | Installation, Usage, Commands, Testing, Maintenance |
| library | Installation, Usage, API, Testing, Maintenance |
| monorepo | Repository Overview, Quick Start, Commands, Structure, Maintenance |
| lightweight | Quick Start, Commands, Structure, Testing, Maintenance |
Every type opens with an overview: name, one-sentence value proposition, then badges when
evidence exists. Missing a primary section (Quick Start / Installation / Usage /
Repository Overview, per type) is a Critical defect; missing any other required section is
Standard — lint_readme.py reports them as R009 and R012 respectively.
Sections and commands are separate axes (§Project Type Routing). This matrix is the
same table lint_readme.py enforces (REQUIRED_SECTIONS), kept in sync by
test_forward_eval.py::RequiredSectionSyncTest.
For public homepages, order the top of the file: value proposition → highlights → prerequisites → install → quick start → end-to-end example → reference sections.
Architecture / data flow · Deployment / operations · API usage examples · Release and versioning · Contributing · Security notes · Contact and support. Missing evidence means omit — see §Evidence Precedence. License is deliberately not on this list (§Community and Governance Files).
Triggers: fewer than 5 top-level functional directories · no deployment/ops workflows in
the repo · no public API/SDK surface · README targets internal contributors only. Discovery
reports the first three as lightweight_eligible; the fourth is yours to assert
(§Project Type Routing). Required sections: Project overview, Quick start, Common commands,
Project structure (short), Testing and quality checks, Documentation maintenance note.
Skip heavy optional sections unless explicitly requested.
Keep English for package names, commands, file paths, environment variables, and precise
technical identifiers; translate headings and prose. Never use double-language headings
(## Quick Start / 快速开始) — prefer ## 快速开始, ## 项目结构, ## 常用命令. In
bilingual mode Chinese is the primary prose with English technical terms inline.
→ references/bilingual-guidelines.md for the full rules.
## heading it links to.Repository overview table instead of a deep tree dump · link to submodule READMEs rather
than duplicating internals · document shared root commands only · missing root LICENSE →
Not found in repo, never guessed inheritance. Load references/monorepo-rules.md first.
For CLI tools, converters, and generators, show one complete example: the input command,
then the resulting file name or response shape. No-fabrication constraint: with no
sample output, fixture, or documented response format in the repo, show the invocation and
describe the destination generically — never an invented JSON body, row count, or status
line: schema-gen generate --output ./schemas ./internal/models # → writes to ./schemas/
The most common failure is process-state labels in the README body — a ## Testing — Status: Not verified heading, or a | Command | Verified | table. The rule is absolute
(§Command Verifiability Gate); the worked BAD/GOOD pair, plus fabricated badges, guessed
config, unbacked metrics, monorepo tree dumps, double-language headings, and
output-without-input, are all in references/anti-examples.md. Load it before refactoring
an existing README.
scripts/discover_readme_needs.sh; read verdict and entrypoints.Makefile, manifests, workflows, config, existing docs.project_type effective, commands from the manifest.python3 "<path-to-skill>/scripts/lint_readme.py" <repo-dir> <readme-path>;
fix every critical finding before returning.Preserve valuable prose, fix contradictory commands, replace guessed content, re-evaluate
the project type, re-run the scorecard. Load references/checklist.md for the refactor
checklist and the update-trigger matrix that detects staleness after code changes (new
entrypoint, env var, Makefile target, CI workflow, LICENSE, Go version, and the rest).
Short, direct prose; fenced blocks for trees and commands; no internal rubric language. Notes about why a section looks the way it does belong outside the document.
Output this in the assistant response, not inside the README. Every non-trivial section
maps to at least one evidence source, or to Not found in repo; one line per section.
| README Section | Evidence File(s) | Evidence Snippet/Reason |
|---|---|---|
| Quick Start | Makefile, go.mod | target/command exists |
| Configuration | .env.example | variables defined |
| # | Field | Required | Description |
|---|---|---|---|
| 1 | project_type | Always | the effective type: service / library / cli / monorepo / lightweight |
| 2 | language | Always | en / zh / bilingual |
| 3 | template_used | Always | Template A–E name |
| 4 | evidence_mapping | Always | Section → evidence file table |
| 5 | scorecard | Always | 3-tier result, denominators = applicable items |
| 6 | degraded | When applicable | whether evidence was insufficient |
| 7 | missing_evidence | When degraded | missing items and suggested actions |
| 8 | badges_added | When applicable | badge types added, or "skipped (reason)" |
| 9 | sections_omitted | When applicable | optional sections skipped, with reason |
{
"project_type": "service", "language": "zh", "template_used": "Template A: Service",
"degraded": false,
"scorecard": {"critical": "3/3", "standard": "5/5", "hygiene": "3/3"},
"machine_result": "PASS", "final_result": "PENDING_HUMAN_REVIEW",
"unchecked": ["C4", "S6", "H4"],
"badges_added": ["CI", "Coverage", "Go Version", "License"],
"sections_omitted": [], "missing_evidence": []
}
Denominators are applicable items; scripts/lint_readme.py emits this block.
Critical Tier — any FAIL means the whole output FAILs:
| # | Check | PASS Rule |
|---|---|---|
| C1 | Evidence-backed claims | Every non-trivial statement traces to a repo file |
| C2 | No fabricated content | Zero guessed commands, URLs, config values, paths, metrics |
| C3 | Primary onboarding path present and actionable | Reader gets running in ≤ 3 steps. Per type: Quick Start for Service / Monorepo / Lightweight, Installation + Usage for CLI / Library — the set lint_readme.py treats as primary (R009) |
| C4 | Correct project type routing | Template matches the discovery verdict — needs a human |
Standard Tier — items that do not apply leave the denominator:
| # | Check | Applies to | PASS Rule |
|---|---|---|---|
| S1 | Command source attribution | all | Every command resolves to a Makefile / script / manifest |
| S2 | Structure section with purpose | Service, Monorepo, Lightweight | Key directories listed with one-line descriptions |
| S3 | Config/env section present | Service, or any type with .env.example / config/ | Required variables documented, source cited |
| S4 | Testing commands included | all | A test command; plus a lint command only when the repo has a linter |
| S5 | Badges evidence-based | all | Only real URLs; private-repo fallback applied if needed |
| S6 | Audience and language explicit | all — needs a human | Stated in working notes, or in README when it helps |
Scoring is passed / applicable; the bar is two thirds of applicable, rounded up — the old
4/6 and 3/4 expressed so they survive items dropping out. (Why: a Library has no
Structure section, must not invent Configuration, and cannot show a lint command for a repo
with no linter — against a flat six-item list it lost three automatically and scored 3/6.)
S4 judges what a target runs, not what it is named: make check-types running
tsc --noEmit is not a test command.
Hygiene Tier — same passed / applicable rule; H4 needs a human and is excluded:
| # | Check | PASS Rule |
|---|---|---|
| H1 | Maintenance trigger note | "Update this README when…" section present |
| H2 | No internal process labels | No verification state or scorecard language in the body |
| H3 | Navigation and ToC quality | Sized to complexity; every label matches its heading |
| H4 | Optional sections gated | Architecture / Deployment / API only when evidence exists — needs a human |
Output: Critical: X/N | Standard: X/N applicable | Hygiene: X/N applicable → machine …; final …. Name the N/A items and those needing a human, so a shrinking denominator stays
visible. machine_result and final_result are separate: C4 (routing), S6 (audience)
and H4 (optional-section gating) are the three a script cannot settle, and C4 is Critical.
So a clean machine run is machine_result: PASS + final_result: PENDING_HUMAN_REVIEW,
becoming a real PASS only once you have judged those three. A machine FAIL stays FAIL —
"pending" never softens a failure.
scripts/lint_readme.py computes the whole card and checks the high-frequency
violations: undefined make/npm targets (including behind sudo/VAR=x prefixes and on
each half of a && chain), env vars absent from .env.example, non-existent paths,
placeholder residue, metrics with no committed artifact, unevidenced badges, missing
required sections, ToC/heading mismatches, process labels. It also asserts every shipped
golden example clears its own tier.
It is a floor, not the tier. A linter-clean README can still fail C1/C2 — a plausible but wrong claim, a command that exists yet does the wrong thing, a structure description that is stale rather than invented. Read it as "no detectable fabrication", then judge the three UNCHECKED items yourself.
| Load… | When |
|---|---|
references/templates.md | generating from scratch or switching template (Template A–E, prerequisites format) |
references/language-snippets.md | filling a template's command blocks (Go / Node / Python / Rust) |
references/golden-<type>.md | calibrating output quality; index at references/golden-examples.md |
references/command-priority.md | command conflicts across Makefile / package.json / CI |
references/checklist.md | final review of a refactor |
references/anti-examples.md | refactoring a README with suspected anti-patterns |
references/bilingual-guidelines.md | Chinese or bilingual output |
references/monorepo-rules.md | monorepo detected |
references/badges-and-governance.md | badge URLs and governance-file mapping |
Run scripts/discover_readme_needs.sh first (workflow step 3) to collect repo facts
deterministically, and scripts/lint_readme.py last (step 11) to check the draft against
those same facts. Skill regression: bash "<path-to-skill>/scripts/run_regression.sh".
Frequently asked questions
Generate high-quality README documents from codebase evidence, with clear structure, runnable commands, and maintenance rules.
The source record exposes this install command: npx skills add https://github.com/johnqtcg/awesome-skills --skill "skills/readme-generator". Inspect the command and pinned source before running it.
Static rules flagged write-files, exec-script in the source; the page lists the matching lines and excerpts.
Alternatives
ArabelaTso/Skills-4-SE
Generate comprehensive, user-friendly README.md files for code repositories. Use when creating documentation for new projects, updating existing READMEs, or improving project onboarding. Produces READMEs with project introduction, prerequisites, environment setup, executable usage instructions, and repository structure overview. Supports application projects, libraries, and research codebases.
oaustegard/claude-skills
Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre
dancingteeth/unified-code-review
Risk-first code review for PRs and branch audits: blast-radius triage, agent-authored discipline (tests first, intent evidence), call-graph pincer for integration defects between modules, then structural code-judo bar. Use when reviewing PRs, auditing agent-written diffs, catching rubber-stamp green CI, or wiring bugs single-file review misses. Prefer over structure-only thermo-nuclear review alone. Do not use for unrelated coding tasks or as an always-on rule.
Postpartum-genushyacinthus29/dotnet-skills
Build long-running .NET background services with `BackgroundService`, Generic Host, graceful shutdown, configuration, logging, and deployment patterns suited to workers and daemons.