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.
@@ -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.1"
9
+ "version": "0.2.3"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "a11y-loop",
14
14
  "source": "./",
15
- "version": "0.2.1",
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.1",
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
- ### Installation
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
- Copy the skill directory into any Agent Skills-compatible client:
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
- cp -r skill/a11y-loop ~/.claude/skills/a11y-loop
412
+ mkdir -p ~/.claude/skills && cp -r "$SKILL_SRC" ~/.claude/skills/
371
413
 
372
- # Or project-scoped
373
- cp -r skill/a11y-loop .claude/skills/a11y-loop
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 [Agent Skills specification](https://agentskills.io/specification)
377
- can load it the same way — Claude Code, Cursor, GitHub Copilot, Codex, Gemini CLI, and more.
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
- Both work as `/plugin marketplace add …` and `/plugin install …` inside Claude Code. From a local
391
- checkout, `claude plugin marketplace add ./` registers the working copy instead, so the plugin
392
- tracks your edits.
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.1",
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": {
@@ -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.1"
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