
Qe Visual Accessibility
- 32 installs
- 433 repo stars
- Updated August 4, 2026
- proffesor-for-testing/agentic-qe
qe visual accessibility is a Claude Code skill for ai & agent building.
About
qe visual accessibility is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.
- qe visual accessibility
- AI & Agent Building
- AI-coding skill
Qe Visual Accessibility by the numbers
- 32 all-time installs (skills.sh)
- Ranked #9,069 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/proffesor-for-testing/agentic-qe --skill qe-visual-accessibilityAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 32 |
|---|---|
| repo stars | ★ 433 |
| Last updated | August 4, 2026 |
| Repository | proffesor-for-testing/agentic-qe ↗ |
How do I helps with ai & agent building tasks.?
Helps with ai & agent building tasks.
Who is it for?
Best when you're working on ai & agent building and need structured help with qe visual accessibility.
Skip if: Teams with no ai & agent building needs, or anyone wanting a generic chat assistant without this specific workflow.
When should I use this skill?
When you need to helps with ai & agent building tasks., or when qe visual accessibility is a claude code skill for ai & agent building.
What you get
Structured output aligned to qe visual accessibility: qe visual accessibility, AI & Agent Building.
Files
QE Visual Accessibility
Purpose
Guide the use of v3's visual and accessibility testing capabilities including screenshot comparison, responsive design validation, and WCAG 2.2 compliance verification.
Activation
- When testing visual appearance
- When validating responsive design
- When checking accessibility compliance
- When detecting visual regressions
- When testing cross-browser rendering
Quick Start
# Visual regression test
aqe visual test --baseline production --current staging
# Responsive design test
aqe visual responsive --url https://example.com --viewports all
# Accessibility audit
aqe a11y audit --url https://example.com --standard wcag22-aa
# Cross-browser test
aqe visual cross-browser --url https://example.com --browsers chrome,firefox,safariAgent Workflow
// Visual regression testing
Task("Run visual regression", `
Compare staging against production:
- Capture screenshots of key pages
- Detect pixel differences
- Flag significant visual changes
- Generate visual diff report
`, "qe-visual-tester")
// Accessibility audit
Task("Audit accessibility", `
Run WCAG 2.2 AA compliance audit:
- Check color contrast ratios
- Verify keyboard navigation
- Test screen reader compatibility
- Validate ARIA labels
Generate compliance report with fix suggestions.
`, "qe-accessibility-agent")Browser engine
All browser automation in this skill uses the qe-browser fleet skill (Vibium engine). See .claude/skills/qe-browser/SKILL.md. The vibium binary is installed by aqe init.
Visual Testing Operations
1. Visual Regression (via qe-browser)
# Establish baselines for the pages we care about
for path in / /login /dashboard /settings; do
slug=$(echo "$path" | tr '/' '_' | sed 's/^_//' || echo root)
vibium go "https://production.example.com$path" && vibium wait load
node .claude/skills/qe-browser/scripts/visual-diff.js --name "baseline_${slug:-root}"
done
# Compare staging against those baselines
for path in / /login /dashboard /settings; do
slug=$(echo "$path" | tr '/' '_' | sed 's/^_//' || echo root)
vibium go "https://staging.example.com$path" && vibium wait load
node .claude/skills/qe-browser/scripts/visual-diff.js \
--name "baseline_${slug:-root}" --threshold 0.001 # 0.1% pixel diff
doneIgnore dynamic regions (timestamps, live counts) by scoping the diff to a selector that excludes them:
node .claude/skills/qe-browser/scripts/visual-diff.js \
--name hero --selector "main > .content"Legacy programmatic TypeScript API (still available for tests that prefer it over shelling out):
await visualTester.compareScreenshots({
baseline: {
source: 'production',
pages: ['/', '/login', '/dashboard', '/settings']
},
current: {
source: 'staging',
pages: ['/', '/login', '/dashboard', '/settings']
},
comparison: {
threshold: 0.1, // 0.1% pixel difference
antialiasing: true,
ignoreRegions: ['#dynamic-content', '.timestamp']
}
});2. Responsive Testing
await responsiveTester.test({
url: 'https://example.com',
viewports: [
{ name: 'mobile', width: 375, height: 667 },
{ name: 'tablet', width: 768, height: 1024 },
{ name: 'desktop', width: 1920, height: 1080 }
],
checks: {
layoutShift: true,
contentOverflow: true,
touchTargets: true,
fontScaling: true
}
});3. Accessibility Audit
await accessibilityAgent.audit({
url: 'https://example.com',
standard: 'WCAG22-AA',
checks: {
perceivable: {
colorContrast: true,
textAlternatives: true,
captions: true
},
operable: {
keyboardAccessible: true,
noTimingIssues: true,
navigable: true
},
understandable: {
readable: true,
predictable: true,
inputAssistance: true
},
robust: {
compatible: true,
parseErrors: true
}
}
});4. Cross-Browser Testing
await visualTester.crossBrowser({
url: 'https://example.com',
browsers: ['chrome', 'firefox', 'safari', 'edge'],
versions: 'latest-2',
comparisons: {
betweenBrowsers: true,
betweenVersions: true,
againstBaseline: true
}
});WCAG 2.2 Checklist
| Level | Criteria | Auto-Testable |
|---|---|---|
| A | Non-text Content | ✅ |
| A | Info and Relationships | Partial |
| A | Color Contrast (4.5:1) | ✅ |
| A | Keyboard Accessible | ✅ |
| A | Focus Visible | ✅ |
| AA | Reflow | ✅ |
| AA | Text Spacing | ✅ |
| AAA | Enhanced Contrast (7:1) | ✅ |
Visual Test Report
interface VisualReport {
summary: {
pagesCompared: number;
differencesFound: number;
passRate: number;
};
comparisons: {
page: string;
viewport: string;
baseline: string;
current: string;
diff: string;
diffPercentage: number;
status: 'pass' | 'fail' | 'review';
}[];
accessibility: {
violations: A11yViolation[];
passes: number;
incomplete: number;
score: number;
};
responsive: {
viewport: string;
issues: ResponsiveIssue[];
}[];
}Accessibility Report
interface AccessibilityReport {
summary: {
score: number;
violations: number;
warnings: number;
passes: number;
};
violations: {
id: string;
impact: 'critical' | 'serious' | 'moderate' | 'minor';
description: string;
wcag: string[];
elements: {
selector: string;
html: string;
issue: string;
fix: string;
}[];
}[];
compliance: {
wcagLevel: 'A' | 'AA' | 'AAA';
criteriasMet: number;
criteriasTotal: number;
};
}CI/CD Integration
visual_testing:
on_pr:
- capture_screenshots
- compare_to_baseline
- run_a11y_audit
thresholds:
visual_diff: 0.1
a11y_violations: 0
artifacts:
- screenshots/
- diffs/
- a11y-report.htmlCoordination
Primary Agents: qe-visual-tester, qe-accessibility-agent, qe-responsive-tester Coordinator: qe-visual-coordinator Related Skills: qe-test-execution, qe-quality-assessment
skill: qe-visual-accessibility
version: 1.0.0
description: >
Evaluation suite for visual accessibility testing.
Tests color blind simulation, contrast analysis, and visual hierarchy validation.
models_to_test:
- claude-sonnet-4-6 # Primary (high accuracy expected)
- claude-haiku-4-5 # Fast model (minimum quality floor)
mcp_integration:
enabled: true
namespace: skill-validation
query_patterns: true
track_outcomes: true
store_patterns: true
target_agents:
- qe-accessibility-auditor
learning:
store_success_patterns: true
pattern_ttl_days: 90
result_format:
json_output: true
include_timing: true
include_token_usage: true
setup:
required_tools:
- jq
test_cases:
- id: tc001_color_contrast_wcag
description: "Validate WCAG color contrast requirements"
category: contrast
priority: critical
input:
color_pairs:
- { foreground: "#000000", background: "#ffffff" }
- { foreground: "#666666", background: "#ffffff" }
wcag_level: "AA"
expected_output:
must_contain:
- "contrast"
- "WCAG"
- "ratio"
validation:
schema_check: true
keyword_match_threshold: 0.8
- id: tc002_colorblind_simulation
description: "Simulate colorblind perspectives"
category: colorblind
priority: high
input:
image_url: "https://example.com/image.png"
simulation_types:
- "deuteranopia"
- "protanopia"
- "tritanopia"
expected_output:
must_contain:
- "colorblind"
- "simulation"
validation:
schema_check: true
- id: tc003_visual_hierarchy
description: "Validate visual hierarchy and readability"
category: hierarchy
priority: high
input:
elements:
- { type: "heading", size_px: 32, weight: "bold" }
- { type: "body", size_px: 16, weight: "normal" }
expected_output:
must_contain:
- "hierarchy"
- "visual"
validation:
schema_check: true
- id: tc004_text_readability
description: "Assess text readability metrics"
category: readability
priority: medium
input:
text: "Sample paragraph for readability analysis"
font_size_px: 14
line_height_ratio: 1.5
expected_output:
must_contain:
- "readable"
- "legible"
validation:
schema_check: true
- id: tc005_focus_visibility
description: "Verify focus indicator visibility"
category: interaction
priority: medium
input:
elements:
- { type: "button", has_focus_indicator: true }
- { type: "input", has_focus_indicator: false }
expected_output:
must_contain:
- "focus"
- "visible"
validation:
schema_check: true
allow_partial: true
success_criteria:
pass_rate: 0.9
critical_pass_rate: 1.0
avg_reasoning_quality: 0.75
max_execution_time_ms: 300000
metadata:
author: "qe-visual-accessibility-tester"
created: "2026-02-02"
coverage_target: >
Visual accessibility with 5 test cases covering color contrast,
colorblind simulation, visual hierarchy, text readability, and focus visibility.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://agentic-qe.dev/schemas/qe-visual-accessibility-output.json",
"title": "AQE Visual Accessibility Skill Output Schema",
"description": "Schema for visual accessibility skill output. Includes visual diffs, a11y issues, and responsiveness testing.",
"type": "object",
"required": ["skillName", "version", "timestamp", "status", "trustTier", "output"],
"properties": {
"skillName": {
"type": "string",
"const": "qe-visual-accessibility",
"description": "Must be 'qe-visual-accessibility'"
},
"version": {
"type": "string",
"pattern": "^\\d+\\.\\d+\\.\\d+(-[a-zA-Z0-9]+)?$"
},
"timestamp": {
"type": "string",
"format": "date-time"
},
"status": {
"type": "string",
"enum": ["success", "partial", "failed", "skipped"]
},
"trustTier": {
"type": "integer",
"const": 3
},
"output": {
"type": "object",
"required": ["summary", "visualDiffs", "a11yIssues"],
"properties": {
"summary": {
"type": "string",
"minLength": 50,
"maxLength": 2000
},
"visualDiffs": {
"$ref": "#/$defs/visualDiffsReport"
},
"a11yIssues": {
"$ref": "#/$defs/a11yIssuesReport"
},
"responsiveness": {
"$ref": "#/$defs/responsivenessReport"
},
"wcagCompliance": {
"$ref": "#/$defs/wcagCompliance"
},
"colorContrast": {
"$ref": "#/$defs/colorContrastReport"
},
"crossBrowser": {
"$ref": "#/$defs/crossBrowserReport"
},
"recommendations": {
"type": "array",
"items": {
"$ref": "#/$defs/recommendation"
},
"maxItems": 100
},
"artifacts": {
"type": "array",
"items": {
"$ref": "#/$defs/artifact"
},
"maxItems": 100
}
}
},
"metadata": {
"$ref": "#/$defs/metadata"
},
"validation": {
"$ref": "#/$defs/validationResult"
},
"learning": {
"$ref": "#/$defs/learningData"
}
},
"$defs": {
"visualDiffsReport": {
"type": "object",
"required": ["total"],
"properties": {
"total": {
"type": "integer",
"minimum": 0
},
"significantChanges": {
"type": "integer",
"minimum": 0
},
"passRate": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"comparisons": {
"type": "array",
"items": {
"$ref": "#/$defs/visualComparison"
},
"maxItems": 200
}
}
},
"visualComparison": {
"type": "object",
"required": ["page", "status"],
"properties": {
"page": {
"type": "string"
},
"viewport": {
"type": "string",
"description": "Viewport size (e.g., 1920x1080)"
},
"status": {
"type": "string",
"enum": ["pass", "fail", "review"]
},
"diffPercentage": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"threshold": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"baseline": {
"type": "string",
"description": "Path to baseline image"
},
"current": {
"type": "string",
"description": "Path to current image"
},
"diff": {
"type": "string",
"description": "Path to diff image"
},
"regions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"x": { "type": "integer" },
"y": { "type": "integer" },
"width": { "type": "integer" },
"height": { "type": "integer" },
"description": { "type": "string" }
}
},
"description": "Changed regions"
}
}
},
"a11yIssuesReport": {
"type": "object",
"required": ["total"],
"properties": {
"total": {
"type": "integer",
"minimum": 0
},
"critical": {
"type": "integer",
"minimum": 0
},
"serious": {
"type": "integer",
"minimum": 0
},
"moderate": {
"type": "integer",
"minimum": 0
},
"minor": {
"type": "integer",
"minimum": 0
},
"score": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"issues": {
"type": "array",
"items": {
"$ref": "#/$defs/a11yIssue"
},
"maxItems": 500
}
}
},
"a11yIssue": {
"type": "object",
"required": ["id", "title", "severity", "wcagCriterion"],
"properties": {
"id": {
"type": "string",
"pattern": "^A11Y-\\d{3,6}$"
},
"title": {
"type": "string",
"minLength": 5,
"maxLength": 200
},
"description": {
"type": "string",
"maxLength": 2000
},
"severity": {
"type": "string",
"enum": ["critical", "serious", "moderate", "minor"]
},
"wcagCriterion": {
"type": "string",
"pattern": "^\\d+\\.\\d+\\.\\d+$"
},
"wcagLevel": {
"type": "string",
"enum": ["A", "AA", "AAA"]
},
"pourPrinciple": {
"type": "string",
"enum": ["perceivable", "operable", "understandable", "robust"]
},
"element": {
"type": "object",
"properties": {
"selector": { "type": "string" },
"html": { "type": "string", "maxLength": 1000 },
"tagName": { "type": "string" }
}
},
"impact": {
"type": "string"
},
"affectedUsers": {
"type": "array",
"items": {
"type": "string",
"enum": ["blind", "low-vision", "color-blind", "deaf", "motor-impaired", "cognitive"]
}
},
"remediation": {
"type": "string",
"maxLength": 2000
},
"codeExample": {
"type": "object",
"properties": {
"before": { "type": "string" },
"after": { "type": "string" }
}
}
}
},
"responsivenessReport": {
"type": "object",
"properties": {
"viewportsTested": {
"type": "array",
"items": {
"$ref": "#/$defs/viewportResult"
}
},
"breakpointIssues": {
"type": "array",
"items": {
"$ref": "#/$defs/breakpointIssue"
}
},
"overallScore": {
"type": "number",
"minimum": 0,
"maximum": 100
}
}
},
"viewportResult": {
"type": "object",
"required": ["name", "width", "height", "status"],
"properties": {
"name": {
"type": "string",
"enum": ["mobile-s", "mobile-m", "mobile-l", "tablet", "laptop", "desktop", "4k"]
},
"width": { "type": "integer", "minimum": 320 },
"height": { "type": "integer", "minimum": 480 },
"status": { "type": "string", "enum": ["pass", "fail", "warn"] },
"issues": { "type": "integer", "minimum": 0 },
"screenshot": { "type": "string" }
}
},
"breakpointIssue": {
"type": "object",
"required": ["breakpoint", "type"],
"properties": {
"breakpoint": { "type": "string" },
"type": {
"type": "string",
"enum": ["layout-shift", "overflow", "touch-target", "font-scaling", "content-hidden"]
},
"element": { "type": "string" },
"description": { "type": "string" }
}
},
"wcagCompliance": {
"type": "object",
"required": ["version", "level", "conformanceAchieved"],
"properties": {
"version": {
"type": "string",
"enum": ["2.0", "2.1", "2.2"]
},
"targetLevel": {
"type": "string",
"enum": ["A", "AA", "AAA"]
},
"conformanceAchieved": {
"type": "string",
"enum": ["A", "AA", "AAA", "none"]
},
"pourBreakdown": {
"type": "object",
"properties": {
"perceivable": { "$ref": "#/$defs/pourScore" },
"operable": { "$ref": "#/$defs/pourScore" },
"understandable": { "$ref": "#/$defs/pourScore" },
"robust": { "$ref": "#/$defs/pourScore" }
}
},
"criteriaResults": {
"type": "array",
"items": {
"type": "object",
"properties": {
"criterion": { "type": "string" },
"level": { "type": "string" },
"status": { "type": "string", "enum": ["pass", "fail", "na"] },
"issues": { "type": "integer" }
}
}
}
}
},
"pourScore": {
"type": "object",
"required": ["score"],
"properties": {
"score": { "type": "number", "minimum": 0, "maximum": 100 },
"violationCount": { "type": "integer", "minimum": 0 },
"criticalCount": { "type": "integer", "minimum": 0 }
}
},
"colorContrastReport": {
"type": "object",
"properties": {
"total": { "type": "integer", "minimum": 0 },
"passing": { "type": "integer", "minimum": 0 },
"failing": { "type": "integer", "minimum": 0 },
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"element": { "type": "string" },
"foreground": { "type": "string" },
"background": { "type": "string" },
"ratio": { "type": "number" },
"requiredRatio": { "type": "number" },
"level": { "type": "string", "enum": ["AA", "AAA"] }
}
}
}
}
},
"crossBrowserReport": {
"type": "object",
"properties": {
"browsersTested": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"version": { "type": "string" },
"status": { "type": "string", "enum": ["pass", "fail", "warn"] },
"issues": { "type": "integer" }
}
}
},
"consistencyScore": {
"type": "number",
"minimum": 0,
"maximum": 100
}
}
},
"recommendation": {
"type": "object",
"required": ["id", "title", "priority"],
"properties": {
"id": {
"type": "string",
"pattern": "^REC-\\d{3,6}$"
},
"title": {
"type": "string",
"minLength": 10,
"maxLength": 200
},
"description": {
"type": "string",
"maxLength": 2000
},
"priority": {
"type": "string",
"enum": ["critical", "high", "medium", "low"]
},
"effort": {
"type": "string",
"enum": ["trivial", "low", "medium", "high", "major"]
},
"wcagCriteria": {
"type": "array",
"items": { "type": "string" }
},
"codeExample": {
"type": "string"
}
}
},
"artifact": {
"type": "object",
"required": ["type", "path"],
"properties": {
"type": {
"type": "string",
"enum": ["screenshot", "diff", "report", "video", "captions", "audio-description"]
},
"path": { "type": "string", "maxLength": 500 },
"format": {
"type": "string",
"enum": ["png", "jpg", "webp", "html", "json", "vtt", "mp4"]
},
"description": { "type": "string" }
}
},
"metadata": {
"type": "object",
"properties": {
"executionTimeMs": { "type": "integer", "minimum": 0 },
"toolsUsed": {
"type": "array",
"items": {
"type": "string",
"enum": ["axe-core", "pa11y", "lighthouse", "claude-vision", "playwright", "percy"]
}
},
"agentId": { "type": "string", "pattern": "^qe-[a-z][a-z0-9-]*$" },
"targetUrl": { "type": "string" },
"pagesAudited": { "type": "integer", "minimum": 1 }
}
},
"validationResult": {
"type": "object",
"properties": {
"schemaValid": { "type": "boolean" },
"contentValid": { "type": "boolean" },
"confidence": { "type": "number", "minimum": 0, "maximum": 1 },
"warnings": { "type": "array", "items": { "type": "string" } },
"errors": { "type": "array", "items": { "type": "string" } }
}
},
"learningData": {
"type": "object",
"properties": {
"patternsDetected": { "type": "array", "items": { "type": "string" } },
"reward": { "type": "number", "minimum": 0, "maximum": 1 }
}
}
}
}
{
"skillName": "qe-visual-accessibility",
"skillVersion": "1.0.0",
"requiredTools": [
"jq"
],
"optionalTools": [],
"schemaPath": "schemas/output.json",
"requiredFields": [
"skillName",
"status",
"output"
],
"requiredNonEmptyFields": [],
"mustContainTerms": [],
"mustNotContainTerms": [],
"enumValidations": {
".status": [
"success",
"partial",
"failed",
"skipped"
]
}
}
Related skills
FAQ
What does qe visual accessibility do?
qe visual accessibility is a Claude Code skill for ai & agent building.
When should I use qe visual accessibility?
When you need to helps with ai & agent building tasks., or when qe visual accessibility is a claude code skill for ai & agent building.
What are the main capabilities?
qe visual accessibility; AI & Agent Building; AI-coding skill.