Generate Swimlane Swim Solution
swimlane/ngx-ui
Generate Swimlane Lit Element Solution (CDN). An agent skill from swimlane/ngx-ui.
Audit and fix common accessibility issues in Angular templates and Angular Material components.
$ npx skills add fmflurry/settings-opencode --skill angular-accessibility -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install fmflurry/settings-opencode angular-accessibility --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/angular-accessibility .claude/skills/angular-accessibility && rm -rf skills-srcUse ~/.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/
Install the "angular-accessibility" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/angular-accessibility into .claude/skills/angular-accessibility/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "angular-accessibility", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/fmflurry/settings-opencode/tree/master/skills/angular-accessibilityType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add fmflurry/settings-opencode --skill angular-accessibility -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install fmflurry/settings-opencode angular-accessibility --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/angular-accessibility .agents/skills/angular-accessibility && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "angular-accessibility" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/angular-accessibility into .agents/skills/angular-accessibility/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "angular-accessibility", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add fmflurry/settings-opencode --skill angular-accessibility -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install fmflurry/settings-opencode angular-accessibility --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/angular-accessibility .cursor/skills/angular-accessibility && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "angular-accessibility" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/angular-accessibility into .cursor/skills/angular-accessibility/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "angular-accessibility", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/fmflurry/settings-opencode.git --path skills/angular-accessibility--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add fmflurry/settings-opencode --skill angular-accessibility -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install fmflurry/settings-opencode angular-accessibility --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/angular-accessibility .gemini/skills/angular-accessibility && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "angular-accessibility" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/angular-accessibility into .gemini/skills/angular-accessibility/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "angular-accessibility", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install fmflurry/settings-opencode angular-accessibilityInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add fmflurry/settings-opencode --skill angular-accessibility -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/angular-accessibility .github/skills/angular-accessibility && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "angular-accessibility" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/angular-accessibility into .github/skills/angular-accessibility/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "angular-accessibility", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add fmflurry/settings-opencode --skill angular-accessibility -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install fmflurry/settings-opencode angular-accessibility --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/angular-accessibility .opencode/skills/angular-accessibility && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "angular-accessibility" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/angular-accessibility into .opencode/skills/angular-accessibility/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "angular-accessibility", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
angular-accessibilityAudit and fix common accessibility issues in Angular templates and Angular Material components.
Angular Accessibility is an agent skill from fmflurry/settings-opencode. Audit and fix common accessibility issues in Angular templates and Angular Material components. Use when the user mentions Lighthouse, axe, screen readers, keyboard navigation, ARIA, asks to fix a11y issues in Angular HTML templates, or after any feature, bug fix, or refactor that changed Angular templates.
Its SKILL.md is about 2.7k 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 Angular. The repository describes itself as: Custom OpenCode settings. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 0e6c33c. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
npxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Angular Accessibility loads about 2.7k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 939 words of instructions outside code blocks.
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.
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.
The full file from fmflurry/settings-opencode at commit 0e6c33c, republished under its MIT licence (© fmflurry). 939 words, ~2,739 tokens.
.claude/skills/angular-accessibility/SKILL.md (or your agent's skills folder).Run this skill as a final verification step whenever the implementation modified .html templates or materially changed rendered UI structure, even if the original task did not mention accessibility.
Typical triggers:
<button>, <a>, <label>, <main>, <table>, and <th> before ARIA workarounds<label for>, <mat-label>, or aria-labelledby before aria-label[attr.aria-*][aria-label] or [aria-labelledby] without attr.role="button" on <button>, role="checkbox" on <input type="checkbox">, etc.)npx eslint "src/app/<feature>/**/*.html"Tab / Shift+Tab reaches all interactive controls in a logical orderEnter / Space activates buttons, toggles, and checkboxesEscape closes dialogs, menus, or drawers where applicableAny <button> whose only content is a <mat-icon> or similar icon has no accessible name.
Fix: add a translated accessible name and mark the icon as decorative.
<!-- ❌ Before -->
<button type="button" (click)="onClose()">
<mat-icon>close</mat-icon>
</button>
<!-- ✅ After -->
<button
type="button"
[attr.aria-label]="t('scope.key.close-btn-aria')"
(click)="onClose()"
>
<mat-icon aria-hidden="true">close</mat-icon>
</button>Same pattern applies to pagination, toggle, toolbar, and other icon-only actions.
Prefer a visible label first. Use aria-label only when a visible label or aria-labelledby is not practical.
Standard forms: use <label for> or <mat-label>.
<!-- ✅ Preferred in a regular form -->
<mat-form-field>
<mat-label>{{ t('scope.key.amount') }}</mat-label>
<input matInput id="amount" type="number" />
</mat-form-field>Dense table/grid cells: use row-level context so each control is uniquely identifiable.
<!-- ❌ Before -->
<input matInput type="number" [value]="row.amount" />
<mat-select [value]="row.type"></mat-select>
<!-- ✅ After -->
<input
matInput
type="number"
[value]="row.amount"
[attr.aria-label]="t('scope.key.amount-aria', { invoiceNumber: row.invoiceNumber })"
/>
<mat-select
[value]="row.type"
[aria-label]="t('scope.key.type-aria', { invoiceNumber: row.invoiceNumber })"
>
</mat-select>Empty mat-checkbox components with no projected text need an accessible name.
<!-- ❌ Before -->
<mat-checkbox
[checked]="allSelected()"
(change)="onToggleAll($event.checked)"
/>
<!-- ✅ After - header (select-all) -->
<mat-checkbox
[aria-label]="t('scope.key.select-all-aria')"
[checked]="allSelected()"
(change)="onToggleAll($event.checked)"
/>
<!-- ✅ After - row (select one) -->
<mat-checkbox
[aria-label]="t('scope.key.select-row-aria', { invoiceNumber: row.invoiceNumber })"
[checked]="row.selected"
(change)="onToggleItem(row.id, $event.checked)"
/>Clickable <div> and <span> elements break keyboard and assistive technology behavior.
Fix: replace them with native interactive elements whenever possible.
<!-- ❌ Before -->
<div class="close-action" (click)="onClose()">
<mat-icon>close</mat-icon>
</div>
<!-- ✅ After -->
<button
type="button"
class="close-action"
[attr.aria-label]="t('scope.key.close-btn-aria')"
(click)="onClose()"
>
<mat-icon aria-hidden="true">close</mat-icon>
</button>Use <a> for navigation and <button> for in-page actions.
maximum-scale or user-scalable=no in the viewport meta tag prevents low-vision users from magnifying the page.
Fix (src/index.html): keep only width=device-width, initial-scale=1.0.
<!-- ❌ Before -->
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
/>
<!-- ✅ After -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><main> landmarkScreen readers use landmarks to jump between page regions. A page must have exactly one <main> element.
In this project the layout can render two conditional branches (mobile / desktop). Each branch should expose its content wrapper as <main>. Since they are mutually exclusive, only one <main> is in the DOM at a time.
<!-- mobile: main.component.html -->
<!-- ❌ Before: <div class="main-container"> -->
<main class="main-container" cdkVirtualScrollingElement>
<gc-sub-header />
<router-outlet />
</main>
<!-- desktop: page.component.html -->
<!-- ❌ Before: <div class="desktop-page-content"> -->
<main class="desktop-page-content">
<router-outlet />
</main>SCSS that targets
.main-containeror.desktop-page-contentkeeps working when only the element tag changes.
mat-progress-spinner already follows the ARIA progressbar pattern. Do not replace it with role="status".
Fix:
aria-live="polite" message only when the loading state itself must be announced<!-- ✅ Spinner keeps its default progressbar semantics -->
<mat-progress-spinner
[attr.aria-label]="t('shared.loading-aria')"
mode="indeterminate"
diameter="32"
/>
<!-- ✅ Optional live region when the loading state should be announced -->
@if (isLoading()) {
<span aria-live="polite">{{ t('shared.loading-aria') }}</span>
}Interactive overlays and expandable sections must expose state and preserve focus behavior.
Verify:
aria-expanded when they show or hide related content<button
type="button"
aria-controls="filters-panel"
[attr.aria-expanded]="isFiltersOpen()"
(click)="toggleFilters()"
>
{{ t('scope.key.filters') }}
</button>
@if (isFiltersOpen()) {
<section id="filters-panel">...</section>
}For Angular Material dialogs, keep the built-in focus management unless there is a concrete need to change it.
All accessible names and descriptions must use translated strings via Transloco. Never hard-code French or any other language directly in templates.
t('scope.key') pattern-aria to accessible-name keys and -description when the text is used for extra contextfr-FR.jsonExample JSON additions:
{
"table": {
"select-all-aria": "Sélectionner toutes les échéances",
"select-row-aria": "Sélectionner l'échéance {{invoiceNumber}}",
"discount-amount-aria": "Montant escompte pour la facture {{invoiceNumber}}"
},
"pagination": {
"previous-aria": "Page précédente",
"next-aria": "Page suivante"
},
"selection-detail": {
"close-btn-aria": "Fermer le volet de détails"
}
}After fixing, verify:
maximum-scale or user-scalable=no<main> landmarkaria-hidden="true"aria-labelledby, or aria-label as appropriatemat-checkbox components have [aria-label] or [aria-labelledby]div and span elements were replaced with semantic controlsaria-expanded when applicablealt; decorative images use empty alt=""npx eslint "src/app/<feature>/**/*.html"© fmflurry, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/angular-accessibility of fmflurry/settings-opencode.
Open the folder on GitHubat commit 0e6c33c
Angular Accessibility 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Angular Accessibility this skillfmflurry/settings-opencode | 171 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Generate Swimlane Swim Solutionswimlane/ngx-ui | 735 | — | ~3.4k | Automated safety check: Pass | MIT | |
| BeeqEndava/BEEQ | 163 | — | ~5.6k | Automated safety check: Pass | Apache-2.0 | |
| Kb Web ScanningCommunity-Access/accessibility-agents | 422 | — | ~1.2k | Automated safety check: Pass | MIT | |
| A11y Auditalirezarezvani/claude-skills | 28k | — | ~2.4k | Automated safety check: Pass | MIT | |
| Angular Developeraffaan-m/ECC | 275k | — | ~2.1k | Automated safety check: Pass | MIT |
swimlane/ngx-ui
Generate Swimlane Lit Element Solution (CDN). An agent skill from swimlane/ngx-ui.
Endava/BEEQ
Builds, styles, and reviews UI with BEEQ, Endava's web-component design system.
Community-Access/accessibility-agents
Reference data, not a reviewer. An agent skill from Community-Access/accessibility-agents.
alirezarezvani/claude-skills
Accessibility audit skill for scanning, fixing, and verifying WCAG 2.2 Level A and AA compliance across React, Next.js, Vue, Angular, Svelte, and plain HTML codebases.
affaan-m/ECC
Angular コードを生成し、アーキテクチャ ガイダンスを提供します。プロジェクトの作成、コンポーネント、またはサービスを作成するとき、または反応性(シグナル、linkedSignal、リソース)、フォーム、依存性注入、ルーティング、SSR、アクセシビリティ(ARIA)、アニメーション、スタイリング(コンポーネント スタイル、Tailwind CSS)、テスト、または CLI…
ricneves-ai/flowgrammers-skills
Skill de auditoria de acessibilidade para escanear, corrigir e verificar a conformidade WCAG 2.2 Nível A e AA em codebases React, Next.js, Vue, Angular, Svelte e HTML puro.
fmflurry/settings-opencode
Keep a reviewable decision trail for long-running or unattended work: a TSV log with one row per decision (what, why, evidence, result).
fmflurry/settings-opencode
Scaffold and extend Playwright E2E tests for the gc.platform suite (tests/playwright), wiring every artifact to the real frontend (localhost:4200) + real .NET backend — never mocks.
fmflurry/settings-opencode
A skill your agent uses for 'why does X work this way', 'why we picked Y', design rationale, regressions, postmortems, or data-backed thresholds.
fmflurry/settings-opencode
Scaffolds and extends Angular standalone feature MODULES under src/app/modules/{name} using Clean Architecture layering (presentation/application/core/infrastructure), a self-registering module…
fmflurry/settings-opencode
Pre-merge code review for Angular + TypeScript pull requests.
fmflurry/settings-opencode
Generate OpenAPI 3.1 specs that follow the Zalando RESTful API Guidelines (kebab-case naming, cursor pagination, RFC 9457 problem+json errors, URL versioning, idempotency), one YAML file per bounded…
Works with
Categories
Audit and fix common accessibility issues in Angular templates and Angular Material components. Angular Accessibility is an agent skill from fmflurry/settings-opencode. Audit and fix common accessibility issues in Angular templates and Angular Material components.
Angular Accessibility fits situations like: the user mentions Lighthouse; keyboard navigation; asks to fix a11y issues in Angular HTML templates; after any feature.
Run `npx skills add fmflurry/settings-opencode --skill angular-accessibility -a claude-code`. Or copy the skill folder (skills/angular-accessibility in fmflurry/settings-opencode) into .claude/skills/angular-accessibility in your project. Claude Code loads it when a task matches its description.
Run `npx skills add fmflurry/settings-opencode --skill angular-accessibility -a codex`. Or copy the skill folder (skills/angular-accessibility in fmflurry/settings-opencode) into .agents/skills/angular-accessibility in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add fmflurry/settings-opencode --skill angular-accessibility -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/angular-accessibility, .gemini/skills/angular-accessibility, .github/skills/angular-accessibility and .opencode/skills/angular-accessibility in your project.
Going by SKILL.md and its folder, Angular Accessibility needs the command-line tools its instructions call (npx). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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.
Angular Accessibility is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Angular Accessibility: Generate Swimlane Swim Solution (swimlane/ngx-ui, 735 stars), Beeq (Endava/BEEQ, 163 stars), Kb Web Scanning (Community-Access/accessibility-agents, 422 stars) and A11y Audit (alirezarezvani/claude-skills, 28k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
fmflurry (a GitHub user) maintains it in fmflurry/settings-opencode, which has 171 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 7, 2026.
Source: fmflurry/settings-opencode on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.