From harness-claude
Writes effective alt text for images and provides text alternatives for non-text content, including SVGs and complex images like charts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/harness-claude:a11y-image-text-altThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Write effective alt text for images and provide text alternatives for all non-text content
Write effective alt text for images and provide text alternatives for all non-text content
<img> must have an alt attribute. There are no exceptions — even decorative images need alt="" (empty string) to tell screen readers to skip them.// 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>
// 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" />
<figure> and <figcaption> for images with visible captions. The caption complements the alt text — they should not be identical.<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>
// 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>
// 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 role="presentation" or alt="" for purely decorative images. Background images in CSS do not need alt text (they are invisible to screen readers). Inline decorative images need 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>
Decision tree for alt text:
alt=""alt="" (avoid repetition)Alt text guidelines:
img roleCMS 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:
alt attribute entirely (screen readers read the filename: "IMG_20260407_12345.jpg")https://www.w3.org/WAI/tutorials/images/
npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeGuides adding text alternatives for images, icons, SVGs, and canvas elements to meet WCAG 1.1.1. Classifies images as informative, decorative, or functional.
Guides writing meaningful alt text for images, charts, diagrams, and visual content. Helps decide decorative/functional/informative/complex image types and craft context-appropriate descriptions.
Writes alt text for editorial images following WCAG accessibility guidelines, with a focus on screen reader users and editorial context.