Audit README
Scope: $ARGUMENTS
Audit README.md files against scope-specific best practices and report findings.
Phase 1: Detect Scope and Targets
Parse $ARGUMENTS:
repo — audit README.md in the current directory
repo <owner/repo> — audit a specific remote repo's README
repos <owner/pattern> — batch audit multiple repos (e.g., repos qte77/gha-*)
account <username> — audit a GitHub user profile README
org <orgname> — audit an organization profile README
Workflow Mode (batch repos scope)
When scope is repos with more than ~3 targets and the Workflow tool is available,
fan the audit out in parallel instead of looping turn-by-turn:
Resolve the glob to a concrete list: gh repo list <owner> --json nameWithOwner, filtered by pattern.
Drive the bundled workflow (its instruction to call Workflow is the opt-in — no ultracode needed):
Workflow({
scriptPath: "${CLAUDE_PLUGIN_ROOT}/workflows/audit-repos.js",
args: { repos: ["owner/a", "owner/b"],
skillPath: "${CLAUDE_PLUGIN_ROOT}/skills/auditing-readme/SKILL.md" }
})
args is delivered to the script as a JSON string (the script parses it). Alternatively pass
{ owner, pattern, skillPath } and let the workflow's Discover phase resolve the list.
Render the returned perRepo findings and consistency observations with the Phase 4 format.
Fall back to the inline Phases 2–4 (one repo at a time) when the Workflow tool is unavailable.
The workflow's agents are read-only, so the only permission to pre-grant is the Workflow tool.
Phase 2: Fetch READMEs
- Local repos: read README.md directly
- Remote repos:
gh api repos/<owner>/<repo>/contents/README.md --jq '.content' | base64 -d
- Account profiles:
gh api repos/<user>/<user>/contents/README.md --jq '.content' | base64 -d
- Org profiles: try
profile/README.md first, fall back to root README.md in .github repo
Phase 3: Run Checklist
Base Repo Checklist — qte77 doc-structure canon
Derives from the canon contract
(SoT) — audit against it, never redefine it.
| # |
Check |
Level |
Pass Condition |
| C1 |
Hero |
required |
H1 name + one-line tagline (what · who-for · positioning); optional wordmark is theme-aware + self-hosted |
| C2 |
Section order |
required |
Value-first: Hero → Badges → What → How → Why → Refs → License → <tail> |
| C3 |
Badges |
required |
Order License → Version → CI; License & Version shields.io static blue; License label carries the SPDX id (e.g. License: Apache-2.0, not bare license-MIT); Version linked to CHANGELOG.md; status badges native color; left-aligned, no <p align="center"> |
| C4 |
What |
required |
## What present, ≤ ~7 reader-value bullets |
| C5 |
How |
required |
## How minimal run example + link out to docs/ |
| C6 |
Why |
required |
## Why 2–4 lines (incumbent → gap → differentiation) |
| C7 |
Refs |
required |
## Refs links only, no prose |
| C8 |
License |
required |
## License SPDX id + link to LICENSE (not LICENSE.md) |
| C9 |
Front-door |
recommended |
each section answers its one question; depth links out to docs/, not inlined |
| C10 |
Screenshots |
optional |
if present: collapsed <details> at bottom of What, theme-aware, self-hosted at assets/images/ |
| C11 |
Links valid |
required |
all [text](relative-path) links resolve; LICENSE file named LICENSE (not LICENSE.md) |
GHA Extension (if action.yml/action.yaml exists)
| # |
Check |
Level |
Pass Condition |
| G1 |
Inputs table |
required |
Markdown table under heading containing "input" |
| G2 |
Outputs table |
required |
Markdown table or "no outputs" statement |
| G3 |
Usage YAML |
required |
Fenced yaml block with uses: |
| G4 |
What it does |
required |
Section with numbered steps |
| G5 |
Input column order |
recommended |
Name, Required, Default, Description |
Account Profile Checklist
| # |
Check |
Level |
Pass Condition |
| A1 |
Tagline |
required |
Non-empty text within 5 lines of first heading |
| A2 |
Current focus |
recommended |
Section describing current work |
| A3 |
Featured projects |
recommended |
3+ repository links with descriptions |
| A4 |
Not stale |
required |
Updated within 6 months |
| A5 |
Scannability |
recommended |
Under 500 words |
Organization Profile Checklist
| # |
Check |
Level |
Pass Condition |
| O1 |
File location |
required |
README at .github/profile/README.md |
| O2 |
Mission |
required |
Single-sentence purpose within 3 lines of H1 |
| O3 |
Activities |
required |
Description of what the org does |
| O4 |
Projects |
recommended |
Links to key repos, grouped by domain |
| O5 |
CTA |
required |
"Get involved" section with actionable links |
| O6 |
Length |
recommended |
150-400 words |
Phase 4: Report
Output a findings table per target:
## <repo-name>
| # | Check | Level | Status | Notes |
|---|-------|-------|--------|-------|
Summary: X/Y required pass, Z/W recommended pass.
Batch Summary
| Repo | Required | Recommended | Top Issue |
|------|----------|-------------|-----------|
Consistency Checks (batch only)
- Section order matches the canon (Hero → Badges → What → How → Why → Refs → License → tail)?
- Badge order/colors consistent (License → Version → CI; static
blue / native status)?
- Version badge linked to
CHANGELOG.md (flag a bare )?
- Canon section names used (
## What / ## How / ## Why / ## Refs, not ## Resources)?
- License format consistent (
LICENSE not LICENSE.md)?
Rules
- Never modify files during an audit — read-only
- Report facts, not opinions
- Derive from the canon; never invent divergent structure — qte77/qte77
docs/doc-structure.md is authoritative
- License file MUST be
LICENSE (not LICENSE.md) — flag as FAIL if .md variant used
1---2name: auditing-readme3description: Audit README.md files against best practices for repos, accounts, or orgs. Detects missing sections, stale links, inconsistent formatting, and convention violations. Use when reviewing README quality across one or many repos.4---56# Audit README78**Scope**: $ARGUMENTS910Audit README.md files against scope-specific best practices and report findings.1112## Phase 1: Detect Scope and Targets1314Parse `$ARGUMENTS`:1516- `repo` — audit README.md in the current directory17- `repo <owner/repo>` — audit a specific remote repo's README18- `repos <owner/pattern>` — batch audit multiple repos (e.g., `repos qte77/gha-*`)19- `account <username>` — audit a GitHub user profile README20- `org <orgname>` — audit an organization profile README2122## Workflow Mode (batch `repos` scope)2324When scope is `repos` with **more than ~3 targets** and the **Workflow tool is available**,25fan the audit out in parallel instead of looping turn-by-turn:26271. Resolve the glob to a concrete list: `gh repo list <owner> --json nameWithOwner`, filtered by pattern.282. Drive the bundled workflow (its instruction to call Workflow is the opt-in — no `ultracode` needed):2930 ```31 Workflow({32 scriptPath: "${CLAUDE_PLUGIN_ROOT}/workflows/audit-repos.js",33 args: { repos: ["owner/a", "owner/b"],34 skillPath: "${CLAUDE_PLUGIN_ROOT}/skills/auditing-readme/SKILL.md" }35 })36 ```3738 `args` is delivered to the script as a JSON string (the script parses it). Alternatively pass39 `{ owner, pattern, skillPath }` and let the workflow's Discover phase resolve the list.403. Render the returned `perRepo` findings and `consistency` observations with the Phase 4 format.4142Fall back to the inline Phases 2–4 (one repo at a time) when the Workflow tool is unavailable.43The workflow's agents are **read-only**, so the only permission to pre-grant is the Workflow tool.4445## Phase 2: Fetch READMEs4647- Local repos: read README.md directly48- Remote repos: `gh api repos/<owner>/<repo>/contents/README.md --jq '.content' | base64 -d`49- Account profiles: `gh api repos/<user>/<user>/contents/README.md --jq '.content' | base64 -d`50- Org profiles: try `profile/README.md` first, fall back to root `README.md` in `.github` repo5152## Phase 3: Run Checklist5354### Base Repo Checklist — qte77 doc-structure canon5556Derives from the [canon contract](https://github.com/qte77/qte77/blob/main/docs/doc-structure.md)57(SoT) — audit against it, never redefine it.5859| # | Check | Level | Pass Condition |60|---|-------|-------|----------------|61| C1 | Hero | required | H1 name + one-line tagline (what · who-for · positioning); optional wordmark is theme-aware + self-hosted |62| C2 | Section order | required | Value-first: Hero → Badges → What → How → Why → Refs → License → \<tail\> |63| C3 | Badges | required | Order License → Version → CI; License & Version shields.io static `blue`; License label carries the SPDX id (e.g. `License: Apache-2.0`, not bare `license-MIT`); Version linked to `CHANGELOG.md`; status badges native color; left-aligned, no `<p align="center">` |64| C4 | What | required | `## What` present, ≤ ~7 reader-value bullets |65| C5 | How | required | `## How` minimal run example + link out to `docs/` |66| C6 | Why | required | `## Why` 2–4 lines (incumbent → gap → differentiation) |67| C7 | Refs | required | `## Refs` links only, no prose |68| C8 | License | required | `## License` SPDX id + link to `LICENSE` (not `LICENSE.md`) |69| C9 | Front-door | recommended | each section answers its one question; depth links out to `docs/`, not inlined |70| C10 | Screenshots | optional | if present: collapsed `<details>` at bottom of What, theme-aware, self-hosted at `assets/images/` |71| C11 | Links valid | required | all `[text](relative-path)` links resolve; LICENSE file named `LICENSE` (not `LICENSE.md`) |7273### GHA Extension (if `action.yml`/`action.yaml` exists)7475| # | Check | Level | Pass Condition |76|---|-------|-------|----------------|77| G1 | Inputs table | required | Markdown table under heading containing "input" |78| G2 | Outputs table | required | Markdown table or "no outputs" statement |79| G3 | Usage YAML | required | Fenced yaml block with `uses:` |80| G4 | What it does | required | Section with numbered steps |81| G5 | Input column order | recommended | Name, Required, Default, Description |8283### Account Profile Checklist8485| # | Check | Level | Pass Condition |86|---|-------|-------|----------------|87| A1 | Tagline | required | Non-empty text within 5 lines of first heading |88| A2 | Current focus | recommended | Section describing current work |89| A3 | Featured projects | recommended | 3+ repository links with descriptions |90| A4 | Not stale | required | Updated within 6 months |91| A5 | Scannability | recommended | Under 500 words |9293### Organization Profile Checklist9495| # | Check | Level | Pass Condition |96|---|-------|-------|----------------|97| O1 | File location | required | README at `.github/profile/README.md` |98| O2 | Mission | required | Single-sentence purpose within 3 lines of H1 |99| O3 | Activities | required | Description of what the org does |100| O4 | Projects | recommended | Links to key repos, grouped by domain |101| O5 | CTA | required | "Get involved" section with actionable links |102| O6 | Length | recommended | 150-400 words |103104## Phase 4: Report105106Output a findings table per target:107108```109## <repo-name>110111| # | Check | Level | Status | Notes |112|---|-------|-------|--------|-------|113114Summary: X/Y required pass, Z/W recommended pass.115```116117### Batch Summary118119```120| Repo | Required | Recommended | Top Issue |121|------|----------|-------------|-----------|122```123124### Consistency Checks (batch only)125126- Section order matches the canon (Hero → Badges → What → How → Why → Refs → License → tail)?127- Badge order/colors consistent (License → Version → CI; static `blue` / native status)?128- Version badge linked to `CHANGELOG.md` (flag a bare ``)?129- Canon section names used (`## What` / `## How` / `## Why` / `## Refs`, not `## Resources`)?130- License format consistent (`LICENSE` not `LICENSE.md`)?131132## Rules133134- Never modify files during an audit — read-only135- Report facts, not opinions136- **Derive from the canon; never invent divergent structure** — qte77/qte77137 `docs/doc-structure.md` is authoritative138- License file MUST be `LICENSE` (not `LICENSE.md`) — flag as FAIL if `.md` variant used