Agent skill

Screen Reader Optimizer

by FerroxLabs in FerroxLabs/wayland

Optimize web content for screen reader compatibility using semantic HTML, ARIA patterns, and live region management, with testing workflows for NVDA, VoiceOver, and JAWS.

Apache-2.0Auto-check passedFrontend & Design

Install Screen Reader Optimizer

skills CLI
$ npx skills add FerroxLabs/wayland --skill screen-reader-optimizer -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install FerroxLabs/wayland screen-reader-optimizer --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/FerroxLabs/wayland.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/process/resources/skills-library/bodies/skills/web-development/screen-reader-optimizer .claude/skills/screen-reader-optimizer && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
screen-reader-optimizer
GitHub stars
608
Token cost
~4.4k tokens
SKILL.md length
1,233 words
Files
1
Skills in repo
1,194
Repo updated
First seen
Licence
Apache-2.0

At a glance

Optimize web content for screen reader compatibility using semantic HTML, ARIA patterns, and live region management, with testing workflows for NVDA, VoiceOver, and JAWS.

  • Works in 5 steps: Which framework are you building with… → What are the most complex interactive… → Which screen readers does your user base… → …
  • The user asks about screen reader optimizer
  • SKILL.md covers When to Use, Questions to Ask First, Core Principle: The… and First Rule: Use Semantic HTML, plus 6 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Screen Reader Optimizer is an agent skill from FerroxLabs/wayland. Optimize web content for screen reader compatibility using semantic HTML, ARIA patterns, and live region management, with testing workflows for NVDA, VoiceOver, and JAWS. Use when the user asks about screen reader optimizer, related techniques, best practices, or needs guidance in this domain. Do NOT use when the request is outside the scope of screen reader optimizer or requires a different specialized skill.

Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Accessibility. The repository describes itself as: Wayland - The AI Agent That Perceives. Reasons. Acts. Evolves. The licence is Apache-2.0.

When your agent uses it

  • The user asks about screen reader optimizer
  • Related techniques
  • Needs guidance in this domain
  • The request is outside the scope of screen reader optimizer

Example prompts

  • “/screen-reader-optimizer”

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Which framework are you building with (React, Angular, Vue, vanilla HTML)?
  2. What are the most complex interactive patterns in your UI (tables, trees, drag-and-drop, live updates)?
  3. Which screen readers does your user base primarily use?
  4. Are you fixing existing screen reader issues or building new components?
  5. Do you have access to Windows (for NVDA/JAWS) and macOS/iOS (for VoiceOver)?

What it can do on your machine

Read from SKILL.md and the folder at commit 4c030c7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are html, javascript, css and template).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Screen Reader Optimizer loads about 4.4k tokens when it runs. Until then it costs about 109 tokens; SKILL.md has 1,233 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~109
When it runs · the whole SKILL.md, loaded when a task matches
~4.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from FerroxLabs/wayland at commit 4c030c7, republished under its Apache-2.0 licence (© FerroxLabs). 1,233 words, ~4,399 tokens.

Download SKILL.mdSave it as .claude/skills/screen-reader-optimizer/SKILL.md (or your agent's skills folder).
name
screen-reader-optimizer
description
Optimize web content for screen reader compatibility using semantic HTML, ARIA patterns, and live region management, with testing workflows for NVDA, VoiceOver, and JAWS. Use when the user asks about screen reader optimizer, related techniques, best practices, or needs guidance in this domain. Do NOT use when the request is outside the scope of screen reader optimizer or requires a different specialized skill.
license
Apache-2.0
metadata.author
foundry-skills
metadata.version
1.0.0
metadata.tags
accessibility checklist guide javascript testing email presentation fashion
metadata.category
web-development
metadata.subcategory
accessibility-performance
metadata.disclaimer
none
metadata.difficulty
advanced

Screen Reader Optimizer

You are an expert in screen reader accessibility, specializing in making web interfaces fully usable through NVDA, VoiceOver, JAWS, and TalkBack. You understand how assistive technology parses the accessibility tree, when ARIA is necessary versus harmful, and how to test efficiently across the major screen reader and browser combinations.

When to Use

Use this skill when:

  • User asks about screen reader optimizer techniques or best practices
  • User needs guidance on screen reader optimizer concepts
  • User wants to implement or improve their approach to screen reader optimizer

Do NOT use when:

  • The request falls outside the scope of screen reader optimizer
  • User needs a different specialized skill for their specific situation
  • The topic requires professional consultation beyond general guidance

Questions to Ask First

  1. Which framework are you building with (React, Angular, Vue, vanilla HTML)?
  2. What are the most complex interactive patterns in your UI (tables, trees, drag-and-drop, live updates)?
  3. Which screen readers does your user base primarily use?
  4. Are you fixing existing screen reader issues or building new components?
  5. Do you have access to Windows (for NVDA/JAWS) and macOS/iOS (for VoiceOver)?

Core Principle: The Accessibility Tree

Screen readers do not read the DOM. They read the accessibility tree - a parallel structure the browser builds from your HTML and ARIA attributes. Every optimization you make is about shaping this tree.

Visual DOM                    Accessibility Tree
-----------                   ------------------
<nav>                    -->  navigation landmark
  <ul>                   -->  list (3 items)
    <li><a href="/">     -->  link "Home"
    <li><a href="/about">-->  link "About"
    <li><a href="/blog"> -->  link "Blog"
What the Accessibility Tree Exposes

For every node: Name, Role, State, and Value.

PropertySourceExample
NameText content, aria-label, aria-labelledby, alt, <label>"Submit order"
RoleHTML element or role attributebutton, link, heading, dialog
StateHTML attributes or aria-* statesdisabled, expanded, checked, selected
ValueInput value, aria-valuenow"42", "50%"

First Rule: Use Semantic HTML

Native HTML elements have built-in roles, states, keyboard behavior, and screen reader announcements. ARIA should only fill gaps that HTML cannot.

html
<!-- WRONG: div with ARIA trying to be a button -->
<div role="button" tabindex="0" aria-pressed="false"
     onclick="toggle()" onkeydown="handleKey(event)">
  Toggle Setting
</div>

<!-- RIGHT: native button with full behavior for free -->
<button type="button" aria-pressed="false" onclick="toggle()">
  Toggle Setting
</button>
Semantic Element Reference
Instead of...Use...Why
<div onclick><button>Keyboard, role, focus for free
<span class="link"><a href>Announced as link, Enter activates
<div class="header"><h1>-<h6>Heading navigation (H key in screen readers)
<div class="nav"><nav>Landmark navigation
<div class="list"><ul> / <ol>"List, 5 items" announcement
<div class="table"><table> with <th>Cell-to-header association
<div class="input"><input> / <select>Form mode, label association

ARIA Patterns for Complex Widgets

When native HTML is insufficient, follow the ARIA Authoring Practices Guide (APG) patterns exactly.

Tabs
html
<div role="tablist" aria-label="Account settings">
  <button role="tab" id="tab-1" aria-selected="true"
          aria-controls="panel-1" tabindex="0">
    Profile
  </button>
  <button role="tab" id="tab-2" aria-selected="false"
          aria-controls="panel-2" tabindex="-1">
    Security
  </button>
  <button role="tab" id="tab-3" aria-selected="false"
          aria-controls="panel-3" tabindex="-1">
    Notifications
  </button>
</div>

<div role="tabpanel" id="panel-1" aria-labelledby="tab-1" tabindex="0">
  <!-- Profile content -->
</div>
<div role="tabpanel" id="panel-2" aria-labelledby="tab-2" tabindex="0" hidden>
  <!-- Security content -->
</div>
<div role="tabpanel" id="panel-3" aria-labelledby="tab-3" tabindex="0" hidden>
  <!-- Notifications content -->
</div>

Keyboard behavior:

  • Arrow Left/Right moves between tabs
  • Home/End goes to first/last tab
  • Only the active tab is in the Tab order (tabindex="0"); others are tabindex="-1"
javascript
const tabs = document.querySelectorAll('[role="tab"]');

tabs.forEach(tab => {
  tab.addEventListener('keydown', (e) => {
    const index = Array.from(tabs).indexOf(e.target);
    let newIndex;

    switch (e.key) {
      case 'ArrowRight':
        newIndex = (index + 1) % tabs.length;
        break;
      case 'ArrowLeft':
        newIndex = (index - 1 + tabs.length) % tabs.length;
        break;
      case 'Home':
        newIndex = 0;
        break;
      case 'End':
        newIndex = tabs.length - 1;
        break;
      default:
        return;
    }

    e.preventDefault();
    activateTab(tabs[newIndex]);
  });
});

function activateTab(tab) {
  tabs.forEach(t => {
    t.setAttribute('aria-selected', 'false');
    t.setAttribute('tabindex', '-1');
    document.getElementById(t.getAttribute('aria-controls')).hidden = true;
  });

  tab.setAttribute('aria-selected', 'true');
  tab.setAttribute('tabindex', '0');
  tab.focus();
  document.getElementById(tab.getAttribute('aria-controls')).hidden = false;
}
Modal Dialog
html
<div role="dialog" aria-modal="true" aria-labelledby="dialog-title"
     aria-describedby="dialog-desc">
  <h2 id="dialog-title">Confirm Deletion</h2>
  <p id="dialog-desc">
    This will permanently delete 3 files. This action cannot be undone.
  </p>
  <div class="dialog-actions">
    <button type="button" onclick="closeDialog()">Cancel</button>
    <button type="button" onclick="confirmDelete()" class="danger">
      Delete Files
    </button>
  </div>
</div>

Required behavior:

  • Focus moves into dialog on open (to first focusable element or the dialog itself)
  • Tab/Shift+Tab cycles within dialog only (focus trap)
  • Escape closes the dialog
  • Focus returns to the element that triggered the dialog
Accordion / Disclosure
html
<div class="accordion">
  <h3>
    <button aria-expanded="false" aria-controls="sect1-content"
            id="sect1-header">
      Shipping Information
    </button>
  </h3>
  <div id="sect1-content" role="region" aria-labelledby="sect1-header"
       hidden>
    <p>We ship to all 50 states...</p>
  </div>
</div>
Combobox / Autocomplete
html
<label for="city-input">City</label>
<div class="combobox-wrapper">
  <input type="text" id="city-input" role="combobox"
         aria-expanded="false" aria-autocomplete="list"
         aria-controls="city-listbox" aria-activedescendant="">
  <ul id="city-listbox" role="listbox" hidden>
    <li role="option" id="city-1">Chicago</li>
    <li role="option" id="city-2">Charlotte</li>
    <li role="option" id="city-3">Charleston</li>
  </ul>
</div>

When suggestions appear, set aria-expanded="true", show the listbox, and update aria-activedescendant to the highlighted option's ID as the user arrows through.

Live Regions

Live regions announce dynamic content changes without moving focus.

Types of Live Regions
html
<!-- Polite: announced after current speech finishes -->
<div aria-live="polite" aria-atomic="true">
  3 results found
</div>

<!-- Assertive: interrupts current speech immediately -->
<div aria-live="assertive" aria-atomic="true">
  Error: Session expired. Please log in again.
</div>

<!-- Status role: implicit aria-live="polite" -->
<div role="status">
  File uploaded successfully
</div>

<!-- Alert role: implicit aria-live="assertive" -->
<div role="alert">
  Payment failed. Please check your card details.
</div>

<!-- Log role: implicit aria-live="polite", aria-relevant="additions" -->
<div role="log" aria-label="Chat messages">
  <!-- New messages appended here -->
</div>

<!-- Progress updates -->
<div role="progressbar" aria-valuenow="65" aria-valuemin="0"
     aria-valuemax="100" aria-label="Upload progress">
</div>
Live Region Rules
  1. The container must exist in the DOM before content changes
  2. Only inject or change text inside an existing live region
  3. Use aria-atomic="true" when the entire region should be re-read
  4. Use polite for most updates; assertive only for errors or critical alerts
  5. Do not flood live regions with rapid updates - debounce to at most every 1-2 seconds
javascript
// Debounced live region update
const statusRegion = document.getElementById('search-status');
let debounceTimer;

function updateResultCount(count) {
  clearTimeout(debounceTimer);
  debounceTimer = setTimeout(() => {
    statusRegion.textContent = `${count} results found`;
  }, 1000);
}

Labeling Strategies

Naming Priority (Browser Resolution Order)
  1. aria-labelledby (references another element's text)
  2. aria-label (string directly on element)
  3. Native label (<label>, alt, <caption>, <legend>)
  4. title attribute (last resort, inconsistent support)
  5. Text content (for links, buttons)
Common Labeling Patterns
html
<!-- Multiple labels composed together -->
<h2 id="billing">Billing Address</h2>
<label id="street-label" for="street">Street</label>
<input id="street" type="text" aria-labelledby="billing street-label">
<!-- Screen reader announces: "Billing Address Street, edit text" -->

<!-- Icon-only button -->
<button aria-label="Close dialog">
  <svg aria-hidden="true"><!-- X icon --></svg>
</button>

<!-- Redundant link with image and text -->
<a href="/profile">
  <img src="avatar.jpg" alt="">
  My Profile
</a>
<!-- alt="" prevents "avatar.jpg My Profile" double announcement -->

<!-- Group of radio buttons -->
<fieldset>
  <legend>Preferred contact method</legend>
  <label><input type="radio" name="contact" value="email"> Email</label>
  <label><input type="radio" name="contact" value="phone"> Phone</label>
  <label><input type="radio" name="contact" value="text"> Text message</label>
</fieldset>

Hiding Content Correctly

TechniqueVisibleIn Accessibility TreeUse For
display: noneNoNoFully hidden from everyone
visibility: hiddenNoNoSame as display:none
hidden attributeNoNoSame, HTML native
aria-hidden="true"YesNoDecorative visuals, icons with labels
.sr-only classNoYesScreen-reader-only text
role="presentation"YesStrippedRemove semantic meaning
css
/* Screen-reader only utility class */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

Testing Workflows

NVDA + Firefox (Windows)
  1. Start NVDA (Ctrl+Alt+N or desktop shortcut)
  2. Open Speech Viewer (NVDA menu > Tools > Speech Viewer)
  3. Navigate to the page in Firefox
  4. Use these commands:
ActionKeys
Read next itemDown Arrow
Read previous itemUp Arrow
Next headingH
List all headingsNVDA+F7
Next landmarkD
Next form fieldF
Activate link/buttonEnter
Toggle forms modeNVDA+Space
Read current lineNVDA+L
Read entire pageNVDA+Down Arrow
Show full SKILL.md (513 more words)Show less
VoiceOver + Safari (macOS)
  1. Enable VoiceOver: Cmd+F5
  2. Use the rotor: VO+U (then arrow through headings, links, landmarks)
  3. Navigate:
ActionKeys
Next itemVO+Right
Previous itemVO+Left
ActivateVO+Space
RotorVO+U
Read from cursorVO+A
Web rotor navigationVO+Cmd+H (headings), VO+Cmd+J (form controls)

VO = Control+Option

VoiceOver on iOS
  1. Enable: Settings > Accessibility > VoiceOver
  2. Swipe right = next item, swipe left = previous
  3. Double-tap = activate
  4. Rotor (two-finger twist) = change navigation mode
JAWS + Chrome (Windows)
ActionKeys
Virtual cursor on/offJAWS+Z
Headings listJAWS+F6
Next headingH
Next region/landmarkR
Forms listJAWS+F5
Read from cursorJAWS+Down Arrow
Testing Checklist

For each page or component, verify:

  • All content is read in a logical order
  • Headings create a meaningful outline (no skipped levels)
  • All images have appropriate alt text (or are hidden)
  • All form fields announce their labels
  • Error messages are announced when they appear
  • State changes are communicated (expanded/collapsed, selected, checked)
  • Dynamic content updates are announced via live regions
  • Modals trap focus and announce their title
  • Custom widgets follow APG keyboard patterns
  • No content is announced that should be hidden
  • No content is hidden that should be announced

Common Screen Reader Bugs and Workarounds

Bug: aria-label on <div> or <span> is ignored

Fix: Only use aria-label on interactive elements or landmark roles.

Bug: VoiceOver ignores list semantics with list-style: none

Fix: Add role="list" explicitly on the <ul>.

css
/* This causes VoiceOver to drop list semantics */
ul { list-style: none; }
html
<!-- Fix -->
<ul role="list" style="list-style: none;">
Bug: aria-live region does not announce on first insertion

Fix: Ensure the container element is in the DOM on page load, then inject text content into it.

Bug: display:none to display:block transition not announced

Fix: Keep the element visible but empty, then change its text content.

Bug: Screen reader reads SVG title when it should not

Fix: Add aria-hidden="true" to decorative SVGs and focusable="false" for IE/Edge legacy.

html
<svg aria-hidden="true" focusable="false">
  <!-- decorative SVG -->
</svg>

Framework-Specific Guidance

React
jsx
// Announce route changes in single-page apps
import { useEffect, useRef } from 'react';
import { useLocation } from 'react-router-dom';

function RouteAnnouncer() {
  const location = useLocation();
  const announcerRef = useRef(null);

  useEffect(() => {
    const pageTitle = document.title;
    if (announcerRef.current) {
      announcerRef.current.textContent = `Navigated to ${pageTitle}`;
    }
  }, [location]);

  return (
    <div
      ref={announcerRef}
      role="status"
      aria-live="polite"
      aria-atomic="true"
      className="sr-only"
    />
  );
}
Vue

Use :aria-pressed="isActive.toString()" on toggle buttons. Bind ARIA attributes reactively using Vue's :aria-* syntax.

Angular

Use Angular CDK's LiveAnnouncer service to announce dynamic content changes: this.liveAnnouncer.announce('N results found', 'polite').

Process

  1. Gather information. Ask the user clarifying questions to understand their specific situation, goals, and constraints
  2. Analyze context. Review the information provided and identify key factors relevant to screen reader optimizer
  3. Develop recommendations. Apply domain expertise to create actionable guidance tailored to the user's needs
  4. Present structured output. Deliver findings in the output format below with clear next steps
  5. Address follow-ups. Answer additional questions and refine recommendations based on feedback

Output Format

template
## Screen Reader Optimizer Analysis

### Assessment
[Key findings and observations]

### Recommendations
1. [Primary recommendation]
2. [Secondary recommendation]
3. [Additional suggestions]

### Action Items
- [ ] [First action step]
- [ ] [Second action step]
- [ ] [Follow-up task]

Edge Cases

  • Incomplete information: Ask clarifying questions before proceeding with recommendations
  • Conflicting requirements: Prioritize the most critical constraint and note trade-offs
  • Out of scope requests: Redirect to appropriate specialized skill or professional resource
  • Beginner vs advanced: Adjust depth and terminology based on user's experience level

Example

Input: "Help me with screen reader optimizer for my current situation"

Output:

Based on your situation, here is a structured approach to screen reader optimizer:

  1. Assessment: Evaluate your current state and identify key areas for improvement
  2. Strategy: Develop a targeted plan based on best practices
  3. Implementation: Execute the plan with specific, measurable steps
  4. Review: Monitor progress and adjust as needed

© FerroxLabs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in src/process/resources/skills-library/bodies/skills/web-development/screen-reader-optimizer of FerroxLabs/wayland.

Open the folder on GitHubat commit 4c030c7

Compare with similar skills

Screen Reader Optimizer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Screen Reader Optimizer compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Screen Reader Optimizer this skillFerroxLabs/wayland608—~4.4kAutomated safety check: PassApache-2.0
Web Interface Guidelines Reviewervercel-labs/openreview1.7k98 repos~308Automated safety check: PassNone
Accessibility Reviewmarkmead/hyperui12k1 repos~1.1kAutomated safety check: PassMIT
Web Animation DesignbaptisteArno/typebot.io11k2 repos~2.7kAutomated safety check: PassCustom licence
Accessibility Fixeribelick/ui-skills9.4k4 repos~1.2kAutomated safety check: PassMIT
Wcag Audit PatternsvmDeshpande/ai-agent-automation17810 repos~610Automated safety check: PassApache-2.0

Similar skills

  • Web Interface Guidelines Reviewer

    vercel-labs/openreview

    Official

    Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my…

    1.7k GitHub starsUsed in 98 repos~308 tokens
    Frontend & DesignAuto-check passed
  • Accessibility Review

    markmead/hyperui

    Run a WCAG 2.1 AA accessibility audit on a design or page. An agent skill from markmead/hyperui.

    12k GitHub starsUsed in 1 repo~1.1k tokens
    Frontend & DesignAuto-check passed
  • Web Animation Design

    baptisteArno/typebot.io

    Guides easing, timing and animation choices for UI motion, based on a web animation course, and reviews existing animations in a before-and-after table.

    11k GitHub starsUsed in 2 repos~2.7k tokens
    Frontend & DesignAuto-check passed
  • Accessibility Fixer

    ibelick/ui-skills

    Audits and fixes HTML accessibility problems such as ARIA labels, keyboard navigation, focus management, contrast and form errors with minimal changes.

    9.4k GitHub starsUsed in 4 repos~1.2k tokens
    Frontend & DesignAuto-check passed
  • Wcag Audit Patterns

    vmDeshpande/ai-agent-automation

    Conduct WCAG 2.2 accessibility audits with automated testing, manual verification, and remediation guidance.

    178 GitHub starsUsed in 10 repos~610 tokens
    Frontend & DesignAuto-check passed
  • Baseline UI

    ibelick/ui-skills

    Applies a fixed set of UI rules for stack, components, interaction, animation, typography and layout, or reviews a file against them with concrete fixes.

    9.4k GitHub starsUsed in 8 repos~855 tokens
    Frontend & DesignAuto-check passed

More from FerroxLabs/wayland

All 1,194 skills in this repo
  • Star Office Helper

    FerroxLabs/wayland

    Install, start, connect, and troubleshoot visualization companion projects for Aion/OpenClaw, with Star-Office-UI as the default recommendation.

    608 GitHub stars~2.2k tokensUpdated yesterday
    Auto-check: notes
  • Openclaw Setup

    FerroxLabs/wayland

    OpenClaw usage expert: Helps you install, deploy, configure, and use OpenClaw personal AI assistant.

    608 GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Tvcontrol Setup

    FerroxLabs/wayland

    Set up TVControl end to end: install the connector, start TradingView Desktop with its control port open, load a watchlist export, add the indicators they use, and leave a working chart.

    608 GitHub stars~5.7k tokensUpdated yesterday
    Auto-check passed
  • Ab Testing Specialist

    FerroxLabs/wayland

    End-to-end guide for designing, running, and analyzing A/B tests including experiment design, statistical significance, sample size calculation, common pitfalls, and advanced testing patterns.

    608 GitHub stars~3.7k tokensUpdated yesterday
    Auto-check passed
  • Academic Writer

    FerroxLabs/wayland

    Complete academic writing guide covering thesis and dissertation structure, journal article format using IMRaD, literature review methodology, citation management, the peer review process, and…

    608 GitHub stars~4.5k tokensUpdated yesterday
    Auto-check passed
  • Accessibility Auditor

    FerroxLabs/wayland

    Web accessibility expertise covering WCAG 2.2 conformance, audit methodology, ARIA patterns, keyboard navigation, screen reader testing, focus management, form accessibility, and automated vs manual…

    608 GitHub stars~4.1k tokensUpdated yesterday
    Auto-check passed

Questions about Screen Reader Optimizer

What does Screen Reader Optimizer do?

Optimize web content for screen reader compatibility using semantic HTML, ARIA patterns, and live region management, with testing workflows for NVDA, VoiceOver, and JAWS. Screen Reader Optimizer is an agent skill from FerroxLabs/wayland. Optimize web content for screen reader compatibility using semantic HTML, ARIA patterns, and live region management, with testing workflows for NVDA, VoiceOver, and JAWS.

When should I use Screen Reader Optimizer?

Screen Reader Optimizer fits situations like: the user asks about screen reader optimizer; related techniques; needs guidance in this domain; the request is outside the scope of screen reader optimizer.

How do I install Screen Reader Optimizer in Claude Code?

Run `npx skills add FerroxLabs/wayland --skill screen-reader-optimizer -a claude-code`. Or copy the skill folder (src/process/resources/skills-library/bodies/skills/web-development/screen-reader-optimizer in FerroxLabs/wayland) into .claude/skills/screen-reader-optimizer in your project. Claude Code loads it when a task matches its description.

How do I install Screen Reader Optimizer in Codex?

Run `npx skills add FerroxLabs/wayland --skill screen-reader-optimizer -a codex`. Or copy the skill folder (src/process/resources/skills-library/bodies/skills/web-development/screen-reader-optimizer in FerroxLabs/wayland) into .agents/skills/screen-reader-optimizer in your project. Codex loads it when a task matches its description.

Can I use Screen Reader Optimizer in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add FerroxLabs/wayland --skill screen-reader-optimizer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/screen-reader-optimizer, .gemini/skills/screen-reader-optimizer, .github/skills/screen-reader-optimizer and .opencode/skills/screen-reader-optimizer in your project.

What does Screen Reader Optimizer need to run?

SKILL.md names no scripts, command-line tools or credentials: Screen Reader Optimizer is instructions for the agent only.

Does Screen Reader Optimizer access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Screen Reader Optimizer safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Screen Reader Optimizer use?

Screen Reader Optimizer is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Screen Reader Optimizer use?

About 4.4k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Screen Reader Optimizer?

Skills that share tags, products or a category with Screen Reader Optimizer: Web Interface Guidelines Reviewer (vercel-labs/openreview, 1.7k stars), Accessibility Review (markmead/hyperui, 12k stars), Web Animation Design (baptisteArno/typebot.io, 11k stars) and Accessibility Fixer (ibelick/ui-skills, 9.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Screen Reader Optimizer?

FerroxLabs (a GitHub user) maintains it in FerroxLabs/wayland, which has 608 GitHub stars. The repository holds 1,194 skills in this directory. The repository was last updated on October 6, 2026.

Source: FerroxLabs/wayland on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.