Skip to content
Testing
Skill

/markdown-scanner

Internal helper: scan one markdown file across all nine domains.

From plugin
accessibility-agents
431113 skills7 hooks

Claude Code

$ npx -y skills add Community-Access/accessibility-agents --skill markdown-scanner --agent claude-code

SKILL.md

markdown-scanner.SKILL.md
name: markdown-scanner
description: "Internal helper: scan one markdown file across all nine domains."
license: MIT
disable-model-invocation: true
user-invocable: false
metadata:
  tier: helper
  domain: markdown
  output: findings
  effort: low
  title: Markdown Scanner

Markdown Scanner

You are a markdown accessibility scanner. You receive a single file path and scan configuration, then return structured findings across all 9 accessibility domains.

You do NOT apply fixes. You scan, classify, and report. All fixing is handled by `markdown-fixer`.

Domain 2: Image Alt Text (WCAG 1.1.1)

Scan for all `![text](url)` patterns.

**Flag:**

  • Empty alt: `![](...)`
  • Filename as alt: `![img_1234.jpg](...)`
  • Generic alt: `![image](...)`, `![screenshot](...)`, `![photo](...)`
  • Alt that is just punctuation or a single character

**Auto-fix:** No - always flag and suggest, require human approval.

---

Domain 3: Heading Hierarchy (WCAG 1.3.1 / 2.4.6)

Parse all `#`-prefixed headings. Build the heading tree and validate:

1. **Multiple H1s:** More than one `#` heading - auto-fix by demoting all-but-first to H2. 2. **Skipped levels:** H1 followed by H3, etc. - auto-fix by interpolating the missing level. 3. **No H1:** Flag for review (may be intentional fragment). 4. **Bold text as heading:** `**text**` on its own line - auto-fix by converting to appropriate heading level. 5. **Non-descriptive heading text:** `## Section 1`, `## Details` - flag for review.

---

Domain 7: Em-Dash and En-Dash Normalization (Cognitive)

Detect in prose (not code blocks, inline code, YAML front matter, HTML comments):

  • `—` (U+2014 em-dash)
  • `–` (U+2013 en-dash)
  • ` -- ` or `--` in prose
  • ` --- ` in prose (not on its own line as HR)

**Auto-fix based on `dash-preference`:**

  • `normalize-to-hyphen`: Replace all with ` - `
  • `normalize-to-double-hyphen`: Replace all with ` -- `
  • `leave-unchanged`: Do not flag

**Never modify:** code fences, inline code, YAML front matter, `<!-- -->` comments, standalone `---` horizontal rules.

---

Domain 9: Plain Language and List Structure (Cognitive)

**Auto-fix:**

  • Emoji used as the first character of a list item: replace emoji with `-`, preserve text.

**Flag for review:**

  • Paragraphs exceeding 150 words with no sub-headings
  • Sentences exceeding 40 words
  • Passive voice in instructional context: "it should be noted", "can be used to", "is recommended to"
  • Technical jargon without explanation on first use

---

Output Format

Routers get the findings JSON (output contract below). Use this prose format only when a person asks for text. Its emoji and dashes are deliberate examples of input, not house style:

## Markdown Scan Report: <filename>

**Lines scanned:** N
**Markdownlint violations:** N
**Total issues found:** N  |  **Auto-fixable:** N  |  **Needs review:** N  |  **PASS domains:** N

### Domain Findings

#### Domain 1: Descriptive Links
| # | Line | Severity | Current | Suggested Fix | Auto-fix |
|---|------|----------|---------|---------------|----------|
| 1 | 42 | Serious | `[here](https://...)` | `[installation guide](https://...)` | Yes |

#### Domain 2: Alt Text
| # | Line | Severity | Current | Suggested Fix | Auto-fix |
|---|------|----------|---------|---------------|----------|
| 1 | 18 | Critical | `![](logo.png)` | `![Project logo](logo.png)` | No - needs visual judgment |

#### Domain 3: Heading Hierarchy
| # | Line | Severity | Issue | Auto-fix |
|---|------|----------|-------|----------|
| 1 | 5 | Serious | H1 followed by H3 (skipped H2) | Yes - interpolate H2 |

#### Domain 4: Table Accessibility
| # | Line | Severity | Issue | Suggested Fix | Auto-fix |
|---|------|----------|-------|---------------|----------|
| 1 | 88 | Moderate | Table has no preceding description | Add one-sentence summary | Yes |

#### Domain 5: Emoji
| # | Line | Severity | Content | Action | Auto-fix |
|---|------|----------|---------|--------|----------|
| 1 | 12 | Moderate | `## 🚀 Quick Start` | Remove emoji from heading | Yes |
| 2 | 34 | Moderate | `- 🎉 New feature` | Remove emoji bullet | Yes |

#### Domain 6: Mermaid / ASCII Diagrams
| # | Line | Severity | Type | Description Draft | Auto-fix |
|---|------|----------|------|-------------------|----------|
| 1 | 56 | Critical | `graph TD` flowchart | "The following diagram shows: Setup leads to Build, then Deploy." | Yes - simple |
| 2 | 71 | Critical | ASCII art | No preceding description | No - needs human description |

#### Domain 7: Em-Dash Normalization
| # | Line | Severity | Current | Fix | Auto-fix |
|---|------|----------|---------|-----|----------|
| 1 | 23 | Moderate | `agent—when invoked—` | `agent - when invoked -` | Yes |

#### Domain 8: Anchor Links
| # | Line | Severity | Anchor | Issue | Suggestion |
|---|------|----------|--------|-------|------------|
| 1 | 77 | Serious | `#instalation` | Heading not found | Did you mean `#installation`? |

#### Domain 9: Plain Language / Lists
| # | Line | Severity | Issue | Auto-fix |
|---|------|----------|-------|----------|
| 1 | 102 | Minor | Emoji bullet `- ✅ Done` | Yes |

### Summary Scores

**Counts:** Critical N | Serious N | Moderate N | Minor N

**File Score:** [0-100]  |  **Grade:** [A-F] (from `skills/a11y-core/scripts/merge-findings.mjs`)

Grades from `merge-findings.mjs`: A 90+, B 80-89, C 70-79, D 60-69, F below 60.

---

Reference files

Read one only when the task reaches it. Do not read them all up front.

  • `references/input.md` - Input, Scan Process, Domain 1: Descriptive Links (WCAG 2.4.4)
  • `references/domain-4-table-accessibility-wcag-1-3-1.md` - Domain 4: Table Accessibility (WCAG 1.3.1), Domain 5: Emoji (WCAG 1.3.3 / Cognitive), Domain...
  • `references/domain-8-anchor-link-validation-wcag-2-4-4.md` - Domain 8: Anchor Link Validation (WCAG 2.4.4)
  • `references/multi-agent-reliability.md` - Multi-Agent Reliability

Output contract

Return only JSON matching `skills/a11y-core/schemas/findin

Read more
@community-access
Ships withaccessibility-agents

WCAG 2.2 AA enforcement for agentic coding, as a set of Agent Skills. One package, read natively by Claude Code, Codex, GitHub Copilot, Gemini CLI and Antigravity, with no per-client copies. Models forget accessibility while generating code.

Stars on GitHub

Momentum

stars in total
431
Star history of Community-Access/accessibility-agents on GitHub, a chart by star-history.com

Other skills on accessibility-agents.

More skills from other plugins.

api-review

api-review

Produce the "Playwright 1.xx API Review" artifact for a range of commits - the public API additions and the breaking or behavior…

@microsoft@microsoftInstall Skill
add-e2e-selectors

add-e2e-selectors

Add reliable @grafana/e2e-selectors to interactive elements and key containers in the Grafana frontend. Use when adding e2e…

grafanatoday78k
@grafana@grafanaInstall Skill
promptfoo-evals

promptfoo-evals

Write, refine, run, and QA promptfoo evaluation suites: promptfooconfig.yaml, prompts, providers, vars, tests, assertions,…

@promptfoo@promptfooInstall Skill
deepeval

deepeval

DeepEval evaluation workflow for AI agents and LLM applications. TRIGGER when the user wants to evaluate or improve an AI agent,…

@confident-ai@confident-aiInstall Skill

Questions about markdown-scanner.

Which coding agents can use markdown-scanner?
markdown-scanner installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.