From harness-claude
Writes effective alt text for images and text alternatives for non-text content like SVGs, icons, charts, diagrams, and infographics. Use when adding images to web pages or components.
npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeThis skill uses the workspace's default tool permissions.
> Write effective alt text for images and provide text alternatives for all non-text content
Provides guidelines for accessible user-facing content including labels, headings, error messages, help text, alt text, links, and form instructions.
Adds detailed alt text to markdown image embeds missing it by reading images and describing content. Supports Obsidian wiki-style and standard formats for accessible notes.
Guides image optimization for Google Search (Images, sitemaps), performance (WebP, lazy loading, LCP), accessibility (alt text, captions), and structured data.
Share bugs, ideas, or general feedback.
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/