skills/readme-writer/SKILL.md
Generate polished, well-structured README.md files for software projects. Use this skill whenever the user wants to write, create, draft, generate, update, improve, or rewrite a README — including phrasings like "write a readme", "document this project", "make a readme for my repo", "the readme is terrible, fix it", or "I need docs for this package". Also triggers when a user shares a repo or codebase and asks for documentation, a project description, a GitHub landing page, or a "getting started" doc. Do NOT use for general markdown writing unrelated to project READMEs (e.g. blog posts, changelogs, design docs).
npx skillsauth add psenger/ai-agent-skills readme-writerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Produce README.md files that help a reader decide, in under thirty seconds, whether the project is worth their time — and then help them use it successfully.
A good README is a conversion funnel: headline → understand → install → first success → deeper docs. Every section either moves the reader along that funnel or earns its keep in some other way (badges signal trust, license reassures lawyers). Sections that don't serve the reader get cut.
Follow these steps in order. Don't skip the intake — a README written without knowing the project is a Mad Libs page of plausible nonsense.
Gather three kinds of information: what can be auto-detected, what must be asked, and what lives in the code.
Auto-detect by inspecting the repo. If you have filesystem access, look for:
package.json — Node project. Read name, description, version, scripts, dependencies, bin, main/exports, engines, repository, license, keywords.pyproject.toml / setup.py / setup.cfg — Python project. Read project name, deps, entry points, Python version constraints.Cargo.toml — Rust crate. Read [package] metadata.go.mod — Go module. Read module path and Go version.Gemfile / *.gemspec — Ruby.composer.json — PHP.pubspec.yaml — Dart/Flutter.Dockerfile, docker-compose.yml — containerized service..github/workflows/* — CI signals (test, build, deploy).LICENSE / LICENCE — license file.CHANGELOG.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md — existing docs to link to rather than duplicate.src/, lib/, cmd/, app/ layout — informs project shape.README.md — always read it first. If it exists, you're rewriting, not replacing; preserve anything still accurate (correct install commands, working examples, the project's actual voice).Classify the project. The shape of the README depends on what kind of thing this is:
| Project type | Signals | README emphasis |
|---|---|---|
| Library / SDK | exports modules, published to a registry | Install → import → 1-line "hello world" → API reference link |
| CLI tool | bin field, shebang scripts, cmd/ | Install → tool --help output → common recipes |
| Web app / service | Dockerfile, server framework, app/ | What it does → run locally → deploy → configure |
| Framework / starter | template structure, generator scripts | Create a project → file layout → extend it |
| Dev tool / plugin | plugs into another tool (ESLint, VSCode, Webpack) | Requirements → install → configure in host → what it changes |
| Dataset / model | data files, model weights, notebooks | What it is → schema/format → load it → cite it |
| Educational / demo | tutorial structure, step folders | What you'll learn → prerequisites → run each step |
If you're unsure, ask the user directly — one question ("Is this a library people import, a CLI they run, or a service they deploy?") beats guessing.
Ask the user for what only they know. Batch the questions so the user answers once, not five times:
Skip questions you can answer from the code. If package.json says "description": "A CLI for managing dotfiles", don't ask what the project does.
A README is not a checklist to complete. Include only sections that earn their place. Default skeleton:
<div align="center">
# Project Name
**One-line tagline — bold, not a blockquote.**
[](#) [](#) [](#)
[Features](#features) • [Quick Start](#quick-start) • [Installation](#installation) • [Usage](#usage)
</div>
---
Brief paragraph: what it does, who it's for, why it's different. 2–4 sentences.
## Installation
## Quickstart (or: Usage)
## [Feature-specific sections as needed]
## Configuration (if there's anything to configure)
## Development (if contributors are welcome)
## License
The <div align="center"> block is the standard header pattern. It centers the title, tagline, badges, and nav links on GitHub without any custom CSS. Always close </div> before the --- separator. Leave a blank line between each element inside the div. Nav links should cover the 4–6 most important sections, separated by •.
Mirror it with a closing footer block after the last content section:
---
<div align="center">
**One punchy closing line — what the project is for.**
[Report Bug](#) • [Request Feature](#) • [Documentation](#)
</div>
The footer bookends the page and gives skimmers a call to action. Keep it to one bold line and 2–3 links.
Conditional sections — include only when they apply:
/examples directory in the repo is often better than a wall of code in the README.CONTRIBUTING.md if it exists; otherwise a short section is fine. Don't copy-paste a generic contributor boilerplate that says nothing.For the full skeleton with recommended phrasings, see references/template.md. For section-by-section good/bad examples, see references/examples.md.
Lead with the hook. The first three lines decide whether the reader keeps going. After the title, the tagline and opening paragraph need to answer: what is this, who is it for, why should I care? Do not start with "Welcome to the XYZ repository." Do not start with a history lesson.
Code before prose. For any install/usage/example section, show the code first, explain second. Readers scan for code blocks; prose above them often goes unread. Compare:
Bad: "In order to install this package, you can use npm by running the following command in your terminal:" Good: just the code block, then a one-line caption if needed.
Examples must actually run. Every code block a reader might copy should work if pasted verbatim. Use realistic (not placeholder) values where possible. If you're inventing an example because you don't know the real API, ask — don't fabricate.
Be specific. "Fast" is not a feature. "Processes 10k rows/sec on a MacBook Air M1" is. If you don't have numbers, cut the adjective.
One good example beats three mediocre ones. Pick the 80% case and nail it.
Cut marketing. "Revolutionary", "powerful", "seamless", "cutting-edge", "next-generation" — these words appear in every bad README and signal nothing. Describe what the thing does.
Link out for depth. The README is a landing page, not a manual. Link to: full API docs, deployment guides, architecture notes, design decisions, security policy, changelog.
Use relative links for in-repo files. [See CONTRIBUTING](./CONTRIBUTING.md), not an absolute URL that'll break on forks.
Badges are signals, not decorations. Include them only when they carry information: build status, version, coverage, license, package downloads. Skip badges for "made with love" or the tenth social link. Place them on a single line under the tagline.
Headings are a table of contents. A reader should understand the shape of the document from headings alone. Use sentence case, keep them short, don't repeat the project name in every heading.
Write the file to the project root as README.md — or to wherever the user indicated. If rewriting an existing README, show the diff or the new full version and ask before overwriting; an unannounced overwrite of someone's README is a bad surprise.
If the user is in a chat context without filesystem access, return the README as a single markdown code block they can copy.
```bash, ```python) for syntax highlighting.$ prompt character — it breaks copy-paste.import { doTheThing } from 'my-package' without checking what the package actually exports. If the code isn't in front of you, ask; don't invent.package.json's name, not a guess.LICENSE says MIT, don't write "Apache-2.0" in the README. Read the file../foo.md link points to a file that exists.references/template.md — a fillable skeleton with commentary on each section. Read when you need a starting structure or want to check section wording.references/examples.md — side-by-side good-vs-bad examples for the hook, features list, install section, and usage section. Read when a draft feels generic and you need a pattern to pattern-match against.testing
Exports a single Obsidian vault note and all its linked images into a portable zip or tar.gz archive, preserving vault-root-relative paths so the archive unpacks correctly anywhere. Use only when the user explicitly invokes /export-vault-note.
development
Provides the audit checklists, severity criteria (blocking/warning/suggestion), and artifact patterns needed to properly review Agent OS profiles and standards. Always invoke this skill before auditing - without it you can only give generic feedback, not structured severity-tagged findings. Invoke when the user pastes a standard and asks if it is good or what is wrong with it; when the user asks to review, audit, validate, or critique an agent-os profile or standard; or when the user mentions "agent-os profile", "agent-os standard", or "my agent-os setup" in a review or validation context.
development
Converts transcripts, video summaries, meeting notes, brainstorming sessions, strategy documents, and rough notes into polished Obsidian-flavored Markdown. Activates when creating or editing notes in an Obsidian vault, generating front matter, applying callout blocks, structuring knowledge base articles, or producing developer-facing guides. Also triggers on mentions of Obsidian, front matter, callout blocks, vault organisation, or requests for GitHub-compatible Markdown documents.
documentation
Generate git commit messages, PR titles/descriptions, and changelog entries. Analyzes staged changes, enforces Conventional Commits, scans for sensitive content, links tickets (GitHub Issues / Jira), and updates CHANGELOG.md. Triggers on: "commit", "create a PR", "push", "changelog", "release", or when the user is ready to commit or open a pull request.