@kensaurus/skills 0.0.0-stage → 2.0.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.
Files changed (423) hide show
  1. package/.claude-plugin/marketplace.json +53 -0
  2. package/.claude-plugin/plugin.json +40 -0
  3. package/.cursor-plugin/plugin.json +38 -0
  4. package/.mcp.json +28 -0
  5. package/CHANGELOG.md +1761 -0
  6. package/LICENSE +21 -0
  7. package/NOTICE +13 -0
  8. package/README.md +820 -2
  9. package/SECURITY.md +55 -0
  10. package/agents/code-reviewer.md +60 -0
  11. package/agents/completion-judge.md +89 -0
  12. package/agents/db-migrator.md +125 -0
  13. package/agents/debugger.md +47 -0
  14. package/agents/deploy-checker.md +100 -0
  15. package/agents/perf-monitor.md +74 -0
  16. package/assets/favicon.png +0 -0
  17. package/assets/logo-light.png +0 -0
  18. package/assets/logo.png +0 -0
  19. package/assets/logo.svg +6 -0
  20. package/assets/og.png +0 -0
  21. package/bin/install.mjs +1127 -0
  22. package/bin/kenji.js +2 -0
  23. package/commands/adr.md +17 -0
  24. package/commands/aeo-plan.md +18 -0
  25. package/commands/arch-boundaries.md +17 -0
  26. package/commands/aso-plan.md +18 -0
  27. package/commands/auth-flows.md +19 -0
  28. package/commands/backup-plan.md +17 -0
  29. package/commands/burndown-full.md +25 -0
  30. package/commands/capacitor-plan.md +18 -0
  31. package/commands/codemod-safety.md +22 -0
  32. package/commands/commit.md +18 -0
  33. package/commands/complete-everything.md +40 -0
  34. package/commands/cost-plan.md +19 -0
  35. package/commands/deadcode-plan.md +26 -0
  36. package/commands/deadcode.md +32 -0
  37. package/commands/debug-issue.md +17 -0
  38. package/commands/deps-plan.md +18 -0
  39. package/commands/docs-plan.md +17 -0
  40. package/commands/doctrine.md +19 -0
  41. package/commands/error-plan.md +19 -0
  42. package/commands/feedback-to-closure.md +36 -0
  43. package/commands/fix-issue.md +76 -0
  44. package/commands/gate-logic.md +26 -0
  45. package/commands/green-repo.md +36 -0
  46. package/commands/grill-me.md +19 -0
  47. package/commands/gtm-plan.md +21 -0
  48. package/commands/gtm-weekly.md +17 -0
  49. package/commands/gtm.md +22 -0
  50. package/commands/handoff.md +15 -0
  51. package/commands/housekeep-backlog.md +18 -0
  52. package/commands/housekeep-files.md +22 -0
  53. package/commands/housekeep-gates.md +18 -0
  54. package/commands/instant-nav.md +11 -0
  55. package/commands/integrity-plan.md +19 -0
  56. package/commands/launch-kit.md +16 -0
  57. package/commands/mcp-guide.md +40 -0
  58. package/commands/mobile-plan.md +19 -0
  59. package/commands/native-rn-monorepo/README.md +78 -0
  60. package/commands/native-rn-monorepo/android-build.md +26 -0
  61. package/commands/native-rn-monorepo/android-install.md +32 -0
  62. package/commands/native-rn-monorepo/android-logcat.md +37 -0
  63. package/commands/native-rn-monorepo/ios-ci-logs.md +56 -0
  64. package/commands/native-rn-monorepo/ios-ci-status.md +52 -0
  65. package/commands/native-rn-monorepo/ios-ci-trigger.md +59 -0
  66. package/commands/native-rn-monorepo/rn-reset.md +50 -0
  67. package/commands/native-rn-monorepo/rn-ship-ios.md +67 -0
  68. package/commands/native-rn-monorepo/rn-verify.md +53 -0
  69. package/commands/perf-plan.md +18 -0
  70. package/commands/plan-mode.md +74 -0
  71. package/commands/pr.md +16 -0
  72. package/commands/pricing-plan.md +20 -0
  73. package/commands/privacy-plan.md +18 -0
  74. package/commands/readability.md +12 -0
  75. package/commands/readme.md +15 -0
  76. package/commands/refactor.md +15 -0
  77. package/commands/release-prep.md +17 -0
  78. package/commands/research.md +25 -0
  79. package/commands/responsive-audit.md +21 -0
  80. package/commands/review-code.md +18 -0
  81. package/commands/rls-plan.md +18 -0
  82. package/commands/secrets-plan.md +18 -0
  83. package/commands/security-plan.md +19 -0
  84. package/commands/ship-and-observe.md +36 -0
  85. package/commands/skill-conflicts.md +19 -0
  86. package/commands/slop-plan.md +18 -0
  87. package/commands/stub-plan.md +18 -0
  88. package/commands/test-mutation.md +16 -0
  89. package/commands/test-plan.md +17 -0
  90. package/commands/test.md +29 -0
  91. package/commands/thirdparty-web-interface-guidelines.md +185 -0
  92. package/commands/uiux-plan.md +18 -0
  93. package/commands/uiux.md +45 -0
  94. package/commands/update-deps.md +21 -0
  95. package/commands/validation-plan.md +19 -0
  96. package/commands-portable/fix-issue.md +72 -0
  97. package/commands-portable/plan-mode.md +92 -0
  98. package/commands-portable/research.md +91 -0
  99. package/docs/screenshots/README.md +5 -0
  100. package/docs/screenshots/audit-dark.png +0 -0
  101. package/docs/screenshots/build-dark.png +0 -0
  102. package/docs/screenshots/grill-dark.png +0 -0
  103. package/docs/screenshots/hero-dark.png +0 -0
  104. package/docs/screenshots/hero-light.png +0 -0
  105. package/docs/screenshots/ship-dark.png +0 -0
  106. package/docs/screenshots/src/showcase.html +320 -0
  107. package/hooks/completion-gate.mjs +258 -0
  108. package/hooks/cursor-hooks.json +13 -0
  109. package/hooks/hooks.json +15 -0
  110. package/install.sh +21 -0
  111. package/llms.txt +40 -0
  112. package/mcp/README.md +266 -0
  113. package/mcp/VERSIONS.md +41 -0
  114. package/mcp/mcp-full.json.template +124 -0
  115. package/mcp/mcp.json.template +29 -0
  116. package/mcp/pinned-versions.json +27 -0
  117. package/package.json +93 -4
  118. package/rules/approved-plan-execution.mdc +65 -0
  119. package/rules/full-stack-ship-discipline.mdc +37 -0
  120. package/rules/native-rn-monorepo/README.md +63 -0
  121. package/rules/native-rn-monorepo/_project.mdc +69 -0
  122. package/rules/native-rn-monorepo/native-android.mdc +72 -0
  123. package/rules/native-rn-monorepo/native-ios.mdc +61 -0
  124. package/rules/native-rn-monorepo/react-native-js.mdc +78 -0
  125. package/rules/native-rn-monorepo/web.mdc +60 -0
  126. package/rules/project-starter/components.mdc +54 -0
  127. package/rules/project-starter/data-fetching.mdc +77 -0
  128. package/rules/project-starter/git.mdc +41 -0
  129. package/rules/project-starter/supabase.mdc +37 -0
  130. package/rules/project-starter/tailwind.mdc +48 -0
  131. package/rules/project-starter/typescript.mdc +36 -0
  132. package/rules/project-starter/web-performance.mdc +42 -0
  133. package/rules/senior-engineer.mdc +30 -0
  134. package/rules/shell-first-search.mdc +19 -0
  135. package/rules/skill-workflows.mdc +35 -0
  136. package/rules/verification-before-completion.mdc +57 -0
  137. package/skills/audit-accessibility/SKILL.md +441 -0
  138. package/skills/audit-agent-speed/SKILL.md +181 -0
  139. package/skills/audit-agent-speed/scripts/stop-typecheck.mjs +151 -0
  140. package/skills/audit-analytics/SKILL.md +138 -0
  141. package/skills/audit-auth-flows/SKILL.md +267 -0
  142. package/skills/audit-backend-architecture/SKILL.md +266 -0
  143. package/skills/audit-backend-architecture/references/patterns.md +386 -0
  144. package/skills/audit-bundle-size/SKILL.md +296 -0
  145. package/skills/audit-cicd/SKILL.md +218 -0
  146. package/skills/audit-code-quality/SKILL.md +314 -0
  147. package/skills/audit-code-review/SKILL.md +289 -0
  148. package/skills/audit-codemod-safety/SKILL.md +159 -0
  149. package/skills/audit-db-schema/SKILL.md +465 -0
  150. package/skills/audit-db-schema/references/details.md +110 -0
  151. package/skills/audit-doctrine/SKILL.md +189 -0
  152. package/skills/audit-env-parity/SKILL.md +133 -0
  153. package/skills/audit-fe-api/SKILL.md +458 -0
  154. package/skills/audit-gate-logic/SKILL.md +219 -0
  155. package/skills/audit-i18n/SKILL.md +339 -0
  156. package/skills/audit-infra-cost/SKILL.md +142 -0
  157. package/skills/audit-langfuse-llm/SKILL.md +468 -0
  158. package/skills/audit-langfuse-llm/references/details.md +226 -0
  159. package/skills/audit-llm-security/SKILL.md +147 -0
  160. package/skills/audit-monetization-iap/SKILL.md +137 -0
  161. package/skills/audit-payment-system/SKILL.md +268 -0
  162. package/skills/audit-payment-system/references/checklist.md +283 -0
  163. package/skills/audit-performance/SKILL.md +383 -0
  164. package/skills/audit-performance/references/loading-priority-2026.md +81 -0
  165. package/skills/audit-realworld/SKILL.md +287 -0
  166. package/skills/audit-registry-listing/SKILL.md +122 -0
  167. package/skills/audit-resilience/SKILL.md +154 -0
  168. package/skills/audit-responsive/SKILL.md +221 -0
  169. package/skills/audit-responsive/references/checklist.md +166 -0
  170. package/skills/audit-security/SKILL.md +289 -0
  171. package/skills/audit-skill-conflicts/SKILL.md +178 -0
  172. package/skills/audit-ui-states/SKILL.md +146 -0
  173. package/skills/audit-uiux-design-system/SKILL.md +475 -0
  174. package/skills/audit-uiux-design-system/references/details.md +71 -0
  175. package/skills/audit-ux/SKILL.md +379 -0
  176. package/skills/audit-ux/references/details.md +245 -0
  177. package/skills/audit-ux-journeys/SKILL.md +215 -0
  178. package/skills/audit-ux-journeys/references/checklist.md +179 -0
  179. package/skills/backend-db-performance/SKILL.md +441 -0
  180. package/skills/backend-error-handling/SKILL.md +489 -0
  181. package/skills/backend-error-handling/references/details.md +58 -0
  182. package/skills/backend-observability/SKILL.md +88 -0
  183. package/skills/backend-patterns/SKILL.md +499 -0
  184. package/skills/backend-patterns/references/architecture-patterns.md +298 -0
  185. package/skills/backend-realtime/SKILL.md +403 -0
  186. package/skills/backend-realtime/references/patterns.md +74 -0
  187. package/skills/burndown-full/SKILL.md +174 -0
  188. package/skills/complete-everything/SKILL.md +295 -0
  189. package/skills/data-pipeline/SKILL.md +109 -0
  190. package/skills/data-visualization/SKILL.md +488 -0
  191. package/skills/debug-error/SKILL.md +322 -0
  192. package/skills/debug-fe-be-integration/SKILL.md +459 -0
  193. package/skills/debug-sentry-monitor/SKILL.md +497 -0
  194. package/skills/debug-sentry-monitor/references/details.md +165 -0
  195. package/skills/deploy-npm/SKILL.md +394 -0
  196. package/skills/deploy-npm/references/example-mushi-mushi.md +52 -0
  197. package/skills/deploy-verify/SKILL.md +489 -0
  198. package/skills/design-api/SKILL.md +379 -0
  199. package/skills/design-canvas/SKILL.md +155 -0
  200. package/skills/design-email/SKILL.md +370 -0
  201. package/skills/design-frontend/SKILL.md +143 -0
  202. package/skills/design-generative-art/SKILL.md +474 -0
  203. package/skills/design-mobile-first/SKILL.md +506 -0
  204. package/skills/design-motion/SKILL.md +333 -0
  205. package/skills/design-motion/references/delight-interactions.md +191 -0
  206. package/skills/design-prd/SKILL.md +443 -0
  207. package/skills/design-system/SKILL.md +457 -0
  208. package/skills/design-theme/SKILL.md +226 -0
  209. package/skills/design-theme/themes/tsumagoi-ranch.md +150 -0
  210. package/skills/docs-adr/SKILL.md +168 -0
  211. package/skills/docs-coauthor/SKILL.md +368 -0
  212. package/skills/docs-comparison-pages/SKILL.md +117 -0
  213. package/skills/docs-domain-modeling/SKILL.md +97 -0
  214. package/skills/docs-launch-kit/SKILL.md +139 -0
  215. package/skills/docs-writer/SKILL.md +469 -0
  216. package/skills/enhance-agent-guardrails/SKILL.md +164 -0
  217. package/skills/enhance-arch-boundaries/SKILL.md +154 -0
  218. package/skills/enhance-capacitor-ui/SKILL.md +463 -0
  219. package/skills/enhance-capacitor-ui/references/details.md +750 -0
  220. package/skills/enhance-email-deliverability/SKILL.md +143 -0
  221. package/skills/enhance-growth-loops/SKILL.md +122 -0
  222. package/skills/enhance-lifecycle-email/SKILL.md +130 -0
  223. package/skills/enhance-motion/SKILL.md +193 -0
  224. package/skills/enhance-onboarding/SKILL.md +148 -0
  225. package/skills/enhance-pwa/SKILL.md +304 -0
  226. package/skills/enhance-readability/SKILL.md +146 -0
  227. package/skills/enhance-readme/SKILL.md +496 -0
  228. package/skills/enhance-readme/package-lock.json +187 -0
  229. package/skills/enhance-readme/package.json +17 -0
  230. package/skills/enhance-readme/scripts/generate-readme-blocks.mjs +199 -0
  231. package/skills/enhance-readme/scripts/record-readme-tour.mjs +442 -0
  232. package/skills/enhance-skill-prompts/SKILL.md +167 -0
  233. package/skills/enhance-skill-prompts/references/exemplar-audit-auth-flows.md +311 -0
  234. package/skills/enhance-web-conversion/SKILL.md +155 -0
  235. package/skills/enhance-web-forms/SKILL.md +154 -0
  236. package/skills/enhance-web-instant-nav/SKILL.md +138 -0
  237. package/skills/enhance-web-instant-nav/references/bfcache-blockers.md +23 -0
  238. package/skills/enhance-web-instant-nav/references/early-hints.md +33 -0
  239. package/skills/enhance-web-instant-nav/references/speculation-rules.md +44 -0
  240. package/skills/enhance-web-landing/SKILL.md +459 -0
  241. package/skills/enhance-web-landing/references/details.md +773 -0
  242. package/skills/enhance-web-redesign/SKILL.md +228 -0
  243. package/skills/enhance-web-seo/SKILL.md +276 -0
  244. package/skills/enhance-web-ui/SKILL.md +473 -0
  245. package/skills/enhance-web-ui/references/details.md +674 -0
  246. package/skills/enhance-web-ux/HEURISTICS.md +242 -0
  247. package/skills/enhance-web-ux/PATTERNS.md +375 -0
  248. package/skills/enhance-web-ux/SKILL.md +464 -0
  249. package/skills/enhance-web-ux/examples.md +222 -0
  250. package/skills/enhance-web-ux/references/details.md +406 -0
  251. package/skills/enhance-web-web3d/SKILL.md +397 -0
  252. package/skills/enhance-web-web3d/references/css-canvas-effects.md +180 -0
  253. package/skills/handoff/SKILL.md +66 -0
  254. package/skills/housekeep-backlog/SKILL.md +149 -0
  255. package/skills/housekeep-dead-code/SKILL.md +387 -0
  256. package/skills/housekeep-dead-code/references/ratchet-ci.md +205 -0
  257. package/skills/housekeep-dead-code/references/supabase-hygiene.md +152 -0
  258. package/skills/housekeep-design/SKILL.md +207 -0
  259. package/skills/housekeep-files/SKILL.md +220 -0
  260. package/skills/housekeep-files/references/naming-and-catalog.md +86 -0
  261. package/skills/housekeep-files/scripts/housekeep-files.ps1 +360 -0
  262. package/skills/housekeep-files/scripts/housekeep-files.sh +238 -0
  263. package/skills/housekeep-gates/SKILL.md +174 -0
  264. package/skills/iterate-agent-harness/SKILL.md +137 -0
  265. package/skills/iterate-gtm-weekly/SKILL.md +103 -0
  266. package/skills/iterate-post-launch/SKILL.md +292 -0
  267. package/skills/meta-mcp-builder/SKILL.md +313 -0
  268. package/skills/meta-skill-creator/SKILL.md +304 -0
  269. package/skills/mobile-capacitor-platform/SKILL.md +104 -0
  270. package/skills/mobile-emulator-start/SKILL.md +296 -0
  271. package/skills/mobile-emulator-test/SKILL.md +491 -0
  272. package/skills/mobile-emulator-test/references/details.md +478 -0
  273. package/skills/mobile-rn-performance/SKILL.md +107 -0
  274. package/skills/mobile-rn-screen/SKILL.md +476 -0
  275. package/skills/mobile-rn-screen/references/details.md +785 -0
  276. package/skills/mushi-health/SKILL.md +206 -0
  277. package/skills/mushi-integration/SKILL.md +257 -0
  278. package/skills/plan-aeo-readiness/SKILL.md +166 -0
  279. package/skills/plan-antislop/SKILL.md +281 -0
  280. package/skills/plan-aso/SKILL.md +149 -0
  281. package/skills/plan-backup-dr/SKILL.md +131 -0
  282. package/skills/plan-capacitor-hardening/SKILL.md +217 -0
  283. package/skills/plan-data-integrity/SKILL.md +187 -0
  284. package/skills/plan-dead-code/SKILL.md +386 -0
  285. package/skills/plan-dead-code/references/knip-config.md +214 -0
  286. package/skills/plan-dead-code/references/output-templates.md +133 -0
  287. package/skills/plan-dead-code/references/preservation-contract.md +50 -0
  288. package/skills/plan-dead-code/references/residue-greps.md +84 -0
  289. package/skills/plan-dependency-provenance/SKILL.md +200 -0
  290. package/skills/plan-docs-sync/SKILL.md +143 -0
  291. package/skills/plan-docs-sync/references/drift-taxonomy.md +43 -0
  292. package/skills/plan-docs-sync/references/output-templates.md +33 -0
  293. package/skills/plan-docs-sync/references/preservation-contract.md +17 -0
  294. package/skills/plan-error-handling/SKILL.md +205 -0
  295. package/skills/plan-gtm/SKILL.md +276 -0
  296. package/skills/plan-gtm/references/benchmarks-2026.md +183 -0
  297. package/skills/plan-input-validation/SKILL.md +179 -0
  298. package/skills/plan-llm-cost-guardrails/SKILL.md +176 -0
  299. package/skills/plan-mobile-readiness/SKILL.md +171 -0
  300. package/skills/plan-perf-audit/SKILL.md +145 -0
  301. package/skills/plan-perf-audit/references/audit-scope.md +51 -0
  302. package/skills/plan-perf-audit/references/output-templates.md +33 -0
  303. package/skills/plan-perf-audit/references/preservation-contract.md +13 -0
  304. package/skills/plan-pricing/SKILL.md +173 -0
  305. package/skills/plan-privacy-compliance/SKILL.md +148 -0
  306. package/skills/plan-rls-audit/SKILL.md +231 -0
  307. package/skills/plan-secrets-audit/SKILL.md +181 -0
  308. package/skills/plan-security-audit/SKILL.md +168 -0
  309. package/skills/plan-security-audit/references/output-templates.md +36 -0
  310. package/skills/plan-security-audit/references/owasp-supabase-scope.md +55 -0
  311. package/skills/plan-security-audit/references/preservation-contract.md +18 -0
  312. package/skills/plan-stub-checker/SKILL.md +216 -0
  313. package/skills/plan-stub-checker/references/detection-methodology.md +75 -0
  314. package/skills/plan-stub-checker/references/detection-taxonomy.md +34 -0
  315. package/skills/plan-stub-checker/references/output-templates.md +63 -0
  316. package/skills/plan-stub-checker/references/preservation-contract.md +24 -0
  317. package/skills/plan-test-coverage/SKILL.md +170 -0
  318. package/skills/plan-test-coverage/references/methodology.md +54 -0
  319. package/skills/plan-test-coverage/references/output-templates.md +34 -0
  320. package/skills/plan-test-coverage/references/preservation-contract.md +15 -0
  321. package/skills/plan-uiux-unification/SKILL.md +230 -0
  322. package/skills/plan-uiux-unification/references/output-templates.md +67 -0
  323. package/skills/plan-uiux-unification/references/phase-workbook.md +85 -0
  324. package/skills/plan-uiux-unification/references/preservation-contract.md +24 -0
  325. package/skills/protocol-browser-anti-stall/SKILL.md +211 -0
  326. package/skills/protocol-browser-anti-stall/references/mcp-to-cli-map.md +113 -0
  327. package/skills/protocol-browser-anti-stall/references/playwright-session-coordination.md +170 -0
  328. package/skills/research/SKILL.md +422 -0
  329. package/skills/test-exploratory/SKILL.md +165 -0
  330. package/skills/test-exploratory/references/charter-template.md +29 -0
  331. package/skills/test-load/SKILL.md +126 -0
  332. package/skills/test-mutation/SKILL.md +160 -0
  333. package/skills/test-playwright/SKILL.md +354 -0
  334. package/skills/test-qa/SKILL.md +364 -0
  335. package/skills/test-qa/references/details.md +268 -0
  336. package/skills/test-red-team/SKILL.md +387 -0
  337. package/skills/test-red-team/references/owasp-attack-checklist.md +193 -0
  338. package/skills/test-unit/SKILL.md +259 -0
  339. package/skills/test-unit/references/details.md +267 -0
  340. package/skills/test-visual-regression/SKILL.md +132 -0
  341. package/skills/thirdparty-emil-design-eng/ATTRIBUTION.md +20 -0
  342. package/skills/thirdparty-emil-design-eng/SKILL.md +21 -0
  343. package/skills/thirdparty-emil-design-eng/references/emil-design-eng.md +676 -0
  344. package/skills/thirdparty-ui-ux-pro-max/ATTRIBUTION.md +22 -0
  345. package/skills/thirdparty-ui-ux-pro-max/SKILL.md +304 -0
  346. package/skills/thirdparty-ui-ux-pro-max/data/charts.csv +26 -0
  347. package/skills/thirdparty-ui-ux-pro-max/data/colors.csv +97 -0
  348. package/skills/thirdparty-ui-ux-pro-max/data/icons.csv +101 -0
  349. package/skills/thirdparty-ui-ux-pro-max/data/landing.csv +31 -0
  350. package/skills/thirdparty-ui-ux-pro-max/data/products.csv +97 -0
  351. package/skills/thirdparty-ui-ux-pro-max/data/react-performance.csv +45 -0
  352. package/skills/thirdparty-ui-ux-pro-max/data/stacks/astro.csv +54 -0
  353. package/skills/thirdparty-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  354. package/skills/thirdparty-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  355. package/skills/thirdparty-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  356. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  357. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  358. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  359. package/skills/thirdparty-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  360. package/skills/thirdparty-ui-ux-pro-max/data/stacks/react.csv +54 -0
  361. package/skills/thirdparty-ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  362. package/skills/thirdparty-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  363. package/skills/thirdparty-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  364. package/skills/thirdparty-ui-ux-pro-max/data/stacks/vue.csv +50 -0
  365. package/skills/thirdparty-ui-ux-pro-max/data/styles.csv +68 -0
  366. package/skills/thirdparty-ui-ux-pro-max/data/typography.csv +58 -0
  367. package/skills/thirdparty-ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  368. package/skills/thirdparty-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  369. package/skills/thirdparty-ui-ux-pro-max/data/web-interface.csv +31 -0
  370. package/skills/thirdparty-ui-ux-pro-max/scripts/core.py +253 -0
  371. package/skills/thirdparty-ui-ux-pro-max/scripts/design_system.py +1067 -0
  372. package/skills/thirdparty-ui-ux-pro-max/scripts/search.py +114 -0
  373. package/skills/thirdparty-web-interface-guidelines/ATTRIBUTION.md +23 -0
  374. package/skills/thirdparty-web-interface-guidelines/SKILL.md +190 -0
  375. package/skills/workflow-build-feature/SKILL.md +118 -0
  376. package/skills/workflow-coding-discipline/SKILL.md +140 -0
  377. package/skills/workflow-environment-ready/SKILL.md +128 -0
  378. package/skills/workflow-feature-flag/SKILL.md +262 -0
  379. package/skills/workflow-feedback-to-closure/SKILL.md +165 -0
  380. package/skills/workflow-fix-and-ship/SKILL.md +136 -0
  381. package/skills/workflow-git-commit/SKILL.md +200 -0
  382. package/skills/workflow-green-repo/SKILL.md +166 -0
  383. package/skills/workflow-grilling/SKILL.md +73 -0
  384. package/skills/workflow-gtm/SKILL.md +153 -0
  385. package/skills/workflow-housekeep/SKILL.md +453 -0
  386. package/skills/workflow-housekeep/references/templates.md +109 -0
  387. package/skills/workflow-launch-ready/SKILL.md +145 -0
  388. package/skills/workflow-merge-conflicts/SKILL.md +62 -0
  389. package/skills/workflow-onboard/SKILL.md +99 -0
  390. package/skills/workflow-parallel-agents/SKILL.md +164 -0
  391. package/skills/workflow-pr/SKILL.md +197 -0
  392. package/skills/workflow-quality-gate/SKILL.md +147 -0
  393. package/skills/workflow-refactor/SKILL.md +274 -0
  394. package/skills/workflow-release-prep/SKILL.md +207 -0
  395. package/skills/workflow-ship-and-observe/SKILL.md +164 -0
  396. package/skills/workflow-spec-tdd/SKILL.md +141 -0
  397. package/skills/workflow-spec-tdd/references/spec-template.md +126 -0
  398. package/skills/workflow-spec-tdd/references/tdd-patterns.md +167 -0
  399. package/skills-cursor/babysit/SKILL.md +17 -0
  400. package/skills-cursor/canvas/SKILL.md +142 -0
  401. package/skills-cursor/canvas/sdk/canvas-tokens.d.ts +235 -0
  402. package/skills-cursor/canvas/sdk/chart-primitives.d.ts +200 -0
  403. package/skills-cursor/canvas/sdk/dag-layout.d.ts +102 -0
  404. package/skills-cursor/canvas/sdk/diff-view.d.ts +130 -0
  405. package/skills-cursor/canvas/sdk/form-primitives.d.ts +194 -0
  406. package/skills-cursor/canvas/sdk/hooks.d.ts +117 -0
  407. package/skills-cursor/canvas/sdk/index.d.ts +47 -0
  408. package/skills-cursor/canvas/sdk/theme.d.ts +61 -0
  409. package/skills-cursor/canvas/sdk/todo-list.d.ts +49 -0
  410. package/skills-cursor/canvas/sdk/ui-primitives.d.ts +549 -0
  411. package/skills-cursor/canvas/sdk/ui-primitives.test.d.ts +2 -0
  412. package/skills-cursor/create-hook/SKILL.md +238 -0
  413. package/skills-cursor/create-rule/SKILL.md +185 -0
  414. package/skills-cursor/create-skill/SKILL.md +269 -0
  415. package/skills-cursor/create-skill/references/authoring-guide.md +182 -0
  416. package/skills-cursor/create-subagent/SKILL.md +228 -0
  417. package/skills-cursor/migrate-to-skills/SKILL.md +121 -0
  418. package/skills-cursor/shell/SKILL.md +22 -0
  419. package/skills-cursor/split-to-prs/SKILL.md +47 -0
  420. package/skills-cursor/statusline/SKILL.md +193 -0
  421. package/skills-cursor/update-cli-config/SKILL.md +85 -0
  422. package/skills-cursor/update-cursor-settings/SKILL.md +137 -0
  423. package/skills.sh.json +296 -0
@@ -0,0 +1,320 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=1600, initial-scale=1" />
6
+ <title>kenji — capability preview</title>
7
+ <style>
8
+ :root {
9
+ --bg: #0d1117;
10
+ --panel: #161b22;
11
+ --panel-2: #1c2128;
12
+ --ink: #e6edf3;
13
+ --muted: #8b949e;
14
+ --line: #30363d;
15
+ --you: #1f6feb;
16
+ --you-ink: #ffffff;
17
+ --ok: #3fb950;
18
+ --warn: #d29922;
19
+ --chip: #21262d;
20
+ --shadow: 0 18px 50px rgba(0, 0, 0, 0.35);
21
+ }
22
+ [data-theme="light"] {
23
+ --bg: #f6f8fa;
24
+ --panel: #ffffff;
25
+ --panel-2: #f6f8fa;
26
+ --ink: #1f2328;
27
+ --muted: #656d76;
28
+ --line: #d0d7de;
29
+ --you: #0969da;
30
+ --you-ink: #ffffff;
31
+ --ok: #1a7f37;
32
+ --warn: #9a6700;
33
+ --chip: #eef2f6;
34
+ --shadow: 0 18px 50px rgba(31, 35, 40, 0.08);
35
+ }
36
+ * { box-sizing: border-box; }
37
+ html, body {
38
+ margin: 0;
39
+ width: 1600px;
40
+ height: 1000px;
41
+ overflow: hidden;
42
+ background: var(--bg);
43
+ color: var(--ink);
44
+ font-family: "Segoe UI", ui-sans-serif, system-ui, sans-serif;
45
+ }
46
+ .frame {
47
+ width: 1600px;
48
+ height: 1000px;
49
+ padding: 48px 56px 40px;
50
+ display: flex;
51
+ flex-direction: column;
52
+ gap: 28px;
53
+ }
54
+ .top {
55
+ display: flex;
56
+ justify-content: space-between;
57
+ align-items: baseline;
58
+ }
59
+ .brand {
60
+ font-size: 28px;
61
+ font-weight: 700;
62
+ letter-spacing: -0.03em;
63
+ }
64
+ .brand span { color: var(--muted); font-weight: 500; }
65
+ .meta {
66
+ color: var(--muted);
67
+ font-size: 18px;
68
+ }
69
+ .headline {
70
+ font-size: 44px;
71
+ font-weight: 700;
72
+ letter-spacing: -0.035em;
73
+ line-height: 1.15;
74
+ max-width: 18ch;
75
+ }
76
+ .sub {
77
+ margin-top: 10px;
78
+ font-size: 22px;
79
+ color: var(--muted);
80
+ line-height: 1.4;
81
+ max-width: 42ch;
82
+ }
83
+ .grid {
84
+ flex: 1;
85
+ display: grid;
86
+ grid-template-columns: 1fr 1fr;
87
+ gap: 28px;
88
+ min-height: 0;
89
+ }
90
+ .card {
91
+ background: var(--panel);
92
+ border: 1px solid var(--line);
93
+ border-radius: 18px;
94
+ box-shadow: var(--shadow);
95
+ padding: 28px 30px;
96
+ display: flex;
97
+ flex-direction: column;
98
+ min-height: 0;
99
+ }
100
+ .label {
101
+ font-size: 13px;
102
+ font-weight: 700;
103
+ letter-spacing: 0.08em;
104
+ text-transform: uppercase;
105
+ color: var(--muted);
106
+ margin-bottom: 16px;
107
+ }
108
+ .bubble {
109
+ align-self: flex-start;
110
+ background: var(--you);
111
+ color: var(--you-ink);
112
+ border-radius: 16px 16px 16px 4px;
113
+ padding: 16px 20px;
114
+ font-size: 26px;
115
+ font-weight: 650;
116
+ line-height: 1.3;
117
+ max-width: 22ch;
118
+ }
119
+ .hint {
120
+ margin-top: 18px;
121
+ color: var(--muted);
122
+ font-size: 18px;
123
+ }
124
+ .steps { display: flex; flex-direction: column; gap: 14px; }
125
+ .step {
126
+ display: grid;
127
+ grid-template-columns: 36px 1fr;
128
+ gap: 14px;
129
+ align-items: start;
130
+ font-size: 22px;
131
+ line-height: 1.35;
132
+ }
133
+ .n {
134
+ width: 36px;
135
+ height: 36px;
136
+ border-radius: 999px;
137
+ background: var(--chip);
138
+ border: 1px solid var(--line);
139
+ display: grid;
140
+ place-items: center;
141
+ font-size: 15px;
142
+ font-weight: 700;
143
+ color: var(--muted);
144
+ }
145
+ .n.done { background: #1a7f3722; color: var(--ok); border-color: #3fb95055; }
146
+ .n.now { background: #1f6feb22; color: var(--you); border-color: #1f6feb66; }
147
+ .skill {
148
+ font-family: ui-monospace, "Cascadia Code", Consolas, monospace;
149
+ font-size: 16px;
150
+ color: var(--you);
151
+ margin-bottom: 18px;
152
+ }
153
+ .loop {
154
+ display: flex;
155
+ gap: 10px;
156
+ align-items: center;
157
+ flex-wrap: wrap;
158
+ }
159
+ .loop b {
160
+ background: var(--chip);
161
+ border: 1px solid var(--line);
162
+ border-radius: 999px;
163
+ padding: 8px 14px;
164
+ font-size: 16px;
165
+ font-weight: 650;
166
+ }
167
+ .loop i { color: var(--muted); font-style: normal; }
168
+ .wide { grid-column: 1 / -1; }
169
+ .findings { display: flex; flex-direction: column; gap: 12px; }
170
+ .hit {
171
+ background: var(--panel-2);
172
+ border: 1px solid var(--line);
173
+ border-radius: 12px;
174
+ padding: 14px 16px;
175
+ font-size: 20px;
176
+ }
177
+ .hit code {
178
+ font-family: ui-monospace, Consolas, monospace;
179
+ font-size: 16px;
180
+ color: var(--warn);
181
+ }
182
+ .ok { color: var(--ok); font-weight: 700; }
183
+ .hidden { display: none; }
184
+ </style>
185
+ </head>
186
+ <body>
187
+ <div class="frame" id="app"></div>
188
+ <script>
189
+ const params = new URLSearchParams(location.search);
190
+ const theme = params.get("theme") === "light" ? "light" : "dark";
191
+ const view = params.get("view") || "hero";
192
+ document.documentElement.dataset.theme = theme;
193
+
194
+ const views = {
195
+ hero: `
196
+ <div class="top">
197
+ <div class="brand">kenji skills <span>playbooks for your coding agent</span></div>
198
+ <div class="meta">158 skills · 63 commands · 4 tools</div>
199
+ </div>
200
+ <div>
201
+ <div class="headline">You say the job. The playbook runs.</div>
202
+ <div class="sub">Not a prompt library. Installed workflows that grill, build, prove, and ship — then refuse to call it done until it is.</div>
203
+ </div>
204
+ <div class="grid">
205
+ <section class="card">
206
+ <div class="label">You, in chat</div>
207
+ <div class="bubble">fix this bug and ship it</div>
208
+ <div class="hint">No skill name required. Talk like a teammate.</div>
209
+ </section>
210
+ <section class="card">
211
+ <div class="label">What kicks in</div>
212
+ <div class="skill">workflow-fix-and-ship</div>
213
+ <div class="steps">
214
+ <div class="step"><div class="n done">1</div><div>Triage the error with evidence</div></div>
215
+ <div class="step"><div class="n done">2</div><div>Reproduce, then fix with a test</div></div>
216
+ <div class="step"><div class="n now">3</div><div>Verify in the browser</div></div>
217
+ <div class="step"><div class="n">4</div><div>Open the PR — you merge</div></div>
218
+ </div>
219
+ </section>
220
+ </div>
221
+ <div class="loop">
222
+ <b>Orient</b><i>→</i><b>Assess</b><i>→</i><b>Change</b><i>→</i><b>Prove</b><i>→</i><b>Ship</b>
223
+ </div>
224
+ `,
225
+ grill: `
226
+ <div class="top">
227
+ <div class="brand">Before any code</div>
228
+ <div class="meta">workflow-grilling</div>
229
+ </div>
230
+ <div>
231
+ <div class="headline">It interviews you first.</div>
232
+ <div class="sub">One question at a time, with a recommended answer, until you and the agent want the same thing.</div>
233
+ </div>
234
+ <div class="grid">
235
+ <section class="card">
236
+ <div class="label">You</div>
237
+ <div class="bubble">grill me before I build a referral program</div>
238
+ </section>
239
+ <section class="card">
240
+ <div class="label">The agent</div>
241
+ <div class="hit">Should the reward fire on signup or first payment?</div>
242
+ <div class="hit">I’d recommend <b>first payment</b> — it stops signup-farming. Agree?</div>
243
+ <div class="hint">Looks up the codebase. Only asks decisions. Ends with a decision log.</div>
244
+ </section>
245
+ </div>
246
+ `,
247
+ build: `
248
+ <div class="top">
249
+ <div class="brand">Build the feature</div>
250
+ <div class="meta">workflow-build-feature</div>
251
+ </div>
252
+ <div>
253
+ <div class="headline">Spec → test → code → PR.</div>
254
+ <div class="sub">The agent does not jump to implementation. It writes the failing test first, then the code that makes it pass.</div>
255
+ </div>
256
+ <div class="grid">
257
+ <section class="card">
258
+ <div class="label">You</div>
259
+ <div class="bubble">build this feature from those decisions</div>
260
+ </section>
261
+ <section class="card">
262
+ <div class="label">The playbook</div>
263
+ <div class="steps">
264
+ <div class="step"><div class="n done">1</div><div>Turn the grill log into a spec</div></div>
265
+ <div class="step"><div class="n done">2</div><div>Write a failing test</div></div>
266
+ <div class="step"><div class="n now">3</div><div>Implement the smallest change</div></div>
267
+ <div class="step"><div class="n">4</div><div>Smoke-test, then open a PR</div></div>
268
+ </div>
269
+ </section>
270
+ </div>
271
+ `,
272
+ audit: `
273
+ <div class="top">
274
+ <div class="brand">Find what’s actually wrong</div>
275
+ <div class="meta">audit-security · audit-resilience</div>
276
+ </div>
277
+ <div>
278
+ <div class="headline">Findings with file:line.</div>
279
+ <div class="sub">Not a vibe check. OWASP-style review, timeouts, retries, and “is this production-ready?” — written down so you can act.</div>
280
+ </div>
281
+ <section class="card wide">
282
+ <div class="label">Example output</div>
283
+ <div class="findings">
284
+ <div class="hit"><code>app/api/checkout/route.ts:88</code> — webhook handler is not idempotent</div>
285
+ <div class="hit"><code>lib/auth.ts:41</code> — <code>getSession()</code> used as the only gate</div>
286
+ <div class="hit"><code>middleware.ts:19</code> — public matcher misses <code>/api/admin/*</code></div>
287
+ </div>
288
+ </section>
289
+ `,
290
+ ship: `
291
+ <div class="top">
292
+ <div class="brand">Ship and watch it</div>
293
+ <div class="meta">workflow-ship-and-observe</div>
294
+ </div>
295
+ <div>
296
+ <div class="headline">Live revision, then a watch window.</div>
297
+ <div class="sub">Deploy is not the finish line. The playbook checks the live SHA, watches the stability window, and rolls back if it breaks.</div>
298
+ </div>
299
+ <div class="grid">
300
+ <section class="card">
301
+ <div class="label">You</div>
302
+ <div class="bubble">ship it and watch it</div>
303
+ </section>
304
+ <section class="card">
305
+ <div class="label">Done means</div>
306
+ <div class="steps">
307
+ <div class="step"><div class="n done">1</div><div>Repository green before deploy</div></div>
308
+ <div class="step"><div class="n done">2</div><div>Confirm the live revision</div></div>
309
+ <div class="step"><div class="n now">3</div><div>Observe the window</div></div>
310
+ <div class="step"><div class="n">4</div><div class="ok">Stable — or rollback / hotfix</div></div>
311
+ </div>
312
+ </section>
313
+ </div>
314
+ `,
315
+ };
316
+
317
+ document.getElementById("app").innerHTML = views[view] || views.hero;
318
+ </script>
319
+ </body>
320
+ </html>
@@ -0,0 +1,258 @@
1
+ #!/usr/bin/env node
2
+
3
+ import {
4
+ existsSync,
5
+ mkdirSync,
6
+ readFileSync,
7
+ readdirSync,
8
+ rmSync,
9
+ statSync,
10
+ writeFileSync,
11
+ } from "node:fs";
12
+ import { createHash } from "node:crypto";
13
+ import { homedir } from "node:os";
14
+ import { dirname, join, relative } from "node:path";
15
+ import { fileURLToPath } from "node:url";
16
+
17
+ const STATE_FILES = [
18
+ ".cursor/complete-everything-state.md",
19
+ ".cursor/burndown-state.md",
20
+ ];
21
+
22
+ // Follow-ups one conversation gets while none of the items it was shown has
23
+ // closed. Keyed per conversation: two agents in one workspace must not spend,
24
+ // or reset, each other's budget.
25
+ const NO_PROGRESS_LIMIT = 3;
26
+ // A checklist nobody has written to for a day is abandoned, not in flight; it
27
+ // must not hijack every later session opened in the same repo.
28
+ const STALE_MS = 24 * 60 * 60 * 1000;
29
+ const COUNTER_TTL_MS = 7 * 24 * 60 * 60 * 1000;
30
+ // Workspace-shared counter from earlier releases; every agent in the repo
31
+ // shared it, so a second agent's edits restarted the first agent's loop.
32
+ const LEGACY_COUNTER = ".cursor/completion-gate.count.json";
33
+ // Same shape as a Human gates line; an item waiting on someone is not work.
34
+ const BLOCKED = /\b(?:blocked (?:by|on)|waiting on):\s*\S/i;
35
+
36
+ function parseInput() {
37
+ try {
38
+ const raw = readFileSync(0, "utf8").trim();
39
+ return raw ? JSON.parse(raw) : {};
40
+ } catch {
41
+ return {};
42
+ }
43
+ }
44
+
45
+ function actionableItems(markdown) {
46
+ let section = "";
47
+ const items = [];
48
+
49
+ for (const line of markdown.split(/\r?\n/)) {
50
+ const heading = line.match(/^#{1,6}\s+(.+?)\s*$/);
51
+ if (heading) {
52
+ section = heading[1];
53
+ continue;
54
+ }
55
+
56
+ if (/human gate|blocked on human|blocked on you/i.test(section)) continue;
57
+ const task = line.match(/^\s*-\s*\[\s\]\s+(.+?)\s*$/);
58
+ if (task) {
59
+ if (!BLOCKED.test(task[1])) items.push(task[1]);
60
+ continue;
61
+ }
62
+ // `[-]` marks a rung that does not apply. It is not a pass, so it only
63
+ // stops counting as open work when it states why ("n/a: <evidence>").
64
+ const na = line.match(/^\s*-\s*\[-\]\s+(.+?)\s*$/);
65
+ if (na && !/\bn\/a:\s*\S/i.test(na[1])) items.push(`${na[1]} (marked [-] without an "n/a: <reason>")`);
66
+ }
67
+
68
+ return items;
69
+ }
70
+
71
+ function inspectWorkspace(root) {
72
+ const pending = [];
73
+
74
+ try {
75
+ rmSync(join(root, LEGACY_COUNTER), { force: true });
76
+ } catch {
77
+ // fail open: a leftover counter is clutter, not a reason to trap a session
78
+ }
79
+
80
+ for (const relativePath of STATE_FILES) {
81
+ const absolutePath = join(root, relativePath);
82
+ if (!existsSync(absolutePath)) continue;
83
+
84
+ try {
85
+ if (Date.now() - statSync(absolutePath).mtimeMs > STALE_MS) continue;
86
+ const items = actionableItems(readFileSync(absolutePath, "utf8"));
87
+ if (items.length) pending.push({ relativePath, items });
88
+ } catch {
89
+ // Fail open: a hook must not trap a session because a state file vanished
90
+ // or became unreadable between existence check and read.
91
+ }
92
+ }
93
+
94
+ return pending;
95
+ }
96
+
97
+ // Evidence appended after " — " is not part of the title: rewriting it every
98
+ // turn must not look like a closed item.
99
+ function itemTitle(item) {
100
+ return item.split(" — ")[0].trim();
101
+ }
102
+
103
+ // Claude Code sends cwd, which may sit below the workspace root.
104
+ function rootsFromCwd(cwd) {
105
+ let dir = cwd;
106
+ for (let depth = 0; depth < 12; depth++) {
107
+ if (STATE_FILES.some((rel) => existsSync(join(dir, rel))) || existsSync(join(dir, ".git"))) return [dir];
108
+ const parent = dirname(dir);
109
+ if (parent === dir) break;
110
+ dir = parent;
111
+ }
112
+ return [cwd];
113
+ }
114
+
115
+ // Which config registered this copy. Installs from before `--host` existed are
116
+ // told apart by where the script lives.
117
+ function registeredHost() {
118
+ const flag = process.argv.slice(2).find((arg) => arg.startsWith("--host="));
119
+ if (flag) return flag.slice("--host=".length);
120
+ return /[\\/]\.claude[\\/]/.test(fileURLToPath(import.meta.url)) ? "claude" : "cursor";
121
+ }
122
+
123
+ // Cursor puts cursor_version in every hook payload and CURSOR_VERSION in the
124
+ // hook environment; Claude Code sends hook_event_name "Stop" and neither.
125
+ function runningInCursor(input) {
126
+ return (
127
+ typeof input.cursor_version === "string" ||
128
+ Boolean(process.env.CURSOR_VERSION) ||
129
+ input.hook_event_name !== "Stop"
130
+ );
131
+ }
132
+
133
+ // Cursor also runs Claude Code hooks from ~/.claude/settings.json (Third-Party
134
+ // Imports, on by default) and applies no loop_limit to them. When the native
135
+ // Cursor entry exists, the Claude-config copy must stand aside or every stop
136
+ // is gated twice, once with no cap at all.
137
+ function cursorGateRegistered(roots) {
138
+ const configs = [join(homedir(), ".cursor", "hooks.json"), ...roots.map((root) => join(root, ".cursor", "hooks.json"))];
139
+ return configs.some((path) => {
140
+ try {
141
+ const stop = JSON.parse(readFileSync(path, "utf8"))?.hooks?.stop;
142
+ return Array.isArray(stop) && stop.some((entry) => {
143
+ const command = String(entry?.command ?? "");
144
+ return command.includes("completion-gate.mjs") && !command.includes("--host=claude");
145
+ });
146
+ } catch {
147
+ return false;
148
+ }
149
+ });
150
+ }
151
+
152
+ function counterDir() {
153
+ // CURSOR_KENJI_GATE_STATE_DIR is the pre-2.0.0 name, still honored. The
154
+ // default path keeps its pre-rename name on purpose (ADR-0012, ADR-0013).
155
+ return process.env.KENJI_GATE_STATE_DIR || process.env.CURSOR_KENJI_GATE_STATE_DIR || join(homedir(), ".cache", "cursor-kenji", "completion-gate");
156
+ }
157
+
158
+ function pruneCounters(dir) {
159
+ for (const name of readdirSync(dir)) {
160
+ const path = join(dir, name);
161
+ try {
162
+ if (Date.now() - statSync(path).mtimeMs > COUNTER_TTL_MS) rmSync(path, { force: true });
163
+ } catch {
164
+ // another hook process pruned it first
165
+ }
166
+ }
167
+ }
168
+
169
+ // Returns the follow-up number to spend (1..NO_PROGRESS_LIMIT), or 0 when this
170
+ // conversation has had its follow-ups and none of the items it saw has closed.
171
+ function spendFollowUp(root, conversation, titles) {
172
+ const dir = counterDir();
173
+ const key = createHash("sha1").update(`${root}\0${conversation}`).digest("hex").slice(0, 20);
174
+ const path = join(dir, `${key}.json`);
175
+ let previous = null;
176
+ try {
177
+ previous = JSON.parse(readFileSync(path, "utf8"));
178
+ } catch {
179
+ // first stop for this conversation in this workspace
180
+ }
181
+ const seen = Array.isArray(previous?.open) ? previous.open : [];
182
+ const progressed = seen.some((title) => !titles.includes(title));
183
+ let blocks = progressed ? 0 : Number(previous?.blocks) || 0;
184
+ const allowed = blocks < NO_PROGRESS_LIMIT;
185
+ if (allowed) blocks += 1;
186
+ try {
187
+ mkdirSync(dir, { recursive: true });
188
+ writeFileSync(path, `${JSON.stringify({ root, open: titles, blocks })}\n`);
189
+ pruneCounters(dir);
190
+ } catch {
191
+ // fail open: a hook must not trap a session over a counter file
192
+ }
193
+ return allowed ? blocks : 0;
194
+ }
195
+
196
+ const pass = () => {
197
+ process.stdout.write("{}\n");
198
+ process.exit(0);
199
+ };
200
+
201
+ function main() {
202
+ const input = parseInput();
203
+ const inCursor = runningInCursor(input);
204
+
205
+ let roots = [];
206
+ if (!inCursor) roots = rootsFromCwd(input.cwd || process.cwd());
207
+ else if (input.status !== "completed") pass();
208
+ else if (Array.isArray(input.workspace_roots) && input.workspace_roots.length) roots = input.workspace_roots;
209
+ else if (process.env.CURSOR_PROJECT_DIR) roots = [process.env.CURSOR_PROJECT_DIR];
210
+ if (roots.length === 0) pass();
211
+
212
+ if (inCursor && registeredHost() === "claude" && cursorGateRegistered(roots)) pass();
213
+
214
+ const conversation = String(input.conversation_id || input.session_id || "unknown");
215
+ const gated = roots
216
+ .flatMap((root) => inspectWorkspace(root).map((state) => ({ root, ...state })))
217
+ .map((state) => ({ ...state, followUp: spendFollowUp(state.root, conversation, state.items.map(itemTitle)) }))
218
+ .filter((state) => state.followUp > 0);
219
+ if (gated.length === 0) pass();
220
+
221
+ const count = gated.reduce((total, state) => total + state.items.length, 0);
222
+ const followUp = Math.max(...gated.map((state) => state.followUp));
223
+ const sample = gated
224
+ .flatMap((state) =>
225
+ state.items.map(
226
+ (item) => `${relative(process.cwd(), state.root) || "."}/${state.relativePath}: ${item}`,
227
+ ),
228
+ )
229
+ .slice(0, 5)
230
+ .map((item) => `- ${item}`)
231
+ .join("\n");
232
+
233
+ const message = [
234
+ `Completion gate: ${count} actionable checklist item${count === 1 ? "" : "s"} remain (follow-up ${followUp} of ${NO_PROGRESS_LIMIT} while nothing closes).`,
235
+ "Re-read the durable state file, continue with the next safe item, record fresh evidence, and update the checklist.",
236
+ sample,
237
+ count > 5 ? `- …and ${count - 5} more` : "",
238
+ 'If an item waits on a person, mark it "blocked by: <who or what>" or move it under Human gates. If another agent owns this checklist, leave the file unchanged, because the marker would silence that agent\'s gate too. Either way, say so in one line and stop.',
239
+ "Do not claim completion while actionable items remain. Before the final claim, run the completion-judge gate.",
240
+ ]
241
+ .filter(Boolean)
242
+ .join("\n");
243
+
244
+ if (!inCursor) {
245
+ // Current docs nest the decision under hookSpecificOutput; earlier releases
246
+ // read it at the top level. Emit both; exit 0 lets the JSON carry it.
247
+ const block = { decision: "block", reason: message };
248
+ process.stdout.write(`${JSON.stringify({ ...block, hookSpecificOutput: { hookEventName: "Stop", ...block } })}\n`);
249
+ process.exit(0);
250
+ }
251
+ process.stdout.write(`${JSON.stringify({ followup_message: message })}\n`);
252
+ }
253
+
254
+ try {
255
+ main();
256
+ } catch {
257
+ pass();
258
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": 1,
3
+ "hooks": {
4
+ "stop": [
5
+ {
6
+ "command": "node hooks/completion-gate.mjs --host=cursor",
7
+ "timeout": 5,
8
+ "loop_limit": 12,
9
+ "failClosed": false
10
+ }
11
+ ]
12
+ }
13
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "hooks": {
3
+ "Stop": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/completion-gate.mjs\" --host=claude",
9
+ "timeout": 5
10
+ }
11
+ ]
12
+ }
13
+ ]
14
+ }
15
+ }
package/install.sh ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Thin wrapper — the Node installer is the SSOT (skills-cursor skip, hooks merge,
5
+ # --clean backups). This script exists so `./install.sh` and `cursor-sync` keep working.
6
+ #
7
+ # Default with no args: Cursor + Claude Code (historical install.sh behavior).
8
+ # `node bin/install.mjs` with no args remains Cursor-only.
9
+
10
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+
12
+ if ! command -v node >/dev/null 2>&1; then
13
+ echo "kenji: Node.js is required to install." >&2
14
+ exit 1
15
+ fi
16
+
17
+ if [ "$#" -eq 0 ]; then
18
+ exec node "$SCRIPT_DIR/bin/install.mjs" --cursor --claude
19
+ fi
20
+
21
+ exec node "$SCRIPT_DIR/bin/install.mjs" "$@"
package/llms.txt ADDED
@@ -0,0 +1,40 @@
1
+ # kenji
2
+
3
+ > You say the job; the playbook runs. Installable workflows for Cursor, Claude Code, Codex CLI, and Gemini CLI: 158 agent skills, 63 slash commands, 6 subagents, and MCP templates for React / Next.js / Supabase.
4
+ >
5
+ > Full pack: `npx @kensaurus/skills --all` (skills + commands; kenji `--all` = four tools). Skills only: `npx skills add kensaurus/skills` (that CLI's `--all` means every skill to every agent). Claude Code plugin: `/plugin marketplace add kensaurus/skills`. Re-check: `npx @kensaurus/skills --verify --all`.
6
+
7
+ Validated against the [Agent Skills specification](https://agentskills.io/specification) on every commit. npm package: `@kensaurus/skills`.
8
+
9
+ Runs on Claude Opus 5.5 — the Claude Code default since 2.1.280 and a Cursor agent model — with effort routing declared per skill: audit / plan / judge at high, implementation at the medium default, inventory / handoff at low. Prompts do not steer thinking on Opus 5.5; effort does.
10
+
11
+ ## Install
12
+
13
+ - [README.md](https://github.com/kensaurus/skills/blob/main/README.md): Quick start, install modes, FAQ, skill taxonomy
14
+ - [docs/GETTING-STARTED.md](https://github.com/kensaurus/skills/blob/main/docs/GETTING-STARTED.md): First-time install, first phrases, typical session
15
+
16
+ ## Reference
17
+
18
+ - [docs/CATALOG.md](https://github.com/kensaurus/skills/blob/main/docs/CATALOG.md): Full skill list with trigger phrases and composition patterns
19
+ - [docs/THIRD-PARTY-SKILLS.md](https://github.com/kensaurus/skills/blob/main/docs/THIRD-PARTY-SKILLS.md): Vendored upstream skills (`thirdparty-*`), attribution, update policy
20
+ - [docs/TRIGGER-CHEATSHEET.md](https://github.com/kensaurus/skills/blob/main/docs/TRIGGER-CHEATSHEET.md): Plain lookup table for skill triggers
21
+ - [docs/PLAN-LOOPS.md](https://github.com/kensaurus/skills/blob/main/docs/PLAN-LOOPS.md): 23 `plan-*` audit skills in grouped loops (approve before execution)
22
+ - [docs/AGENTS.template.md](https://github.com/kensaurus/skills/blob/main/docs/AGENTS.template.md): Project constitution template for consumer repos
23
+ - [docs/MODEL-AND-EFFORT.md](https://github.com/kensaurus/skills/blob/main/docs/MODEL-AND-EFFORT.md): Default model per host, how to set effort (`/effort`, `modelSettings`, frontmatter `effort:`), the pack's routing table, what changed for Opus 5.5
24
+
25
+ ## MCP & security
26
+
27
+ - [mcp/README.md](https://github.com/kensaurus/skills/blob/main/mcp/README.md): MCP server setup, pinned package versions
28
+ - [SECURITY.md](https://github.com/kensaurus/skills/blob/main/SECURITY.md): Secrets hygiene, `.mcp.json` guidance, reporting vulnerabilities
29
+
30
+ ## Distribution & publishing
31
+
32
+ - [docs/DISTRIBUTION.md](https://github.com/kensaurus/skills/blob/main/docs/DISTRIBUTION.md): Install channels, directory listings, discovery status
33
+ - [skills.sh listing](https://www.skills.sh/kensaurus/skills): Live installable catalog page (`npx skills add kensaurus/skills`)
34
+ - [SkillsMP pack page](https://skillsmp.com/creators/kensaurus/skills): Aggregator crawl of this repo’s `SKILL.md` files (their count can lag)
35
+ - [docs/PUBLISHING.md](https://github.com/kensaurus/skills/blob/main/docs/PUBLISHING.md): Maintainer release guide (GitHub Release → OIDC npm)
36
+ - [docs/PROMOTION.md](https://github.com/kensaurus/skills/blob/main/docs/PROMOTION.md): Listing copy for skills.sh, cursor.directory, marketplace, Claude plugin
37
+ - [Claude Code plugin](https://github.com/kensaurus/skills/blob/main/.claude-plugin/marketplace.json): `/plugin marketplace add kensaurus/skills` (community catalog is a separate submit)
38
+ - [docs/examples/plan-audits/](https://github.com/kensaurus/skills/tree/main/docs/examples/plan-audits): Sample `plan-*.md` audit outputs
39
+ - [CHANGELOG.md](https://github.com/kensaurus/skills/blob/main/CHANGELOG.md): Release history
40
+ - [CONTRIBUTING.md](https://github.com/kensaurus/skills/blob/main/CONTRIBUTING.md): Adding skills, validation, PR workflow