Write Clear README
Important — Writing rules
Apply these rules to emitted prose: docs, comments, commit messages, PR bodies, and release notes.
- Match surrounding punctuation, capitalization, and formatting.
- Every sentence changes the reader's understanding. Cut it otherwise.
- Lead with the action or outcome.
- Use concrete language and lists when they improve comparison or sequence.
- Assert positively. Reserve negation for real constraints (
NEVER commit secrets).
- No marketing words: powerful, robust, seamlessly, leverage, unlock, comprehensive, delightful.
- No AI tells: delve, tapestry, intricate, pivotal, testament, underscore, crucial, garner, showcase, additionally, moreover, furthermore, indeed.
- For substantive English prose, use
/humanize-en if installed with the existing scope and authorization. It adds no approval stage; skip redundant passes over short status text.
Author, audit, or polish a README.md for clarity and scannable structure. Read repository truth first. Explicit author/polish requests authorize local edits; audit/propose stays read-only. Carry this target and mode through a nested prose pass without another approval prompt. Publication is a separate action.
Additional context from the user: $ARGUMENTS
Context
- Repo: !
basename $(git rev-parse --show-toplevel 2>/dev/null || echo unknown)
- Existing README: !
test -f README.md && wc -l < README.md | awk '{print $1 " lines"}' || echo "none"
- Package manifest: !
test -f package.json && jq -r '.name + "@" + .version' package.json 2>/dev/null || echo "none"
- Top-level folders: !
ls -d */ 2>/dev/null | head -20 | tr '\n' ' '
Doc type → pattern
Long READMEs cause scroll fatigue. The fix is a structural decision before any prose: pick one collapse pattern for the whole doc and apply it uniformly. Selective collapse driven by per-section judgment — some sections visible, some hidden — creates a minefield. Readers cannot infer the rule, every heading becomes a guess.
| Doc type |
Default pattern |
Why |
| Short single-purpose (<5 sections, <300 lines) |
No collapse |
Adds clicks for no scroll savings |
Long human-facing, mixed-audience (config docs, personal ~/.claude/ companions, internal index READMEs) |
Pattern A — Per-section collapse |
One file, audiences self-select via expand; h2s read as scan-line |
| Skill library / plugin monorepo / package index (5+ peers, ≤7 groups) |
Pattern B — Grouped collapse |
Groups stay visible as scan-map; details hide |
| Library / SDK / CLI reference (dozens of API entries) |
Pattern C — Per-entry collapse |
Each function/command independently expandable |
Content shape comes before collapse. See Author mode — Step 0.
Pattern A — Per-section collapse
When: long human-facing doc serving more than one audience in one file (install + reference + meta-instructions). Per-section collapse turns the h2 list into a scan-line; readers expand only the section that matches their job.
H2 stays uncollapsed (scan-line + anchor target). Every sub-section inside h2 wraps in a <details> with the section label as <summary>. Drop the h3 above the disclosure — the <summary> carries the label.
## Section name
Short intro paragraph (optional, visible).
<details>
<summary><em>Sub-section one</em></summary>
<br>
Content for sub-section one. Tables, paragraphs, code blocks.
</details>
<details>
<summary><em>Sub-section two</em></summary>
<br>
Content for sub-section two.
</details>
Two acceptable variants — pick one per h2 and stay consistent across the file:
- Full per-section collapse — no visible intro, every sub-section in
<details>.
- Intro + per-section collapse — one short paragraph visible under each h2, then every sub-section in
<details>. Use when the intro carries enough signal for the reader to decide whether to click.
What does NOT work: ad-hoc selective collapse where some sub-sections are visible and others hidden based on length or "frequency of use." The rule must be self-evident from the structure.
Trade-off — dropping the h3 loses the per-sub-section anchor. Acceptable for internal-facing docs with h2-only TOCs. When deep anchors matter (cross-doc links, external bookmarks), keep the h3 inside the <details> — GitHub auto-expands on hash navigation and the anchor resolves.
Pattern B — Grouped collapse
When: 5+ peer items cluster into ≤7 logical groups. Typical: skill libraries, plugin ecosystems, monorepo package indexes, component catalogs.
Group heading stays OUTSIDE <details> so #group-name anchors keep working. Per-item content goes inside.
### Group Name
<details>
<summary><em>item1 · item2 · item3</em></summary>
<br>
#### item1
...
#### item2
...
</details>
Keep an overview table at the top listing all items with anchor links — users see the full scope without clicking.
Pattern C — Per-entry collapse
When: reference docs with dozens of API entries, functions, CLI commands, or config options. Typical: npm package READMEs, SDK references, CLI manuals.
Signature in <summary> (inside <code> for monospace), one-line description after an em-dash, full detail hidden until expanded:
## API
<details>
<summary><code>functionName(arg: T, opts?: Options): Result</code> — one-line description</summary>
<br>
Longer explanation. Params table, return value, edge cases, examples.
```ts
// usage
```
</details>
<details>
<summary><code>anotherFunction(x: X): Y</code> — what it does</summary>
...
</details>
Underused pattern — most npm READMEs list signatures as flat headings and force a 3000-line scroll. The <details> version is dramatically more scannable for reference-heavy docs.
Universal rules
- Overview visible — TOC, tables, API index stay uncollapsed. Collapse details, not the list.
- Anchors preserved — navigation targets (group headings, API section heading) go OUTSIDE
<details>. Headings inside still auto-anchor, and GitHub auto-expands the parent <details> on hash navigation.
- One rule per level — when applying any collapse pattern, every peer at the chosen level collapses or none does. Selective collapse driven by per-section judgment ("collapse if length > N") is forbidden — mixed visibility without an obvious rule turns the page into a minefield.
- No
Expand — prefix — the disclosure triangle is the universal affordance. <summary><em>Files installed</em></summary> reads cleanly; <summary><em>Expand — files installed</em></summary> adds a word of noise on every block and signals the author distrusts the reader.
- No h3 directly above
<details> that repeats the <summary> label — duplicate signal. Drop the h3 and let the <summary> carry the label, OR move the h3 inside the <details> if the deep anchor matters.
- No stale counts in
<summary> or prose — "25 symlinks", "14 tasks", "8 imports" rot the moment a row is added. Use qualitative descriptors: "symlinks installed by install.sh", "declared periodic tasks".
<br> after <summary> — markdown rendering inside <details> can be flaky; the explicit break is defensive and consistent.
- No deep nesting — one level of
<details> max; nested collapsibles confuse navigation.
- Signature-first summary (Pattern C) — put the most identifying token first (function signature, command name, option name) so
Ctrl+F hits the right entry immediately.
When NOT to collapse
- Short docs (<5 major sections, <300 lines) — adds clicks for no scroll savings.
- Install / Quick Start / Requirements — users need these instantly visible.
- Single-purpose tools where the README is already concise.
- Cases where no self-evident rule connects the choices — leave everything visible rather than ship a minefield.
Subcommands
Resolve natural-language author/polish/audit intent before these shorthand defaults. An invoking parent passes the user's existing target and mode; empty tool arguments do not reset an authorized polish to audit or create authority to edit another file.
| Invocation |
Mode |
/write-clear-readme |
Default — if README.md exists, audit. Else, author from repo state. |
/write-clear-readme author [path] |
Create or fully restructure a README from scratch. |
/write-clear-readme audit [path] |
Review existing README for collapse opportunities + anchor/overview integrity + clarity issues. |
/write-clear-readme polish [path] |
Tighten wording, drop filler, clarify ambiguous passages — preserve structure, change only the prose. |
README-specific style
The canonical Writing rules block above carries the universal prose rules. The bullets below add what is specific to authoring a README:
- First-3-lines test. A reader given only the first three lines must be able to (a) decide whether the doc is for them, and (b) predict the next section. A generic tagline followed by a list-of-contents fails the test — it asks for positioning, not enumeration.
- Backtick code-like tokens — file paths, command names, function names, env vars.
~/.claude/rules/ not ~/.claude/rules/.
- Em-dashes for context, not parentheses —
(also see foo) → — also see foo. Reads less aside-y.
- Headings as questions or commands, not topics. "Installation" is fine; "How do I install?" or "Install" reads quicker than "About installation".
- Qualitative over quantitative — describe what content is, not how much of it. "Symlinks created by
install.sh" beats "25 symlinks created by install.sh"; the count rots on add.
Adjacent skills
/humanize-en — AI-tell stripping. Called by author and polish modes after clarity edits; audit mode flags AI tells without rewriting. Also usable standalone.
AI-tell removal — skill-specific notes
The canonical Writing rules block already requires invoking /humanize-en after any English-prose draft. The notes below pin two skill-specific behaviors:
- Audit mode: flag suspected AI tells in the findings but do not auto-rewrite.
- Non-English content: skip the humanize-en pass entirely — it is English-only.
Author mode
- Inspect repo — read its manifest, relevant entry points and active instruction entrypoint (AGENTS.md, CLAUDE.md or local equivalent). Identify what the README must cover (install, usage, API surface, architecture, license).
- Map audiences — list the implicit reader for each major section (first-time installer, daily user, maintainer, agent reading CLAUDE.md context). Multi-audience files are candidates for Pattern A.
- Step 0 — Content shape (BEFORE picking a collapse pattern):
- Can content be cut? Sections that no longer earn their place.
- Can a thin section merge into its parent?
- Can a long table split by category into micro-tables?
- Can a redundant column drop? (e.g. a
Source column that just repeats the file path already in the row label.)
- Can six bullets become one sentence? Or a long paragraph become bullets?
- Only after shape is settled: pick a collapse pattern.
- Pick a pattern — use the Doc type → pattern table. Confirm one rule per level applies cleanly; if not, simplify the structure further or fall back to no collapse.
- Draft — overview table at top with anchor links, Install / Quick Start / Requirements uncollapsed, chosen collapse pattern applied uniformly below. Apply the canonical Writing rules + README-specific style as you write.
- Strip AI traces — for English content, invoke
/humanize-en on the draft (see AI-tell removal — skill-specific notes above). Skip if the skill is unavailable or the content is non-English.
- Verify structure — every TOC anchor resolves. Every
<details> has a <br> after <summary>. No nested collapsibles. Install block is never inside <details>. Pattern applied uniformly across all peers at the chosen level. No Expand — in <summary>. No h3 above a <details> that repeats the <summary> label. No numeric counts adjacent to content nouns.
- Verify rendering — view the rendered output (GitHub preview, IDE markdown preview, or ask the user to confirm visually). Source-only checks miss visual monotony and inconsistent collapse patterns.
- Write — overwrite or create
README.md. Present the diff if it existed before.
Audit mode
Silent assumption — name it. This audit evaluates structure, anchor integrity, collapse uniformity, and prose tells. It does NOT evaluate whether the right content is in this file. For that, consider whether sections should be cut, merged, reshaped, or split into adjacent files — and ask the user before rewriting scope.
$SKILL_DIR = this skill's folder — ${CLAUDE_SKILL_DIR} in Claude Code, the directory containing this SKILL.md elsewhere.
- Read existing README in full.
- Run the structural audit script:
"$SKILL_DIR"/scripts/audit_readme.py <path> emits a JSON report covering unresolved anchors, nested <details>, missing <br> after <summary>, bloat tokens, Expand — prefixes, stale counts adjacent to nouns, h3-above-details redundancy, and a visual-rhythm signal (callout + image density). Exit 1 on hard findings; the JSON is your hit-list.
- Score against Universal rules (structure — use the script output first):
- Is the overview (TOC / index / table) visible without clicking?
- Do all anchors resolve?
- Are any
<details> blocks nested?
- Is
<br> present after every <summary>?
- Is the chosen collapse pattern applied uniformly at one level? (No mixed-visibility peers.)
- Any
<summary> starting with Expand —?
- Any h3 directly above a
<details> whose <summary> repeats the label?
- Any numeric counts adjacent to content nouns ("25 X", "14 Y") that would rot on add?
- Score against the canonical Writing rules + README-specific style (prose — the script covers mechanical bloat, you cover the rest):
- First-3-lines test — can a reader decide if the doc is for them AND predict the next section?
- Verbose passages where bullets would do?
- Code-like tokens unbacktick'd?
- Map audiences — for each major section, identify the implicit reader. When the file serves more than two audiences, flag as a Pattern A candidate.
- Visual rhythm — soft signal from the script. Long user-facing READMEs with zero GitHub callouts (
> [!NOTE|TIP|WARNING|IMPORTANT|CAUTION]) and zero images read as flat. Surface as a suggestion, not a finding.
- Detect anti-patterns:
- Flat signature list 50+ lines deep → recommend Pattern C.
- 5+ peer sub-sections under one h2 in a long human-facing doc → recommend Pattern A.
- 10+ peer sections clustering into groups → recommend Pattern B.
- Selective
<details> — some peers collapsed, others not, no inferable rule → call out as minefield; recommend uniform collapse or none.
<details> wrapping a group/section heading → broken anchor, must move heading outside.
- Nested
<details> → flatten to one level (flagged by the script).
- Install / Quick Start / Requirements inside a
<details> → must surface.
- Report — bullet list of findings (split structure vs clarity vs content-shape suggestions) + proposed diff.
- Verify rendering after edits — view the rendered output before declaring done.
- Audit boundary — report the proposed changes without editing README.md. A later explicit fix request authorizes applying its named scope.
Polish mode
Wording-only pass. Structure stays as-is — only the prose changes.
- Read existing README in full.
- Apply the canonical Writing rules + README-specific style sentence by sentence:
- Drop filler phrases.
- Replace marketing voice with concrete verbs.
- Split compound sentences.
- Tighten verbose passages into bullets when enumerable.
- Backtick code-like tokens.
- Replace
(parens) with em-dashes where they are aside-context.
- Replace numeric content-counts with qualitative descriptors.
- Strip AI traces — for English content, invoke
/humanize-en on the result (see AI-tell removal — skill-specific notes above). Skip if the skill is unavailable or the content is non-English.
- Preserve all anchors, headings, code blocks, diagrams, badges, and link URLs verbatim.
- Apply and report — apply the authorized wording changes, verify rendering and present the diff. If the user requested a proposal only, report it without modifying the target.
Rules
- Preserve the authorized target and mode: explicit author/polish edits; audit/propose does not. A filepath or casual README mention alone grants no edit authority.
- NEVER collapse Install / Quick Start / Requirements — what a first-time reader needs is never behind a click.
- NEVER nest
<details> blocks — GitHub renders nested disclosure unreliably.
- NEVER wrap a group heading or a TOC anchor target inside
<details> — a collapsed heading vanishes from the visual scan, and auto-expand on anchor jumps is not reliable across renderers.
- NEVER apply Pattern A or B partially — every peer at the chosen level collapses or none does.
- NEVER prefix
<summary> with Expand — (or Expand –, Expand -) — the disclosure triangle already says it.
- NEVER put a numeric content-count adjacent to a noun in prose or
<summary> — counts go stale on the next edit; qualitative descriptors only.
- NEVER change anchors, code blocks, or link URLs in polish mode (those are content, not prose).
- ALWAYS add
<br> after <summary> — GitHub needs it to render the first inner block.
- ALWAYS match the existing README's style (quote convention, heading hierarchy, badge format) when editing.
- ALWAYS verify the rendered output before declaring done (GitHub preview, IDE preview, or user confirmation).
- Empty
$ARGUMENTS follows the Subcommands default row above. Non-empty: first token is the subcommand, second is the path.
Gotchas
- Mixed
<details> collapse across peers is a minefield. Pattern A/B require uniformity: every peer at the chosen level collapses or none does. When applying collapse, audit every peer and normalize before declaring done.
- Topic-form headings ("About installation", "Installation overview") violate the questions-or-commands rule at § README-specific style. Convert to imperative ("Install") or question ("How do I install?").
- Numeric content-counts adjacent to nouns rot fast. "25 symlinks" or "14 tasks" go stale the moment a row lands. Use qualitative descriptors instead ("symlinks installed by
install.sh").
<details> wrapping a heading breaks GitHub anchors. <details><summary>### API</summary> makes #api un-clickable from external links; the disclosure does not auto-expand on anchor click. Keep headings outside <details>.
1---2name: write-clear-readme3description: Author, restructure, audit or polish a project README for clarity and scannability. Reads repository truth, preserves anchors and code, and verifies rendering. Explicit author/polish requests apply local changes; audit/propose stays read-only. Use for README creation, wording, structure and navigation, including skill collections and CLI/SDK docs.4license: MIT5---67# Write Clear README89<!-- canonical:writing-rules:start -->10## Important — Writing rules1112Apply these rules to emitted prose: docs, comments, commit messages, PR bodies, and release notes.1314- Match surrounding punctuation, capitalization, and formatting.15- Every sentence changes the reader's understanding. Cut it otherwise.16- Lead with the action or outcome.17- Use concrete language and lists when they improve comparison or sequence.18- Assert positively. Reserve negation for real constraints (`NEVER commit secrets`).19- No marketing words: powerful, robust, seamlessly, leverage, unlock, comprehensive, delightful.20- No AI tells: delve, tapestry, intricate, pivotal, testament, underscore, crucial, garner, showcase, additionally, moreover, furthermore, indeed.21- For substantive English prose, use `/humanize-en` if installed with the existing scope and authorization. It adds no approval stage; skip redundant passes over short status text.22<!-- canonical:writing-rules:end -->2324Author, audit, or polish a README.md for clarity and scannable structure. Read repository truth first. Explicit author/polish requests authorize local edits; audit/propose stays read-only. Carry this target and mode through a nested prose pass without another approval prompt. Publication is a separate action.2526Additional context from the user: $ARGUMENTS2728## Context2930- Repo: !`basename $(git rev-parse --show-toplevel 2>/dev/null || echo unknown)`31- Existing README: !`test -f README.md && wc -l < README.md | awk '{print $1 " lines"}' || echo "none"`32- Package manifest: !`test -f package.json && jq -r '.name + "@" + .version' package.json 2>/dev/null || echo "none"`33- Top-level folders: !`ls -d */ 2>/dev/null | head -20 | tr '\n' ' '`3435## Doc type → pattern3637Long READMEs cause scroll fatigue. The fix is a structural decision before any prose: pick one collapse pattern for the whole doc and apply it uniformly. Selective collapse driven by per-section judgment — some sections visible, some hidden — creates a minefield. Readers cannot infer the rule, every heading becomes a guess.3839| Doc type | Default pattern | Why |40|----------|-----------------|-----|41| Short single-purpose (<5 sections, <300 lines) | **No collapse** | Adds clicks for no scroll savings |42| Long human-facing, mixed-audience (config docs, personal `~/.claude/` companions, internal index READMEs) | **Pattern A — Per-section collapse** | One file, audiences self-select via expand; h2s read as scan-line |43| Skill library / plugin monorepo / package index (5+ peers, ≤7 groups) | **Pattern B — Grouped collapse** | Groups stay visible as scan-map; details hide |44| Library / SDK / CLI reference (dozens of API entries) | **Pattern C — Per-entry collapse** | Each function/command independently expandable |4546Content shape comes before collapse. See [Author mode — Step 0](#author-mode).4748### Pattern A — Per-section collapse4950**When**: long human-facing doc serving more than one audience in one file (install + reference + meta-instructions). Per-section collapse turns the h2 list into a scan-line; readers expand only the section that matches their job.5152H2 stays uncollapsed (scan-line + anchor target). Every sub-section inside h2 wraps in a `<details>` with the section label as `<summary>`. Drop the h3 above the disclosure — the `<summary>` carries the label.5354```markdown55## Section name5657Short intro paragraph (optional, visible).5859<details>60<summary><em>Sub-section one</em></summary>6162<br>6364Content for sub-section one. Tables, paragraphs, code blocks.6566</details>6768<details>69<summary><em>Sub-section two</em></summary>7071<br>7273Content for sub-section two.7475</details>76```7778Two acceptable variants — pick one per h2 and stay consistent across the file:7980- **Full per-section collapse** — no visible intro, every sub-section in `<details>`.81- **Intro + per-section collapse** — one short paragraph visible under each h2, then every sub-section in `<details>`. Use when the intro carries enough signal for the reader to decide whether to click.8283What does NOT work: ad-hoc selective collapse where some sub-sections are visible and others hidden based on length or "frequency of use." The rule must be self-evident from the structure.8485**Trade-off** — dropping the h3 loses the per-sub-section anchor. Acceptable for internal-facing docs with h2-only TOCs. When deep anchors matter (cross-doc links, external bookmarks), keep the h3 inside the `<details>` — GitHub auto-expands on hash navigation and the anchor resolves.8687### Pattern B — Grouped collapse8889**When**: 5+ peer items cluster into ≤7 logical groups. Typical: skill libraries, plugin ecosystems, monorepo package indexes, component catalogs.9091Group heading stays OUTSIDE `<details>` so `#group-name` anchors keep working. Per-item content goes inside.9293```markdown94### Group Name9596<details>97<summary><em>item1 · item2 · item3</em></summary>9899<br>100101#### item1102...103104#### item2105...106107</details>108```109110Keep an overview table at the top listing all items with anchor links — users see the full scope without clicking.111112### Pattern C — Per-entry collapse113114**When**: reference docs with dozens of API entries, functions, CLI commands, or config options. Typical: npm package READMEs, SDK references, CLI manuals.115116Signature in `<summary>` (inside `<code>` for monospace), one-line description after an em-dash, full detail hidden until expanded:117118````markdown119## API120121<details>122<summary><code>functionName(arg: T, opts?: Options): Result</code> — one-line description</summary>123124<br>125126Longer explanation. Params table, return value, edge cases, examples.127128```ts129// usage130```131132</details>133134<details>135<summary><code>anotherFunction(x: X): Y</code> — what it does</summary>136...137</details>138````139140Underused pattern — most npm READMEs list signatures as flat headings and force a 3000-line scroll. The `<details>` version is dramatically more scannable for reference-heavy docs.141142## Universal rules143144- **Overview visible** — TOC, tables, API index stay uncollapsed. Collapse *details*, not the *list*.145- **Anchors preserved** — navigation targets (group headings, API section heading) go OUTSIDE `<details>`. Headings inside still auto-anchor, and GitHub auto-expands the parent `<details>` on hash navigation.146- **One rule per level** — when applying any collapse pattern, every peer at the chosen level collapses or none does. Selective collapse driven by per-section judgment ("collapse if length > N") is forbidden — mixed visibility without an obvious rule turns the page into a minefield.147- **No `Expand —` prefix** — the disclosure triangle is the universal affordance. `<summary><em>Files installed</em></summary>` reads cleanly; `<summary><em>Expand — files installed</em></summary>` adds a word of noise on every block and signals the author distrusts the reader.148- **No h3 directly above `<details>` that repeats the `<summary>` label** — duplicate signal. Drop the h3 and let the `<summary>` carry the label, OR move the h3 inside the `<details>` if the deep anchor matters.149- **No stale counts in `<summary>` or prose** — "25 symlinks", "14 tasks", "8 imports" rot the moment a row is added. Use qualitative descriptors: "symlinks installed by `install.sh`", "declared periodic tasks".150- **`<br>` after `<summary>`** — markdown rendering inside `<details>` can be flaky; the explicit break is defensive and consistent.151- **No deep nesting** — one level of `<details>` max; nested collapsibles confuse navigation.152- **Signature-first summary (Pattern C)** — put the most identifying token first (function signature, command name, option name) so `Ctrl+F` hits the right entry immediately.153154## When NOT to collapse155156- Short docs (<5 major sections, <300 lines) — adds clicks for no scroll savings.157- Install / Quick Start / Requirements — users need these instantly visible.158- Single-purpose tools where the README is already concise.159- Cases where no self-evident rule connects the choices — leave everything visible rather than ship a minefield.160161## Subcommands162163Resolve natural-language author/polish/audit intent before these shorthand defaults. An invoking parent passes the user's existing target and mode; empty tool arguments do not reset an authorized polish to audit or create authority to edit another file.164165| Invocation | Mode |166|------------|------|167| `/write-clear-readme` | Default — if `README.md` exists, audit. Else, author from repo state. |168| `/write-clear-readme author [path]` | Create or fully restructure a README from scratch. |169| `/write-clear-readme audit [path]` | Review existing README for collapse opportunities + anchor/overview integrity + clarity issues. |170| `/write-clear-readme polish [path]` | Tighten wording, drop filler, clarify ambiguous passages — preserve structure, change only the prose. |171172## README-specific style173174The canonical *Writing rules* block above carries the universal prose rules. The bullets below add what is specific to authoring a README:175176- **First-3-lines test.** A reader given only the first three lines must be able to (a) decide whether the doc is for them, and (b) predict the next section. A generic tagline followed by a list-of-contents fails the test — it asks for positioning, not enumeration.177- **Backtick code-like tokens** — file paths, command names, function names, env vars. `~/.claude/rules/` not ~/.claude/rules/.178- **Em-dashes for context, not parentheses** — `(also see foo)` → `— also see foo`. Reads less aside-y.179- **Headings as questions or commands**, not topics. "Installation" is fine; "How do I install?" or "Install" reads quicker than "About installation".180- **Qualitative over quantitative** — describe what content is, not how much of it. "Symlinks created by `install.sh`" beats "25 symlinks created by `install.sh`"; the count rots on add.181182## Adjacent skills183184- **`/humanize-en`** — AI-tell stripping. Called by `author` and `polish` modes after clarity edits; `audit` mode flags AI tells without rewriting. Also usable standalone.185186## AI-tell removal — skill-specific notes187188The canonical *Writing rules* block already requires invoking `/humanize-en` after any English-prose draft. The notes below pin two skill-specific behaviors:189190- **Audit mode:** flag suspected AI tells in the findings but do not auto-rewrite.191- **Non-English content:** skip the humanize-en pass entirely — it is English-only.192193## Author mode1941951. **Inspect repo** — read its manifest, relevant entry points and active instruction entrypoint (AGENTS.md, CLAUDE.md or local equivalent). Identify what the README must cover (install, usage, API surface, architecture, license).1962. **Map audiences** — list the implicit reader for each major section (first-time installer, daily user, maintainer, agent reading CLAUDE.md context). Multi-audience files are candidates for Pattern A.1973. **Step 0 — Content shape** (BEFORE picking a collapse pattern):198 - Can content be cut? Sections that no longer earn their place.199 - Can a thin section merge into its parent?200 - Can a long table split by category into micro-tables?201 - Can a redundant column drop? (e.g. a `Source` column that just repeats the file path already in the row label.)202 - Can six bullets become one sentence? Or a long paragraph become bullets?203 - Only after shape is settled: pick a collapse pattern.2044. **Pick a pattern** — use the *Doc type → pattern* table. Confirm one rule per level applies cleanly; if not, simplify the structure further or fall back to no collapse.2055. **Draft** — overview table at top with anchor links, Install / Quick Start / Requirements uncollapsed, chosen collapse pattern applied uniformly below. Apply the canonical *Writing rules* + *README-specific style* as you write.2066. **Strip AI traces** — for English content, invoke `/humanize-en` on the draft (see *AI-tell removal — skill-specific notes* above). Skip if the skill is unavailable or the content is non-English.2077. **Verify structure** — every TOC anchor resolves. Every `<details>` has a `<br>` after `<summary>`. No nested collapsibles. Install block is never inside `<details>`. Pattern applied uniformly across all peers at the chosen level. No `Expand —` in `<summary>`. No h3 above a `<details>` that repeats the `<summary>` label. No numeric counts adjacent to content nouns.2088. **Verify rendering** — view the rendered output (GitHub preview, IDE markdown preview, or ask the user to confirm visually). Source-only checks miss visual monotony and inconsistent collapse patterns.2099. **Write** — overwrite or create `README.md`. Present the diff if it existed before.210211## Audit mode212213> **Silent assumption — name it.** This audit evaluates structure, anchor integrity, collapse uniformity, and prose tells. It does NOT evaluate whether the right content is in this file. For that, consider whether sections should be cut, merged, reshaped, or split into adjacent files — and ask the user before rewriting scope.214215`$SKILL_DIR` = this skill's folder — `${CLAUDE_SKILL_DIR}` in Claude Code, the directory containing this SKILL.md elsewhere.2162171. **Read existing README** in full.2182. **Run the structural audit script**: `"$SKILL_DIR"/scripts/audit_readme.py <path>` emits a JSON report covering unresolved anchors, nested `<details>`, missing `<br>` after `<summary>`, bloat tokens, `Expand —` prefixes, stale counts adjacent to nouns, h3-above-details redundancy, and a visual-rhythm signal (callout + image density). Exit 1 on hard findings; the JSON is your hit-list.2193. **Score against Universal rules** (structure — use the script output first):220 - Is the overview (TOC / index / table) visible without clicking?221 - Do all anchors resolve?222 - Are any `<details>` blocks nested?223 - Is `<br>` present after every `<summary>`?224 - Is the chosen collapse pattern applied uniformly at one level? (No mixed-visibility peers.)225 - Any `<summary>` starting with `Expand —`?226 - Any h3 directly above a `<details>` whose `<summary>` repeats the label?227 - Any numeric counts adjacent to content nouns ("25 X", "14 Y") that would rot on add?2284. **Score against the canonical *Writing rules* + *README-specific style*** (prose — the script covers mechanical bloat, you cover the rest):229 - First-3-lines test — can a reader decide if the doc is for them AND predict the next section?230 - Verbose passages where bullets would do?231 - Code-like tokens unbacktick'd?2325. **Map audiences** — for each major section, identify the implicit reader. When the file serves more than two audiences, flag as a Pattern A candidate.2336. **Visual rhythm** — soft signal from the script. Long user-facing READMEs with zero GitHub callouts (`> [!NOTE|TIP|WARNING|IMPORTANT|CAUTION]`) and zero images read as flat. Surface as a suggestion, not a finding.2347. **Detect anti-patterns**:235 - Flat signature list 50+ lines deep → recommend Pattern C.236 - 5+ peer sub-sections under one h2 in a long human-facing doc → recommend Pattern A.237 - 10+ peer sections clustering into groups → recommend Pattern B.238 - Selective `<details>` — some peers collapsed, others not, no inferable rule → call out as minefield; recommend uniform collapse or none.239 - `<details>` wrapping a group/section heading → broken anchor, must move heading outside.240 - Nested `<details>` → flatten to one level (flagged by the script).241 - Install / Quick Start / Requirements inside a `<details>` → must surface.2428. **Report** — bullet list of findings (split structure vs clarity vs content-shape suggestions) + proposed diff.2439. **Verify rendering after edits** — view the rendered output before declaring done.24410. **Audit boundary** — report the proposed changes without editing README.md. A later explicit fix request authorizes applying its named scope.245246## Polish mode247248Wording-only pass. Structure stays as-is — only the prose changes.2492501. **Read existing README** in full.2512. **Apply the canonical *Writing rules* + *README-specific style*** sentence by sentence:252 - Drop filler phrases.253 - Replace marketing voice with concrete verbs.254 - Split compound sentences.255 - Tighten verbose passages into bullets when enumerable.256 - Backtick code-like tokens.257 - Replace `(parens)` with em-dashes where they are aside-context.258 - Replace numeric content-counts with qualitative descriptors.2593. **Strip AI traces** — for English content, invoke `/humanize-en` on the result (see *AI-tell removal — skill-specific notes* above). Skip if the skill is unavailable or the content is non-English.2604. **Preserve** all anchors, headings, code blocks, diagrams, badges, and link URLs verbatim.2615. **Apply and report** — apply the authorized wording changes, verify rendering and present the diff. If the user requested a proposal only, report it without modifying the target.262263## Rules264265- Preserve the authorized target and mode: explicit author/polish edits; audit/propose does not. A filepath or casual README mention alone grants no edit authority.266- NEVER collapse Install / Quick Start / Requirements — what a first-time reader needs is never behind a click.267- NEVER nest `<details>` blocks — GitHub renders nested disclosure unreliably.268- NEVER wrap a group heading or a TOC anchor target inside `<details>` — a collapsed heading vanishes from the visual scan, and auto-expand on anchor jumps is not reliable across renderers.269- NEVER apply Pattern A or B partially — every peer at the chosen level collapses or none does.270- NEVER prefix `<summary>` with `Expand —` (or `Expand –`, `Expand -`) — the disclosure triangle already says it.271- NEVER put a numeric content-count adjacent to a noun in prose or `<summary>` — counts go stale on the next edit; qualitative descriptors only.272- NEVER change anchors, code blocks, or link URLs in polish mode (those are content, not prose).273- ALWAYS add `<br>` after `<summary>` — GitHub needs it to render the first inner block.274- ALWAYS match the existing README's style (quote convention, heading hierarchy, badge format) when editing.275- ALWAYS verify the rendered output before declaring done (GitHub preview, IDE preview, or user confirmation).276- Empty `$ARGUMENTS` follows the *Subcommands* default row above. Non-empty: first token is the subcommand, second is the path.277278## Gotchas2792801. **Mixed `<details>` collapse across peers is a minefield.** Pattern A/B require uniformity: every peer at the chosen level collapses or none does. When applying collapse, audit every peer and normalize before declaring done.2812. **Topic-form headings ("About installation", "Installation overview") violate the questions-or-commands rule** at § README-specific style. Convert to imperative ("Install") or question ("How do I install?").2823. **Numeric content-counts adjacent to nouns rot fast.** "25 symlinks" or "14 tasks" go stale the moment a row lands. Use qualitative descriptors instead ("symlinks installed by `install.sh`").2834. **`<details>` wrapping a heading breaks GitHub anchors.** `<details><summary>### API</summary>` makes `#api` un-clickable from external links; the disclosure does not auto-expand on anchor click. Keep headings outside `<details>`.