Agent skill

Ibm A11y Testing Guide

by langflow-ai in langflow-ai/langflow

Reference guide for writing and running Langflow frontend accessibility tests with axe (Jest) and IBM Equal Access (Playwright page.runA11yScan).

MITAuto-check passedFrontend & Design

Install Ibm A11y Testing Guide

skills CLI
$ npx skills add langflow-ai/langflow --skill ibm-a11y-testing-guide -a claude-code

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

GitHub CLI
$ gh skill install langflow-ai/langflow ibm-a11y-testing-guide --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/langflow-ai/langflow.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/ibm-a11y-testing-guide .claude/skills/ibm-a11y-testing-guide && 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
ibm-a11y-testing-guide
GitHub stars
155k
Token cost
~4.6k tokens
SKILL.md length
2,116 words
Files
1
Skills in repo
10
Repo updated
First seen
Licence
MIT

At a glance

Reference guide for writing and running Langflow frontend accessibility tests with axe (Jest) and IBM Equal Access (Playwright page.runA11yScan).

  • Works in 4 steps: Read the changed files and nearby tests. → Identify the UI surface → List interactive surfaces → …
  • Reviewing a11y tests
  • SKILL.md covers When To Use, Goal, The Bar: two engines, both… and First Pass, plus 9 more sections
  • Calls npx, uv and npm

What it does

Ibm A11y Testing Guide is an agent skill from langflow-ai/langflow. Reference guide for writing and running Langflow frontend accessibility tests with axe (Jest) and IBM Equal Access (Playwright page.runA11yScan). Covers which engine/test layer to pick, the POUR checklist, axe-vs-IBM rule gaps, Radix/AG-Grid component gotchas, and IBM baselines. Use when writing or reviewing a11y tests, debugging a specific axe/IBM violation, or deciding which test layer fits a UI surface. Does not run scans, audit a whole surface, or fix a PR end-to-end — see ibm-a11y-route-scan…

Its SKILL.md is about 4.6k 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. It works with Jest and Playwright. The repository describes itself as: Langflow is a powerful tool for building and deploying AI-powered agents and workflows. The licence is MIT.

When your agent uses it

  • Reviewing a11y tests
  • Debugging a specific axe/IBM violation
  • Deciding which test layer fits a UI surface

Example prompts

  • “/ibm-a11y-testing-guide”

Requirements

  • Python 3
  • Node.js

Workflow steps

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

  1. Read the changed files and nearby tests.
  2. Identify the UI surface
  3. List interactive surfaces
  4. List states worth scanning

What it can do on your machine

Read from SKILL.md and the folder at commit 504c02f. 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

    Shell commands in SKILL.md call:

    • npx
    • uv
    • npm

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

  • Network

    No URLs in SKILL.md. Its commands use npx, uv and npm, which can reach the network depending on how they are called.

    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

Ibm A11y Testing Guide loads about 4.6k tokens when it runs. Until then it costs about 147 tokens; SKILL.md has 2,116 words of instructions outside code blocks.

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

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 langflow-ai/langflow at commit 504c02f, republished under its MIT licence (© langflow-ai). 2,116 words, ~4,610 tokens.

Download SKILL.mdSave it as .claude/skills/ibm-a11y-testing-guide/SKILL.md (or your agent's skills folder).
name
ibm-a11y-testing-guide
description
Reference guide for writing and running Langflow frontend accessibility tests with axe (Jest) and IBM Equal Access (Playwright `page.runA11yScan`). Covers which engine/test layer to pick, the POUR checklist, axe-vs-IBM rule gaps, Radix/AG-Grid component gotchas, and IBM baselines. Use when writing or reviewing a11y tests, debugging a specific axe/IBM violation, or deciding which test layer fits a UI surface. Does not run scans, audit a whole surface, or fix a PR end-to-end — see ibm-a11y-route-scan, ibm-a11y-level1-audit, and ibm-a11y-pr-remediation for those.

IBM/axe Accessibility Testing Guide

Reference material for how to test a given UI surface. This skill does not decide what to scan or drive a fix loop by itself — use it while writing tests, debugging a violation, or implementing a fix identified by ibm-a11y-route-scan, ibm-a11y-level1-audit, or ibm-a11y-pr-remediation.

When To Use

Use this skill for frontend work under src/frontend when the change affects:

  • UI components, primitives, pages, routes, dialogs, drawers, popovers, dropdowns, tabs, accordions, tables, forms, navigation, or canvas controls.
  • ARIA attributes, labels, roles, focus management, tab order, keyboard interaction, disabled states, loading states, or error states.
  • A request to write, fix, or review an axe/IBM accessibility test.

Use alongside:

  • frontend-testing for Jest/React Testing Library patterns.
  • e2e-testing for Playwright patterns.
  • frontend-i18n when adding or changing user-facing labels, accessible names, aria-label, tooltips, or visible strings.
  • ibm-a11y-route-scan to batch-scan routes with the Python scanner and produce Markdown/HTML reports.
  • ibm-a11y-level1-audit for a scoped IBM Level 1 compliance audit and report.
  • ibm-a11y-pr-remediation to scan and fix an entire PR/branch end-to-end.

Goal

Do not stop at "run axe on default render." Inspect the changed UI and cover every meaningful user-visible state, for both keyboard and screen-reader users, that can expose accessibility bugs.

The Bar: two engines, both must pass

Automated a11y is not one tool. Run BOTH — they catch different classes of bug:

  • axe-core — Jest axe() (@/utils/a11y-test), jsdom-only. Fast; strong on contrast, labels, roles, ARIA basics.
  • IBM Equal Access — the stricter engine on ARIA structure and keyboard semantics; catches real WCAG Level-1 issues axe silently passes. Two entry points, same engine (aChecker):
    • Playwright page.runA11yScan(label) — runs aChecker.getCompliance in-browser on the live DOM, so it scans open modals / menus / selected / editing states. This is IBM, not axe (despite the name).
    • scripts/a11y/a11y_scan.py (see ibm-a11y-route-scan) — route scanner for the default-loaded page only.

A page that is green on axe is NOT done. When the change touches a table/tree/listbox/menu/composite widget, IBM is mandatory. Prefer page.runA11yScan for stateful surfaces (it sees the DOM after your interactions); use the Python scanner for a quick default-load route check.

Verify commands:

bash
cd src/frontend
RUN_A11Y=true RUN_A11Y_ASSERT=true npx playwright test tests/a11y/<feature>.a11y.spec.ts --project=chromium --workers=5

# The Python scanner's playwright deps are NOT in the default `uv sync`.
# One-time: `uv run --with playwright playwright install chromium`
uv run --with playwright python scripts/a11y/a11y_scan.py \
  --url http://localhost:3000 \
  --routes /settings/<route> \
  --out /tmp/a11y.json --markdown /tmp/a11y.md --timeout-ms 45000

RUN_A11Y=true runs the scan; add RUN_A11Y_ASSERT=true to actually fail on new violations (without it the scan is informational). Both engines must report zero. After changing a shared component, re-scan every page that uses it, not just the one you touched.

First Pass

  1. Read the changed files and nearby tests.
  2. Identify the UI surface:
    • Primitive/component only
    • Composed component
    • Page/route
    • Stateful workflow
    • Shared helper that changes labels, roles, tab order, or focus behavior
  3. List interactive surfaces:
    • Buttons, links, inputs, checkboxes, switches, radios, selects, comboboxes
    • Dropdown menus, popovers, dialogs, drawers, tooltips
    • Tabs, accordions, tables/treegrids, row actions, pagination
    • Keyboard-only interactions and focus traps
  4. List states worth scanning:
    • Default, populated, empty, loading, error/validation visible
    • Disabled/read-only, selected/expanded/open
    • Modal/dropdown/popover open
    • Mobile viewport when layout changes

What To Check (POUR checklist)

Perceivable
  • Non-text content has a text alternative; decorative images are hidden from AT.
  • Text contrast ≥ 4.5:1; non-text (icons, borders, focus rings) ≥ 3:1.
  • Layout reflows at 320px / 400% zoom without horizontal scroll or loss of content.
Operable (keyboard is the big one)
  • Every control is reachable AND operable by keyboard (Enter/Space activate; arrows where expected).
  • Focus is always visible.
  • Focus order is logical and matches visual order.
  • No keyboard trap — test Shift+Tab too, not just Tab. Focus can always move out of a widget both ways.
  • Disabled controls are not in the tab order.
  • Composite widgets (grid/tree/listbox/menu/tablist) are ONE logical tab stop with a roving tabindex; arrows move within.
  • After async transitions (route change, panel open/close) focus lands somewhere useful, never silently on <body>.
Understandable
  • Inputs have programmatic labels; visible label matches accessible name.
  • Errors are identified in text and associated with their field; give a suggestion when possible.
  • The same control is identified consistently across the app.
Robust (name / role / value)
  • Interactive elements expose a correct role, name, and state.
  • Valid ARIA parent/child (e.g. rowgroup owns row, list owns listitem).
  • No tabbable element with a non-widget role (presentation/none).
  • aria-hidden="true" never wraps a focusable element.

axe vs IBM: known gaps

Things axe passes but IBM flags (all real WCAG Level 1):

IBM ruleWCAGTypical cause
element_tabbable_role_valid4.1.2tabbable element with role="presentation" / no widget role (focus sentinels, wrappers)
aria_child_valid1.3.1rowgroup/list/tablist owning no valid child role
aria_child_tabbable2.1.1 / 4.1.2composite widget with no tabbable descendant (needs roving tabindex)
aria_hidden_focus_misuse4.1.2focusable element inside aria-hidden="true"
aria_accessiblename_exists4.1.2element with a widget role but no accessible name — e.g. an AG Grid columnheader with neither field nor headerName (icon-only action column)
aria_content_in_landmark1.3.1content outside any landmark — e.g. a Radix menu/popover portaled to <body>. role="menu" is NOT landmark-exempt; only aria-modal dialogs are. Often unfixable app-wide → baseline it (see below)

Rule of thumb: touch a table/tree/listbox/menu → scan with IBM.

Component Gotchas

  • Data grids (AG Grid — the shared TableComponent): the grid's own tab guards + pagination are the fragile part.
    • Disabled paging buttons must be tabindex="-1", but NEVER inert/disabled — that breaks AG Grid's tab guards and traps reverse (Shift+Tab) entry (WCAG 2.1.2).
    • AG Grid still programmatically focuses disabled paging on tab-out; handle with its tabToNextCell hook plus a container-scoped focusin redirect (defer the redirect to requestAnimationFrame — focus changes inside a focusin handler are ignored, and AG Grid restores the last-focused cell on the next tick).
    • Empty rowgroups need role="presentation"; the grid needs one roving-tabindex row.
    • Icon-only / action column header: AG Grid derives the columnheader accessible name from field; a column with neither field nor headerName is nameless (aria_accessiblename_exists, 4.1.2). Give it a headerName and hide it visually with a headerClass (sr-only clip on .ag-header-cell-text) so the header stays blank but named.
    • Interactive control inside a cell (menu trigger, button): AG Grid navigates cell-by-cell and never tab-focuses the inner control, so it's keyboard-inoperable. Activate it from the grid's onCellKeyDown on Enter/Space (give the column a colId to target it). A Radix trigger opens on keydown/pointerdown, not a synthetic .click() — focus the trigger and re-dispatch the key (new KeyboardEvent("keydown", {key, bubbles:true})), guarding against re-entry (skip when target is already the button). TableComponent spreads {...props} to AG Grid, so pass onCellKeyDown from the page — no shared-component change.
    • Focus visible on borderless grids (.ag-no-border): the theme suppresses the cell focus outline (outline:none), hiding keyboard focus (2.4.7). Restore it with a :focus-visible ring scoped to .ag-no-border .ag-cell:focus-visible (+ header/row). :focus-visible distinguishes modality on AG cells — mouse click resolves to :focus, keyboard nav to :focus-visible — so the ring shows for keyboard only and mouse stays quiet. CAVEAT when verifying: probe with a clean, first-interaction page; a session that already used the keyboard makes :focus-visible report true for a later mouse click (heuristic contamination).
    • Set ensureDomOrder: true so DOM order matches visual order for tab navigation.
    • TableComponent is shared across settings/traces — fix once in the grid patch, then re-scan every grid page. Its pagination/tab-out rework lives in LE-1720 / PR #13953; don't duplicate it per-page.
  • Modals/drawers: title + description, focus trapped inside while open, focus restored to the trigger on close, Escape closes.
  • Dropdowns/popovers: reachable by keyboard, Escape closes, focus returns to the trigger.
  • Radix (shadcn) primitives — three recurring traps:
    • Trigger asChild double tab stop: a DialogTrigger/DropdownMenuTrigger wrapping a real <button> without asChild makes Radix render its own <button> around it → nested buttons → two consecutive tab stops (2.4.3). Always pass asChild when the child is already an interactive element. (Watch the trigger wrapper's own asChild={cond} default — DeleteConfirmationModal needs an explicit asChild.)
    • Focus-restore race: on close, Radix restores focus to its trigger once, asynchronously. If the menu action programmatically moves focus elsewhere (e.g. startEditingCell opens an inline editor), Radix steals it back. Re-assert focus on your target across a few requestAnimationFrames to outlast the one-time restore. For rename-style flows, .select() the input too.
    • Portaled menu landmark: DropdownMenu/Popover content portals to <body>, tripping aria_content_in_landmark. Portaling into <main> is not an option when <main> is overflow-hidden (clips the menu). Treat as app-wide debt → baseline it (below); the menu's real a11y (role, named trigger, keyboard open/close, focus restore) is covered by a keyboard test instead.
  • Disabled controls: keep them out of the tab order. Only use aria-disabled (instead of native disabled) when the control must stay discoverable, and keep it non-operable.
  • Icon-only buttons: real <button> with an aria-label.
  • Custom clickable divs/cells: prefer a semantic element; if a cell/card must open something it needs Enter/Space handling, not just onClick.
Show full SKILL.md (756 more words)Show less

Best practices (settings grids + modals)

Apply these when building or reviewing AG Grid tables that open an edit modal (reference: GlobalVariablesPage, tests/a11y/global-variables.a11y.spec.ts):

  • Keyboard map on selectable rows: Space toggles the row checkbox; Enter opens the row’s edit/detail UI. Do not use Space to open the modal.
  • Scope the map on the page: implement with page-level onCellKeyDown and per-column suppressKeyboardEvent for Enter/Space so AG Grid’s default Space handling does not compete. Prefer not changing shared TableComponent defaults unless the same map is product-wide.
  • Keep selection UI in sync: after node.setSelected, update React selection state so toolbar actions (e.g. delete) enable/disable correctly (TableOptions.hasSelection is read at render time).
  • Retain place on modal close (2.4.3): remember the focused cell (rowIndex + colId) when opening edit; on close (Escape, Cancel, or save) restore with api.setFocusedCell + DOM .focus(), using a few requestAnimationFrames to outlast Radix dialog cleanup. Controlled edit dialogs without a Radix trigger need this explicitly. Create flows that use a real DialogTrigger (e.g. Add New) should restore to that trigger.
  • Verify with keyboard tests: open from a cell → Escape → focus is still on that cell; Enter can open again without a mouse re-click.

Choose Test Layer

Jest + axe

Use Jest when the changed surface is a primitive or component that renders in jsdom without full app routing.

tsx
import { render, screen } from "@testing-library/react";
import { axe } from "@/utils/a11y-test";

it("should_have_no_axe_violations", async () => {
  const { container } = render(<Component />);
  expect(await axe(container)).toHaveNoViolations();
});

Notes: a11y-test.ts disables color-contrast (jsdom can't measure layout). Prefer role/label/text queries. Assert accessible names explicitly for icon-only / visually-hidden / generated labels. Put tests at __tests__/<name>.a11y.test.tsx.

bash
cd src/frontend
npx jest path/to/<name>.a11y.test.tsx --runInBand
Playwright + page.runA11yScan

Use Playwright when the surface needs real browser layout, routing, app state, mocking, modals, tables, focus order, keyboard behavior, or full-page interactions.

ts
import { expect, test } from "../fixtures";
import { awaitBootstrapTest } from "../utils/await-bootstrap-test";

test("scans populated state", { tag: ["@release", "@api"] }, async ({ page }) => {
  await awaitBootstrapTest(page, { skipModal: true });
  await page.goto("/settings/example");
  await expect(page.getByText("Example")).toBeVisible();
  await page.runA11yScan("settings-example-populated");
});

Rules: put specs under tests/a11y/<feature>.a11y.spec.ts; import test/expect from ../fixtures; tag every test @release plus a domain tag (@workspace/@api/@database/@components/@starter-projects); stable scan names (lowercase, feature-first, state-specific); mock API for deterministic states; disable animations for focus assertions; use explicit interactions (no random clicking of destructive controls). If the route belongs in static coverage, update scripts/a11y/a11y_routes.json.

bash
cd src/frontend
RUN_A11Y=true npx playwright test tests/a11y/<feature>.a11y.spec.ts --project=chromium --workers=5
RUN_A11Y=true RUN_A11Y_ASSERT=true npx playwright test tests/a11y/<feature>.a11y.spec.ts --project=chromium --workers=5
npm run a11y:html-report --silent

IBM baselines (accepting known debt)

Some IBM violations are real but framework-level and can't be fixed per-page (e.g. aria_content_in_landmark on a Radix menu portal). Track them with an IBM baseline so the scan stays green while the debt is recorded — do NOT silently drop the scan or the assertion.

How it works (fixtures.ts + .achecker.yml):

  • baselineFolder: tests/a11y/baselines. The baseline file name is the scan label: {project}__{label}.json, e.g. chromium__assets-files-actions-menu.json (dashes preserved; the first scan in a test has no index suffix).
  • On each run IBM's filterReport loads that file and marks any result matching a baseline entry by path.dom + ruleId + reasonId as ignored: true. countNewA11yViolations counts violation && !ignored, so baselined issues don't fail.

Create one:

  1. Run the scan once — it writes the full report to coverage/accessibility-reports/{label}.json.
  2. Copy the offending result(s) into tests/a11y/baselines/{label}.json as { "results": [ { "ruleId", "reasonId", "path": { "dom": … } } ] }. A minimal baseline (only the entries to ignore) is clearest; add a description field noting why and how to resurface it.
  3. Re-run → the scan passes. Commit the baseline so the debt is tracked; deleting it resurfaces the violation. Point at the baseline from a comment in the spec.

Matching is exact-DOM-path, so baselines can go stale if unrelated <body>-level portals (toasts) shift the portal index — scan the state with no other overlays open.

Route/Page Coverage Matrix

For route/page changes, cover the smallest matrix representing real user states:

  • Loaded/default, empty data, populated data
  • Primary modal open, dropdown/popover open
  • Validation or error visible
  • Selected/expanded table row or bulk-action state
  • Mobile viewport when responsive layout changes

Don't force states the page can't enter; briefly explain any skipped state.

Data-Rich Route Pattern

Use tests/a11y/api-keys.a11y.spec.ts and tests/a11y/files.a11y.spec.ts as the models for route-level work: mock API data; scan populated table; scan empty table; open create modal and scan; submit to the generated-result modal and scan; open a text-cell modal and scan; select a row and scan the selected state; set a mobile viewport and scan. Add keyboard-interaction tests (not scans) for tab-out, reverse re-entry, Enter-to-open, focus restore, and focus-visible where the surface has custom keyboard behavior. This is the expected bar for data-rich routes.

Driving grid row states: client-rendered states (upload progress %, upload-failed/error, disabled rows) are usually driven by fields the cell renderer reads off the row (params.data.*). If the list query returns the response untransformed, just inject the field into the mocked rows (e.g. { ...file, progress: -1 }) to scan the error/progress state — no need to simulate the real flow.

Report Back

When done, state:

  • Test files added or updated, and states scanned.
  • Commands run — including whether BOTH axe and IBM were run and both reported zero.
  • Any states not covered and why.
  • Any remaining a11y risk or accepted limitation.

© langflow-ai, MIT. 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 .agents/skills/ibm-a11y-testing-guide of langflow-ai/langflow.

Open the folder on GitHubat commit 504c02f

Compare with similar skills

Ibm A11y Testing Guide 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.

Ibm A11y Testing Guide compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Ibm A11y Testing Guide this skilllangflow-ai/langflow155k—~4.6kAutomated safety check: PassMIT
Control UIcursor/plugins10k2 repos~1.2kAutomated safety check: PassNone
Scout UI Testingelastic/kibana21k—~3.1kAutomated safety check: PassCustom licence
Accessibility Testingpetrkindlmann/qa-skills168—~4.5kAutomated safety check: PassMIT
A11y Playwright Testingfugazi/test-automation-skills-agents247—~3.2kAutomated safety check: PassMIT
Browser QAaffaan-m/ECC276k2 repos~1kAutomated safety check: PassMIT

Similar skills

  • Control UI

    cursor/plugins

    Official

    Build or adapt a local browser/CDP harness to drive and inspect a web, IDE, or Electron UI.

    10k GitHub starsUsed in 2 repos~1.2k tokens
    Frontend & DesignAuto-check passed
  • Scout UI Testing

    elastic/kibana

    Official

    A skill your agent uses when creating, updating, debugging, or reviewing Scout UI tests in Kibana (Playwright + Scout fixtures), including page objects, browser authentication, parallel UI tests…

    21k GitHub stars~3.1k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Accessibility Testing

    petrkindlmann/qa-skills

    Test for WCAG 2.2 AA compliance with axe-core + Playwright, keyboard navigation audits, screen reader testing, ARIA pattern validation, and legal compliance mapping (ADA, EAA, Section 508).

    168 GitHub stars~4.5k tokensUpdated 4 mo ago
    Frontend & DesignAuto-check passed
  • A11y Playwright Testing

    fugazi/test-automation-skills-agents

    Accessibility testing for web applications using Playwright (@playwright/test), TypeScript, and axe-core.

    247 GitHub stars~3.2k tokensUpdated 6 days ago
    Frontend & DesignAuto-check passed
  • Browser QA

    affaan-m/ECC

    Run automated post-deploy UI verification with a browser automation MCP (claude-in-chrome, Playwright, or Puppeteer): console-error and Core Web Vitals smoke checks, form and auth-flow interaction…

    276k GitHub starsUsed in 2 repos~1k tokens
    Frontend & DesignAuto-check passed
  • Audit AI Frontend

    jxnl/personal-monorepo-template

    Audit AI-generated, AI-shaped, or AI-looking frontend code, UI screenshots, and design diffs.

    563 GitHub stars~1.3k tokensUpdated 3 mo ago
    Frontend & DesignAuto-check passed

More from langflow-ai/langflow

All 10 skills in this repo
  • Backend Code Review

    langflow-ai/langflow

    Review backend code for quality, security, maintainability, and best practices based on established checklist rules.

    155k GitHub stars~3.5k tokensUpdated today
    Auto-check: notes
  • Component Refactoring

    langflow-ai/langflow

    Refactor high-complexity React components in Langflow frontend.

    155k GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • E2E Testing

    langflow-ai/langflow

    Write and review Playwright E2E tests for Langflow. An agent skill from langflow-ai/langflow.

    155k GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Frontend Query Mutation

    langflow-ai/langflow

    Guide for implementing Langflow frontend query and mutation patterns with Axios and TanStack React Query v5.

    155k GitHub stars~979 tokensUpdated today
    Auto-check passed
  • Ibm A11y Level1 Audit

    langflow-ai/langflow

    Perform a scoped IBM Equal Access Level 1 compliance audit of a chosen Langflow frontend surface (routes, components, or a PR) and produce a findings report mapped to WCAG/IBM Level 1 criteria.

    155k GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • Frontend I18n

    langflow-ai/langflow

    Add, change, or review user-facing text in the Langflow frontend using the i18n system (i18next / react-i18next).

    155k GitHub stars~1k tokensUpdated today
    Auto-check passed

Works with

Questions about Ibm A11y Testing Guide

What does Ibm A11y Testing Guide do?

Reference guide for writing and running Langflow frontend accessibility tests with axe (Jest) and IBM Equal Access (Playwright page.runA11yScan). Ibm A11y Testing Guide is an agent skill from langflow-ai/langflow.runA11yScan).

When should I use Ibm A11y Testing Guide?

Ibm A11y Testing Guide fits situations like: reviewing a11y tests; debugging a specific axe/IBM violation; deciding which test layer fits a UI surface.

How do I install Ibm A11y Testing Guide in Claude Code?

Run `npx skills add langflow-ai/langflow --skill ibm-a11y-testing-guide -a claude-code`. Or copy the skill folder (.agents/skills/ibm-a11y-testing-guide in langflow-ai/langflow) into .claude/skills/ibm-a11y-testing-guide in your project. Claude Code loads it when a task matches its description.

How do I install Ibm A11y Testing Guide in Codex?

Run `npx skills add langflow-ai/langflow --skill ibm-a11y-testing-guide -a codex`. Or copy the skill folder (.agents/skills/ibm-a11y-testing-guide in langflow-ai/langflow) into .agents/skills/ibm-a11y-testing-guide in your project. Codex loads it when a task matches its description.

Can I use Ibm A11y Testing Guide 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 langflow-ai/langflow --skill ibm-a11y-testing-guide -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ibm-a11y-testing-guide, .gemini/skills/ibm-a11y-testing-guide, .github/skills/ibm-a11y-testing-guide and .opencode/skills/ibm-a11y-testing-guide in your project.

What does Ibm A11y Testing Guide need to run?

Going by SKILL.md and its folder, Ibm A11y Testing Guide needs the command-line tools its instructions call (npx, uv and npm). Our summary lists: Python 3; Node.js.

Does Ibm A11y Testing Guide access the network?

SKILL.md contains no URLs. Its commands use npx, uv and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Ibm A11y Testing Guide 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 Ibm A11y Testing Guide use?

Ibm A11y Testing Guide is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Ibm A11y Testing Guide use?

About 4.6k 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 Ibm A11y Testing Guide?

Skills that share tags, products or a category with Ibm A11y Testing Guide: Control UI (cursor/plugins, 10k stars), Scout UI Testing (elastic/kibana, 21k stars), Accessibility Testing (petrkindlmann/qa-skills, 168 stars) and A11y Playwright Testing (fugazi/test-automation-skills-agents, 247 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Ibm A11y Testing Guide?

langflow-ai (a GitHub organization) maintains it in langflow-ai/langflow, which has 155,411 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 9, 2026.

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