Readme craft
Skill motiful/readme-craft
Layout-first README generation for AI agents — organize by how readers scan, not by what you want to say. 3-tier layout strategy with 45-point quality audit.
npx -y skills add motiful/readme-craftAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Generate and improve README files using a 3-tier layout strategy, GitHub-native formatting patterns, badge guidance, and a state-driven workflow. Use when the user says "write a README", "generate a README", "create a README", "improve this README", "review my README", "make my README better", "add badges", or "fix my README layout".
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
26.8 KB, as published. Nobody here has run it
readme-craft
A GitHub-native, layout-first README generation and improvement skill for AI agents. Produces structured, scannable READMEs with a 3-tier information hierarchy designed for how GitHub READMEs are actually consumed.
This skill is a standalone utility. It does NOT depend on skill-forge or any other skill. Higher-level tools (like skill-forge) may optionally delegate to readme-craft for layout and badge decisions.
Execution Procedure
def readme_craft(project_path, user_request):
# STEP 0: Dependencies
run("scripts/setup.sh") # exit non-zero → STOP
# STEP 1: Scan
state = scan_project(project_path) # see Scan section
# state = {has_readme, has_logo, has_codebase, has_skill_md, ...}
# STEP 2: Gather
if state.has_codebase:
info = derive_from_code(state) # see Gather section
else:
info = ask_user("name, one-liner, features, license")
info += ask_targeted_questions(state, max=4) # only when scan can't decide
# STEP 3: README Content
if state.has_readme and user_said("start fresh"):
facts = extract_facts(state.readme) # carry forward, discard structure
state.has_readme = False
if state.has_readme:
plan = evaluate(state.readme, "3-Tier Layout + Quality Checklist") # see 3-Tier section
if state.has_skill_md: assert_distinct_operations(plan, "Quick Start")
confirm_plan_with_user(plan) # HITL — or apply if "just fix it"
readme = apply_improvements(state.readme, plan) # see Tone & Voice section
else:
template = "assets/skill-readme.md" if state.has_skill_md else "assets/universal-readme.md"
readme = fill_template(template, info)
# STEP 4: Logo
if state.has_logo:
readme = insert_picture_element(readme, state.logo) # see Dark/Light Mode Logo section
else:
candidates = run(f'node scripts/generate-logo.mjs --candidates 5 --name "{info.name}"')
present_paths_to_user(candidates) # HITL — user picks
selected = wait_for_user_selection() # references/logo-generation.md
copy_to(".github/logo-light.svg", generate_dark(".github/logo-dark.svg"))
if wordmark_spells_name(selected): omit_h1()
# STEP 5: Formatting & Badges
readme = apply_3tier_layout(readme) # see The 3-Tier Layout Strategy
readme = apply_github_formatting(readme) # references/github-formatting.md
readme = select_and_apply_badges(readme, state) # see Badge Selection + references/badges.md
if state.has_git_remote:
star_count = gh_api_star_count(state.remote) # gh api repos/{owner}/{repo} --jq .stargazers_count
if star_count >= 100:
if ask_user(f"This repo has {star_count}⭐ — add a star history chart?"): # HITL
readme = insert_star_history(readme, state.remote) # references/badges.md § Star History
readme = apply_tone_voice(readme) # see Tone & Voice section
# STEP 6: Quality Check
# Pass 1: structural
findings = run_checklist(readme, "dimensions 1-5") # references/quality-checklist.md
report_to_user(findings)
readme = fix(readme, findings)
assert run_checklist(readme, "dimensions 1-5").all_pass
# Pass 2: reader lens
reader_findings = run_checklist(readme, "dimension 6") # different mindset — stranger perspective
readme = fix(readme, reader_findings)
# STEP 7: GitHub Metadata
validate_or_create_metadata(state) # references/github-metadata.md
assert metadata_file_valid(state) # GATE — .github/repo-meta.yml must exist with valid description + topics
if state.has_git_remote:
apply_metadata_to_remote(state) # gh repo edit --description + --add-topic
# STEP 8: Deliver
readme = add_footer(readme, state) # "Crafted with Readme Craft"
readme = remove_sections_user_declined(readme)
present_final(readme)
# STEP 9: Comparison (when improving an existing README)
if state.has_readme and state.original_readme:
generate_comparison(state.original_readme, readme) # references/comparison-screenshots.md
When to Use
Activate this skill when the user says any of:
- "Write a README for this project"
- "Generate a README"
- "Create a README from scratch"
- "Improve this README"
- "Review my README"
- "Make my README better"
- "Add badges to my README"
- "Fix my README layout"
- Any request involving README creation, evaluation, or improvement
Scan
Scan the project to understand current state:
- Check for existing README
- Check for existing logo files in
.github/first, then repo root (logo-light.svg,logo-dark.svg,logo.svg,logo.png). Canonical location:.github/ - Read
package.json,Cargo.toml,pyproject.toml,go.mod,SKILL.mdfrontmatter, or equivalent for name, version, description, license, dependencies - Read existing docs (
CONTRIBUTING.md,CHANGELOG.md,LICENSE) if present - Read the entry point and key source files to understand what the project does
- Read CI config (
.github/workflows/,.gitlab-ci.yml) to determine build/test commands - List directory structure (top 2 levels)
Record findings as project state: {has_readme, has_logo, has_codebase, has_skill_md, ...}
Gather
has_codebase→ derive name, description, features, install commands from code- Derive the one-liner from package description + source code understanding
- Derive features from exports, CLI commands, API surface, or SKILL.md capabilities
- Derive install commands from package manager config or skill registration patterns
- Derive quick-start from examples/ directory, tests, main entry point, or install command. For general projects: install command + minimal code snippet or one CLI invocation. For skill projects (
has_skill_md): list distinct operations from SKILL.md workflow modes — one canonical trigger phrase + outcome per operation. Phrasing variations of the same operation go in Usage, not Quick Start
!has_codebase→ ask user for: project name, one-liner, key features, license- Either way: ask up to 4 targeted questions only when the scan cannot safely decide:
- should social proof appear in the README
- should deep content move to
docs/ - should a diagram be added
- should an existing voice or visual style be preserved strictly
What a README Is — and Is Not
A README is a storefront, not a documentation site. In the Diátaxis framework (tutorials, how-to guides, reference, explanation), a README does not belong to any single type. It borrows elements from several:
- Explanation → Why / The Problem
- How-to → Quick Start, Install, Usage
- Reference → Tier 3 supporting content (inline or linked to
docs/)
But a README has a mission that none of the four types cover: convince. The Features section exists to sell — to make a reader believe this project is worth their time in the fewest possible words. Features answer "what do I get?", not "how does it work internally?" or "why was it designed this way?"
The structural principle behind the 3-tier system is progressive disclosure: reveal only what each visitor needs at their current level of commitment. Tier 1 is for the uncommitted (pitch), Tier 2 is for the evaluating (proof), Tier 3 is for the committed (reference). Every placement decision — "does this belong above the fold or at the bottom?" — is a progressive disclosure decision. Scrolling is the disclosure mechanism, not collapsing.
| Concept | Question it answers | Example |
|---|---|---|
| Features / Highlights | "What do I get?" | "Scans your codebase and auto-generates a README" |
| How It Works | "How does it run internally?" | "Config → Gather → Create → Validate → Publish" |
| Why / The Problem | "Why do I need this?" | "Your skill is trapped in one project and can't be shared" |
When Features and How It Works are mixed together, the README writes out a pipeline instead of selling capabilities.
The 3-Tier Layout Strategy
This is the primary differentiator of readme-craft. Every README must organize content into three tiers based on how visitors consume information.
This strategy is optimized for GitHub README rendering. Elements like <picture> and similar GitHub-specific patterns may not render on other platforms (GitLab, npm, crates.io). Adapt as needed.
Tier 1: Above the Fold (~250px)
The first screen a visitor sees. This is the 3-second pitch. Visitors who are not interested will leave after this.
Baseline elements (in order):
- Logo — centered, 80-120px height. Use existing if found, generate if not (see Step 4). Use
<picture>for dark/light mode (see below). - Project name —
<h1>, centered. - One-liner — a value proposition, not a technical description. Answer "why should I care?", not "what technology is this?" Example: ✓ "Stop writing validation logic by hand" vs ✗ "A TypeScript library for form validation."
- Badges — up to 6, on 1-2 lines. Trust signals: license, version, build status, downloads. Fewer is fine when fewer apply.
- Quick action links — inline links to the most relevant next actions (for example Quick Start, Usage, Install, Docs, Demo, Report Bug).
Additional brief elements (a platform compatibility line, a short tagline, a small demo gif) are fine as long as Tier 1 stays within ~250px and reads as a single visual block.
Rules:
- The constraint is height and density, not element count. Stay within ~250px.
- No walls of text above the fold.
- Logo must be compact (not a full-width banner).
- The one-liner must answer "why should I care?" not "what technology is this?"
- No installation instructions in Tier 1.
Markdown pattern (standard):
<div align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset=".github/logo-light.svg">
<img alt="project-name" src=".github/logo-light.svg" width="120">
</picture>
<h1>project-name</h1>
<p>One-liner value proposition</p>
</div>
<div align="center">
[![License: MIT][license-shield]][license-url]
[![Version][version-shield]][version-url]
[![Build][build-shield]][build-url]
</div>
<div align="center">
<a href="#quick-start">Quick Start</a> ·
<a href="https://docs-url">Docs</a> ·
<a href="https://demo-url">Demo</a>
</div>
Alternate pattern (wordmark logos):
When a wide wordmark (400-500px) serves as both logo and project name, the standard <p> inside <div> can feel cramped. Use a > blockquote after the closing </div> instead — it adds visual separation between the wordmark and the one-liner.
<div align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset=".github/logo-light.svg">
<img alt="project-name" src=".github/logo-light.svg" width="440">
</picture>
</div>
<!-- badges and quick links divs here -->
> One-liner value proposition
Use the standard <p> pattern by default. Switch to blockquote only when the wordmark is wide enough to make the centered <p> feel visually crowded.
Tier 2: Scan Quickly
The next 2-3 screens. A visitor who passed Tier 1 wants to evaluate whether this project is worth adopting.
Showcase Image — For tools that produce visual transformations, place a before/after or hero image immediately after Tier 1's --- separator, before the first ## heading (or as the first element of Tier 2). This is a "show don't tell" proof that's more convincing than any text description. Skip ONLY when: project has no visual transformation (CLI tools, libraries, pure APIs).
Required sections (in order):
- Why / The Problem — 2-4 sentences. What pain point does this solve? A strong Problem section lets readers self-qualify: "If [your situation], you need this." If the project serves multiple user segments (e.g., "haven't started yet" vs "already deployed"), address each briefly rather than blending into one generic statement.
- Features / Highlights — bullet list, benefit-oriented. Each item answers "what does the user get?", not "how does it work internally?" Write in benefit-oriented language ("scans your codebase and auto-generates a README"), not mechanism-oriented language ("uses AST parsing to extract function signatures"). If you find yourself describing pipeline stages or internal steps, move that to How It Works in Tier 3.
- Scope: 3-6 items for focused projects; scale to 7-10 for feature-rich projects. The goal is comprehensive coverage — do not cherry-pick a few capabilities and silently drop the rest. When the project has many features, group related capabilities into single items or use sub-descriptions rather than omitting.
- Ordering: Most important and most innovative capabilities first. Lead with what makes this project unique, not with table-stakes features every similar tool has.
- Comprehensiveness check: Read through all source files, reference docs, and config to inventory every user-facing capability. Then confirm every major capability appears in the Features list — either as its own item or clearly covered within another item.
- When to Use — include for tools and skills. Skip ONLY when: the Usage section already covers activation context. Clarify what situation should prompt the reader to reach for this project. If there's a specific activation model ("use after X, not during Y") or a "not for" boundary, state it here. Can be combined into Usage if short.
- Quick Start — the fastest path to a working example. 1-3 commands + minimal code (5-15 lines).
- Install — primary installation method inline. Alternative methods: short → inline below primary; long →
docs/install-alternatives.mdwith teaser. - Usage — basic example + 1-2 common use cases. Advanced examples: short → inline; long →
docs/with teaser.
Rules:
- Each section must fit on one screen or less.
- Use code blocks aggressively — they scan faster than prose.
- Bullet lists over paragraphs.
- If a section exceeds one screen, move detail into a linked doc (
docs/).
For AI agent skills, "Usage" (trigger phrases) may come before "Install" to prioritize understanding over commitment. The skill template reflects this ordering.
Tier 3: Supporting Content
Sections below Tier 2 that serve committed users. Position at the bottom of README provides natural progressive disclosure — scrolling is the disclosure mechanism, not collapsing.
The Checkout Test — the operational criterion for every section:
If this section disappeared from the README, would a potential user be less likely to
git cloneornpm installthe project?
- Yes → keeps the section inline in README
- No → section moves to
docs/with a teaser link
Three content types pass the Checkout Test:
- Feasibility gates — "Can I use this?" (Prerequisites, primary Install, License)
- Value proposition — "Should I use this?" (Why, Features, Quick Start, When to Use)
- Trust signals — "Can I trust this?" (Badges, social proof)
Everything else is post-decision content: "how to use it better" or "how it works internally." Removing it would not change whether someone tries the project.
Section-by-section reference:
| Section | Passes Checkout Test? | Category | Placement |
|---|---|---|---|
| Why / Problem | Yes | Value proposition | Tier 2 inline |
| Features | Yes | Value proposition | Tier 2 inline |
| Quick Start | Yes | Value proposition | Tier 2 inline |
| When to Use / Not-for | Yes | Value proposition | Tier 2 inline |
| Install (primary) | Yes | Feasibility gate | Tier 2 inline |
| Prerequisites | Yes | Feasibility gate | inline |
| License | Yes | Feasibility gate | inline |
| Install (alternatives) | No | Post-decision (exploring options) | teaser + docs/ |
| How It Works | No | Post-decision (curiosity) | teaser + docs/ |
| Configuration (full) | No | Post-decision ("configurable" helps; full table doesn't) | teaser + docs/ |
| API Reference | No | Post-decision | teaser + docs/ |
| Project Structure | No | Post-decision (contributor info) | teaser + docs/ |
| Development | No | Post-decision (contributor info) | teaser + docs/ |
| Contributing | No | Post-decision (contributor info) | inline or CONTRIBUTING.md |
| Changelog / Roadmap | No | Post-decision (existing users) | teaser + docs/ or link |
| Acknowledgments | No | Post-decision (courtesy, usually very short) | inline |
No <details>. Zero. If content is worth including, show it inline. If it's too long for README, move it to docs/ as a complete, self-contained document. No folding, no collapsing.
Teaser + link pattern — substantive summary, not "learn more":
## How It Works
skill-forge validates structure, security, and claims in a single pass
by reading every file in your skill repo.
→ [Architecture deep dive](docs/how-it-works.md)
HITL: readme-craft proposes moves ("suggest moving How It Works to docs/how-it-works.md"). The user confirms before execution. Never auto-move content out of README.
Rules:
- Non-decision sections →
docs/with teaser. Exception: very short sections (< 5 lines, e.g., Acknowledgments, License) stay inline. - Teaser = 1-3 substantive sentences +
→ [Title](docs/X.md)link. The teaser IS the summary for anyone who doesn't click. - Contributing: inline or CONTRIBUTING.md — not
docs/. - Add a back-to-top link for READMEs exceeding 300 lines.
- Use reference-style link definitions at the bottom of the file for badge URLs.
Badge Selection
Choose badges based on the project's ecosystem and maturity. Up to 6 badges; fewer is fine when fewer apply.
Priority order (pick from top, stop at 6):
| Priority | Badge | When to Include |
|---|---|---|
| 1 | License | Always |
| 2 | Version / Release | Always (npm, PyPI, crates.io, or GitHub release) |
| 3 | Build / CI status | If CI is configured |
| 4 | Downloads | If published to a package registry |
| 5 | Coverage | If coverage reporting is set up |
| 6 | Platform / ecosystem | If relevant (e.g., Agent Skills compatible, Node.js version) |
Badge sources:
- shields.io — the standard for most badges
- GitHub Actions badge URLs — for CI status
- Custom badges — only if shields.io does not cover the case
Format: Use reference-style links at the bottom of the README to keep the source markdown clean.
[![License: MIT][license-shield]][license-url]
<!-- at bottom of file -->
[license-shield]: https://img.shields.io/github/license/org/repo.svg
[license-url]: https://github.com/org/repo/blob/main/LICENSE
For copy-paste badge patterns organized by ecosystem, see references/badges.md.
Dark/Light Mode Logo
GitHub supports theme-aware images via the <picture> element. Always include this pattern when the project has a logo.
The pattern:
<picture>
<source media="(prefers-color-scheme: dark)" srcset=".github/logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset=".github/logo-light.svg">
<img alt="project-name" src=".github/logo-light.svg" width="120">
</picture>
Rules:
- Prefer SVG for logos (scales cleanly, small file size).
- The
<img>fallback uses the light variant (GitHub default theme). - Store logos in
.github/(per skill-forge asset placement convention: logo and screenshots are repo infrastructure, not skill runtime content). - If the project only has one logo, use the same path for both
srcsetvalues and thesrc— still include the<picture>wrapper so a dark variant can be added later without restructuring. - Width 80-120px for inline logos (icon/symbol marks). Wordmark logos (text-rendered SVGs like figlet/cfonts output) may use 400-500px width since they serve as both logo and project name. Never use full-width banners in Tier 1.
- If no logo exists yet, generate one (see Step 4). Every delivered README includes a logo.
Fallback wordmarks:
- If the project has no logo, generate logo candidates using
--candidates Nmode instead of silently picking one preset. - Present absolute file paths to the user for preview. Let them choose.
- Use
--randommode only when the user explicitly says "surprise me" or "just pick one". - For a visual gallery of all available presets and palettes, see
docs/logo-gallery.md. - Prefer visually single-line wordmarks for README headers. If a preset reads like stacked block art or creates a double-title feel, switch to an inline treatment.
- If the generated wordmark already renders the project name clearly, omit the duplicated
<h1>by default unless the user explicitly wants both. - For preset selection rules and examples, see
references/logo-generation.mdandreferences/logo-examples.md.
GitHub-Native Formatting Decisions
Use GitHub-specific formatting when it improves comprehension, not because it exists.
For syntax patterns and deeper rules, see references/github-formatting.md.
Default patterns:
- Relative links for
docs/, sibling markdown files, and split reference material - Teaser +
docs/link for long non-decision content - Tables for structured data
- Minimal HTML where Markdown is not enough (e.g.,
<picture>for dark/light logos)
Optional patterns:
- Mermaid diagrams for architecture, flow, sequence, timeline, or dependency relationships
- Task lists for roadmap or status
- Footnotes for citations and side notes
- Math expressions for technical projects that genuinely need formulas
- Social proof elements such as contributor widgets or star counts
Rules:
- Do not move decision-making content (Tier 2 sections) to
docs/— it must stay inline. - Use relative links when splitting a long README into
docs/or separate markdown files. - Add diagrams only when they explain faster than prose.
- Add social proof only when the repo is public, the numbers are real, and the user wants it.
- Prefer clarity over visual novelty.
docs/ Content Standard
docs/ exists to serve README. When a non-decision section is moved out of README, the full content goes to a docs/ file. readme-craft creates these files as part of README improvement — it does not manage or reorganize existing project documentation.
Boundary: docs/ is a human-facing layer. It must NOT be referenced by SKILL.md, references/, or any agent-facing instruction file. For skill repos: agent-relevant content belongs in SKILL.md + references/; docs/ is for humans who want depth beyond what README shows.
Naming: kebab-case by topic (how-it-works.md, configuration.md). Keep docs/ flat. Every file should be self-contained — readable without the README.
Scale: Most small projects need 0 docs. Don't create docs/ preemptively. Only create files when moving content out of README. If a project has no non-decision sections longer than ~15 lines, it doesn't need docs/.
Tone & Voice
When writing README content, follow these guidelines:
- Address the reader as "you" — not "the user" or "one."
- Refer to the software in third person — "readme-craft generates..." not "we generate..."
- Value proposition over technical description — lead with what the reader gains, not what the software is.
- Professional but direct — no exclamation marks, no emoji, no hype words ("revolutionary", "blazing fast").
- Concise — if a sentence doesn't add information, cut it.
When improving an existing README, these guidelines are recommendations, not overrides. Preserve the author's existing voice unless they explicitly ask for a tone change.
Example Provenance
When including an Example section in a README:
- If the example comes from a real run, keep paths, commands, and outputs specific.
- If the example is a sample flow, say so explicitly.
- Never present unverified repo URLs, release pages, docs links, or install commands as if they already exist.
Quality Checklist
Run the checklist in references/quality-checklist.md before delivering any README. Report failures to the user.
The checklist covers 6 dimensions: Structure (7), Content (13), Formatting (10), User Perspective (5), Completeness (6), Reader Lens (4) — 45 checks total. Dimensions 1-5 are structural; dimension 6 requires a mindset shift to first-time reader perspective.
References
This skill uses the following template and analysis files:
| File | Purpose |
|---|---|
assets/universal-readme.md | Base template for any OSS project. Contains all three tiers with placeholder markup. |
assets/skill-readme.md | Extended template for AI agent skills. Adds Agent Skills badge, trigger phrases, npx skills add install, and "What's Inside" section. |
references/badges.md | Copy-paste badge patterns for shields.io, organized by category (license, version, CI, downloads, coverage, platform, Agent Skills). |
references/github-formatting.md | GitHub-native formatting patterns, overflow strategy, and rules for diagrams, footnotes, math, task lists, and social proof. |
references/logo-generation.md | README fallback logo guidance: positioning, preset selection, runtime requirements, and when to use the local wordmark generator. |
references/logo-examples.md | Short example mappings from project feel to recommended logo presets. |
references/quality-checklist.md | 45-point quality checklist across 6 dimensions: structure, content, formatting, user perspective, completeness, reader lens. |
references/gradient-palettes.md | 2026-curated gradient palette reference with 45 named gradients for logo and badge color selection. |
references/comparison-screenshots.md | Before/after comparison PNG generation via Playwright for README case studies. |
references/github-metadata.md | GitHub repository metadata: About/description rules (≤350 chars), topic 3-tier selection, .github/repo-meta.yml format, gh repo edit workflow. |
docs/logo-gallery.md | Visual gallery of all logo presets with rendered SVG previews, palette table, and selection guidance. |
When generating a README, always start from the appropriate asset template file. Read it, fill its placeholders, then adjust sections based on the project's needs.