@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,221 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit-responsive
|
|
3
|
+
description: >
|
|
4
|
+
Audit and fix layouts at every breakpoint — desktop is not a wide phone. Use
|
|
5
|
+
when "responsive audit", desktop looks stacked or stretched, there is no
|
|
6
|
+
max-width, or 1440 looks like a phone. Touch-first build →
|
|
7
|
+
design-mobile-first.
|
|
8
|
+
license: MIT
|
|
9
|
+
effort: high
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# audit-responsive — Layout & breakpoint IA
|
|
13
|
+
|
|
14
|
+
**Degree of freedom: MIXED** — Phases 0–3 `[HIGH freedom]`; viewport
|
|
15
|
+
screenshot loop `[LOW freedom — run exactly]`; Phase 4 implement only after
|
|
16
|
+
the report (wait if scope is large).
|
|
17
|
+
|
|
18
|
+
> **Audit-and-fix exception.** Report first; then implement. Not present-then-stop.
|
|
19
|
+
|
|
20
|
+
**Desktop is not a wide phone.** Responsive means groups reflow, controls size to
|
|
21
|
+
function, and reading columns cap. A 1440px screenshot that looks like a stretched
|
|
22
|
+
phone fails this skill.
|
|
23
|
+
|
|
24
|
+
**Before ANY browser interaction, read `protocol-browser-anti-stall`.**
|
|
25
|
+
|
|
26
|
+
> **Report-first.** Findings + token sheet + ASCII wireframes first. If the scope
|
|
27
|
+
> is large, wait for approval before Phase 4. Then implement in reviewable chunks.
|
|
28
|
+
> Optional path scope: `$ARGUMENTS` or a path the user named
|
|
29
|
+
> (e.g. `src/pages/dashboard`).
|
|
30
|
+
|
|
31
|
+
## This skill vs neighbors
|
|
32
|
+
|
|
33
|
+
| Skill | Owns |
|
|
34
|
+
|---|---|
|
|
35
|
+
| **audit-responsive** (this) | Layout reflow + page-level IA at 375 / 768 / 1440 |
|
|
36
|
+
| `design-mobile-first` | Touch, safe areas, gestures — mobile-up, not "unstack desktop" |
|
|
37
|
+
| `audit-ux-journeys` | Cross-page stories, nav findability |
|
|
38
|
+
| `audit-ux` | Per-page heuristics and microcopy |
|
|
39
|
+
| `audit-uiux-design-system` | Tokens, components, visual drift |
|
|
40
|
+
| `plan-uiux-unification` | Full DS unification plan — no code |
|
|
41
|
+
| `enhance-web-ui` / `enhance-web-ux` | Polish after the layout contract exists |
|
|
42
|
+
|
|
43
|
+
## How to reason
|
|
44
|
+
|
|
45
|
+
1. **Observe** — quote the container/grid and the 375 / 768 / 1440 screenshots
|
|
46
|
+
2. **Interpret** — did groups reflow, or is 1440 a stretched phone?
|
|
47
|
+
3. **Classify** — anti-pattern # (1–10) / present-and-correct
|
|
48
|
+
4. **Severity** — stretched-phone 1440 = blocker for that page
|
|
49
|
+
|
|
50
|
+
## Worked example
|
|
51
|
+
|
|
52
|
+
> **Observe:** Dashboard at 1440: single column, full-width buttons, no
|
|
53
|
+
> `max-w-*`. Screenshot matches the 375 stack scaled up.
|
|
54
|
+
> **Interpret:** desktop is a wide phone — groups that compare (stats, list+detail)
|
|
55
|
+
> never sit side-by-side.
|
|
56
|
+
> **Classify:** anti-patterns 1, 2, 3 — blocker.
|
|
57
|
+
> **Finding:** `app/dashboard/page.tsx` | #1+#2+#3 | blocker | add page
|
|
58
|
+
> max-width; 12-col stats + list+detail at ≥1024
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Phase 0 — Detect the stack (do not assume) [HIGH freedom]
|
|
63
|
+
|
|
64
|
+
Inspect the scoped UI and record:
|
|
65
|
+
|
|
66
|
+
- **Framework:** React / Next / Vue / Nuxt / Svelte / Angular / HTML / server templates
|
|
67
|
+
- **Styling:** Tailwind / CSS Modules / styled-components / SCSS / vanilla / UI library
|
|
68
|
+
- **Tokens already in repo:** breakpoints, spacing, type, colors, container widths, icon set
|
|
69
|
+
- **Underused system:** a design system or component library installed but ignored
|
|
70
|
+
|
|
71
|
+
All fixes use the repo's conventions. Never add a styling system unless none exists —
|
|
72
|
+
then propose the lightest fit and ask before adding a dependency.
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Framework + styling signals
|
|
76
|
+
rg -l '"next"|"react"|"vue"|"svelte"|"@angular"' package.json
|
|
77
|
+
rg -l 'tailwindcss|styled-components|@emotion|@mui/material|@chakra-ui|@radix-ui' package.json
|
|
78
|
+
# Tokens / containers / breakpoints
|
|
79
|
+
rg -n "screens|breakpoints|max-w-|container|@theme|--spacing" -g '*.{css,ts,js,mjs}' -g '!node_modules' | head -40
|
|
80
|
+
# Icon set already in use
|
|
81
|
+
rg -n "from 'lucide-react'|from '@heroicons'|from 'react-icons'|phosphor" -g '*.{tsx,jsx,vue,svelte}' | head -20
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Phase 1 — Audit the 10 anti-patterns [HIGH freedom; screenshot loop = LOW]
|
|
87
|
+
|
|
88
|
+
Scan scoped pages, views, screens, and major layout components. Full signals and
|
|
89
|
+
pass/fail cues: [references/checklist.md](references/checklist.md).
|
|
90
|
+
|
|
91
|
+
| # | Anti-pattern | Fail when |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| 1 | **No max-width container** | Content or text edge-to-edge at desktop. Cap layouts ~1140–1280px; reading ~640–720px / 65–75ch |
|
|
94
|
+
| 2 | **Single-column everything** | Vertical stack at ≥1024px when groups belong side-by-side (form+summary, list+detail, comparable stats, media+text) |
|
|
95
|
+
| 3 | **Stretched interactive elements** | Full-width buttons, inputs, or cards at desktop. Full-width is a mobile pattern |
|
|
96
|
+
| 4 | **No visual hierarchy** | Headings, body, labels, captions near-identical size/weight; everything left-aligned by default, not by decision |
|
|
97
|
+
| 5 | **No spacing system** | Arbitrary 13/22/37px gaps instead of the repo's 4/8 scale |
|
|
98
|
+
| 6 | **No grouping / IA** | Related data unclustered; unrelated data merged; flat lists where table/grid/master-detail fits |
|
|
99
|
+
| 7 | **Missing or mixed icons** | Text-only nav/status/actions, or mixed icon libraries/styles |
|
|
100
|
+
| 8 | **Breakpoint gaps** | Styles for one width only; abandoned at 768 (tablet) or 1440 (desktop) |
|
|
101
|
+
| 9 | **Typography defaults** | Browser font stack/size, no type scale, line length >~80ch, cramped body line-height |
|
|
102
|
+
| 10 | **Table/data misuse** | Tabular data as stacked cards on desktop, or wide tables with no mobile strategy |
|
|
103
|
+
|
|
104
|
+
Each finding: `file:line` · anti-pattern # · one-line description · severity
|
|
105
|
+
(`blocker` / `major` / `minor`).
|
|
106
|
+
|
|
107
|
+
Live evidence — resize **before** `goto` (viewport persists across navigation):
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
PW="npx --yes @playwright/cli@latest"; S="-s=responsive-audit"
|
|
111
|
+
$PW $S open --headed "<app-url>"
|
|
112
|
+
for wh in "375 812" "768 1024" "1440 900"; do
|
|
113
|
+
$PW $S resize $wh
|
|
114
|
+
$PW $S goto "<route>"
|
|
115
|
+
sleep 2 && $PW $S snapshot
|
|
116
|
+
$PW $S screenshot --filename ".playwright-mcp/responsive-<route>-${wh// /x}.png"
|
|
117
|
+
done
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
If the 1440 screenshot is a stretched phone, that is a **blocker** for the page.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Phase 2 — Extract or propose the token sheet [HIGH freedom]
|
|
125
|
+
|
|
126
|
+
Before fixing, produce a sheet. If the repo already has tokens, **use them
|
|
127
|
+
verbatim** and flag violations — do not invent a second scale.
|
|
128
|
+
|
|
129
|
+
| Token | Default if the repo has none (mark as *proposed*) |
|
|
130
|
+
|---|---|
|
|
131
|
+
| Breakpoints | mobile <640 · tablet 640–1023 · desktop ≥1024 |
|
|
132
|
+
| Containers | page max-width · content max-width · reading max-width |
|
|
133
|
+
| Grid | 12-column mental model; how each group maps at each breakpoint |
|
|
134
|
+
| Spacing | 4 / 8 / 12 / 16 / 24 / 32 / 48 / 64 |
|
|
135
|
+
| Type | 12 / 14 / 16 / 20 / 24 / 32 + weight + use (caption / label / body / h3 / h2 / h1) |
|
|
136
|
+
| Icons | one library; 16 inline · 20 controls · 24 nav |
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Phase 3 — Information architecture before pixels [HIGH freedom]
|
|
141
|
+
|
|
142
|
+
For each flagged page/screen:
|
|
143
|
+
|
|
144
|
+
1. List content blocks. Classify each: **primary** (why the page exists),
|
|
145
|
+
**secondary** (supporting), **metadata** (timestamps, IDs, status).
|
|
146
|
+
2. Group related blocks; name each group.
|
|
147
|
+
3. Sketch ASCII wireframes at **375 / 768 / 1440** showing how groups reflow
|
|
148
|
+
(sidebar → tabs; 3-up stats → 1-col; master-detail → list → push).
|
|
149
|
+
Templates: [references/checklist.md](references/checklist.md#wireframes).
|
|
150
|
+
4. Only then write code. The wireframe is the contract; CSS implements it.
|
|
151
|
+
|
|
152
|
+
Use **real content** from the codebase — never invented examples.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Phase 4 — Implement [LOW freedom — after the report; repo tokens only]
|
|
157
|
+
|
|
158
|
+
- Native responsive primitives: CSS grid/flex + media or container queries;
|
|
159
|
+
Tailwind prefixes; framework grid components.
|
|
160
|
+
- Prefer **container queries** when a component is reused across contexts and
|
|
161
|
+
the stack supports them.
|
|
162
|
+
- Mobile-first CSS: base = mobile, enhance upward.
|
|
163
|
+
- Preserve semantics and a11y: heading levels match visual hierarchy, visible
|
|
164
|
+
focus, touch targets ≥44px on mobile, `prefers-reduced-motion` respected.
|
|
165
|
+
- Diff scope: layout / hierarchy / spacing / type only. Do not restyle brand
|
|
166
|
+
colors or rewrite copy unless copy blocks hierarchy.
|
|
167
|
+
|
|
168
|
+
Chunk by severity into reviewable PRs. After each chunk, re-run the 375 / 768 /
|
|
169
|
+
1440 screenshot loop on touched routes.
|
|
170
|
+
|
|
171
|
+
Hand off leftover polish (motion, microcopy, token drift) — do not absorb it.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Definition of Done — verify at 375 / 768 / 1440
|
|
176
|
+
|
|
177
|
+
- [ ] 1440: no content or control spans the full viewport; page has a max-width container
|
|
178
|
+
- [ ] Related information is grouped; groups sit side-by-side where comparison or context helps
|
|
179
|
+
- [ ] **5-second glance:** primary content, page purpose, and next action are obvious without reading
|
|
180
|
+
- [ ] Spacing values come from the scale; font sizes come from the type scale
|
|
181
|
+
- [ ] Icons from one set, used to aid scanning (status, nav, actions)
|
|
182
|
+
- [ ] Body line length ≤ ~75ch; paragraph line-height ≥ 1.5
|
|
183
|
+
- [ ] No horizontal overflow at 375; touch targets ≥44px; tables have a defined mobile strategy
|
|
184
|
+
- [ ] Layout **meaningfully differs** between 375 and 1440 — a stretched-phone 1440 fails
|
|
185
|
+
|
|
186
|
+
## Self-critique before reporting [LOW freedom — do not skip]
|
|
187
|
+
|
|
188
|
+
1. **Three viewports** — no "done" from code inspection alone
|
|
189
|
+
2. **Repo tokens first** — do not invent a second scale
|
|
190
|
+
3. **Wireframe before CSS** — Phase 3 is the contract
|
|
191
|
+
4. **Right owner** — touch/gestures → `design-mobile-first`; empty states → `audit-ui-states`
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Output format
|
|
196
|
+
|
|
197
|
+
1. **Findings table** — `file:line` | anti-pattern | severity | one-line fix
|
|
198
|
+
2. **Token sheet** — extracted or proposed (mark which)
|
|
199
|
+
3. **Per-screen wireframes** — 375 / 768 / 1440, ASCII
|
|
200
|
+
4. **Fix plan** — severity order, PR-sized chunks
|
|
201
|
+
5. Then implement chunk by chunk (or wait if the user is reviewing 1–4)
|
|
202
|
+
|
|
203
|
+
**Forbidden:** inventing a new design system when one exists; stacking a
|
|
204
|
+
desktop skin on a single-column DOM; claiming done from code inspection
|
|
205
|
+
without the three viewport screenshots; routing a linearized-desktop complaint
|
|
206
|
+
to `design-mobile-first`.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Related
|
|
211
|
+
|
|
212
|
+
- `design-mobile-first` — touch / safe-area / gesture; the mobile-up counterpart
|
|
213
|
+
- `plan-uiux-unification` — whole-repo DS + IA plan when the system itself is the problem
|
|
214
|
+
- `audit-uiux-design-system` — token/component compliance after layout is fixed
|
|
215
|
+
- `audit-ux` / `audit-ux-journeys` — heuristics and cross-page IA (not breakpoint layout)
|
|
216
|
+
- `enhance-web-ui` / `enhance-web-ux` — polish once the wireframe is implemented
|
|
217
|
+
- `housekeep-design` — competing token/component SSOTs
|
|
218
|
+
- `audit-accessibility` — WCAG after reflow (focus order, target size)
|
|
219
|
+
- `audit-ui-states` — empty/error/offline matrix (not breakpoint layout)
|
|
220
|
+
- `test-visual-regression` — lock the 375 / 768 / 1440 baselines
|
|
221
|
+
- `test-playwright` — regression coverage for the new layouts
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# audit-responsive — anti-pattern signals & wireframe templates
|
|
2
|
+
|
|
3
|
+
Loaded from `audit-responsive` Phase 1 and Phase 3. Do not invent a second
|
|
4
|
+
scale — if the repo already defines tokens, substitute those numbers below.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Anti-pattern signals
|
|
9
|
+
|
|
10
|
+
Search the scoped UI. Cite `file:line`. Severity: **blocker** (1440 is a
|
|
11
|
+
stretched phone, or primary task unusable) · **major** (hierarchy/IA broken at
|
|
12
|
+
one breakpoint) · **minor** (inconsistent scale, mixed icons).
|
|
13
|
+
|
|
14
|
+
### 1. No max-width container
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
rg -n "w-full|w-screen|max-w-none|width:\s*100%" -g '*.{tsx,jsx,vue,svelte,css}'
|
|
18
|
+
rg -n "max-w-(sm|md|lg|xl|2xl|3xl|4xl|5xl|6xl|7xl|prose)|max-w-\[" -g '*.{tsx,jsx,vue,svelte}'
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Fail:** a page root or reading column has no `max-width` / `max-w-*` and
|
|
22
|
+
stretches with the viewport past ~1280px. **Pass:** layout shell caps
|
|
23
|
+
~1140–1280px (or the repo token); body copy caps ~65–75ch.
|
|
24
|
+
|
|
25
|
+
### 2. Single-column everything
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
rg -n "flex-col|grid-cols-1|space-y-|stack" -g '*.{tsx,jsx,vue,svelte}'
|
|
29
|
+
rg -n "md:grid-cols|lg:grid-cols|md:flex-row|lg:flex-row|sm:grid-cols" -g '*.{tsx,jsx,vue,svelte}'
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Fail:** at ≥1024px the page is still one column when it contains groups that
|
|
33
|
+
invite comparison or context (form + summary, list + detail, 3+ stat cards,
|
|
34
|
+
media + text). **Pass:** those groups sit side-by-side at desktop; they stack
|
|
35
|
+
only below the tablet breakpoint.
|
|
36
|
+
|
|
37
|
+
### 3. Stretched interactive elements
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
rg -n "w-full.*(Button|button|input|Input)|className=.*w-full" -g '*.{tsx,jsx,vue,svelte}'
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Fail:** primary buttons, text inputs, or cards are `w-full` with no
|
|
44
|
+
`sm:`/`md:` constraint, so they span the desktop column. **Pass:** mobile may
|
|
45
|
+
be full-bleed; desktop controls size to content or a defined field width
|
|
46
|
+
(often `max-w-sm` / `max-w-md` for inputs).
|
|
47
|
+
|
|
48
|
+
### 4. No visual hierarchy
|
|
49
|
+
|
|
50
|
+
Look at the 1440 screenshot for 5 seconds. If you cannot name the page purpose
|
|
51
|
+
and the next action, this fails.
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
rg -n "text-(xs|sm|base|lg|xl|2xl|3xl)|font-(normal|medium|semibold|bold)" -g '*.{tsx,jsx,vue,svelte}' | head -40
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Fail:** heading / body / label / caption rendered at near-identical size and
|
|
58
|
+
weight; everything left-aligned because that was the default, not a decision.
|
|
59
|
+
**Pass:** a readable primary → secondary → metadata scale; alignment is chosen
|
|
60
|
+
(start / center / end / grid) per group.
|
|
61
|
+
|
|
62
|
+
### 5. No spacing system
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
rg -n "\\b(p|m|gap|space-[xy])-\\[" -g '*.{tsx,jsx,vue,svelte,css}'
|
|
66
|
+
rg -n "padding:\\s*[0-9]+px|margin:\\s*[0-9]+px" -g '*.{tsx,jsx,vue,svelte,css}'
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Fail:** one-off values (13px, 22px, 37px, `p-[13px]`) next to equivalent
|
|
70
|
+
elements that use a different gap. **Pass:** all spacing from the repo scale
|
|
71
|
+
(or the Phase 2 proposed 4/8 scale).
|
|
72
|
+
|
|
73
|
+
### 6. No grouping / information architecture
|
|
74
|
+
|
|
75
|
+
Walk the page's DOM sections and the 1440 screenshot. Name each visual group.
|
|
76
|
+
If you cannot, or if unrelated fields share a card while related ones sit
|
|
77
|
+
pages apart, this fails.
|
|
78
|
+
|
|
79
|
+
**Fail:** long flat lists where a table, 2–3 column grid, or master-detail
|
|
80
|
+
fits; no fieldsets/sections; status + title + timestamp not clustered.
|
|
81
|
+
**Pass:** named groups; related data shares a region; layout matches the
|
|
82
|
+
Phase 3 wireframe.
|
|
83
|
+
|
|
84
|
+
### 7. Missing or mixed iconography
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
rg -n "from 'lucide-react'|from '@heroicons'|from 'react-icons'|from '@phosphor-icons'|material-symbols" -g '*.{tsx,jsx,vue,svelte}'
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Fail:** two or more icon libraries; or nav/status/actions are text-only
|
|
91
|
+
where a consistent set would aid scanning. **Pass:** one library, one size
|
|
92
|
+
grammar (16 inline / 20 controls / 24 nav, or the repo's).
|
|
93
|
+
|
|
94
|
+
### 8. Breakpoint gaps
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
rg -n "sm:|md:|lg:|xl:|2xl:|@media|@container" -g '*.{tsx,jsx,vue,svelte,css}' | head -40
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Fail:** only a mobile base, or only a desktop layout, with no tablet
|
|
101
|
+
treatment; 768px screenshot looks abandoned (overflow, crushed columns, or
|
|
102
|
+
still a phone stack). **Pass:** 375, 768, and 1440 each have an intentional
|
|
103
|
+
layout — not leftover.
|
|
104
|
+
|
|
105
|
+
### 9. Typography defaults
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
rg -n "font-sans|font-serif|font-mono|--font-|fontFamily|line-height|leading-" -g '*.{tsx,jsx,vue,svelte,css}' | head -30
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Fail:** no type scale (browser defaults), body measure >~80ch, paragraph
|
|
112
|
+
`line-height` < 1.5. **Pass:** sizes from the sheet; reading column ≤75ch;
|
|
113
|
+
body leading ≥ 1.5.
|
|
114
|
+
|
|
115
|
+
### 10. Table / data misuse
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
rg -n "<table|role=\"table\"|overflow-x-auto|md:hidden|hidden md:table" -g '*.{tsx,jsx,vue,svelte}'
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Fail:** tabular data rendered only as stacked cards at 1440; or a wide
|
|
122
|
+
`<table>` with no mobile strategy (horizontal scroll, column priority, or
|
|
123
|
+
card collapse). **Pass:** desktop uses a table or dense grid; 375 has an
|
|
124
|
+
explicit strategy.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Wireframes
|
|
129
|
+
|
|
130
|
+
For each flagged screen, copy this block and fill it with **real** groups from
|
|
131
|
+
the page (names from Phase 3). Do not invent content.
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
PAGE: <route> — primary: <why this page exists>
|
|
135
|
+
|
|
136
|
+
375
|
|
137
|
+
┌─────────────────────┐
|
|
138
|
+
│ [nav / title] │
|
|
139
|
+
│ ┌─────────────────┐ │
|
|
140
|
+
│ │ PRIMARY │ │
|
|
141
|
+
│ └─────────────────┘ │
|
|
142
|
+
│ ┌─────────────────┐ │
|
|
143
|
+
│ │ SECONDARY │ │
|
|
144
|
+
│ └─────────────────┘ │
|
|
145
|
+
│ [metadata] │
|
|
146
|
+
└─────────────────────┘
|
|
147
|
+
|
|
148
|
+
768
|
|
149
|
+
┌──────────────┬──────────────┐
|
|
150
|
+
│ PRIMARY │ SECONDARY │
|
|
151
|
+
│ │ metadata │
|
|
152
|
+
└──────────────┴──────────────┘
|
|
153
|
+
|
|
154
|
+
1440
|
|
155
|
+
┌──────┬────────────────┬──────────┐
|
|
156
|
+
│ nav │ PRIMARY │ SECONDARY│
|
|
157
|
+
│ │ │ metadata │
|
|
158
|
+
└──────┴────────────────┴──────────┘
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Reflow examples (pick what the content actually needs):
|
|
162
|
+
|
|
163
|
+
- Sidebar → top tabs at 375
|
|
164
|
+
- 3-up stat cards → 1-col stack at 375, 2-col at 768, 3-col at 1440
|
|
165
|
+
- Master-detail → list, then push view at 375; split pane at 1440
|
|
166
|
+
- Form + summary → stacked at 375; 2/3 + 1/3 at 1440
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit-security
|
|
3
|
+
description: >
|
|
4
|
+
Audit and fix app code against OWASP (injection, headers, dependencies). Use
|
|
5
|
+
when "review security" or "check vulnerabilities". Auth gates →
|
|
6
|
+
audit-auth-flows. Plan-only → plan-security-audit. RLS → plan-rls-audit. LLM
|
|
7
|
+
→ audit-llm-security.
|
|
8
|
+
license: MIT
|
|
9
|
+
effort: high
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Security Audit Skill
|
|
13
|
+
|
|
14
|
+
**Degree of freedom: MIXED** — Steps 0–4 judgment `[HIGH freedom]`;
|
|
15
|
+
dependency and secret scans `[LOW freedom — run exactly]`. Never write
|
|
16
|
+
exploit PoCs.
|
|
17
|
+
|
|
18
|
+
> **Audit-and-fix exception.** May fix inline. Plan-only burndown → `plan-security-audit`.
|
|
19
|
+
> When fixing inline: patch the evidenced sink only, in place; unrelated weaknesses you notice go in the report as findings, not fixes. Add a test only where the repo already keeps security tests or the task asks. Auth behavior, RLS, secrets rotation, payments, and migrations stay STOP-and-confirm.
|
|
20
|
+
|
|
21
|
+
OWASP static review (injection, headers, deps). Session / route×gate /
|
|
22
|
+
`getSession()` → `audit-auth-flows`. Next.js 16: grep `middleware.ts` **and**
|
|
23
|
+
`proxy.ts` — a route gate can live in either file, and the proxy layer has its own bypass class.
|
|
24
|
+
|
|
25
|
+
## How to reason
|
|
26
|
+
|
|
27
|
+
1. **Observe** — quote the sink or missing check (`file:line`)
|
|
28
|
+
2. **Interpret** — can untrusted input reach a query, HTML, or object-id?
|
|
29
|
+
3. **Classify** — injection / IDOR / secret / header / dep-CVE / hand-off
|
|
30
|
+
4. **Severity** — exploitable data access or hardcoded secret = Critical
|
|
31
|
+
|
|
32
|
+
## Worked example
|
|
33
|
+
|
|
34
|
+
> **Observe:** `GET /documents/:id` loads by id only (`api/docs/route.ts:18`).
|
|
35
|
+
> **Interpret:** any caller who can hit the route reads another user's doc.
|
|
36
|
+
> **Classify:** IDOR.
|
|
37
|
+
> **Severity:** Critical.
|
|
38
|
+
> **Finding:** IDOR | `/documents/:id` | add `userId` predicate.
|
|
39
|
+
> Matcher / `getSession()` on that route → `audit-auth-flows`, not this checklist.
|
|
40
|
+
|
|
41
|
+
## Step 0: Understand the Project [HIGH freedom]
|
|
42
|
+
|
|
43
|
+
Before auditing, discover the tech stack and attack surface:
|
|
44
|
+
|
|
45
|
+
1. Read `package.json` / `requirements.txt` / `go.mod` to identify:
|
|
46
|
+
- Auth library (next-auth, passport, supabase-auth, django-auth, etc.)
|
|
47
|
+
- Database ORM (Prisma, Sequelize, SQLAlchemy, etc.)
|
|
48
|
+
- HTTP framework (Express, Fastify, Django, Flask, etc.)
|
|
49
|
+
- Any security-specific packages (helmet, cors, csurf, rate-limit, etc.)
|
|
50
|
+
|
|
51
|
+
2. Identify the auth pattern:
|
|
52
|
+
- Session-based vs JWT vs OAuth
|
|
53
|
+
- Where tokens are stored (cookies, localStorage, headers)
|
|
54
|
+
- How permissions/roles are enforced
|
|
55
|
+
|
|
56
|
+
3. Identify the data flow:
|
|
57
|
+
- Where user input enters the system
|
|
58
|
+
- How data is validated and sanitized
|
|
59
|
+
- How data reaches the database
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Step 1: Research Current Threats [HIGH freedom]
|
|
64
|
+
|
|
65
|
+
Fetch current OWASP and security best practices for the detected stack:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
firecrawl:firecrawl_search
|
|
69
|
+
{
|
|
70
|
+
"query": "<framework> security best practices OWASP <current year>",
|
|
71
|
+
"limit": 5,
|
|
72
|
+
"sources": [{ "type": "web" }]
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Scrape the OWASP Top 10 for the relevant platform:
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
firecrawl:firecrawl_scrape
|
|
80
|
+
{
|
|
81
|
+
"url": "https://owasp.org/Top10/",
|
|
82
|
+
"formats": ["markdown"],
|
|
83
|
+
"onlyMainContent": true
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Also check for known CVEs in dependencies:
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
firecrawl:firecrawl_search
|
|
91
|
+
{
|
|
92
|
+
"query": "<package-name> CVE vulnerability <current year>",
|
|
93
|
+
"limit": 5,
|
|
94
|
+
"sources": [{ "type": "web" }]
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Step 2: Check Production Security Errors (Sentry) [HIGH freedom]
|
|
101
|
+
|
|
102
|
+
If Sentry is configured, check for security-related production errors:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
sentry:search_issues
|
|
106
|
+
{
|
|
107
|
+
"organizationSlug": "<ORG_SLUG>",
|
|
108
|
+
"query": "401 unauthorized OR 403 forbidden OR CORS OR CSP violation in last 30 days",
|
|
109
|
+
"projectSlugOrId": "<PROJECT_SLUG>",
|
|
110
|
+
"regionUrl": "<REGION_URL>",
|
|
111
|
+
"limit": 20
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Patterns that indicate security findings:
|
|
116
|
+
- Frequent 401/403 errors → possible auth bypass attempts
|
|
117
|
+
- CORS errors from unexpected origins → misconfigured CORS
|
|
118
|
+
- CSP violations → potential XSS vectors
|
|
119
|
+
- Rate limit errors → possible brute force
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Step 3: Automated Code Scan [HIGH freedom]
|
|
124
|
+
|
|
125
|
+
### Authentication Audit
|
|
126
|
+
|
|
127
|
+
- [ ] Passwords hashed with bcrypt/argon2/scrypt (not MD5/SHA1/SHA256 for passwords)
|
|
128
|
+
- [ ] Session tokens are cryptographically random
|
|
129
|
+
- [ ] Sessions expire appropriately (idle timeout + absolute timeout)
|
|
130
|
+
- [ ] Password reset tokens are single-use and expire quickly
|
|
131
|
+
- [ ] MFA available for sensitive accounts
|
|
132
|
+
- [ ] Login rate limiting implemented
|
|
133
|
+
- [ ] Account lockout after repeated failed attempts
|
|
134
|
+
- [ ] OAuth state parameter validated (CSRF protection for OAuth flows)
|
|
135
|
+
- [ ] JWT secret is strong and stored in env vars (not hardcoded)
|
|
136
|
+
- [ ] JWT expiry is reasonable (access: 15min, refresh: 7d)
|
|
137
|
+
|
|
138
|
+
### Authorization Audit
|
|
139
|
+
|
|
140
|
+
- [ ] Every API endpoint checks permissions (not just authentication)
|
|
141
|
+
- [ ] No direct object references without ownership/permission check (IDOR)
|
|
142
|
+
- [ ] Role-based access properly enforced at the API layer (not just UI)
|
|
143
|
+
- [ ] Principle of least privilege followed
|
|
144
|
+
- [ ] Admin functions require elevated auth
|
|
145
|
+
- [ ] Row-Level Security (RLS) enabled for multi-tenant databases
|
|
146
|
+
- [ ] API keys scoped to minimum required permissions
|
|
147
|
+
|
|
148
|
+
### Input Validation Audit
|
|
149
|
+
|
|
150
|
+
- [ ] All user input validated server-side (client validation is UX only)
|
|
151
|
+
- [ ] Input sanitized before use in queries, HTML, commands
|
|
152
|
+
- [ ] File uploads validated: type (MIME + magic bytes), size, filename
|
|
153
|
+
- [ ] JSON/XML parsing has depth/size limits
|
|
154
|
+
- [ ] URL parameters decoded and validated
|
|
155
|
+
- [ ] No raw SQL concatenation (parameterized queries only)
|
|
156
|
+
- [ ] No `eval()`, `Function()`, `innerHTML` with user input
|
|
157
|
+
- [ ] No `dangerouslySetInnerHTML` without DOMPurify
|
|
158
|
+
|
|
159
|
+
### Data Protection Audit
|
|
160
|
+
|
|
161
|
+
- [ ] Sensitive data encrypted at rest
|
|
162
|
+
- [ ] TLS/HTTPS enforced (no HTTP fallback)
|
|
163
|
+
- [ ] Secrets not in code, git history, or logs
|
|
164
|
+
- [ ] PII handled according to applicable regulations (GDPR, CCPA)
|
|
165
|
+
- [ ] Database connections encrypted (SSL)
|
|
166
|
+
- [ ] API responses don't leak internal data (stack traces, SQL errors, file paths)
|
|
167
|
+
- [ ] Password fields use `type="password"` and `autocomplete="new-password"`
|
|
168
|
+
|
|
169
|
+
### Security Headers Audit
|
|
170
|
+
|
|
171
|
+
- [ ] `Strict-Transport-Security` (HSTS) with long max-age
|
|
172
|
+
- [ ] `Content-Security-Policy` (CSP) configured (not just `default-src *`)
|
|
173
|
+
- [ ] `X-Content-Type-Options: nosniff`
|
|
174
|
+
- [ ] `X-Frame-Options: DENY` or `SAMEORIGIN`
|
|
175
|
+
- [ ] `Referrer-Policy: strict-origin-when-cross-origin` or stricter
|
|
176
|
+
- [ ] `Permissions-Policy` restricting unnecessary browser features
|
|
177
|
+
- [ ] CORS `Access-Control-Allow-Origin` is NOT `*` for authenticated endpoints
|
|
178
|
+
- [ ] Cookies: `HttpOnly`, `Secure`, `SameSite=Strict` (or `Lax`)
|
|
179
|
+
|
|
180
|
+
### Dependency Audit [LOW freedom — run exactly]
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
npm audit # Node.js
|
|
184
|
+
pip-audit # Python
|
|
185
|
+
cargo audit # Rust
|
|
186
|
+
govulncheck ./... # Go
|
|
187
|
+
bundle audit # Ruby
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
- [ ] No known high/critical CVEs
|
|
191
|
+
- [ ] Dependencies reasonably up to date
|
|
192
|
+
- [ ] Lock file committed (`package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`)
|
|
193
|
+
- [ ] No unnecessary dependencies (smaller surface area)
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Step 4: Common Vulnerability Patterns [HIGH freedom]
|
|
198
|
+
|
|
199
|
+
Grep for the sinks, then read each hit in context:
|
|
200
|
+
|
|
201
|
+
- **SQL injection** — string interpolation into a query (`` `SELECT … ${ ``, `+ userId +`); parameterized or ORM calls pass
|
|
202
|
+
- **XSS** — `dangerouslySetInnerHTML` / `innerHTML` fed user input without `DOMPurify.sanitize`
|
|
203
|
+
- **IDOR** — a load by `req.params.id` with no owner predicate (`userId: req.user.id`) on the query
|
|
204
|
+
- **Sensitive data exposure** — `res.json(user)`-style whole-record responses instead of an explicit field pick
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Step 5: Environment and Secrets [LOW freedom — names/prefixes only]
|
|
209
|
+
|
|
210
|
+
### Scan for Hardcoded Secrets
|
|
211
|
+
|
|
212
|
+
Search the codebase for potential leaked secrets. Patterns to look for:
|
|
213
|
+
|
|
214
|
+
- Generic secret names: `api_key`, `apiKey`, `secret`, `password`, `token`, `credentials`, `private_key`
|
|
215
|
+
- Key prefixes: `sk-`, `pk-`, `ghp_`, `gho_`, `xox[bpsa]-`, `AKIA`
|
|
216
|
+
- Private key headers: `-----BEGIN (RSA|EC|OPENSSH) PRIVATE KEY-----`
|
|
217
|
+
|
|
218
|
+
### Verify .gitignore
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
.env, .env.local, .env.production
|
|
222
|
+
*.pem, *.key, *.p12
|
|
223
|
+
credentials.json, service-account.json
|
|
224
|
+
.sentryclirc (if it contains auth tokens)
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Validate Environment Variables
|
|
228
|
+
|
|
229
|
+
```typescript
|
|
230
|
+
import { z } from 'zod';
|
|
231
|
+
|
|
232
|
+
const envSchema = z.object({
|
|
233
|
+
DATABASE_URL: z.string().url(),
|
|
234
|
+
API_KEY: z.string().min(1),
|
|
235
|
+
JWT_SECRET: z.string().min(32),
|
|
236
|
+
SENTRY_DSN: z.string().url().optional(),
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
const env = envSchema.parse(process.env);
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Self-critique before applying fixes [LOW freedom — do not skip]
|
|
245
|
+
|
|
246
|
+
1. **Evidenced** — `file:line` or audit output, not "this might be injectable"
|
|
247
|
+
2. **Reproducible** — same sink still present; no exploit PoC written
|
|
248
|
+
3. **Severity justified** — Critical = demonstrated data access or leaked secret
|
|
249
|
+
4. **Right owner** — session/route×gate/`getSession` → `audit-auth-flows`; RLS → `plan-rls-audit`; LLM → `audit-llm-security`
|
|
250
|
+
5. **No-false-safety** — headers or middleware alone ≠ authorization
|
|
251
|
+
|
|
252
|
+
## Output: Security Audit Report
|
|
253
|
+
|
|
254
|
+
```markdown
|
|
255
|
+
## Security Audit: [Project Name]
|
|
256
|
+
|
|
257
|
+
### Tech Stack
|
|
258
|
+
- Framework: [name + version]
|
|
259
|
+
- Auth: [library + pattern]
|
|
260
|
+
- Database: [ORM + provider]
|
|
261
|
+
- Security packages: [list]
|
|
262
|
+
|
|
263
|
+
### Critical Issues (must fix)
|
|
264
|
+
| # | Category | Finding | File | Recommendation |
|
|
265
|
+
|---|----------|---------|------|----------------|
|
|
266
|
+
| 1 | Auth | JWT secret hardcoded | config.ts:12 | Move to env var |
|
|
267
|
+
|
|
268
|
+
### High Risk (should fix soon)
|
|
269
|
+
| # | Category | Finding | File | Recommendation |
|
|
270
|
+
|---|----------|---------|------|----------------|
|
|
271
|
+
|
|
272
|
+
### Medium Risk (improve when possible)
|
|
273
|
+
| # | Category | Finding | File | Recommendation |
|
|
274
|
+
|---|----------|---------|------|----------------|
|
|
275
|
+
|
|
276
|
+
### Passed Checks
|
|
277
|
+
- [list of security areas that are properly implemented]
|
|
278
|
+
|
|
279
|
+
### Dependencies
|
|
280
|
+
- Critical CVEs: [count] — [details]
|
|
281
|
+
- High CVEs: [count]
|
|
282
|
+
- Outdated packages: [count]
|
|
283
|
+
|
|
284
|
+
### Research Sources
|
|
285
|
+
- [URL] — [what it confirmed or revealed]
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Session / route×gate / `getSession()` findings belong on `audit-auth-flows`,
|
|
289
|
+
not in this OWASP checklist.
|