Claude Code Plugins

Community-maintained marketplace

Feedback

Runs automated HTML linting using axe-core (WCAG accessibility) and markuplint (HTML standards) CLI tools. Use when user asks to "lint HTML", "run automated checks", "validate HTML", "check accessibility with CLI", or mentions "axe-core", "markuplint", "automated audit".

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name html-lint-runner
description Runs automated HTML linting using @axe-core/playwright (WCAG accessibility) and markuplint (HTML standards). Use when user asks to "lint HTML", "run automated checks", "validate HTML", "check accessibility", or mentions "axe-core", "markuplint", "automated audit".

HTML Lint Runner

Automated HTML linting using @axe-core/playwright and markuplint with JSON output.

Tools Overview

Tool Focus Output
@axe-core/playwright WCAG 2.1 AA accessibility JSON with violations
markuplint HTML standards, semantics JSON with problems

Quick Start

# Install dependencies
cd ${CLAUDE_PLUGIN_ROOT}/skills/html-lint-runner && npm install

# Run combined lint (development)
npm --prefix ${CLAUDE_PLUGIN_ROOT}/skills/html-lint-runner run dev -- path/to/file.html

# Run with build
npm --prefix ${CLAUDE_PLUGIN_ROOT}/skills/html-lint-runner run build
node ${CLAUDE_PLUGIN_ROOT}/skills/html-lint-runner/dist/index.js path/to/file.html

Options

Option Description
--json Output as JSON (default)
--text Output as human-readable text
--axe-only Run only axe-core (accessibility)
--markuplint-only Run only markuplint (HTML standards)

Supported File Types

Extension axe-core markuplint Notes
.html Yes Yes Full support
.htm Yes Yes Full support
.jsx No* Yes markuplint only
.tsx No* Yes markuplint only

*JSX/TSX require rendering to HTML for axe-core analysis

Output Structure

{
  "file": "target.html",
  "timestamp": "2025-01-01T00:00:00Z",
  "axe": {
    "violations": [...],
    "passes": [...],
    "incomplete": [...]
  },
  "markuplint": {
    "problems": [...]
  },
  "summary": {
    "axe_violations": 3,
    "markuplint_problems": 5,
    "total_issues": 8
  }
}

axe-core Violations

{
  "id": "color-contrast",
  "impact": "serious",
  "description": "Elements must have sufficient color contrast",
  "nodes": [
    {
      "html": "<p class=\"light\">...</p>",
      "failureSummary": "Fix: Increase contrast ratio to 4.5:1"
    }
  ]
}

Impact levels: critical > serious > moderate > minor

markuplint Problems

{
  "severity": "error",
  "ruleId": "required-attr",
  "message": "The \"alt\" attribute is required",
  "line": 15,
  "col": 5,
  "raw": "<img src=\"photo.jpg\">"
}

Workflow

  1. Run combined lint - Check both accessibility and HTML standards
  2. Parse JSON results - Identify issues by severity
  3. Prioritize issues - critical > serious > error > warning
  4. Apply fixes - Address high-priority issues first
  5. Re-run to verify - Confirm fixes resolved issues

Common Fixes

Missing alt text

<!-- Before -->
<img src="photo.jpg">

<!-- After -->
<img src="photo.jpg" alt="Description of image">

Low contrast

/* Before: #999 on #fff = 2.85:1 */
.text { color: #999; }

/* After: #595959 on #fff = 7:1 */
.text { color: #595959; }

References