github-markdown-style · git:20261010.aa5a7d0 · 2026-10-10 · sha256 f68f84937c7aed99
github-markdown-style git:20261010.aa5a7d0A
Immutable. This exact content never changes and is served at /api/v1/blob/f68f84937c7aed99.
---
name: "github-markdown-style"
description: Create, edit, review, or improve GitHub Markdown documentation (README.md, CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, CHANGELOG.md, issue and pull-request templates, docs pages, and other Markdown-based project guides) using the principles of The Elements of Style by Strunk and White. Use whenever writing, editing, reviewing, or proofreading GitHub-flavored Markdown prose or documentation, including style and tone checks.
---
# GitHub Markdown Style
## Purpose
Use this skill whenever creating, editing, reviewing, or improving GitHub Markdown documentation.
The primary editorial authority is **The Elements of Style by William Strunk Jr. and E. B. White** ("Strunk & White").
The goal is documentation that is:
* clear
* concise
* concrete
* direct
* precise
* readable
* consistent
* useful to the reader
Do not make prose ornate, promotional, vague, or unnecessarily conversational.
Preserve the author's technical meaning, factual claims, terminology, and intended audience unless the task explicitly asks for substantive changes.
## Core Editorial Rules
Apply these principles throughout the document.
### 1. Omit needless words
Remove words that do not add meaning.
Prefer:
> This command creates a new repository.
over:
> This command is used to create a new repository.
Prefer:
> To install the package, run:
over:
> In order to install the package, you should run:
Delete unnecessary:
* introductory phrases
* qualifiers
* redundant modifiers
* repeated explanations
* empty transitions
* throat-clearing
* corporate language
* unnecessary apologies
* unnecessary conclusions
Do not shorten text merely to make it shorter. Preserve information that helps the reader understand or use the project.
### 2. Use active voice
Prefer active constructions when they are clearer.
Prefer:
> The command creates the configuration file.
over:
> The configuration file is created by the command.
Use passive voice when the actor is unknown, irrelevant, or obvious, or when the passive construction makes the documentation clearer.
Do not mechanically convert every passive construction.
### 3. Use definite, specific, concrete language
Prefer precise statements over abstractions.
Weak:
> This provides a mechanism for handling configuration.
Better:
> The configuration file stores the server address and port.
Avoid vague words such as:
* thing
* stuff
* various
* several
* some
* appropriate
* properly
* easily
* simply
* basically
* generally
* usually
unless the imprecision is intentional and accurate.
Replace vague claims with concrete information whenever the source material provides it.
### 4. Put statements in positive form
State what something does rather than what it does not do, when practical.
Prefer:
> The command accepts one input file.
over:
> The command does not accept multiple input files.
Prefer:
> Use `--verbose` to enable diagnostic output.
over:
> You should not run the command without `--verbose` if you want diagnostic output.
Negative statements are appropriate when the prohibition or limitation itself is important.
### 5. Use specific nouns and strong verbs
Prefer a strong verb over a noun-plus-weak-verb construction.
Prefer:
> The tool validates the configuration.
over:
> The tool performs validation of the configuration.
Prefer:
> The script generates the manifest.
over:
> The script is responsible for the generation of the manifest.
### 6. Avoid unnecessary modifiers
Use adjectives and adverbs only when they add information.
Avoid promotional or subjective modifiers such as:
* powerful
* easy
* simple
* seamless
* robust
* elegant
* incredibly
* extremely
* highly
* very
unless they convey a specific, defensible technical distinction.
Do not describe software as "easy to use" when the documentation can instead explain how to use it.
### 7. Make every word count
Do not repeat information merely for emphasis.
When information appears in:
* a table
* a list
* a code example
* a preceding paragraph
* a heading
do not restate it unnecessarily.
Documentation should minimize the reader's cognitive load.
## Structure and Organization
### 8. Start with the information the reader needs
Do not begin documentation with unnecessary background.
For a README, prefer a structure such as:
1. Project name
2. One-sentence description
3. Key information or status
4. Installation
5. Quick start
6. Usage
7. Configuration
8. Examples
9. Development
10. Contributing
11. License
Adapt the structure to the project.
Do not impose sections that contain no useful information.
### 9. Use headings to reveal structure
Headings should describe their content.
Prefer:
```markdown
## Installation
## Configuration
## Usage
## Troubleshooting
```
Avoid vague headings such as:
```markdown
## Getting Started
## More Information
## Other Things
```
unless they accurately describe the material underneath them.
Keep headings brief and unembellished: `## Snapshots`, not `## Undo insurance: snapshots`. Never phrase a heading as a question. Questions and answers belong only in a FAQ section, and add FAQ items only when asked.
Do not create excessive heading levels.
Put only what the reader needs in the body. Move useful supporting detail, such as the reason for a requirement, to a footnote (`[^1]`). Remove detail that serves no reader.
### 10. Keep related information together
Place explanations, prerequisites, commands, and caveats near the task they describe.
Do not force readers to search elsewhere in the document for information required to understand an example.
### 11. Use lists when items are genuinely parallel
Use bullets for unordered collections.
Use numbered lists when:
* order matters
* the reader must perform steps sequentially
* the items represent a ranked or ordered process
Each item in a list should use parallel grammatical construction.
Prefer:
```markdown
1. Install the dependencies.
2. Configure the application.
3. Start the server.
```
over a mixture of grammatical forms.
## GitHub Markdown Rules
### 12. Write for GitHub's rendered Markdown
Use valid, conventional GitHub-Flavored Markdown.
Prefer:
* ATX headings (`# Heading`)
* fenced code blocks
* descriptive link text
* tables when tabular structure improves comprehension
* task lists for actionable checklists
* blockquotes for actual quotations
* semantic Markdown rather than HTML when Markdown is sufficient
Avoid unnecessary HTML.
Use HTML only when GitHub Markdown cannot express the required presentation adequately.
### 13. Use descriptive links
Prefer:
```markdown
See the [installation guide](docs/installation.md).
```
over:
```markdown
Click [here](docs/installation.md).
```
Avoid bare URLs when descriptive link text is practical.
Link text should identify the destination.
### 14. Make code examples executable when possible
Code examples should be:
* syntactically valid
* minimal
* relevant
* complete enough to demonstrate the stated behavior
Prefer:
```bash
git clone https://github.com/example/project.git
cd project
make
```
over an incomplete fragment that requires the reader to infer missing steps.
Do not add unnecessary commands merely to make an example appear complete.
### 15. Identify code languages
Use language identifiers on fenced code blocks whenever the language is known.
Prefer:
````markdown
```bash
npm install
```
````
over:
````markdown
```
npm install
```
````
Use `text` when the content is textual but does not represent source code.
### 16. Keep prose outside code blocks
Do not put explanatory prose inside a code block merely to preserve formatting.
Use a paragraph before or after the example.
### 17. Do not alter code merely for style
When editing documentation, distinguish between:
1. prose
2. Markdown structure
3. code examples
4. literal command output
5. configuration examples
Do not change technically meaningful code, commands, API names, identifiers, output, or configuration syntax unless the task explicitly includes technical correction.
If a code example appears incorrect, identify the problem rather than silently changing its semantics.
## README-Specific Rules
### 18. The opening must answer three questions quickly
A README should make it clear:
1. What is this project?
2. What problem does it solve?
3. Why would the reader use it?
Do this concisely.
A useful opening is generally more valuable than a long project history.
### 19. Keep the project description concrete
Prefer:
> `foo` converts Vim configuration files into JSON.
over:
> `foo` is a powerful and flexible solution for seamlessly managing your configuration workflow.
The first tells the reader what the software does.
### 20. Installation instructions must be actionable
State:
* prerequisites
* supported platforms when relevant
* installation commands
* required versions
* important environment variables
* post-installation steps
Do not make the reader infer required steps.
### 21. Quick starts should be genuinely quick
A quick-start section should demonstrate the smallest useful path from installation to successful use.
Avoid turning the quick start into a comprehensive tutorial.
### 22. Examples should demonstrate real usage
Prefer examples that answer likely user questions.
Use realistic names and values unless placeholders are necessary.
When placeholders are used, make them visually obvious:
```bash
mytool --config /path/to/config.toml
```
Avoid examples that look executable but contain unexplained fake values.
## Technical Accuracy
### 23. Never trade accuracy for brevity
Concise documentation that is wrong is worse than longer documentation that is correct.
Preserve important:
* version requirements
* platform limitations
* compatibility information
* warnings
* edge cases
* error conditions
* security considerations
* configuration constraints
Remove words, not necessary facts.
### 24. Distinguish facts from recommendations
State factual behavior directly.
For example:
> The application reads configuration from `$XDG_CONFIG_HOME`.
For recommendations, make the recommendation explicit:
> Use `$XDG_CONFIG_HOME` when you need to keep configuration outside the default location.
Do not disguise opinions as technical facts.
### 25. Do not make unsupported claims
Avoid claims such as:
* fastest
* easiest
* best
* most powerful
* production-ready
* secure
* lightweight
* highly reliable
unless they are supported by evidence or are clearly framed as an opinion.
Prefer measurable facts.
## Grammar and Usage
### 26. Use standard grammar
Correct:
* subject/verb agreement
* pronoun references
* modifier placement
* verb tense
* capitalization
* punctuation
* parallel construction
Do not introduce grammatical errors in the name of conversational style.
### 27. Prefer simple words
Prefer a familiar word when it expresses the meaning precisely.
Prefer:
* use over utilize
* help over facilitate
* start over commence
* show over display when appropriate
* before over prior to
* about over approximately when precision is not required
Technical terminology is appropriate when it is the correct term.
Do not replace established technical vocabulary merely to make prose simpler.
### 28. Avoid needless nominalization
Prefer:
> Configure the server.
over:
> Perform configuration of the server.
Prefer:
> The program validates the file.
over:
> The program performs validation of the file.
### 29. Maintain consistent terminology
Use one term for one concept.
If the software calls something a "workspace," do not alternate between:
* workspace
* project
* environment
* working area
unless these terms have distinct meanings.
Preserve terminology already established by the project.
## Punctuation
### 30. Use punctuation to clarify structure
Punctuation should make sentences easier to parse.
Use commas, semicolons, colons, parentheses, and em dashes deliberately.
Do not add punctuation merely because a sentence feels long.
### 31. Use the serial comma consistently
Use the serial comma in lists of three or more items.
Prefer:
> Linux, macOS, and Windows
over:
> Linux, macOS and Windows
### 32. Use parentheses only for a purpose
Purposeful uses: code and command syntax (`:Cmd {arg}`), link syntax, and short values in tables. Otherwise make the content part of a sentence or its own sentence. Do not bury essential instructions in parentheses. In tables, use one form consistently.
### 33. Limit dashes and semicolons
Use at most two of each per document: dashes used as punctuation (` - `, em dash, en dash) and semicolons. Exceed this only when necessary. Hyphens in names (`vim-nox`) and a dash between a term and its definition in a list (`**Logger** - a logging utility`) do not count. Rewrite the rest as separate sentences. These marks are correct grammar, but frequent use is off-putting to readers.
## Tone
### 34. Be direct and professional
Documentation should sound like an experienced technical writer explaining something clearly.
Avoid:
* marketing language
* hype
* fake enthusiasm
* unnecessary friendliness
* jokes that obscure meaning
* rhetorical questions
* excessive exclamation points
* corporate jargon
Prefer:
> Install the package with:
over:
> Getting started is super easy! Just run the following command!
### 35. Address the reader directly when useful
"you" is acceptable when giving instructions.
For example:
> Run the command from the project directory.
Avoid excessive second-person phrasing when an imperative is clearer.
### 36. Do not apologize unnecessarily
Do not write:
> Sorry for the inconvenience.
unless the apology is genuinely part of the communication being documented.
State the problem and solution directly.
## Revision Procedure
When asked to edit or improve a Markdown document, follow this process.
### Step 1: Determine the document's purpose
Identify:
* intended audience
* primary task
* expected reader knowledge
* document type
* technical context
Do not rewrite blindly.
### Step 2: Preserve meaning
Before changing prose, determine what each section communicates.
Do not remove information simply because it is verbose.
### Step 3: Remove needless words
Delete:
* redundancy
* filler
* unnecessary qualifiers
* unnecessary introductions
* repeated conclusions
* promotional language
### Step 4: Improve sentence construction
Check for:
* passive voice
* weak verbs
* nominalizations
* vague references
* ambiguous pronouns
* excessive sentence length
* misplaced modifiers
* inconsistent terminology
Rewrite where doing so improves clarity.
### Step 5: Improve organization
Check whether:
* sections appear in a useful order
* prerequisites appear before dependent instructions
* examples appear near the concepts they demonstrate
* headings accurately describe their contents
* related information is grouped together
### Step 6: Check Markdown
Verify:
* heading hierarchy
* fenced code blocks
* language identifiers
* links
* lists
* tables
* task lists
* escaping
* blank lines
* GitHub rendering conventions
### Step 7: Check technical integrity
Do not silently alter:
* commands
* APIs
* filenames
* paths
* identifiers
* configuration keys
* version numbers
* code semantics
unless correction is explicitly requested or the error is unambiguous.
### Step 8: Perform a final Strunk & White pass
Ask:
* Can any word be removed without losing meaning?
* Is every sentence clear?
* Is the subject doing the action where appropriate?
* Are the nouns specific?
* Are the verbs strong?
* Are unnecessary modifiers gone?
* Are statements positive where practical?
* Are related words together?
* Is the document's structure obvious?
* Does every section serve the reader?
## Review Mode
When asked to **review** rather than rewrite a document, do not automatically rewrite it.
Report findings under useful categories such as:
* Clarity
* Concision
* Grammar
* Organization
* Terminology
* Markdown
* Technical documentation quality
For each significant issue:
1. quote or identify the relevant text
2. explain the problem
3. identify the applicable principle
4. propose a correction when useful
Prioritize substantive problems over stylistic preferences.
Do not manufacture issues merely to produce a longer review.
## Rewrite Mode
When asked to **rewrite, improve, polish, or edit** a document:
* preserve technical meaning
* preserve the author's intended audience
* preserve established project terminology
* improve clarity and concision
* fix grammar and Markdown
* remove unnecessary words
* improve organization when necessary
* retain useful technical detail
Return the complete revised document when the user asks for a finished document.
Do not surround the Markdown document with commentary unless requested.
## Minimal-Change Mode
When the user asks for proofreading or minimal editing:
Make the smallest changes necessary to correct:
* grammar
* spelling
* punctuation
* obvious ambiguity
* Markdown errors
Do not restructure the document or substantially alter its voice.
## Aggressive-Editing Mode
When the user asks for a substantial improvement:
You may:
* reorder sections
* rewrite sentences
* consolidate redundant material
* replace vague language
* improve examples
* restructure lists
* improve headings
* eliminate unnecessary sections
Still preserve the technical meaning unless the user requests substantive content changes.
## Conflict Resolution
When editorial principles conflict with technical accuracy, **technical accuracy wins**.
When brevity conflicts with necessary context, **necessary context wins**.
When grammatical correctness conflicts with established code, API, command, or configuration syntax, **the technical syntax wins**.
When a project's established terminology conflicts with ordinary English terminology, use the project's terminology when it refers to a project-specific concept.
When a GitHub Markdown convention conflicts with an abstract stylistic preference, use the GitHub convention.
## Output Standards
Unless the user requests otherwise:
* return valid GitHub-flavored Markdown
* do not add unnecessary commentary
* do not add a "Conclusion" section merely to summarize the document
* do not add sections that contain no useful information
* do not use decorative language
* do not use emojis in technical documentation
* do not add claims that cannot be supported by the source material
* do not change technical semantics for stylistic reasons
The final document should read as though a careful technical writer removed everything unnecessary while preserving everything the reader needs.