@kensaurus/skills 0.0.0-stage → 2.1.0
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 +53 -0
- package/.claude-plugin/plugin.json +40 -0
- package/.cursor-plugin/plugin.json +38 -0
- package/.mcp.json +28 -0
- package/CHANGELOG.md +1790 -0
- package/LICENSE +21 -0
- package/LICENSE-APACHE +62 -0
- package/NOTICE +13 -0
- package/README.md +821 -2
- package/SECURITY.md +55 -0
- package/agents/code-reviewer.md +60 -0
- package/agents/completion-judge.md +89 -0
- package/agents/db-migrator.md +125 -0
- package/agents/debugger.md +47 -0
- package/agents/deploy-checker.md +100 -0
- package/agents/perf-monitor.md +74 -0
- package/assets/favicon.png +0 -0
- package/assets/logo-light.png +0 -0
- package/assets/logo.png +0 -0
- package/assets/logo.svg +6 -0
- package/assets/og.png +0 -0
- package/bin/install.mjs +1127 -0
- package/bin/kenji.js +2 -0
- package/commands/adr.md +17 -0
- package/commands/aeo-plan.md +18 -0
- package/commands/arch-boundaries.md +17 -0
- package/commands/aso-plan.md +18 -0
- package/commands/auth-flows.md +19 -0
- package/commands/backup-plan.md +17 -0
- package/commands/burndown-full.md +25 -0
- package/commands/capacitor-plan.md +18 -0
- package/commands/codemod-safety.md +22 -0
- package/commands/commit.md +18 -0
- package/commands/complete-everything.md +40 -0
- package/commands/cost-plan.md +19 -0
- package/commands/deadcode-plan.md +26 -0
- package/commands/deadcode.md +32 -0
- package/commands/debug-issue.md +17 -0
- package/commands/deps-plan.md +18 -0
- package/commands/docs-plan.md +17 -0
- package/commands/doctrine.md +19 -0
- package/commands/error-plan.md +19 -0
- package/commands/feedback-to-closure.md +36 -0
- package/commands/fix-issue.md +76 -0
- package/commands/gate-logic.md +26 -0
- package/commands/green-repo.md +36 -0
- package/commands/grill-me.md +19 -0
- package/commands/gtm-plan.md +21 -0
- package/commands/gtm-weekly.md +17 -0
- package/commands/gtm.md +22 -0
- package/commands/handoff.md +15 -0
- package/commands/housekeep-backlog.md +18 -0
- package/commands/housekeep-files.md +22 -0
- package/commands/housekeep-gates.md +18 -0
- package/commands/instant-nav.md +11 -0
- package/commands/integrity-plan.md +19 -0
- package/commands/launch-kit.md +16 -0
- package/commands/mcp-guide.md +40 -0
- package/commands/mobile-plan.md +19 -0
- package/commands/native-rn-monorepo/README.md +78 -0
- package/commands/native-rn-monorepo/android-build.md +26 -0
- package/commands/native-rn-monorepo/android-install.md +32 -0
- package/commands/native-rn-monorepo/android-logcat.md +37 -0
- package/commands/native-rn-monorepo/ios-ci-logs.md +56 -0
- package/commands/native-rn-monorepo/ios-ci-status.md +52 -0
- package/commands/native-rn-monorepo/ios-ci-trigger.md +59 -0
- package/commands/native-rn-monorepo/rn-reset.md +50 -0
- package/commands/native-rn-monorepo/rn-ship-ios.md +67 -0
- package/commands/native-rn-monorepo/rn-verify.md +53 -0
- package/commands/perf-plan.md +18 -0
- package/commands/plan-mode.md +74 -0
- package/commands/pr.md +16 -0
- package/commands/pricing-plan.md +20 -0
- package/commands/privacy-plan.md +18 -0
- package/commands/readability.md +12 -0
- package/commands/readme.md +15 -0
- package/commands/refactor.md +15 -0
- package/commands/release-prep.md +17 -0
- package/commands/research.md +25 -0
- package/commands/responsive-audit.md +21 -0
- package/commands/review-code.md +18 -0
- package/commands/rls-plan.md +18 -0
- package/commands/secrets-plan.md +18 -0
- package/commands/security-plan.md +19 -0
- package/commands/ship-and-observe.md +36 -0
- package/commands/skill-conflicts.md +19 -0
- package/commands/slop-plan.md +18 -0
- package/commands/stub-plan.md +18 -0
- package/commands/test-mutation.md +16 -0
- package/commands/test-plan.md +17 -0
- package/commands/test.md +29 -0
- package/commands/thirdparty-web-interface-guidelines.md +185 -0
- package/commands/uiux-plan.md +18 -0
- package/commands/uiux.md +45 -0
- package/commands/update-deps.md +21 -0
- package/commands/validation-plan.md +19 -0
- package/commands-portable/fix-issue.md +72 -0
- package/commands-portable/plan-mode.md +92 -0
- package/commands-portable/research.md +91 -0
- package/docs/screenshots/README.md +5 -0
- package/docs/screenshots/audit-dark.png +0 -0
- package/docs/screenshots/build-dark.png +0 -0
- package/docs/screenshots/grill-dark.png +0 -0
- package/docs/screenshots/hero-dark.png +0 -0
- package/docs/screenshots/hero-light.png +0 -0
- package/docs/screenshots/ship-dark.png +0 -0
- package/docs/screenshots/src/showcase.html +320 -0
- package/hooks/completion-gate.mjs +258 -0
- package/hooks/cursor-hooks.json +13 -0
- package/hooks/hooks.json +15 -0
- package/install.sh +21 -0
- package/llms.txt +40 -0
- package/mcp/README.md +266 -0
- package/mcp/VERSIONS.md +41 -0
- package/mcp/mcp-full.json.template +124 -0
- package/mcp/mcp.json.template +29 -0
- package/mcp/pinned-versions.json +27 -0
- package/package.json +94 -4
- package/rules/approved-plan-execution.mdc +65 -0
- package/rules/full-stack-ship-discipline.mdc +37 -0
- package/rules/native-rn-monorepo/README.md +63 -0
- package/rules/native-rn-monorepo/_project.mdc +69 -0
- package/rules/native-rn-monorepo/native-android.mdc +72 -0
- package/rules/native-rn-monorepo/native-ios.mdc +61 -0
- package/rules/native-rn-monorepo/react-native-js.mdc +78 -0
- package/rules/native-rn-monorepo/web.mdc +60 -0
- package/rules/project-starter/components.mdc +54 -0
- package/rules/project-starter/data-fetching.mdc +77 -0
- package/rules/project-starter/git.mdc +41 -0
- package/rules/project-starter/supabase.mdc +37 -0
- package/rules/project-starter/tailwind.mdc +48 -0
- package/rules/project-starter/typescript.mdc +36 -0
- package/rules/project-starter/web-performance.mdc +42 -0
- package/rules/senior-engineer.mdc +30 -0
- package/rules/shell-first-search.mdc +19 -0
- package/rules/skill-workflows.mdc +35 -0
- package/rules/verification-before-completion.mdc +57 -0
- package/skills/audit-accessibility/SKILL.md +441 -0
- package/skills/audit-agent-speed/SKILL.md +181 -0
- package/skills/audit-agent-speed/scripts/stop-typecheck.mjs +151 -0
- package/skills/audit-analytics/SKILL.md +138 -0
- package/skills/audit-auth-flows/SKILL.md +267 -0
- package/skills/audit-backend-architecture/SKILL.md +266 -0
- package/skills/audit-backend-architecture/references/patterns.md +386 -0
- package/skills/audit-bundle-size/SKILL.md +295 -0
- package/skills/audit-cicd/SKILL.md +218 -0
- package/skills/audit-code-quality/SKILL.md +314 -0
- package/skills/audit-code-review/SKILL.md +289 -0
- package/skills/audit-codemod-safety/SKILL.md +159 -0
- package/skills/audit-db-schema/SKILL.md +465 -0
- package/skills/audit-db-schema/references/details.md +110 -0
- package/skills/audit-doctrine/SKILL.md +189 -0
- package/skills/audit-env-parity/SKILL.md +133 -0
- package/skills/audit-fe-api/SKILL.md +458 -0
- package/skills/audit-gate-logic/SKILL.md +219 -0
- package/skills/audit-i18n/SKILL.md +339 -0
- package/skills/audit-infra-cost/SKILL.md +142 -0
- package/skills/audit-langfuse-llm/SKILL.md +468 -0
- package/skills/audit-langfuse-llm/references/details.md +226 -0
- package/skills/audit-llm-security/SKILL.md +147 -0
- package/skills/audit-monetization-iap/SKILL.md +137 -0
- package/skills/audit-payment-system/SKILL.md +268 -0
- package/skills/audit-payment-system/references/checklist.md +283 -0
- package/skills/audit-performance/SKILL.md +383 -0
- package/skills/audit-performance/references/loading-priority-2026.md +81 -0
- package/skills/audit-realworld/SKILL.md +287 -0
- package/skills/audit-registry-listing/SKILL.md +122 -0
- package/skills/audit-resilience/SKILL.md +153 -0
- package/skills/audit-responsive/SKILL.md +221 -0
- package/skills/audit-responsive/references/checklist.md +166 -0
- package/skills/audit-security/SKILL.md +289 -0
- package/skills/audit-skill-conflicts/SKILL.md +178 -0
- package/skills/audit-ui-states/SKILL.md +146 -0
- package/skills/audit-uiux-design-system/SKILL.md +475 -0
- package/skills/audit-uiux-design-system/references/details.md +71 -0
- package/skills/audit-ux/SKILL.md +381 -0
- package/skills/audit-ux/references/details.md +245 -0
- package/skills/audit-ux-journeys/SKILL.md +215 -0
- package/skills/audit-ux-journeys/references/checklist.md +179 -0
- package/skills/backend-db-performance/SKILL.md +441 -0
- package/skills/backend-error-handling/SKILL.md +489 -0
- package/skills/backend-error-handling/references/details.md +58 -0
- package/skills/backend-observability/SKILL.md +88 -0
- package/skills/backend-patterns/SKILL.md +499 -0
- package/skills/backend-patterns/references/architecture-patterns.md +298 -0
- package/skills/backend-realtime/SKILL.md +403 -0
- package/skills/backend-realtime/references/patterns.md +74 -0
- package/skills/burndown-full/SKILL.md +174 -0
- package/skills/complete-everything/SKILL.md +295 -0
- package/skills/data-pipeline/SKILL.md +109 -0
- package/skills/data-visualization/SKILL.md +488 -0
- package/skills/debug-error/SKILL.md +322 -0
- package/skills/debug-fe-be-integration/SKILL.md +459 -0
- package/skills/debug-sentry-monitor/SKILL.md +497 -0
- package/skills/debug-sentry-monitor/references/details.md +165 -0
- package/skills/deploy-npm/SKILL.md +394 -0
- package/skills/deploy-npm/references/example-mushi-mushi.md +52 -0
- package/skills/deploy-verify/SKILL.md +489 -0
- package/skills/design-api/SKILL.md +379 -0
- package/skills/design-canvas/SKILL.md +155 -0
- package/skills/design-email/SKILL.md +370 -0
- package/skills/design-frontend/SKILL.md +143 -0
- package/skills/design-generative-art/SKILL.md +474 -0
- package/skills/design-mobile-first/SKILL.md +506 -0
- package/skills/design-motion/SKILL.md +333 -0
- package/skills/design-motion/references/delight-interactions.md +191 -0
- package/skills/design-prd/SKILL.md +443 -0
- package/skills/design-system/SKILL.md +457 -0
- package/skills/design-theme/SKILL.md +226 -0
- package/skills/design-theme/themes/tsumagoi-ranch.md +150 -0
- package/skills/docs-adr/SKILL.md +168 -0
- package/skills/docs-coauthor/SKILL.md +368 -0
- package/skills/docs-comparison-pages/SKILL.md +117 -0
- package/skills/docs-domain-modeling/SKILL.md +97 -0
- package/skills/docs-launch-kit/SKILL.md +139 -0
- package/skills/docs-writer/SKILL.md +469 -0
- package/skills/enhance-agent-guardrails/SKILL.md +164 -0
- package/skills/enhance-arch-boundaries/SKILL.md +154 -0
- package/skills/enhance-capacitor-ui/SKILL.md +463 -0
- package/skills/enhance-capacitor-ui/references/details.md +750 -0
- package/skills/enhance-email-deliverability/SKILL.md +143 -0
- package/skills/enhance-growth-loops/SKILL.md +122 -0
- package/skills/enhance-lifecycle-email/SKILL.md +130 -0
- package/skills/enhance-motion/SKILL.md +193 -0
- package/skills/enhance-onboarding/SKILL.md +148 -0
- package/skills/enhance-pwa/SKILL.md +303 -0
- package/skills/enhance-readability/SKILL.md +146 -0
- package/skills/enhance-readme/SKILL.md +496 -0
- package/skills/enhance-readme/package-lock.json +187 -0
- package/skills/enhance-readme/package.json +17 -0
- package/skills/enhance-readme/scripts/generate-readme-blocks.mjs +199 -0
- package/skills/enhance-readme/scripts/record-readme-tour.mjs +442 -0
- package/skills/enhance-skill-prompts/SKILL.md +167 -0
- package/skills/enhance-skill-prompts/references/exemplar-audit-auth-flows.md +311 -0
- package/skills/enhance-ux-laws/SKILL.md +409 -0
- package/skills/enhance-web-conversion/SKILL.md +155 -0
- package/skills/enhance-web-forms/SKILL.md +154 -0
- package/skills/enhance-web-instant-nav/SKILL.md +138 -0
- package/skills/enhance-web-instant-nav/references/bfcache-blockers.md +23 -0
- package/skills/enhance-web-instant-nav/references/early-hints.md +33 -0
- package/skills/enhance-web-instant-nav/references/speculation-rules.md +44 -0
- package/skills/enhance-web-landing/SKILL.md +459 -0
- package/skills/enhance-web-landing/references/details.md +773 -0
- package/skills/enhance-web-redesign/SKILL.md +228 -0
- package/skills/enhance-web-seo/SKILL.md +276 -0
- package/skills/enhance-web-ui/SKILL.md +473 -0
- package/skills/enhance-web-ui/references/details.md +674 -0
- package/skills/enhance-web-ux/HEURISTICS.md +248 -0
- package/skills/enhance-web-ux/PATTERNS.md +375 -0
- package/skills/enhance-web-ux/SKILL.md +464 -0
- package/skills/enhance-web-ux/examples.md +222 -0
- package/skills/enhance-web-ux/references/details.md +406 -0
- package/skills/enhance-web-web3d/SKILL.md +397 -0
- package/skills/enhance-web-web3d/references/css-canvas-effects.md +180 -0
- package/skills/handoff/SKILL.md +66 -0
- package/skills/housekeep-backlog/SKILL.md +149 -0
- package/skills/housekeep-dead-code/SKILL.md +387 -0
- package/skills/housekeep-dead-code/references/ratchet-ci.md +205 -0
- package/skills/housekeep-dead-code/references/supabase-hygiene.md +152 -0
- package/skills/housekeep-design/SKILL.md +207 -0
- package/skills/housekeep-files/SKILL.md +220 -0
- package/skills/housekeep-files/references/naming-and-catalog.md +86 -0
- package/skills/housekeep-files/scripts/housekeep-files.ps1 +360 -0
- package/skills/housekeep-files/scripts/housekeep-files.sh +238 -0
- package/skills/housekeep-gates/SKILL.md +174 -0
- package/skills/iterate-agent-harness/SKILL.md +137 -0
- package/skills/iterate-gtm-weekly/SKILL.md +103 -0
- package/skills/iterate-post-launch/SKILL.md +292 -0
- package/skills/meta-mcp-builder/SKILL.md +313 -0
- package/skills/meta-skill-creator/SKILL.md +304 -0
- package/skills/mobile-capacitor-platform/SKILL.md +103 -0
- package/skills/mobile-emulator-start/SKILL.md +296 -0
- package/skills/mobile-emulator-test/SKILL.md +491 -0
- package/skills/mobile-emulator-test/references/details.md +478 -0
- package/skills/mobile-rn-performance/SKILL.md +107 -0
- package/skills/mobile-rn-screen/SKILL.md +476 -0
- package/skills/mobile-rn-screen/references/details.md +785 -0
- package/skills/mushi-health/SKILL.md +206 -0
- package/skills/mushi-integration/SKILL.md +257 -0
- package/skills/plan-aeo-readiness/SKILL.md +166 -0
- package/skills/plan-antislop/SKILL.md +281 -0
- package/skills/plan-aso/SKILL.md +149 -0
- package/skills/plan-backup-dr/SKILL.md +131 -0
- package/skills/plan-capacitor-hardening/SKILL.md +217 -0
- package/skills/plan-data-integrity/SKILL.md +187 -0
- package/skills/plan-dead-code/SKILL.md +386 -0
- package/skills/plan-dead-code/references/knip-config.md +214 -0
- package/skills/plan-dead-code/references/output-templates.md +133 -0
- package/skills/plan-dead-code/references/preservation-contract.md +50 -0
- package/skills/plan-dead-code/references/residue-greps.md +84 -0
- package/skills/plan-dependency-provenance/SKILL.md +200 -0
- package/skills/plan-docs-sync/SKILL.md +143 -0
- package/skills/plan-docs-sync/references/drift-taxonomy.md +43 -0
- package/skills/plan-docs-sync/references/output-templates.md +33 -0
- package/skills/plan-docs-sync/references/preservation-contract.md +17 -0
- package/skills/plan-error-handling/SKILL.md +205 -0
- package/skills/plan-gtm/SKILL.md +276 -0
- package/skills/plan-gtm/references/benchmarks-2026.md +183 -0
- package/skills/plan-input-validation/SKILL.md +179 -0
- package/skills/plan-llm-cost-guardrails/SKILL.md +176 -0
- package/skills/plan-mobile-readiness/SKILL.md +171 -0
- package/skills/plan-perf-audit/SKILL.md +145 -0
- package/skills/plan-perf-audit/references/audit-scope.md +51 -0
- package/skills/plan-perf-audit/references/output-templates.md +33 -0
- package/skills/plan-perf-audit/references/preservation-contract.md +13 -0
- package/skills/plan-pricing/SKILL.md +173 -0
- package/skills/plan-privacy-compliance/SKILL.md +148 -0
- package/skills/plan-rls-audit/SKILL.md +231 -0
- package/skills/plan-secrets-audit/SKILL.md +181 -0
- package/skills/plan-security-audit/SKILL.md +168 -0
- package/skills/plan-security-audit/references/output-templates.md +36 -0
- package/skills/plan-security-audit/references/owasp-supabase-scope.md +55 -0
- package/skills/plan-security-audit/references/preservation-contract.md +18 -0
- package/skills/plan-stub-checker/SKILL.md +216 -0
- package/skills/plan-stub-checker/references/detection-methodology.md +75 -0
- package/skills/plan-stub-checker/references/detection-taxonomy.md +34 -0
- package/skills/plan-stub-checker/references/output-templates.md +63 -0
- package/skills/plan-stub-checker/references/preservation-contract.md +24 -0
- package/skills/plan-test-coverage/SKILL.md +170 -0
- package/skills/plan-test-coverage/references/methodology.md +54 -0
- package/skills/plan-test-coverage/references/output-templates.md +34 -0
- package/skills/plan-test-coverage/references/preservation-contract.md +15 -0
- package/skills/plan-uiux-unification/SKILL.md +230 -0
- package/skills/plan-uiux-unification/references/output-templates.md +67 -0
- package/skills/plan-uiux-unification/references/phase-workbook.md +85 -0
- package/skills/plan-uiux-unification/references/preservation-contract.md +24 -0
- package/skills/protocol-browser-anti-stall/SKILL.md +211 -0
- package/skills/protocol-browser-anti-stall/references/mcp-to-cli-map.md +113 -0
- package/skills/protocol-browser-anti-stall/references/playwright-session-coordination.md +170 -0
- package/skills/research/SKILL.md +422 -0
- package/skills/test-exploratory/SKILL.md +165 -0
- package/skills/test-exploratory/references/charter-template.md +29 -0
- package/skills/test-load/SKILL.md +126 -0
- package/skills/test-mutation/SKILL.md +160 -0
- package/skills/test-playwright/SKILL.md +354 -0
- package/skills/test-qa/SKILL.md +364 -0
- package/skills/test-qa/references/details.md +268 -0
- package/skills/test-red-team/SKILL.md +386 -0
- package/skills/test-red-team/references/owasp-attack-checklist.md +193 -0
- package/skills/test-unit/SKILL.md +259 -0
- package/skills/test-unit/references/details.md +267 -0
- package/skills/test-visual-regression/SKILL.md +132 -0
- package/skills/thirdparty-emil-design-eng/ATTRIBUTION.md +20 -0
- package/skills/thirdparty-emil-design-eng/SKILL.md +21 -0
- package/skills/thirdparty-emil-design-eng/references/emil-design-eng.md +676 -0
- package/skills/thirdparty-ui-ux-pro-max/ATTRIBUTION.md +22 -0
- package/skills/thirdparty-ui-ux-pro-max/SKILL.md +304 -0
- package/skills/thirdparty-ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/thirdparty-ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/thirdparty-ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/thirdparty-ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/thirdparty-ui-ux-pro-max/data/products.csv +97 -0
- package/skills/thirdparty-ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/thirdparty-ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/thirdparty-ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/thirdparty-ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/thirdparty-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/thirdparty-ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/search.py +114 -0
- package/skills/thirdparty-web-interface-guidelines/ATTRIBUTION.md +23 -0
- package/skills/thirdparty-web-interface-guidelines/SKILL.md +190 -0
- package/skills/workflow-build-feature/SKILL.md +118 -0
- package/skills/workflow-coding-discipline/SKILL.md +140 -0
- package/skills/workflow-environment-ready/SKILL.md +128 -0
- package/skills/workflow-feature-flag/SKILL.md +262 -0
- package/skills/workflow-feedback-to-closure/SKILL.md +165 -0
- package/skills/workflow-fix-and-ship/SKILL.md +136 -0
- package/skills/workflow-git-commit/SKILL.md +200 -0
- package/skills/workflow-green-repo/SKILL.md +166 -0
- package/skills/workflow-grilling/SKILL.md +73 -0
- package/skills/workflow-gtm/SKILL.md +153 -0
- package/skills/workflow-housekeep/SKILL.md +453 -0
- package/skills/workflow-housekeep/references/templates.md +109 -0
- package/skills/workflow-launch-ready/SKILL.md +145 -0
- package/skills/workflow-merge-conflicts/SKILL.md +62 -0
- package/skills/workflow-onboard/SKILL.md +99 -0
- package/skills/workflow-parallel-agents/SKILL.md +164 -0
- package/skills/workflow-pr/SKILL.md +197 -0
- package/skills/workflow-quality-gate/SKILL.md +147 -0
- package/skills/workflow-refactor/SKILL.md +274 -0
- package/skills/workflow-release-prep/SKILL.md +207 -0
- package/skills/workflow-ship-and-observe/SKILL.md +164 -0
- package/skills/workflow-spec-tdd/SKILL.md +141 -0
- package/skills/workflow-spec-tdd/references/spec-template.md +126 -0
- package/skills/workflow-spec-tdd/references/tdd-patterns.md +167 -0
- package/skills-cursor/babysit/SKILL.md +17 -0
- package/skills-cursor/canvas/SKILL.md +142 -0
- package/skills-cursor/canvas/sdk/canvas-tokens.d.ts +235 -0
- package/skills-cursor/canvas/sdk/chart-primitives.d.ts +200 -0
- package/skills-cursor/canvas/sdk/dag-layout.d.ts +102 -0
- package/skills-cursor/canvas/sdk/diff-view.d.ts +130 -0
- package/skills-cursor/canvas/sdk/form-primitives.d.ts +194 -0
- package/skills-cursor/canvas/sdk/hooks.d.ts +117 -0
- package/skills-cursor/canvas/sdk/index.d.ts +47 -0
- package/skills-cursor/canvas/sdk/theme.d.ts +61 -0
- package/skills-cursor/canvas/sdk/todo-list.d.ts +49 -0
- package/skills-cursor/canvas/sdk/ui-primitives.d.ts +549 -0
- package/skills-cursor/canvas/sdk/ui-primitives.test.d.ts +2 -0
- package/skills-cursor/create-hook/SKILL.md +238 -0
- package/skills-cursor/create-rule/SKILL.md +185 -0
- package/skills-cursor/create-skill/SKILL.md +269 -0
- package/skills-cursor/create-skill/references/authoring-guide.md +182 -0
- package/skills-cursor/create-subagent/SKILL.md +228 -0
- package/skills-cursor/migrate-to-skills/SKILL.md +121 -0
- package/skills-cursor/shell/SKILL.md +22 -0
- package/skills-cursor/split-to-prs/SKILL.md +47 -0
- package/skills-cursor/statusline/SKILL.md +193 -0
- package/skills-cursor/update-cli-config/SKILL.md +85 -0
- package/skills-cursor/update-cursor-settings/SKILL.md +137 -0
- package/skills.sh.json +297 -0
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit-accessibility
|
|
3
|
+
description: >
|
|
4
|
+
WCAG 2.2 audit via playwright-cli: crawl every page, inject axe-core, test
|
|
5
|
+
keyboard nav, contrast, ARIA labels, heading order. Use when "audit
|
|
6
|
+
accessibility", "check a11y", "WCAG audit", "check keyboard nav", or "test
|
|
7
|
+
screen reader".
|
|
8
|
+
license: MIT
|
|
9
|
+
effort: high
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Accessibility Audit
|
|
13
|
+
|
|
14
|
+
**Degree of freedom: MIXED** — Phases 0–1, 5 `[HIGH freedom]`; Phases 2–3
|
|
15
|
+
playwright/axe/Tab sequences `[LOW freedom — run exactly]`. Read
|
|
16
|
+
`protocol-browser-anti-stall` before any browser step.
|
|
17
|
+
|
|
18
|
+
## How to reason
|
|
19
|
+
|
|
20
|
+
1. **Observe** — quote axe rule+selector, heading list, or Tab snapshot
|
|
21
|
+
2. **Interpret** — can a keyboard or AT user complete the task?
|
|
22
|
+
3. **Classify** — WCAG fail / axe-false-positive / manual-only / correct-as-is
|
|
23
|
+
4. **Severity** — Level A = P0; Level AA = P1; best-practice = P2
|
|
24
|
+
|
|
25
|
+
## Worked example
|
|
26
|
+
|
|
27
|
+
> **Observe:** axe `label` on `/signup`; `<input name="email">` has no `id`/`aria-label`.
|
|
28
|
+
> **Interpret:** AT users cannot tell what to type (1.3.1 / 4.1.2).
|
|
29
|
+
> **Classify:** WCAG fail (not an axe false positive).
|
|
30
|
+
> **Severity:** P0 — Level A, blocks signup.
|
|
31
|
+
> **Finding:** `/signup` | 1.3.1+4.1.2 | P0 | unlabeled email | `<label for>`.
|
|
32
|
+
|
|
33
|
+
## Self-critique before reporting [LOW freedom — do not skip]
|
|
34
|
+
|
|
35
|
+
1. **WCAG SC + numbers** — not "contrast is bad"; quote ratio or selector
|
|
36
|
+
2. **Keyboard, not axe-only** — 2.1.1 fails even if axe is clean
|
|
37
|
+
3. **Every reachable page** — obscure routes still count
|
|
38
|
+
4. **Severity justified** — Level A = P0
|
|
39
|
+
5. **Axe is ~30–40%** — heading/focus/link-text/reading-order always manual
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Phase 0: Auto-Detect Pages and Components
|
|
44
|
+
|
|
45
|
+
### 0a. Discover Route Structure
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
Glob("**/app/**/page.{tsx,jsx,ts,js}")
|
|
49
|
+
Glob("**/pages/**/*.{tsx,jsx,ts,js}")
|
|
50
|
+
Glob("**/src/routes/**/*.{tsx,jsx,svelte,vue}")
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 0b. Find the App URL
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
Grep(pattern: "NEXT_PUBLIC_APP_URL|NEXT_PUBLIC_BASE_URL|VITE_APP_URL|APP_URL|localhost", glob: ".env*")
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
If no production URL, default to `http://localhost:3000` (or detected dev server port).
|
|
60
|
+
|
|
61
|
+
### 0c. Detect CSS Framework and Component Library
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
Grep(pattern: "tailwindcss|@chakra-ui|@mui|@radix-ui|shadcn|bootstrap|bulma", glob: "package.json")
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 0d. Detect Existing a11y Tooling
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
Grep(pattern: "axe-core|@axe-core|eslint-plugin-jsx-a11y|pa11y|lighthouse|@testing-library", glob: "package.json")
|
|
71
|
+
Grep(pattern: "aria-|role=|tabIndex|sr-only|visually-hidden", glob: "*.{tsx,jsx,vue,svelte}", output_mode: "count")
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Record: `APP_URL`, `PAGES`, `CSS_FRAMEWORK`, `COMPONENT_LIB`, `EXISTING_A11Y_TOOLS`, `ARIA_USAGE_COUNT`.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Phase 1: Research Current WCAG Guidelines
|
|
79
|
+
|
|
80
|
+
### 1a. Firecrawl Research
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
firecrawl:firecrawl_search
|
|
84
|
+
{
|
|
85
|
+
"query": "WCAG 2.2 success criteria checklist web accessibility [current year]",
|
|
86
|
+
"limit": 5
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
firecrawl:firecrawl_search
|
|
92
|
+
{
|
|
93
|
+
"query": "axe-core automated accessibility testing best practices common false positives",
|
|
94
|
+
"limit": 5
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
firecrawl:firecrawl_search
|
|
100
|
+
{
|
|
101
|
+
"query": "<CSS_FRAMEWORK> <COMPONENT_LIB> accessibility best practices common issues",
|
|
102
|
+
"limit": 5
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Scrape 2–3 authoritative results:
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
firecrawl:firecrawl_scrape
|
|
110
|
+
{
|
|
111
|
+
"url": "<BEST_RESULT_URL>",
|
|
112
|
+
"formats": ["markdown"],
|
|
113
|
+
"onlyMainContent": true
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 1b. Framework-Specific a11y Docs (Context7)
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
context7:resolve-library-id
|
|
121
|
+
{
|
|
122
|
+
"libraryName": "<COMPONENT_LIB e.g. radix-ui or chakra-ui>"
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
context7:query-docs
|
|
128
|
+
{
|
|
129
|
+
"libraryId": "<RESOLVED_ID>",
|
|
130
|
+
"query": "accessibility ARIA keyboard navigation focus management"
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Phase 2: Automated Scanning (axe-core via Playwright)
|
|
137
|
+
|
|
138
|
+
### 2a. Navigate to Each Page
|
|
139
|
+
|
|
140
|
+
For each page discovered in Phase 0a:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
PW="npx --yes @playwright/cli@latest"
|
|
144
|
+
$PW -s=a11y open --headed "<APP_URL><ROUTE>" # first page; use `goto` for subsequent ones
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Apply the `protocol-browser-anti-stall` protocol: wait 2s, snapshot, verify page loaded.
|
|
148
|
+
|
|
149
|
+
### 2b. Inject and Run axe-core
|
|
150
|
+
|
|
151
|
+
Use `run-code` to inject axe-core from CDN and run a full scan. The URL pins
|
|
152
|
+
a version so results are reproducible; if the CDN returns 404, look up the
|
|
153
|
+
current axe-core 4.x on cdnjs and substitute it — do not skip the scan:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
$PW -s=a11y run-code 'async (page) => { await page.addScriptTag({ url: "https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.10.2/axe.min.js" }); return await page.evaluate(async () => { const r = await axe.run(); return { violations: r.violations.map(v => ({ id: v.id, impact: v.impact, description: v.description, help: v.help, helpUrl: v.helpUrl, nodes: v.nodes.length, targets: v.nodes.slice(0, 3).map(n => n.target[0]) })), passes: r.passes.length, incomplete: r.incomplete.length, inapplicable: r.inapplicable.length }; }); }'
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
For each violation returned, record:
|
|
160
|
+
- **Rule ID** (e.g., `color-contrast`, `image-alt`, `label`)
|
|
161
|
+
- **Impact** (critical, serious, moderate, minor)
|
|
162
|
+
- **WCAG criteria** mapped from the rule
|
|
163
|
+
- **Affected elements** (CSS selectors)
|
|
164
|
+
- **Count** of affected nodes
|
|
165
|
+
|
|
166
|
+
### 2c. Check Specific WCAG Categories Manually
|
|
167
|
+
|
|
168
|
+
**Heading Hierarchy (WCAG 1.3.1):**
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
$PW -s=a11y eval '() => Array.from(document.querySelectorAll("h1,h2,h3,h4,h5,h6")).map(h => ({ tag: h.tagName, text: h.textContent.trim().substring(0, 50) }))'
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Verify: only one `h1`, headings don't skip levels (h1 -> h3 without h2).
|
|
175
|
+
|
|
176
|
+
**Image Alt Text (WCAG 1.1.1):**
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
$PW -s=a11y eval '() => Array.from(document.querySelectorAll("img")).map(img => ({ src: img.src.split("/").pop(), alt: img.alt, hasAlt: img.hasAttribute("alt"), decorative: img.getAttribute("role") === "presentation" || img.alt === "" }))'
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Verify: all informative images have descriptive alt text, decorative images have `alt=""` or `role="presentation"`.
|
|
183
|
+
|
|
184
|
+
**Link Text (WCAG 2.4.4):**
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
$PW -s=a11y eval '() => Array.from(document.querySelectorAll("a")).filter(a => ["click here", "here", "read more", "learn more", "", "link"].includes((a.textContent || "").trim().toLowerCase())).map(a => ({ href: a.href, text: (a.textContent || "").trim(), ariaLabel: a.getAttribute("aria-label") }))'
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Flag generic link text ("click here", "read more", empty links without aria-label).
|
|
191
|
+
|
|
192
|
+
**Form Labels (WCAG 1.3.1, 4.1.2):**
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
$PW -s=a11y eval '() => Array.from(document.querySelectorAll("input,select,textarea")).map(el => ({ type: el.type, name: el.name, id: el.id, hasLabel: !!el.id && !!document.querySelector(`label[for="${el.id}"]`), ariaLabel: el.getAttribute("aria-label"), ariaLabelledBy: el.getAttribute("aria-labelledby"), placeholder: el.placeholder }))'
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Verify: every form control has an associated `<label>`, `aria-label`, or `aria-labelledby`.
|
|
199
|
+
|
|
200
|
+
**Language Attribute (WCAG 3.1.1):**
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
$PW -s=a11y eval '() => ({ htmlLang: document.documentElement.lang, htmlDir: document.documentElement.dir })'
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Verify: `<html>` has a valid `lang` attribute.
|
|
207
|
+
|
|
208
|
+
### 2d. Take Evidence Screenshots
|
|
209
|
+
|
|
210
|
+
For each page, capture a screenshot as visual evidence:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
$PW -s=a11y screenshot --filename ".playwright-mcp/a11y-<route>.png"
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Phase 3: Keyboard Navigation Testing
|
|
219
|
+
|
|
220
|
+
### 3a. Tab Order Test
|
|
221
|
+
|
|
222
|
+
For each page, test that all interactive elements are reachable via Tab key:
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
PW="npx --yes @playwright/cli@latest"
|
|
226
|
+
$PW -s=a11y open --headed "<APP_URL><ROUTE>" # first page; use `goto` for subsequent ones
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Press Tab repeatedly and snapshot after each press to track focus movement:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
$PW -s=a11y press Tab
|
|
233
|
+
$PW -s=a11y snapshot
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
After each Tab, check:
|
|
237
|
+
- [ ] Focus is visible (there is a focus indicator on the active element)
|
|
238
|
+
- [ ] Focus order is logical (follows visual reading order)
|
|
239
|
+
- [ ] No focus trap (Tab eventually cycles back to the beginning or reaches the end)
|
|
240
|
+
- [ ] Skip links exist (if there is a large navigation area)
|
|
241
|
+
|
|
242
|
+
Keep pressing Tab until focus has visited every interactive element on the page or cycled back to the first one; stop early only when a focus trap is found, and record it.
|
|
243
|
+
|
|
244
|
+
### 3b. Interactive Element Testing
|
|
245
|
+
|
|
246
|
+
For each interactive component (dropdowns, modals, tabs, accordions):
|
|
247
|
+
|
|
248
|
+
**Enter/Space activation (WCAG 2.1.1):**
|
|
249
|
+
- Tab to the element
|
|
250
|
+
- Press Enter or Space
|
|
251
|
+
- Verify the action fires (snapshot to confirm state change)
|
|
252
|
+
|
|
253
|
+
**Escape to close (WCAG 2.1.1 for modals/dialogs):**
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
$PW -s=a11y press Escape
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Verify: modals/dropdowns close, focus returns to the trigger element.
|
|
260
|
+
|
|
261
|
+
**Arrow key navigation (for tab panels, menus, listboxes):**
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
$PW -s=a11y press ArrowDown
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### 3c. Focus Management After State Changes
|
|
268
|
+
|
|
269
|
+
Test that focus is managed correctly after dynamic updates:
|
|
270
|
+
- After opening a modal: focus should move into the modal
|
|
271
|
+
- After closing a modal: focus should return to the trigger
|
|
272
|
+
- After deleting an item from a list: focus should move to the next item or a logical location
|
|
273
|
+
- After form submission: focus should move to a success/error message
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Phase 4: Cross-Check with Sentry
|
|
278
|
+
|
|
279
|
+
### 4a. Search for Assistive Technology Errors
|
|
280
|
+
|
|
281
|
+
```json
|
|
282
|
+
sentry:search_issues
|
|
283
|
+
{
|
|
284
|
+
"organizationSlug": "<ORG_SLUG>",
|
|
285
|
+
"projectSlugOrId": "<PROJECT_SLUG>",
|
|
286
|
+
"query": "is:unresolved aria OR screenreader OR voiceover OR talkback OR nvda OR jaws OR focus OR tabindex OR keyboard"
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### 4b. Check for JavaScript Errors on Keyboard Interaction
|
|
291
|
+
|
|
292
|
+
```json
|
|
293
|
+
sentry:search_issues
|
|
294
|
+
{
|
|
295
|
+
"organizationSlug": "<ORG_SLUG>",
|
|
296
|
+
"projectSlugOrId": "<PROJECT_SLUG>",
|
|
297
|
+
"query": "is:unresolved keydown OR keyup OR keypress OR focusin OR focusout"
|
|
298
|
+
}
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### 4c. Browser/Device Breakdown
|
|
302
|
+
|
|
303
|
+
If errors cluster on AT-favored browsers, pull the browser distribution for the issue. `get_issue_tag_values` is a catalog tool, not a direct one, so call it through `execute_sentry_tool`. If the call is rejected, run `search_sentry_tools` with `"issue tag values"` to get the current name and schema.
|
|
304
|
+
|
|
305
|
+
```json
|
|
306
|
+
sentry:execute_sentry_tool
|
|
307
|
+
{
|
|
308
|
+
"name": "get_issue_tag_values",
|
|
309
|
+
"arguments": {
|
|
310
|
+
"organizationSlug": "<ORG_SLUG>",
|
|
311
|
+
"issueId": "<ISSUE_ID>",
|
|
312
|
+
"tagKey": "browser"
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Phase 5: Static Code Analysis
|
|
320
|
+
|
|
321
|
+
### 5a. Missing ARIA Attributes
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
Grep(pattern: "onClick(?!.*role=)(?!.*tabIndex)", glob: "*.{tsx,jsx}")
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
Flag `div` or `span` elements with click handlers but no `role` or `tabIndex` — these are invisible to keyboard and screen reader users.
|
|
328
|
+
|
|
329
|
+
### 5b. Inaccessible Custom Components
|
|
330
|
+
|
|
331
|
+
```
|
|
332
|
+
SemanticSearch(query: "Where are custom interactive components defined (dropdowns, modals, tabs, accordions) that don't use a component library?", target_directories: [])
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Check each custom interactive for:
|
|
336
|
+
- Proper ARIA roles (`role="dialog"`, `role="tabpanel"`, etc.)
|
|
337
|
+
- Keyboard event handlers (`onKeyDown`)
|
|
338
|
+
- Focus management (`useRef` + `.focus()`)
|
|
339
|
+
- ARIA states (`aria-expanded`, `aria-selected`, `aria-hidden`)
|
|
340
|
+
|
|
341
|
+
### 5c. Color Contrast in CSS/Tailwind
|
|
342
|
+
|
|
343
|
+
```
|
|
344
|
+
Grep(pattern: "text-gray-[345]|text-slate-[345]|text-zinc-[345]|text-neutral-[345]|color:\\s*#[789abc]", glob: "*.{tsx,jsx,css,scss}")
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Light gray text on white background is the most common contrast failure. Flag files using light gray text colors for manual contrast checking.
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## Phase 6: Report
|
|
352
|
+
|
|
353
|
+
```
|
|
354
|
+
═══════════════════════════════════════════════════════
|
|
355
|
+
WCAG 2.2 ACCESSIBILITY AUDIT REPORT
|
|
356
|
+
Project: <PROJECT_NAME>
|
|
357
|
+
Date: <DATE>
|
|
358
|
+
Standard: WCAG 2.2 Level AA
|
|
359
|
+
Pages Tested: <COUNT>
|
|
360
|
+
═══════════════════════════════════════════════════════
|
|
361
|
+
|
|
362
|
+
## 1. EXECUTIVE SUMMARY
|
|
363
|
+
|
|
364
|
+
| Metric | Result |
|
|
365
|
+
|---------------------------|-----------------|
|
|
366
|
+
| Pages tested | X |
|
|
367
|
+
| Total violations | N |
|
|
368
|
+
| Critical violations | N |
|
|
369
|
+
| Serious violations | N |
|
|
370
|
+
| Level A criteria failed / checked | N / M |
|
|
371
|
+
| Level AA criteria failed / checked | N / M |
|
|
372
|
+
| axe-core rules passed | N |
|
|
373
|
+
| Keyboard navigable pages | X/Y |
|
|
374
|
+
|
|
375
|
+
## 2. AXE-CORE SCAN RESULTS (per page)
|
|
376
|
+
|
|
377
|
+
| Page | Critical | Serious | Moderate | Minor | Pass | Worst level failed (A / AA / none) |
|
|
378
|
+
|------|----------|---------|----------|-------|------|------|
|
|
379
|
+
| / | ... | ... | ... | ... | ... | A / AA / none |
|
|
380
|
+
| /about | ... | ... | ... | ... | ... | A / AA / none |
|
|
381
|
+
|
|
382
|
+
## 3. VIOLATIONS BY WCAG CRITERION
|
|
383
|
+
|
|
384
|
+
| WCAG SC | Name | Level | Pages Affected | Elements | Impact | Status |
|
|
385
|
+
|---------|------|-------|----------------|----------|--------|--------|
|
|
386
|
+
| 1.1.1 | Non-text Content | A | ... | ... | ... | PASS/FAIL |
|
|
387
|
+
| 1.3.1 | Info and Relationships | A | ... | ... | ... | PASS/FAIL |
|
|
388
|
+
| 1.4.3 | Contrast (Minimum) | AA | ... | ... | ... | PASS/FAIL |
|
|
389
|
+
| 2.1.1 | Keyboard | A | ... | ... | ... | PASS/FAIL |
|
|
390
|
+
| 2.4.3 | Focus Order | A | ... | ... | ... | PASS/FAIL |
|
|
391
|
+
| 2.4.4 | Link Purpose | A | ... | ... | ... | PASS/FAIL |
|
|
392
|
+
| 2.4.7 | Focus Visible | AA | ... | ... | ... | PASS/FAIL |
|
|
393
|
+
| 3.1.1 | Language of Page | A | ... | ... | ... | PASS/FAIL |
|
|
394
|
+
| 4.1.2 | Name, Role, Value | A | ... | ... | ... | PASS/FAIL |
|
|
395
|
+
|
|
396
|
+
## 4. KEYBOARD NAVIGATION
|
|
397
|
+
|
|
398
|
+
| Page | Tab Order Logical | Focus Visible | No Focus Trap | Skip Link | Worst level failed |
|
|
399
|
+
|------|-------------------|---------------|---------------|-----------|-------|
|
|
400
|
+
| / | ... | ... | ... | ... | A / AA / none |
|
|
401
|
+
|
|
402
|
+
## 5. INTERACTIVE COMPONENTS
|
|
403
|
+
|
|
404
|
+
| Component | Location | ARIA Roles | Keyboard Operable | Focus Managed | Worst level failed |
|
|
405
|
+
|-----------|----------|------------|-------------------|---------------|-------|
|
|
406
|
+
| Modal | ... | ... | ... | ... | A / AA / none |
|
|
407
|
+
| Dropdown | ... | ... | ... | ... | A / AA / none |
|
|
408
|
+
|
|
409
|
+
## 6. SENTRY ASSISTIVE TECHNOLOGY ERRORS
|
|
410
|
+
|
|
411
|
+
| Issue | Error Type | Events | Browser/AT | Fix Needed |
|
|
412
|
+
|-------|------------|--------|------------|------------|
|
|
413
|
+
| ... | ... | ... | ... | ... |
|
|
414
|
+
|
|
415
|
+
## 7. STATIC CODE FINDINGS
|
|
416
|
+
|
|
417
|
+
| Pattern | Files | Count | Risk |
|
|
418
|
+
|---------|-------|-------|------|
|
|
419
|
+
| onClick without role/tabIndex | ... | N | High |
|
|
420
|
+
| Custom interactive without ARIA | ... | N | High |
|
|
421
|
+
| Low-contrast text classes | ... | N | Medium |
|
|
422
|
+
|
|
423
|
+
## 8. CRITICAL FINDINGS (Action Required)
|
|
424
|
+
|
|
425
|
+
P0 — Level A violations (legal risk):
|
|
426
|
+
1. [finding with WCAG SC, element, page, evidence]
|
|
427
|
+
|
|
428
|
+
P1 — Level AA violations (compliance gap):
|
|
429
|
+
1. [finding with WCAG SC, element, page, evidence]
|
|
430
|
+
|
|
431
|
+
P2 — Best practice improvements:
|
|
432
|
+
1. [finding with rationale]
|
|
433
|
+
|
|
434
|
+
## 9. RECOMMENDATIONS
|
|
435
|
+
|
|
436
|
+
| # | WCAG SC | Current | Recommended | Effort | Files to Change |
|
|
437
|
+
|---|---------|---------|-------------|--------|-----------------|
|
|
438
|
+
| 1 | ... | ... | ... | S/M/L | ... |
|
|
439
|
+
|
|
440
|
+
═══════════════════════════════════════════════════════
|
|
441
|
+
```
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit-agent-speed
|
|
3
|
+
description: >
|
|
4
|
+
Measure and fix a slow coding-agent setup: status line, hooks, instruction
|
|
5
|
+
bloat, effort, worktree pile-up, antivirus and indexer scans. Use when
|
|
6
|
+
"Claude is slow" or "CPU is pinned". App speed → audit-performance.
|
|
7
|
+
license: MIT
|
|
8
|
+
effort: high
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# audit-agent-speed — Make the agent setup fast again
|
|
12
|
+
|
|
13
|
+
**Degree of freedom: MIXED** — measurement commands `[LOW freedom — run
|
|
14
|
+
exactly]`; which fixes to recommend `[HIGH freedom]`.
|
|
15
|
+
|
|
16
|
+
> **Audit-and-fix exception.** Report first, then fix. Apply local, reversible
|
|
17
|
+
> fixes right away. Ask before anything that needs admin rights, touches
|
|
18
|
+
> committed config, deletes data, or changes a user preference (effort, model).
|
|
19
|
+
|
|
20
|
+
Most of an agent's turn is model time on the provider's servers, and no local
|
|
21
|
+
tuning changes that. This skill wins back the **local** part: hooks, tools,
|
|
22
|
+
builds, git, terminal rendering, and a CPU that other processes keep pinned.
|
|
23
|
+
|
|
24
|
+
## This skill vs neighbors
|
|
25
|
+
|
|
26
|
+
| Skill | Owns |
|
|
27
|
+
|---|---|
|
|
28
|
+
| **audit-agent-speed** (this) | The agent host: Claude Code/Cursor config, hooks, status line, worktrees, OS scanners |
|
|
29
|
+
| `audit-performance` | The product's runtime speed (Core Web Vitals, bundles, queries) |
|
|
30
|
+
| `workflow-environment-ready` | Proving tools and verify commands work before a long run |
|
|
31
|
+
| `iterate-agent-harness` | Turning an agent failure into a guard with a regression test |
|
|
32
|
+
|
|
33
|
+
## How to reason
|
|
34
|
+
|
|
35
|
+
1. **Observe**: measure CPU per process before blaming anything. Quote the numbers.
|
|
36
|
+
2. **Interpret**: per-call cost × call rate × concurrent sessions. A 100 ms hook
|
|
37
|
+
on every tool call across 3 agents matters; a 2 s Stop hook that runs once doesn't.
|
|
38
|
+
3. **Classify**: fix now (local, reversible) / ask (admin, committed, preference) / leave.
|
|
39
|
+
4. **Verify**: re-measure after each fix and report each change's effect separately.
|
|
40
|
+
|
|
41
|
+
## Worked example
|
|
42
|
+
|
|
43
|
+
> **Observe:** total CPU 100% with 3 sessions. Per-process sampling: `ccusage`
|
|
44
|
+
> ×5 at 49%, `wmiprvse` 8%, `MsMpEng` 3%.
|
|
45
|
+
> **Interpret:** the status line runs `ccusage statusline` every 10 s per
|
|
46
|
+
> session; each run re-reads ~10 GB of transcripts, and slow runs pile up.
|
|
47
|
+
> **Classify:** fix now. Remove the widget (back up the config first).
|
|
48
|
+
> **Verify:** no `ccusage` spawned in 2 min; total 53–72% → later ~30% as agent
|
|
49
|
+
> jobs finished (report the workload change separately from the fix).
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Phase 0 — Measure (run exactly)
|
|
54
|
+
|
|
55
|
+
Windows (includes protected processes such as Defender):
|
|
56
|
+
|
|
57
|
+
```powershell
|
|
58
|
+
$c = Get-Counter '\Process(*)\% Processor Time' -SampleInterval 5 -MaxSamples 1 -ErrorAction SilentlyContinue
|
|
59
|
+
$cores = (Get-CimInstance Win32_ComputerSystem).NumberOfLogicalProcessors
|
|
60
|
+
$c.CounterSamples | Where-Object { $_.InstanceName -notin '_total','idle' -and $_.Status -eq 0 } |
|
|
61
|
+
Group-Object { $_.InstanceName -replace '#\d+$','' } |
|
|
62
|
+
ForEach-Object { [pscustomobject]@{ Name=$_.Name; Count=$_.Count; Cpu=[math]::Round((($_.Group | Measure-Object CookedValue -Sum).Sum)/$cores,1) } } |
|
|
63
|
+
Sort-Object Cpu -Descending | Select-Object -First 15
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
macOS / Linux: `ps -eo pcpu,comm --sort=-pcpu | head -20` (macOS: `ps -Ao pcpu,comm -r | head -20`).
|
|
67
|
+
|
|
68
|
+
Take 3–4 samples over ~30 s. Avoid heavy `Get-CimInstance Win32_Process`
|
|
69
|
+
loops while measuring; they inflate `wmiprvse` themselves.
|
|
70
|
+
|
|
71
|
+
## Phase 1 — Status line
|
|
72
|
+
|
|
73
|
+
- A status line runs on every assistant message (debounced at 300 ms).
|
|
74
|
+
`statusLine.refreshInterval` **adds** timed runs on top; leave it unset
|
|
75
|
+
unless a widget needs a clock.
|
|
76
|
+
- Widgets that re-read transcripts on every render (`ccusage statusline`,
|
|
77
|
+
transcript-parsing HUDs) scale with transcript volume × sessions. Prefer
|
|
78
|
+
widgets that only read the JSON Claude Code passes on stdin (cost,
|
|
79
|
+
context window, rate limits). Keep `ccusage` as an on-demand CLI.
|
|
80
|
+
- Cache slow git calls (ccstatusline: `gitCacheTtlSeconds` ≥ 30).
|
|
81
|
+
- Source: https://code.claude.com/docs/en/statusline
|
|
82
|
+
|
|
83
|
+
## Phase 2 — Hooks
|
|
84
|
+
|
|
85
|
+
Inventory every hook in `~/.claude/settings.json` and each repo's
|
|
86
|
+
`.claude/settings.json`, then time each one (`echo '{}' | <command>`).
|
|
87
|
+
|
|
88
|
+
- **Per-tool-call hooks** (`PreToolUse` with matcher `*`, `PostToolUse` on
|
|
89
|
+
`Edit|Write`) spawn a process per call. Narrow with `matcher` or the `if`
|
|
90
|
+
field (permission-rule syntax) so non-matching calls never spawn.
|
|
91
|
+
- **Per-edit lint/format** that blocks for seconds duplicates `lint-staged` at
|
|
92
|
+
commit and rewrites files under the agent (forcing re-reads). Remove it when
|
|
93
|
+
pre-commit already runs `eslint --fix`.
|
|
94
|
+
- **Synchronous Stop typecheck is invisible cost.** For most events, including
|
|
95
|
+
Stop, plain stdout goes to the debug log only, so the agent never sees the
|
|
96
|
+
errors while every turn waits. Replace it with
|
|
97
|
+
[scripts/stop-typecheck.mjs](scripts/stop-typecheck.mjs) registered with
|
|
98
|
+
`asyncRewake: true`: background, skip-if-unchanged, wakes the agent only on a
|
|
99
|
+
new error set. Copy it to `<repo>/.claude/hooks/` and pass the repo's
|
|
100
|
+
typecheck script name.
|
|
101
|
+
- Source: https://code.claude.com/docs/en/hooks (Exit code 0, `async`, `asyncRewake`, `if`)
|
|
102
|
+
|
|
103
|
+
## Phase 3 — Instruction files and search scope
|
|
104
|
+
|
|
105
|
+
- **AGENTS.md is skipped when any CLAUDE.md exists in the working directory or
|
|
106
|
+
above it**, which includes a parent folder holding all your repos. Load both
|
|
107
|
+
with user settings
|
|
108
|
+
`"pluginConfigs": { "agents-md@builtin": { "options": { "instructionFiles": "claude-md-and-agents-md" } } }`
|
|
109
|
+
(ignored in project settings). Source: https://code.claude.com/docs/en/memory
|
|
110
|
+
- Keep each CLAUDE.md under ~200 lines; `@imports` load at launch and don't
|
|
111
|
+
save context. Run `/doctor prompt-audit` to find bloat.
|
|
112
|
+
- **Worktree folders inside the repo that are not gitignored** (`.worktrees/`)
|
|
113
|
+
make every Grep/Glob walk each copy and return duplicate hits. Add them to
|
|
114
|
+
`.git/info/exclude` (local, no commit) or `.gitignore`. Check:
|
|
115
|
+
`git check-ignore -v .worktrees/x` and compare `rg --files | wc -l` before and after.
|
|
116
|
+
|
|
117
|
+
## Phase 4 — Effort and models
|
|
118
|
+
|
|
119
|
+
- Lower effort is faster and cheaper; Opus 5.5 defaults to `medium`. A global
|
|
120
|
+
`xhigh` slows every routine turn. Suggest `high` (or the default) with
|
|
121
|
+
`/effort xhigh` for hard tasks. On Opus 5.5, changing effort keeps the prompt cache.
|
|
122
|
+
- The built-in Explore agent inherits the main model. A user agent named
|
|
123
|
+
`Explore` with `model: haiku` overrides it for fast, cheap searches.
|
|
124
|
+
- Fast mode (`/fast`): up to 2.5× faster output at a higher per-token price,
|
|
125
|
+
billed from usage credits on subscriptions; enable at session start.
|
|
126
|
+
- These are preferences: recommend, then ask. Sources:
|
|
127
|
+
https://code.claude.com/docs/en/model-config, https://code.claude.com/docs/en/sub-agents, https://code.claude.com/docs/en/fast-mode
|
|
128
|
+
|
|
129
|
+
## Phase 5 — Worktree pile-up
|
|
130
|
+
|
|
131
|
+
Agents create worktrees faster than anyone removes them. Inventory with
|
|
132
|
+
`git worktree list --porcelain` per repo and classify:
|
|
133
|
+
|
|
134
|
+
- **KEEP**: uncommitted changes, locked, path in a running process's command
|
|
135
|
+
line, or activity in the last 24 h. Measure activity from `HEAD` and
|
|
136
|
+
`logs/HEAD` mtimes in the worktree's git dir, **not** `index`: `git status`
|
|
137
|
+
rewrites the index and makes every worktree look fresh.
|
|
138
|
+
- **SAFE**: clean, idle, and either merged into the default branch or its PR
|
|
139
|
+
branch is `[gone]` on the remote (squash merges).
|
|
140
|
+
- **REVIEW**: clean, but holds commits not on the default branch.
|
|
141
|
+
|
|
142
|
+
Report the counts and list; remove SAFE ones only on approval, with
|
|
143
|
+
`git worktree remove` (never `--force`).
|
|
144
|
+
|
|
145
|
+
## Phase 6 — Operating system (Windows examples)
|
|
146
|
+
|
|
147
|
+
- **Antivirus:** prefer a Dev Drive with Defender performance mode over
|
|
148
|
+
exclusions. Process exclusions (`node.exe`, `git.exe`) skip scanning of
|
|
149
|
+
everything those processes write, so flag them as risk, not as a speed fix.
|
|
150
|
+
Source: https://learn.microsoft.com/en-us/windows/dev-drive/
|
|
151
|
+
- **Search indexer:** exclude the repos folder via Settings → Privacy &
|
|
152
|
+
security → Searching Windows → Add an excluded folder. The
|
|
153
|
+
`PreventIndexingCertainPaths` policy key was observed to be ignored on
|
|
154
|
+
Windows 11 Home; verify any exclusion with a probe file.
|
|
155
|
+
- **Vendor utilities that query WMI on every process start** (observed:
|
|
156
|
+
Alienware Command Center's `AWCC.SCSubAgent`, ~8% CPU) scale with agent
|
|
157
|
+
process churn. Attribute `wmiprvse` load by enabling the
|
|
158
|
+
`Microsoft-Windows-WMI-Activity/Trace` channel for ~20 s (admin) and
|
|
159
|
+
grouping `ClientProcessId`. Killing the sub-agent doesn't stick if a
|
|
160
|
+
service respawns it; the fix is uninstalling the utility, which is the owner's call.
|
|
161
|
+
- Power plan on AC and Best performance; background terminals are throttled
|
|
162
|
+
harder on battery.
|
|
163
|
+
|
|
164
|
+
## Self-critique
|
|
165
|
+
|
|
166
|
+
Before reporting, fail the run if any of these are true:
|
|
167
|
+
|
|
168
|
+
- A cause was named without a per-process measurement behind it
|
|
169
|
+
- A fix was credited with a drop that a workload change explains
|
|
170
|
+
- A hook or setting was changed without timing it before and after
|
|
171
|
+
- A worktree, exclusion, or user preference was changed without approval
|
|
172
|
+
- An exclusion or policy was reported as working without a probe that proves it
|
|
173
|
+
|
|
174
|
+
## Report
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
| # | Finding | Measured | Fix | Status (fixed / ask / leave) |
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Then a before/after CPU table, the list of changed files with backups, and
|
|
181
|
+
what's left for the owner (admin prompts, committed config, preferences).
|