{"id":21643405,"url":"https://github.com/accesslint/a11y-agent","last_synced_at":"2026-02-04T21:06:13.341Z","repository":{"id":250455663,"uuid":"834522134","full_name":"AccessLint/a11y-agent","owner":"AccessLint","description":"An AI agent for speeding up accessibility remediation","archived":false,"fork":false,"pushed_at":"2026-02-02T03:31:07.000Z","size":629,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-02T14:45:52.377Z","etag":null,"topics":["accessibility","ai","ruby"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AccessLint.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-27T14:21:57.000Z","updated_at":"2026-02-02T03:31:12.000Z","dependencies_parsed_at":"2025-04-11T18:07:44.714Z","dependency_job_id":"979f9963-2aca-41de-856a-e52f94b6dc5c","html_url":"https://github.com/AccessLint/a11y-agent","commit_stats":null,"previous_names":["accesslint/a11y-agent"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/AccessLint/a11y-agent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AccessLint%2Fa11y-agent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AccessLint%2Fa11y-agent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AccessLint%2Fa11y-agent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AccessLint%2Fa11y-agent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AccessLint","download_url":"https://codeload.github.com/AccessLint/a11y-agent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AccessLint%2Fa11y-agent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29096331,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-04T21:05:08.033Z","status":"ssl_error","status_checked_at":"2026-02-04T21:04:53.031Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accessibility","ai","ruby"],"created_at":"2024-11-25T05:32:03.681Z","updated_at":"2026-02-04T21:06:13.336Z","avatar_url":"https://github.com/AccessLint.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# A11y Agent\n\nReal-time WCAG accessibility auditing for developers. Use it as a Chrome extension with a side panel, or from the terminal via the CLI.\n\nThe extension runs 80+ built-in WCAG audit rules on every page and re-audits automatically on DOM mutations (including HMR updates), so violations stay current as you code. Rules cover images, forms, ARIA, keyboard, landmarks, links, tables, language, media, and document structure.\n\n## How it works\n\n**Browser:** Install the extension, open the side panel, and violations appear for the active tab. Select a violation to see WCAG criteria, a description, and AI-powered remediation guidance (via Chrome's built-in language model). Click \"Show element\" to highlight it on the page.\n\n**Terminal:** Run `a11y-agent \u003curl\u003e` and a browser opens automatically. Violations stream into an interactive TUI or as JSON lines.\n\n## Components\n\n### Chrome extension\n\nManifest V3 extension with a content script that runs the built-in rule engine and a side panel UI for browsing violations.\n\n- Audits the page, shadow DOM, and same-origin iframes\n- Re-audits on DOM mutations with chunked processing to avoid long tasks\n- Side panel shows violations sorted by severity with a detail pane\n- AI-powered remediation guidance using Chrome's LanguageModel API\n- Element highlighting with DevTools-style overlay\n- Copy `querySelector` expressions for any violation\n- Multiple tabs tracked simultaneously\n\n### CLI (`a11y-agent`)\n\nTerminal interface that launches Chrome for Testing, loads the extension, and displays violations.\n\n```\na11y-agent \u003curl\u003e          # Interactive TUI\na11y-agent --json \u003curl\u003e   # JSON lines output (auto-detected for non-TTY)\n```\n\nJSON mode is auto-detected when stdout is piped or when running inside an AI coding agent (Claude Code, Cursor, Codex).\n\nThe TUI shows violation severity, rule ID, and description. Use arrow keys to navigate, Enter to highlight in the browser, and left/right to switch tabs. A detail pane shows WCAG criteria, full description, and CSS selector.\n\n### Bridge server (`cli/src/server.ts`)\n\nStarted automatically by the CLI on a dynamic port. Receives violations from the extension over WebSocket and streams them to the TUI. Deduplicates violations by tab, rule, and selector.\n\n## Rules\n\n83 rules across 11 categories:\n\n| Category | Count | Examples |\n|----------|-------|---------|\n| ARIA | 22 | `aria-roles`, `aria-valid-attr`, `button-name`, `aria-hidden-focus` |\n| Structure | 16 | `heading-order`, `landmark-one-main`, `region`, `list` |\n| Document | 9 | `document-title`, `meta-viewport`, `bypass`, `frame-title` |\n| Images | 9 | `img-alt`, `svg-img-alt`, `role-img-alt`, `area-alt` |\n| Forms | 7 | `form-label`, `select-name`, `autocomplete-valid` |\n| Keyboard | 5 | `tabindex`, `nested-interactive`, `scrollable-region-focusable` |\n| Tables | 5 | `td-headers-attr`, `th-has-data-cells`, `scope-attr-valid` |\n| Language | 4 | `html-has-lang`, `html-lang-valid`, `valid-lang` |\n| Links | 3 | `link-name`, `skip-link`, `link-in-text-block` |\n| Media | 2 | `video-captions`, `audio-captions` |\n| Parsing | 1 | `duplicate-id-aria` |\n\n## Development\n\n```sh\n# Build the extension\nnpm run build\n\n# Build the CLI\ncd cli \u0026\u0026 npm run build\n\n# Link the CLI globally\ncd cli \u0026\u0026 npm link\n\n# Run tests\nnpm test\n\n# Run benchmarks\nnpm run bench\n```\n\nLoad the built extension from `dist/` as an unpacked extension in Chrome for standalone use.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faccesslint%2Fa11y-agent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faccesslint%2Fa11y-agent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faccesslint%2Fa11y-agent/lists"}