git clone https://github.com/Intense-Visions/harness-engineering
T=$(mktemp -d) && git clone --depth=1 https://github.com/Intense-Visions/harness-engineering "$T" && mkdir -p ~/.claude/skills && cp -r "$T/agents/skills/claude-code/a11y-image-text-alt" ~/.claude/skills/intense-visions-harness-engineering-a11y-image-text-alt && rm -rf "$T"
agents/skills/claude-code/a11y-image-text-alt/SKILL.mdImage and Text Alternatives
Write effective alt text for images and provide text alternatives for all non-text content
When to Use
- Adding images to any web page or component
- Using icons as buttons or links
- Embedding charts, diagrams, or infographics
- Building image galleries or product image displays
- Using SVGs for icons or illustrations
Instructions
- Every
must have an<img>
attribute. There are no exceptions — even decorative images needalt
(empty string) to tell screen readers to skip them.alt=""
// Informative image — describe what is shown <img src="chart-q3.png" alt="Q3 revenue grew 23% to $4.2M, exceeding the $3.8M target" /> // Decorative image — empty alt to skip <img src="decorative-wave.svg" alt="" /> // Functional image (linked/button) — describe the action <a href="/home"><img src="logo.svg" alt="Acme Corp — go to homepage" /></a>
- Write alt text that conveys the image's purpose, not its appearance. Ask: "If I replaced this image with text, what would I write?"
// Bad — describes appearance <img alt="A person sitting at a desk with a laptop" /> // Good — describes purpose in context <img alt="Customer using the dashboard to track orders" /> // Bad — redundant with surrounding text <h2>Meet Our Team</h2> <img alt="Photo of our team" /> // The heading already says this // Good — adds information <h2>Meet Our Team</h2> <img alt="The 12-person engineering team at the 2026 offsite in Portland" />
- Use
and<figure>
for images with visible captions. The caption complements the alt text — they should not be identical.<figcaption>
<figure> <img src="architecture.png" alt="System architecture showing three microservices connected via message queue" /> <figcaption>Figure 1: High-level architecture of the order processing system</figcaption> </figure>
- Make SVG icons accessible based on their role:
// Decorative icon (next to text label) — hide from screen readers <button> <SearchIcon aria-hidden="true" /> <span>Search</span> </button> // Standalone icon button — provide accessible name <button aria-label="Search"> <SearchIcon aria-hidden="true" /> </button> // Informative SVG — use role="img" and title <svg role="img" aria-labelledby="chart-title"> <title id="chart-title">Monthly sales trend showing 15% growth</title> {/* chart paths */} </svg>
- Provide text alternatives for complex images. Charts, diagrams, and infographics need extended descriptions. Use one of these approaches:
// Approach 1: Adjacent text description <img src="org-chart.png" alt="Organization chart" aria-describedby="org-desc" /> <div id="org-desc"> <p>The CEO reports to the board. Three VPs report to the CEO: VP Engineering, VP Sales, VP Operations...</p> </div> // Approach 2: Link to full description <figure> <img src="data-flow.png" alt="Data flow diagram for the ETL pipeline" /> <figcaption> Data flow diagram. <a href="/docs/etl-diagram-description">Full text description</a> </figcaption> </figure>
-
Handle image loading states. When images fail to load, the alt text becomes the visible content. Write alt text that makes sense visually too.
-
Use
orrole="presentation"
for purely decorative images. Background images in CSS do not need alt text (they are invisible to screen readers). Inline decorative images needalt=""
.alt="" -
For image-based buttons and links, the alt text describes the action, not the image.
// Social media link — describe the destination, not the icon <a href="https://twitter.com/company"> <img src="twitter-icon.svg" alt="Follow us on Twitter" /> </a> // Image link in a product card <a href="/products/widget"> <img src="widget.jpg" alt="Blue Widget Pro — view product details" /> </a>
Details
Decision tree for alt text:
- Is the image purely decorative? →
alt="" - Is the image a functional element (link, button)? → Alt describes the function/destination
- Is the image informative? → Alt conveys the same information as the image
- Is the image complex (chart, diagram)? → Short alt + long description elsewhere
- Is the image redundant with adjacent text? →
(avoid repetition)alt=""
Alt text guidelines:
- Keep it concise — typically under 125 characters (screen readers may truncate longer text)
- Do not start with "Image of" or "Photo of" — screen readers already announce the
roleimg - Include text that appears in the image (logos with text, screenshots with UI labels)
- Consider context — the same image may need different alt text on different pages
CMS and user-generated content: Require alt text in image upload forms. Provide guidance to content editors. Use AI-generated alt text as a starting point, but always have a human review it.
Common mistakes:
- Missing
attribute entirely (screen readers read the filename: "IMG_20260407_12345.jpg")alt - Alt text that says "image" or "photo" (redundant with the element role)
- Same alt text for multiple images ("product image" on every product photo)
- Decorative images with descriptive alt text (adds noise for screen reader users)
Source
https://www.w3.org/WAI/tutorials/images/
Process
- Read the instructions and examples in this document.
- Apply the patterns to your implementation, adapting to your specific context.
- Verify your implementation against the details and edge cases listed above.
Harness Integration
- Type: knowledge — this skill is a reference document, not a procedural workflow.
- No tools or state — consumed as context by other skills and agents.
Success Criteria
- The patterns described in this document are applied correctly in the implementation.
- Edge cases and anti-patterns listed in this document are avoided.