Agent skill

Accessibility Operable

by hashgraph-online in hashgraph-online/awesome-codex-plugins

A skill your agent uses when the question is whether users can operate a UI — keyboard, switch device, voice, screen-reader gestures — not just by mouse or touch.

Apache-2.0Auto-check passedFrontend & Design

Install Accessibility Operable

skills CLI
$ npx skills add hashgraph-online/awesome-codex-plugins --skill accessibility-operable -a claude-code

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

GitHub CLI
$ gh skill install hashgraph-online/awesome-codex-plugins accessibility-operable --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/hashgraph-online/awesome-codex-plugins.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/HDeibler/universal-design-principles/plugins/process-and-robustness-principles/skills/accessibility-operable .claude/skills/accessibility-operable && 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
accessibility-operable
GitHub stars
1.2k
Token cost
~3.1k tokens
SKILL.md length
1,192 words
Files
2 (incl. references)
Skills in repo
686
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses when the question is whether users can operate a UI — keyboard, switch device, voice, screen-reader gestures — not just by mouse or touch.

  • Works in 5 steps: Keyboard accessible → Enough time → Seizures and physical reactions → …
  • The question is whether users can operate a UI — keyboard
  • SKILL.md covers 1. Keyboard accessible, 2. Enough time, 3. Seizures and physical… and 4. Navigable, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Accessibility Operable is an agent skill from hashgraph-online/awesome-codex-plugins. Use this skill when the question is whether users can operate a UI — keyboard, switch device, voice, screen-reader gestures — not just by mouse or touch. Trigger when designing keyboard navigation, focus management for modals/menus/popovers, drag-and-drop with alternatives, motion-heavy interactions, or any flow that asks the user to do something. Covers WCAG Principle 2 (Operable). Sub-aspect of accessibility; read that first if you haven't already.

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/operable-deep-dive.md`).

It sits in Frontend & Design, covering Accessibility. The repository describes itself as: A curated list of awesome OpenAI Codex / ChatGPT plugins, skills, and resources. The 1 Codex Marketplace. See live plugins at: https://hol.org/plugins/best-codex-plugins. The licence is Apache-2.0.

When your agent uses it

  • The question is whether users can operate a UI — keyboard
  • Screen-reader gestures — not just by mouse
  • Designing keyboard navigation
  • Focus management for modals/menus/popovers

Example prompts

  • “/accessibility-operable”

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Keyboard accessible
  2. Enough time
  3. Seizures and physical reactions
  4. Navigable
  5. Input modalities

What it can do on your machine

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

    No scripts in the folder and no shell commands in SKILL.md (its code samples are html, css and javascript).

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

  • Network

    No URLs in SKILL.md.

    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

Accessibility Operable loads about 3.1k tokens when it runs, and up to ~4.4k if it reads all its reference files. Until then it costs about 120 tokens; SKILL.md has 1,192 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~120
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.4k

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 hashgraph-online/awesome-codex-plugins at commit 78497e5, republished under its Apache-2.0 licence (© hashgraph-online). 1,192 words, ~3,083 tokens.

Download SKILL.mdSave it as .claude/skills/accessibility-operable/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
accessibility-operable
description
Use this skill when the question is whether users can *operate* a UI — keyboard, switch device, voice, screen-reader gestures — not just by mouse or touch. Trigger when designing keyboard navigation, focus management for modals/menus/popovers, drag-and-drop with alternatives, motion-heavy interactions, or any flow that asks the user to do something. Covers WCAG Principle 2 (Operable). Sub-aspect of `accessibility`; read that first if you haven't already.

Accessibility — Operable

WCAG Principle 2: user-interface components and navigation must be operable.

The five sub-criteria, simplified:

  1. Keyboard accessible — everything that works with mouse must work with keyboard.
  2. Enough time — timing-out interactions are warned and extendable.
  3. Seizures and physical reactions — no flashing content; respect motion preferences.
  4. Navigable — users can find content and know where they are.
  5. Input modalities — touch and other input methods supported with adequate target size.

1. Keyboard accessible

Every interactive element is reachable via Tab

The default Tab order follows DOM source order and only includes natively focusable elements: <a href>, <button>, <input>, <select>, <textarea>, <summary>, <iframe>, plus elements with tabindex="0".

  • Use semantic elements. <button>, not <div onclick>.
  • Use tabindex="0" to add custom interactive elements to tab order.
  • Use tabindex="-1" to make an element programmatically focusable (e.g., for focus management) but not reachable via Tab.
  • Avoid tabindex > 0. Positive tabindex creates a custom tab order that's almost always worse than DOM order and bewilders screen readers.
Visible focus indicators

The user must see where focus is. Browsers provide default focus rings; never outline: none without a replacement.

css
/* Right: replace, don't remove */
:focus { outline: none; }
:focus-visible {
  outline: 2px solid hsl(220 90% 50%);
  outline-offset: 2px;
  border-radius: 0.25rem;
}

/* Wrong: removes the only signal a keyboard user has */
*:focus { outline: none; }

:focus-visible (rather than :focus) shows the ring only when focus arrived via keyboard (or non-pointer means), not on every mouse click. This addresses the historical "designers don't want focus rings on click" concern without sacrificing keyboard accessibility.

Standard keys for standard interactions

Honor user expectations:

KeyBehavior
TabFocus next; Shift+Tab for previous
Enter / SpaceActivate button, follow link, toggle checkbox
EscClose overlay (Dialog, Sheet, Popover, Combobox)
Arrow keysMove within radio groups, sliders, tabs, menus, comboboxes
Home / EndFirst / last in a list or menu
Page Up / DownScroll a region
/Often: focus search (de facto convention)
Cmd/Ctrl+KOften: open command palette (de facto convention)

ARIA Authoring Practices Guide documents canonical keyboard interactions for every common pattern.

No keyboard traps

A keyboard trap is a region where focus enters and cannot leave via keyboard alone. Common offenders:

  • Custom datepickers without arrow-key escape.
  • Embedded iframes with their own focus management that don't release.
  • Modal dialogs without Esc to close.

Test: keyboard-only walkthrough. If you ever get stuck and have to mouse to escape, you have a trap.

Focus management for overlays

When a modal opens:

  1. Move focus into the modal (typically the first focusable element, or a "primary" focus target).
  2. Trap focus inside until the modal closes.
  3. Restore focus to the trigger element when the modal closes.
js
// Pseudocode — in practice use a library that handles edge cases
function openModal(modal, trigger) {
  modal.dataset.previousFocus = trigger;
  const focusables = modal.querySelectorAll('a, button, input, [tabindex="0"]');
  focusables[0]?.focus();
  // ... trap focus on Tab/Shift+Tab within `focusables` ...
}

function closeModal(modal) {
  modal.previousFocus?.focus();
}

Most accessible UI libraries (Radix UI, React Aria, headless component sets) do this automatically. Custom-built modals that skip focus management are inaccessible.

html
<a href="#main" class="skip-link">Skip to main content</a>
<header><nav>... 50 nav items ...</nav></header>
<main id="main">...</main>

<style>
  .skip-link {
    position: absolute;
    left: -10000px;
    top: auto;
  }
  .skip-link:focus {
    position: fixed;
    top: 8px; left: 8px;
    padding: 8px 16px;
    background: black; color: white;
    z-index: 100;
  }
</style>

Keyboard users tab past nav to reach content quickly. Visible only on focus so it doesn't clutter sighted-mouse-user views.

2. Enough time

Adjustable timing

If the system has timeouts (session expiry, captcha re-verify, time-limited form), users must be able to:

  • Turn it off, OR
  • Extend it, OR
  • Adjust it (across a wide range, ≥ 10× default).

Exceptions: real-time events (auctions), where time limit is essential.

html
<!-- Right: warn before timeout, allow extension -->
<dialog open>
  <h2>Session about to expire</h2>
  <p>You have 60 seconds before your session ends.</p>
  <button onclick="extendSession()">Stay signed in</button>
</dialog>
No moving / blinking content (without controls)

Content that auto-moves, blinks, or scrolls for more than 5 seconds must be pause-able / stop-able.

This includes carousels, animated banners, news tickers, autoplaying video.

3. Seizures and physical reactions

Three flashes or below

WCAG 2.3.1: don't have content that flashes more than 3 times per second. Photosensitive epilepsy can be triggered by flashing in the 3–55 Hz range.

In practice, this rules out: rapid strobe effects, blinking text (don't), high-contrast flashing animations.

Motion preferences

WCAG 2.3.3: respect prefers-reduced-motion. Many users (vestibular disorders, migraine, motion sensitivity) have configured their OS to request reduced motion.

css
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

For specific motion that's meaningful (a state change indicator), allow it but make it briefer / less dramatic in reduced-motion mode.

4. Navigable

Page titles

Every page has a unique, descriptive <title>:

html
<title>Settings — Notifications — Acme</title>

Screen reader users hear the title on page load; tab labels show it; browser history relies on it. Generic "Acme" titles for every page are useless.

Focus order matches reading order

When a user tabs through a page, focus should follow the visual / logical reading order. CSS-rearranged elements (Grid, Flex order) can break this — test.

Links should be understandable from their text alone (or from text + immediately-adjacent context). Screen reader users navigate by listing all links.

html
<!-- Wrong: "click here" tells the screen reader user nothing -->
<p>To read more, <a href="/blog/post">click here</a>.</p>

<!-- Right: link text describes destination -->
<p>Read more in <a href="/blog/post">our annual review</a>.</p>
Show full SKILL.md (491 more words)Show less
Multiple ways to find content

WCAG 2.4.5 (AA): provide more than one way to find a page (search, sitemap, navigation, related-content links). Helps users with cognitive impairments and users who navigate non-linearly.

Headings and labels are descriptive

<h2>Article</h2> — useless. <h2>Q4 sales recap</h2> — useful.

Focus visible (covered above)
Location indicators

Users need to know where they are. Breadcrumbs, current-page highlighting in nav, page titles all serve this.

html
<nav>
  <a href="/dashboard">Dashboard</a>
  <a href="/projects" aria-current="page">Projects</a>
  <a href="/team">Team</a>
</nav>

aria-current="page" tells assistive tech which item is current; visual styling reinforces it.

5. Input modalities

Target size (covered in fitts-law-touch-targets)

WCAG 2.5.5 (AAA): targets ≥ 44×44 CSS px. WCAG 2.5.8 (AA, 2.2): targets ≥ 24×24 CSS px with adequate spacing.

Pointer gestures

Multi-pointer or path-based gestures (pinch, swipe, drag) must have single-pointer alternatives:

  • Pinch-to-zoom → buttons / keyboard for zoom in/out.
  • Swipe-to-delete → swipe + always-visible action button.
  • Drag-and-drop → keyboard reorder (arrows + spacebar).
Pointer cancellation

The user can cancel a pointer action by moving away before lifting. Don't trigger destructive actions on mousedown; trigger on mouseup or click.

Label in name

The accessible name must include any visible label text. Pattern:

html
<!-- Right: visible text matches accessible name -->
<button>Save</button>

<!-- Wrong: aria-label overrides visible text, voice control breaks -->
<button aria-label="Submit">Save</button>
<!-- Voice user says "click Save" — fails because the accessible name is "Submit" -->
Motion actuation

Functions triggered by device motion (shake, tilt) must have UI alternatives. Some users physically can't shake a device.

Worked example: an accessible dropdown menu

html
<div class="dropdown">
  <button id="menu-button"
          aria-haspopup="true"
          aria-expanded="false"
          aria-controls="actions-menu">
    Actions
  </button>
  <ul id="actions-menu"
      role="menu"
      hidden
      aria-labelledby="menu-button">
    <li role="menuitem" tabindex="-1">Edit</li>
    <li role="menuitem" tabindex="-1">Duplicate</li>
    <li role="menuitem" tabindex="-1">Archive</li>
    <li role="separator"></li>
    <li role="menuitem" tabindex="-1" class="destructive">Delete</li>
  </ul>
</div>

JavaScript to handle:

  • Enter/Space/ArrowDown on the button: open menu, focus first item.
  • ArrowUp/ArrowDown in menu: move focus.
  • Home/End: first / last item.
  • Esc: close, return focus to button.
  • Tab: close, move to next focusable.
  • Click outside: close.

Plus aria-expanded toggles between "true" and "false".

This is verbose because menus genuinely have a lot of expected behavior. Use Radix, React Aria, or another library that implements WAI-ARIA Menu pattern correctly — don't roll your own.

Anti-patterns

  • outline: none without a replacement. Single largest accessibility crime in modern web design.
  • <div onclick>. Not focusable, not keyboard-operable, not announced as a button. Use <button>.
  • Mouse-only menus. Hover-revealed menus that close on mouseout with no keyboard equivalent.
  • Modal traps. Modals that don't close on Esc, don't trap focus, don't restore focus on close.
  • Custom date pickers without keyboard. Date pickers are notoriously inaccessible; if you must build one, follow ARIA Authoring Practices.
  • Drag-only reorder. No keyboard alternative for sorting or reordering.
  • Auto-advancing carousels. Focus thrash on every slide change; no way for keyboard users to read content before it disappears.

Heuristics

  1. Unplug your mouse. Walk through every primary flow. Anything you can't do with keyboard alone is broken.
  2. Tab around the page. Focus indicators visible? Tab order logical? Any traps?
  3. Try Esc everywhere. Open every overlay; Esc should close it.
  4. Test with prefers-reduced-motion: reduce. macOS: System Settings → Accessibility → Display → Reduce Motion. Are critical animations still meaningful? Are decorative ones gone?
  5. Voice-control test. macOS Voice Control or Windows Speech Recognition. Say "click [visible text]." If the click works, label-in-name is correct.
  • accessibility (parent).
  • accessibility-perceivable — what users see; complementary.
  • accessibility-understandable — what users comprehend.
  • accessibility-robust — markup that assistive tech can rely on.
  • fitts-law and fitts-law-touch-targets (interaction) — target size.
  • feedback-loop (interaction) — keyboard interactions need visible feedback too.

© hashgraph-online, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in plugins/HDeibler/universal-design-principles/plugins/process-and-robustness-principles/skills/accessibility-operable of hashgraph-online/awesome-codex-plugins.

  • SKILL.md
  • references/operable-deep-dive.md

Open the folder on GitHubat commit 78497e5

Compare with similar skills

Accessibility Operable 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.

Accessibility Operable compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Accessibility Operable this skillhashgraph-online/awesome-codex-plugins1.2k—~3.1kAutomated safety check: PassApache-2.0
Web Interface Guidelines Reviewervercel-labs/openreview1.7k98 repos~308Automated safety check: PassNone
Accessibility Reviewmarkmead/hyperui12k1 repos~1.1kAutomated safety check: PassMIT
Web Animation DesignbaptisteArno/typebot.io11k2 repos~2.7kAutomated safety check: PassCustom licence
Accessibility Fixeribelick/ui-skills9.5k4 repos~1.2kAutomated safety check: PassMIT
Wcag Audit PatternsvmDeshpande/ai-agent-automation17811 repos~610Automated safety check: PassApache-2.0

Similar skills

  • Web Interface Guidelines Reviewer

    vercel-labs/openreview

    Official

    Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my…

    1.7k GitHub starsUsed in 98 repos~308 tokens
    Frontend & DesignAuto-check passed
  • Accessibility Review

    markmead/hyperui

    Run a WCAG 2.1 AA accessibility audit on a design or page. An agent skill from markmead/hyperui.

    12k GitHub starsUsed in 1 repo~1.1k tokens
    Frontend & DesignAuto-check passed
  • Web Animation Design

    baptisteArno/typebot.io

    Guides easing, timing and animation choices for UI motion, based on a web animation course, and reviews existing animations in a before-and-after table.

    11k GitHub starsUsed in 2 repos~2.7k tokens
    Frontend & DesignAuto-check passed
  • Accessibility Fixer

    ibelick/ui-skills

    Audits and fixes HTML accessibility problems such as ARIA labels, keyboard navigation, focus management, contrast and form errors with minimal changes.

    9.5k GitHub starsUsed in 4 repos~1.2k tokens
    Frontend & DesignAuto-check passed
  • Wcag Audit Patterns

    vmDeshpande/ai-agent-automation

    Conduct WCAG 2.2 accessibility audits with automated testing, manual verification, and remediation guidance.

    178 GitHub starsUsed in 11 repos~610 tokens
    Frontend & DesignAuto-check passed
  • Baseline UI

    ibelick/ui-skills

    Applies a fixed set of UI rules for stack, components, interaction, animation, typography and layout, or reviews a file against them with concrete fixes.

    9.5k GitHub starsUsed in 8 repos~855 tokens
    Frontend & DesignAuto-check passed

More from hashgraph-online/awesome-codex-plugins

All 686 skills in this repo
  • Anime Reaction Gif

    hashgraph-online/awesome-codex-plugins

    Create original anime-style reaction stickers as looping GIFs and MP4 previews, using generated character pose sheets and timed key poses.

    1.2k GitHub stars~922 tokensUpdated today
    Auto-check passed
  • Calibredb

    hashgraph-online/awesome-codex-plugins

    Manage and query Calibre libraries with the calibredb CLI (local paths or Calibre Content server URLs).

    1.2k GitHub stars~1k tokensUpdated today
    Auto-check passed
  • Rust API Test Harness

    hashgraph-online/awesome-codex-plugins

    A skill your agent uses when adding, changing, testing, or debugging Rust HTTP APIs and services, especially when Codex needs black-box integration tests, random-port app startup, real database test…

    1.2k GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Art

    hashgraph-online/awesome-codex-plugins

    Make a studio's game look like something at build time — a cover from a real frame of the game (free), painted covers, backdrops, textures and character plates from image models through the…

    1.2k GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • Game Balance Economy

    hashgraph-online/awesome-codex-plugins

    Balance game difficulty, resources, rewards, probability, progression, economies, and dominant strategies.

    1.2k GitHub stars~618 tokensUpdated today
    Auto-check passed
  • Manuscript Engagement Analytics

    hashgraph-online/awesome-codex-plugins

    Analyze nonfiction manuscripts for reader engagement signals, including heading-level word counts, slow starts, long slogs, weak takeaway titles, value pacing, beta-reader comment dropoff, and…

    1.2k GitHub stars~875 tokensUpdated today
    Auto-check passed

Questions about Accessibility Operable

What does Accessibility Operable do?

A skill your agent uses when the question is whether users can operate a UI — keyboard, switch device, voice, screen-reader gestures — not just by mouse or touch. Accessibility Operable is an agent skill from hashgraph-online/awesome-codex-plugins. Use this skill when the question is whether users can operate a UI — keyboard, switch device, voice, screen-reader gestures — not just by mouse or touch.

When should I use Accessibility Operable?

Accessibility Operable fits situations like: the question is whether users can operate a UI — keyboard; screen-reader gestures — not just by mouse; designing keyboard navigation; focus management for modals/menus/popovers.

How do I install Accessibility Operable in Claude Code?

Run `npx skills add hashgraph-online/awesome-codex-plugins --skill accessibility-operable -a claude-code`. Or copy the skill folder (plugins/HDeibler/universal-design-principles/plugins/process-and-robustness-principles/skills/accessibility-operable in hashgraph-online/awesome-codex-plugins) into .claude/skills/accessibility-operable in your project. Claude Code loads it when a task matches its description.

How do I install Accessibility Operable in Codex?

Run `npx skills add hashgraph-online/awesome-codex-plugins --skill accessibility-operable -a codex`. Or copy the skill folder (plugins/HDeibler/universal-design-principles/plugins/process-and-robustness-principles/skills/accessibility-operable in hashgraph-online/awesome-codex-plugins) into .agents/skills/accessibility-operable in your project. Codex loads it when a task matches its description.

Can I use Accessibility Operable 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 hashgraph-online/awesome-codex-plugins --skill accessibility-operable -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/accessibility-operable, .gemini/skills/accessibility-operable, .github/skills/accessibility-operable and .opencode/skills/accessibility-operable in your project.

What does Accessibility Operable need to run?

SKILL.md names no scripts, command-line tools or credentials: Accessibility Operable is instructions for the agent only.

Does Accessibility Operable access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Accessibility Operable 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 Accessibility Operable use?

Accessibility Operable is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Accessibility Operable use?

About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.3k tokens, read only when the agent opens those files.

What are the alternatives to Accessibility Operable?

Skills that share tags, products or a category with Accessibility Operable: Web Interface Guidelines Reviewer (vercel-labs/openreview, 1.7k stars), Accessibility Review (markmead/hyperui, 12k stars), Web Animation Design (baptisteArno/typebot.io, 11k stars) and Accessibility Fixer (ibelick/ui-skills, 9.5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Accessibility Operable?

hashgraph-online (a GitHub organization) maintains it in hashgraph-online/awesome-codex-plugins, which has 1,242 GitHub stars. The repository holds 686 skills in this directory. The repository was last updated on October 8, 2026.

Source: hashgraph-online/awesome-codex-plugins on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.