Token导航 LogoToken导航

Agent Skill · 前端设计

accessibility-checklist(无障碍检查表)

用于辅助无障碍访问检查、页面可用性审计和前端可访问性改进。它适合让 Agent 检查语义标签、键盘操作、颜色对比、ARIA 属性和自动化检测结果。使用时需要结合真实页面和浏览器验证,不应只依赖静态文本判断;涉及修复建议时,应兼顾设计系统、组件复用和 WCAG 等通用无障碍规范。

accessibility-checklist 是前端设计类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为权限未标注;许可证信息还不明确,第三方扫描已通过,按安装量在前端设计类的 10,216 个 Skill 里排第 6,126。

总安装 549周安装 22GitHub Stars 1,064下载 178核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:accessibility-checklist(无障碍检查表)
来源仓库:https://github.com/inkeep/agents
仓库路径:skills/accessibility-checklist
安装命令:
npx skills add https://github.com/inkeep/agents --skill accessibility-checklist
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/inkeep/agents --skill accessibility-checklist

这个 Skill 是做什么的

前端设计类 Skill 关注页面结构、视觉规范和组件写法,输出通常是可运行的界面代码。

提供结构化无障碍审查清单以评估组件合规性。覆盖表单、模态框等特定组件类型的可访问性要求。强调 Radix UI / shadcn/ui 的正确用法,避免误用导致问题。需结合实际组件上下文判断,优先关注库误用而非手动实现缺失。

accessibility-checklist 属于前端设计类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/accessibility-checklist

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/inkeep/agents --skill accessibility-checklist;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    权限没有明确标注,第一次使用时只给一个无关紧要的任务,观察它到底读了哪些文件和网络。

常见问题

6 条

accessibility-checklist 怎么安装?

在终端执行 npx skills add https://github.com/inkeep/agents --skill accessibility-checklist。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

accessibility-checklist 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

accessibility-checklist 需要什么权限?

权限级别没有明确标注。第一次使用时建议只给无关紧要的任务,观察它实际读写了哪些内容。

accessibility-checklist 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

accessibility-checklist 用的人多吗?

公开数据是累计安装 549 次,近一周安装 22 次,下载 178 次,GitHub 1,064 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

accessibility-checklist 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。
  • 来源仓库有 1,064 星,维护活跃度相对可查。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理前端设计类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

前端设计类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
frontend-design

前端设计 · Codex、Claude

8,823,360126,072只读MIT通过
vercel-composition-patterns

Vercel 组合模式 · Codex、Claude

3,858,81625,893需要联网MIT通过
vercel-react-native-skills

Vercel React native skills 前端 · Codex、Claude

2,468,66425,878只读MIT通过
adapt

adapt 搜索 · Codex、Claude

2,027,04023,125操作浏览器未明确通过
bolder

bolder 分析 · Codex、Claude

2,004,28823,130只读未明确通过
accessibility-checklist

无障碍检查表 · 本页

5491,064权限未标注未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Accessibility Review Checklist

How to Use This Checklist

  • Review changed components against the relevant sections below
  • Not every section applies to every component — form checks only apply to form components, modal checks only apply to modals, etc.
  • This codebase uses Radix UI / shadcn/ui extensively. These libraries handle most a11y patterns (keyboard nav, focus management, ARIA) automatically. Your primary job is to catch misuse of the library, not absence of manual implementation.
  • When unsure whether a component library handles a pattern, lower confidence rather than asserting

§1 Component Library Misuse (Radix / shadcn/ui)

This is the highest-signal section for this codebase. Radix handles a11y correctly when used correctly — bugs come from misuse.

  • Dialog/Sheet without title: Radix Dialog and Sheet require DialogTitle / SheetTitle for screen reader announcement. If DialogTitle is omitted or visually hidden without aria-label on DialogContent, screen readers announce an unlabeled dialog.

- Common violation: <DialogContent> with no <DialogTitle> and no aria-label - Note: Using <VisuallyHidden><DialogTitle>...</DialogTitle></VisuallyHidden> is a valid pattern for dialogs where a visible title doesn't fit the design

  • AlertDialog without description: AlertDialogContent should include AlertDialogDescription for screen readers to understand the confirmation context. If omitted, add aria-describedby={undefined} to explicitly opt out (otherwise Radix warns).
  • Select/Combobox without accessible trigger label: Radix Select needs aria-label on the trigger when there's no visible label. Custom generic-select.tsx and generic-combo-box.tsx wrappers should propagate labels.

- Common violation: <Select> inside a form field that has a visual label, but the label isn't associated via htmlFor or wrapping

  • DropdownMenu items without accessible names: Icon-only menu items need text content or aria-label. Menu items that are just icons (e.g., copy, delete, edit) need text.

- Correct pattern: <DropdownMenuItem><TrashIcon /> Delete</DropdownMenuItem> (icon + text) - Violation: <DropdownMenuItem><TrashIcon /></DropdownMenuItem> (icon only, no text, no aria-label)

  • Tooltip as only accessible name: Tooltip text is not reliably announced by all screen readers. If a control's only accessible name is in a tooltip, it needs aria-label as well.

- Common pattern to flag: <Tooltip><TooltipTrigger><Button><Icon /></Button></TooltipTrigger><TooltipContent>Delete</TooltipContent></Tooltip> — Button needs aria-label="Delete"

  • Overriding Radix's keyboard handling: If a component wraps a Radix primitive and adds onKeyDown that calls e.preventDefault() or e.stopPropagation(), it may break Radix's built-in keyboard navigation.

§2 Forms & Labels

The codebase uses react-hook-form + Zod with shadcn/ui's Form component, which auto-associates labels via FormItem context. Issues arise when forms bypass this pattern.

  • Every form input must have an accessible name: Via <FormLabel>, <label htmlFor={id}>, aria-label, or aria-labelledby. Placeholder text alone is NOT a label.

- Common violation: Custom inputs outside <FormField> / <FormItem> that don't get auto-association - Common violation: <Input placeholder="Enter name" /> used standalone without any label

  • Error messages must be associated with their input: shadcn/ui's <FormMessage> auto-associates via aria-describedby when inside <FormItem>. Custom error rendering outside this pattern loses the association.

- Flag: Error text rendered near an input but not using <FormMessage> or manual aria-describedby

  • Required fields must be indicated programmatically: Use aria-required="true" or native required, not just a visual asterisk. The Form component doesn't add this automatically — it comes from the Zod schema validation at submit time, not at the HTML level.
  • Grouped controls need group semantics: Radio groups and checkbox groups should use <RadioGroup> (Radix) or <fieldset>/<legend>. Loose radio buttons or checkboxes without group context confuse screen readers.

- Scope: Configuration pages, settings forms, multi-option selectors


§3 Accessible Names (Icons & Buttons)

With 48 shadcn/ui components and heavy icon usage (Lucide React), icon-only interactive elements are a primary risk area.

  • Icon-only buttons must have aria-label: Buttons containing only an icon (no visible text) need aria-label describing the action.

- Common violation: <Button variant="ghost" size="icon"><TrashIcon /></Button> without aria-label - Very common in: data tables (row actions), toolbars, card headers, dialog close buttons - Note: shadcn/ui's Dialog close button already includes <span className="sr-only">Close</span> — don't flag this

  • Icon-only links need accessible names: Same as buttons — <a> or <Link> with only an icon needs aria-label.
  • sr-only text is a valid alternative to aria-label: <Button><TrashIcon /><span className="sr-only">Delete item</span></Button> is correct. Don't flag this pattern as missing a label.
  • Decorative icons should be hidden: Icons that are purely decorative (next to visible text) should have aria-hidden="true" to avoid redundant announcements.

- Correct: <Button><PlusIcon aria-hidden="true" /> Add item</Button> - Also correct: Lucide icons may set aria-hidden by default — check before flagging


§4 Semantic HTML & Regression Guard

The codebase currently has no <div onClick> anti-patterns. This section guards against regressions.

  • Interactive elements must use native interactive HTML: <button> for actions, <a>/<Link> for navigation. NOT <div>, <span>, or <p> with onClick.

- Flag any new <div onClick> or <span onClick> in the diff as CRITICAL - Exception: Components from Radix that render proper elements under the hood are fine

  • Tables must use semantic HTML: <table>, <thead>, <tbody>, <th>, <td>. The codebase already does this. Flag any new data display that should be a table but uses <div> grid instead.

- Consider: <th> elements should have scope="col" or scope="row" for complex tables

  • Don't disable zoom: Flag user-scalable=no or maximum-scale=1 in viewport meta tags.

§5 Focus Management

Radix Dialog handles focus trap and restore automatically. This section covers what Radix doesn't handle.

  • Custom modals/overlays must manage focus: Any modal-like UI NOT built on Radix Dialog (e.g., custom overlays, fullscreen panels, React Flow side panels) must:

- Move focus into the overlay when it opens - Trap focus while open (Tab cycles within the overlay) - Return focus to the trigger when closed - Close on Escape

  • Focus visible indicator must not be removed: outline-none / outline: none without a focus-visible:ring-* replacement removes the only visual cue for keyboard users.

- Note: The codebase consistently uses focus-visible:ring-* alongside outline-none — this is correct. Only flag if a new component uses outline-none without the replacement.

  • Route change focus (Next.js App Router): After client-side navigation, focus should move to the main content. Next.js App Router may handle this — only flag if a custom route change mechanism bypasses the framework's handling.
  • Positive tabIndex is an anti-pattern: tabIndex={0} and tabIndex={-1} are fine. tabIndex={1} or higher overrides natural order and creates unpredictable navigation. Flag any positive tabIndex values.

§6 Dynamic Content & Live Regions

With 287 toast usages (Sonner) and chat streaming interfaces, announcements for screen readers matter.

  • Sonner toasts: Sonner uses role="status" with aria-live="polite" by default. This is correct. Only flag if:

- A custom toast/notification bypasses Sonner and doesn't use a live region - An error toast should use role="alert" (assertive) instead of role="status" (polite) for critical errors

  • Loading states should be communicated: Skeleton loaders and spinners should be accompanied by screen reader announcements. Options:

- aria-busy="true" on the loading container - <span className="sr-only">Loading...</span> inside the spinner - aria-live="polite" region that announces "Loading..." then announces when content is ready - Note: The codebase's Spinner component already has aria-label — check that new loading patterns follow suit

  • Chat streaming messages: For the copilot/playground chat interfaces, new messages should be announced to screen readers. The @inkeep/agents-ui library should handle this — only flag if custom chat rendering bypasses the library's announcements.
  • Inline form validation: When validation errors appear dynamically (without page reload), they should either:

- Be associated with the input via aria-describedby (shadcn/ui's <FormMessage> does this) - Or use aria-live="polite" to announce the error - Only flag custom validation rendering outside the <FormMessage> pattern


§7 Specialized Components

These components have unique a11y considerations beyond standard patterns.

  • Monaco Editor: Has known a11y limitations for screen reader users. When Monaco is used for required input (not just optional code editing), consider providing an alternative text input fallback. Flag only if a new Monaco instance is introduced without consideration.
  • React Flow (node graph editor): Keyboard navigation in visual node editors is inherently difficult. When React Flow is used:

- Ensure all node operations are also accessible via context menus or keyboard shortcuts - Node labels should be readable by screen readers - Flag only if new React Flow interactions are added without keyboard alternatives

  • Data tables with actions: Tables with row-level action buttons (common in this codebase) should ensure action buttons have accessible names and the table structure allows screen reader navigation.

- Flag: New table action buttons that are icon-only without aria-label


Severity Calibration

FindingSeverityRationale
<div onClick> or <span onClick> (non-semantic interactive element)CRITICALCompletely blocks keyboard/screen reader users
Keyboard trap (user cannot Tab out of a component)CRITICALCompletely blocks keyboard users
Custom modal without focus management (not using Radix Dialog)MAJORMajor disorientation for keyboard/screen reader users
Form input without accessible name (no label, no aria-label)MAJORScreen reader users cannot identify the input
Icon-only button without aria-label or sr-only textMAJORScreen reader users cannot identify the action
Dialog without DialogTitle and no aria-labelMAJORScreen reader users don't know what the dialog is for
aria-hidden="true" on container with focusable childrenMAJORCreates ghost focus for screen reader users
Error message not associated with input (outside FormMessage)MAJORScreen reader users don't know about validation errors
outline-none without focus-visible:ring replacementMAJORKeyboard users lose their place
Radix keyboard handling overridden via stopPropagationMAJORBreaks built-in a11y of the component library
Missing alt text on informational imageMINORInformation not conveyed, but usually not blocking
Decorative icon missing aria-hidden="true"MINORRedundant announcement — annoying, not blocking
Custom notification/toast without live regionMINORStatus not announced, but visually evident
Redundant ARIA on native elementsMINORNoise, not breakage — indicates misunderstanding
Missing scope on <th> in complex tablesINFONavigation degraded in complex tables, not blocking

平台分布

Codex

36.76%
按下载量换算65

Claude

31.31%
按下载量换算56

Cursor

16.96%
按下载量换算30

Gemini CLI

9.76%
按下载量换算17

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

权限未标注

当前来源未能明确判断权限范围,默认进入异常复核队列。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills