a11y-loop 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +77 -11
- package/package.json +1 -1
- package/skill/a11y-loop/SKILL.md +1 -1
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Makes AI coding agents decide accessibility while the work is still being planned and write accessible UI by default, then verify it in a real browser across the states they built — and say exactly what could not be checked. Ships the a11y-loop Agent Skill, a /a11y-plan command, and a plan-mode gate that declines a UI plan with no accessibility content in it.",
|
|
9
|
-
"version": "0.2.
|
|
9
|
+
"version": "0.2.3"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "a11y-loop",
|
|
14
14
|
"source": "./",
|
|
15
|
-
"version": "0.2.
|
|
15
|
+
"version": "0.2.3",
|
|
16
16
|
"description": "Accessibility in the plan, not after the pull request. Adds §0 plan rules (conformance target, per-component criteria, the product decisions that foreclose accessibility, color tokens before components), standing WCAG 2.2 AA generation rules, and a PreToolUse hook on ExitPlanMode that declines a UI-touching plan with no accessibility content — once, handing back the section to fill in. Verification is the a11y-loop CLI: axe-core in Chromium across default, dark, forced-colors, reduced-motion and 320px passes.",
|
|
17
17
|
"author": {
|
|
18
18
|
"name": "Chan Meng",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "a11y-loop",
|
|
4
4
|
"displayName": "a11y-loop",
|
|
5
|
-
"version": "0.2.
|
|
5
|
+
"version": "0.2.3",
|
|
6
6
|
"description": "Hard-gates plan mode: a plan that changes UI has to say what it decided about accessibility before it can be approved. Ships the a11y-loop skill and a /a11y-plan command alongside it.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Chan Meng",
|
package/README.md
CHANGED
|
@@ -335,7 +335,46 @@ secondary format for tools that consume it.
|
|
|
335
335
|
- Node.js ≥ 20
|
|
336
336
|
- A Chromium install for Playwright (installed in the steps below)
|
|
337
337
|
|
|
338
|
-
|
|
338
|
+
> **Point your agent at this section.** Every command below is non-interactive, idempotent, and
|
|
339
|
+
> safe to re-run — no prompts, no TTY, no menus. An agent can install and verify the whole thing
|
|
340
|
+
> without asking you to click anything. The one exception is called out explicitly at the end.
|
|
341
|
+
|
|
342
|
+
### Install everything (agent-runnable, one block)
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
npm i -g a11y-loop
|
|
346
|
+
npx playwright install chromium
|
|
347
|
+
mkdir -p ~/.claude/skills
|
|
348
|
+
cp -r "$(npm root -g)/a11y-loop/skill/a11y-loop" ~/.claude/skills/
|
|
349
|
+
claude plugin marketplace add ChanMeng666/a11y-loop
|
|
350
|
+
claude plugin install a11y-loop@chanmeng-a11y-loop --scope user
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
That is: the CLI, its browser, the portable skill, and the optional Claude Code plugin. No `git
|
|
354
|
+
clone` — the skill ships inside the npm package. Verify:
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
a11y-loop --version
|
|
358
|
+
test -f ~/.claude/skills/a11y-loop/references/plan-phase.md && echo "skill ok"
|
|
359
|
+
claude plugin list | grep -A2 'a11y-loop@' # expect: Status: ✔ enabled
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
Skip the last two lines if you only want the portable skill, or the `mkdir`/`cp` pair if you only
|
|
363
|
+
want the plugin. Do not do both: the plugin carries its own copy, so the model ends up seeing
|
|
364
|
+
`a11y-loop` *and* the directory-qualified `a11y-loop:a11y-loop`, paying the always-on token cost
|
|
365
|
+
twice. If both names show up, delete `~/.claude/skills/a11y-loop` and keep the plugin.
|
|
366
|
+
|
|
367
|
+
**Upgrading is a different command from installing** — `claude plugin install` on something already
|
|
368
|
+
installed reports "already installed" and does nothing:
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
npm i -g a11y-loop@latest
|
|
372
|
+
cp -r "$(npm root -g)/a11y-loop/skill/a11y-loop" ~/.claude/skills/ # if using the skill
|
|
373
|
+
claude plugin marketplace update chanmeng-a11y-loop # if using the plugin
|
|
374
|
+
claude plugin update a11y-loop@chanmeng-a11y-loop
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Installation (details)
|
|
339
378
|
|
|
340
379
|
```bash
|
|
341
380
|
# Run it directly, no install
|
|
@@ -363,18 +402,22 @@ browser) — e.g. `PLAYWRIGHT_BROWSERS_PATH=D:\playwright-browsers`.
|
|
|
363
402
|
|
|
364
403
|
### Installing the Agent Skill
|
|
365
404
|
|
|
366
|
-
|
|
405
|
+
The skill is a directory. Copy it wherever your client reads skills from — no clone required, since
|
|
406
|
+
`npm i -g a11y-loop` already put it on disk:
|
|
367
407
|
|
|
368
408
|
```bash
|
|
409
|
+
SKILL_SRC="$(npm root -g)/a11y-loop/skill/a11y-loop"
|
|
410
|
+
|
|
369
411
|
# Personal, all projects (Claude Code and other clients that read ~/.claude/skills)
|
|
370
|
-
|
|
412
|
+
mkdir -p ~/.claude/skills && cp -r "$SKILL_SRC" ~/.claude/skills/
|
|
371
413
|
|
|
372
|
-
# Or project-scoped
|
|
373
|
-
|
|
414
|
+
# Or project-scoped, committed with the repo
|
|
415
|
+
mkdir -p .claude/skills && cp -r "$SKILL_SRC" .claude/skills/
|
|
374
416
|
```
|
|
375
417
|
|
|
376
|
-
Any client implementing the
|
|
377
|
-
|
|
418
|
+
From a checkout, `skill/a11y-loop` is the same directory. Any client implementing the
|
|
419
|
+
[Agent Skills specification](https://agentskills.io/specification) loads it the same way — Claude
|
|
420
|
+
Code, Cursor, GitHub Copilot, Codex, Gemini CLI, and more. Re-running the copy upgrades in place.
|
|
378
421
|
|
|
379
422
|
### Optional: the Claude Code plugin layer
|
|
380
423
|
|
|
@@ -384,12 +427,35 @@ plan mode:
|
|
|
384
427
|
|
|
385
428
|
```bash
|
|
386
429
|
claude plugin marketplace add ChanMeng666/a11y-loop
|
|
387
|
-
claude plugin install a11y-loop@chanmeng-a11y-loop
|
|
430
|
+
claude plugin install a11y-loop@chanmeng-a11y-loop --scope user
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
Both are ordinary CLI commands — no TTY, no prompts, safe to re-run. (They also exist as `/plugin
|
|
434
|
+
marketplace add …` and `/plugin install …` inside a session, but an agent should use the CLI form.)
|
|
435
|
+
Managing it later is equally non-interactive: `claude plugin disable a11y-loop`, `claude plugin
|
|
436
|
+
enable a11y-loop`, `claude plugin uninstall a11y-loop@chanmeng-a11y-loop` — add `-y` only if you
|
|
437
|
+
pass `--prune`, which is the single flag that asks for confirmation.
|
|
438
|
+
|
|
439
|
+
From a local checkout, `claude plugin marketplace add ./` registers the working copy instead, so the
|
|
440
|
+
plugin tracks your edits rather than the published repo.
|
|
441
|
+
|
|
442
|
+
**Team-wide, declaratively.** `--scope project` writes `.claude/settings.json`, which you commit —
|
|
443
|
+
after that a clone needs no install commands at all:
|
|
444
|
+
|
|
445
|
+
```json
|
|
446
|
+
{
|
|
447
|
+
"extraKnownMarketplaces": {
|
|
448
|
+
"chanmeng-a11y-loop": { "source": { "source": "github", "repo": "ChanMeng666/a11y-loop" } }
|
|
449
|
+
},
|
|
450
|
+
"enabledPlugins": { "a11y-loop@chanmeng-a11y-loop": true }
|
|
451
|
+
}
|
|
388
452
|
```
|
|
389
453
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
454
|
+
**The one thing an agent cannot do for you.** Project-scoped plugins and hooks are gated behind
|
|
455
|
+
Claude Code's workspace-trust prompt the first time that directory is opened. That is a deliberate
|
|
456
|
+
security boundary in Claude Code — code from a repo should not execute because a file said so — and
|
|
457
|
+
nothing here can or should bypass it. `--scope user` avoids it entirely, which is why the
|
|
458
|
+
agent-runnable block above uses user scope.
|
|
393
459
|
|
|
394
460
|
It contributes:
|
|
395
461
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "a11y-loop",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "Makes AI coding agents decide accessibility while the work is still being planned and write accessible UI by default, then proves what it can prove with a real browser audit across the states they built — and tells you exactly what it could not check.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/skill/a11y-loop/SKILL.md
CHANGED
|
@@ -28,7 +28,7 @@ compatibility: >-
|
|
|
28
28
|
The generation and honesty rules apply with or without the CLI; every step
|
|
29
29
|
that says "audit" requires it.
|
|
30
30
|
metadata:
|
|
31
|
-
"a11y-loop/version": "0.2.
|
|
31
|
+
"a11y-loop/version": "0.2.3"
|
|
32
32
|
allowed-tools: 'Bash(a11y-loop *) Bash(npx a11y-loop *) Bash(node ${CLAUDE_SKILL_DIR}/../../src/cli.js *)'
|
|
33
33
|
---
|
|
34
34
|
|