nemonix-cli 1.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 (281) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +186 -0
  3. package/dist/cli.js +6870 -0
  4. package/package.json +48 -0
  5. package/src/config/claude-code-config/.claude/commands/setup-tmux.md +0 -0
  6. package/src/config/claude-code-config/CHANGELOG.md +261 -0
  7. package/src/config/claude-code-config/README.md +1 -0
  8. package/src/config/claude-code-config/agents/action.md +36 -0
  9. package/src/config/claude-code-config/agents/clean-code-runner.md +61 -0
  10. package/src/config/claude-code-config/agents/code-reviewer.md +172 -0
  11. package/src/config/claude-code-config/agents/code-simplifier.md +49 -0
  12. package/src/config/claude-code-config/agents/explore-codebase.md +65 -0
  13. package/src/config/claude-code-config/agents/explore-docs.md +65 -0
  14. package/src/config/claude-code-config/agents/explore-fast.md +22 -0
  15. package/src/config/claude-code-config/agents/implementer.md +181 -0
  16. package/src/config/claude-code-config/agents/snipper.md +36 -0
  17. package/src/config/claude-code-config/agents/websearch.md +42 -0
  18. package/src/config/claude-code-config/commands/prompts/create-vitejs-app.md +272 -0
  19. package/src/config/claude-code-config/commands/prompts/nextjs-add-prisma-db.md +136 -0
  20. package/src/config/claude-code-config/commands/prompts/nextjs-setup-better-auth.md +173 -0
  21. package/src/config/claude-code-config/commands/prompts/nextjs-setup-project.md +200 -0
  22. package/src/config/claude-code-config/commands/prompts/prompt.md +55 -0
  23. package/src/config/claude-code-config/commands/prompts/saas-challenge-idea.md +135 -0
  24. package/src/config/claude-code-config/commands/prompts/saas-create-architecture.md +242 -0
  25. package/src/config/claude-code-config/commands/prompts/saas-create-headline.md +132 -0
  26. package/src/config/claude-code-config/commands/prompts/saas-create-landing-copywritting.md +267 -0
  27. package/src/config/claude-code-config/commands/prompts/saas-create-legals-docs.md +176 -0
  28. package/src/config/claude-code-config/commands/prompts/saas-create-logos.md +240 -0
  29. package/src/config/claude-code-config/commands/prompts/saas-create-prd.md +195 -0
  30. package/src/config/claude-code-config/commands/prompts/saas-create-tasks.md +240 -0
  31. package/src/config/claude-code-config/commands/prompts/saas-define-pricing.md +293 -0
  32. package/src/config/claude-code-config/commands/prompts/saas-find-domain-name.md +190 -0
  33. package/src/config/claude-code-config/commands/prompts/saas-implement-landing-page.md +257 -0
  34. package/src/config/claude-code-config/commands/prompts/setup-tmux.md +160 -0
  35. package/src/config/claude-code-config/commands/prompts/tools.md +148 -0
  36. package/src/config/claude-code-config/hooks/hook-post-file.ts +162 -0
  37. package/src/config/claude-code-config/scripts/.claude/skills/fix-on-my-computer/SKILL.md +81 -0
  38. package/src/config/claude-code-config/scripts/CLAUDE.md +50 -0
  39. package/src/config/claude-code-config/scripts/auto-rename-session/CLAUDE.md +59 -0
  40. package/src/config/claude-code-config/scripts/auto-rename-session/__tests__/shared.test.ts +185 -0
  41. package/src/config/claude-code-config/scripts/auto-rename-session/__tests__/title-generation.test.ts +44 -0
  42. package/src/config/claude-code-config/scripts/auto-rename-session/fixtures/sample-transcript.jsonl +3 -0
  43. package/src/config/claude-code-config/scripts/auto-rename-session/fixtures/transcript-short-message.jsonl +2 -0
  44. package/src/config/claude-code-config/scripts/auto-rename-session/fixtures/transcript-with-title.jsonl +3 -0
  45. package/src/config/claude-code-config/scripts/auto-rename-session/src/index.ts +113 -0
  46. package/src/config/claude-code-config/scripts/auto-rename-session/src/rename-all.ts +148 -0
  47. package/src/config/claude-code-config/scripts/auto-rename-session/src/shared.ts +157 -0
  48. package/src/config/claude-code-config/scripts/auto-rename-session/src/worker.ts +58 -0
  49. package/src/config/claude-code-config/scripts/biome.json +37 -0
  50. package/src/config/claude-code-config/scripts/claude-code-ai/CLAUDE.md +84 -0
  51. package/src/config/claude-code-config/scripts/claude-code-ai/__tests__/claude.test.ts +19 -0
  52. package/src/config/claude-code-config/scripts/claude-code-ai/__tests__/paths.test.ts +68 -0
  53. package/src/config/claude-code-config/scripts/claude-code-ai/claude.ts +56 -0
  54. package/src/config/claude-code-config/scripts/claude-code-ai/cli.ts +46 -0
  55. package/src/config/claude-code-config/scripts/claude-code-ai/helper/credentials.ts +76 -0
  56. package/src/config/claude-code-config/scripts/claude-code-ai/helper/index.ts +9 -0
  57. package/src/config/claude-code-config/scripts/claude-code-ai/helper/paths.ts +51 -0
  58. package/src/config/claude-code-config/scripts/command-validator/CLAUDE.md +112 -0
  59. package/src/config/claude-code-config/scripts/command-validator/README.md +147 -0
  60. package/src/config/claude-code-config/scripts/command-validator/src/__tests__/validator.test.ts +99 -0
  61. package/src/config/claude-code-config/scripts/command-validator/src/cli.ts +121 -0
  62. package/src/config/claude-code-config/scripts/command-validator/src/lib/security-rules.ts +174 -0
  63. package/src/config/claude-code-config/scripts/command-validator/src/lib/types.ts +34 -0
  64. package/src/config/claude-code-config/scripts/command-validator/src/lib/validator.ts +90 -0
  65. package/src/config/claude-code-config/scripts/package.json +43 -0
  66. package/src/config/claude-code-config/scripts/statusline/CLAUDE.md +205 -0
  67. package/src/config/claude-code-config/scripts/statusline/README.md +193 -0
  68. package/src/config/claude-code-config/scripts/statusline/__tests__/context.test.ts +229 -0
  69. package/src/config/claude-code-config/scripts/statusline/__tests__/formatters.test.ts +108 -0
  70. package/src/config/claude-code-config/scripts/statusline/__tests__/statusline.test.ts +309 -0
  71. package/src/config/claude-code-config/scripts/statusline/data/.gitkeep +0 -0
  72. package/src/config/claude-code-config/scripts/statusline/defaults.json +82 -0
  73. package/src/config/claude-code-config/scripts/statusline/docs/ARCHITECTURE.md +166 -0
  74. package/src/config/claude-code-config/scripts/statusline/fixtures/mock-transcript.jsonl +4 -0
  75. package/src/config/claude-code-config/scripts/statusline/fixtures/test-input.json +35 -0
  76. package/src/config/claude-code-config/scripts/statusline/src/analyze-daily-usage.ts +151 -0
  77. package/src/config/claude-code-config/scripts/statusline/src/commands/interactive-config.ts +515 -0
  78. package/src/config/claude-code-config/scripts/statusline/src/debug-payloads.ts +195 -0
  79. package/src/config/claude-code-config/scripts/statusline/src/index.ts +224 -0
  80. package/src/config/claude-code-config/scripts/statusline/src/lib/config-types.ts +110 -0
  81. package/src/config/claude-code-config/scripts/statusline/src/lib/config.ts +21 -0
  82. package/src/config/claude-code-config/scripts/statusline/src/lib/context.ts +103 -0
  83. package/src/config/claude-code-config/scripts/statusline/src/lib/features/limits/commands/weekly-analysis.ts +108 -0
  84. package/src/config/claude-code-config/scripts/statusline/src/lib/features/limits/index.ts +111 -0
  85. package/src/config/claude-code-config/scripts/statusline/src/lib/features/limits/types.ts +15 -0
  86. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/commands/migrate-to-sqlite.ts +136 -0
  87. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/commands/spend-day.ts +79 -0
  88. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/commands/spend-month.ts +66 -0
  89. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/commands/spend-project.ts +85 -0
  90. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/database.ts +395 -0
  91. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/index.ts +178 -0
  92. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/payload-logger.ts +161 -0
  93. package/src/config/claude-code-config/scripts/statusline/src/lib/features/spend/types.ts +37 -0
  94. package/src/config/claude-code-config/scripts/statusline/src/lib/formatters.ts +426 -0
  95. package/src/config/claude-code-config/scripts/statusline/src/lib/git.ts +100 -0
  96. package/src/config/claude-code-config/scripts/statusline/src/lib/menu-factories.ts +224 -0
  97. package/src/config/claude-code-config/scripts/statusline/src/lib/presets.ts +177 -0
  98. package/src/config/claude-code-config/scripts/statusline/src/lib/render-pure.ts +516 -0
  99. package/src/config/claude-code-config/scripts/statusline/src/lib/types.ts +36 -0
  100. package/src/config/claude-code-config/scripts/statusline/src/lib/utils.ts +15 -0
  101. package/src/config/claude-code-config/scripts/statusline/src/stats.ts +119 -0
  102. package/src/config/claude-code-config/scripts/statusline/src/tests/spend-v2.test.ts +377 -0
  103. package/src/config/claude-code-config/scripts/statusline/src/tools/fixed-cost-calc.ts +317 -0
  104. package/src/config/claude-code-config/scripts/statusline/statusline.config.free.json +79 -0
  105. package/src/config/claude-code-config/scripts/statusline/statusline.config.json +100 -0
  106. package/src/config/claude-code-config/scripts/statusline/test-with-fixtures.ts +37 -0
  107. package/src/config/claude-code-config/scripts/statusline/test.ts +20 -0
  108. package/src/config/claude-code-config/scripts/statusline/tsconfig.json +27 -0
  109. package/src/config/claude-code-config/scripts/tsconfig.json +27 -0
  110. package/src/config/claude-code-config/settings.json +92 -0
  111. package/src/config/claude-code-config/skills/aibuilder-create-saas/SKILL.md +176 -0
  112. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/architecture-template.md +436 -0
  113. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/challenge-framework.md +289 -0
  114. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/discovery-framework.md +338 -0
  115. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/prd-template.md +452 -0
  116. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/task-template.md +263 -0
  117. package/src/config/claude-code-config/skills/aibuilder-create-saas/references/tools.md +132 -0
  118. package/src/config/claude-code-config/skills/aibuilder-create-saas/scripts/rename-project.sh +42 -0
  119. package/src/config/claude-code-config/skills/aibuilder-create-saas/scripts/setup.sh +104 -0
  120. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-00-init.md +174 -0
  121. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-01-discovery.md +342 -0
  122. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-02-brainstorm.md +230 -0
  123. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-03-validate.md +372 -0
  124. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-04-prd.md +364 -0
  125. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-05-architecture.md +904 -0
  126. package/src/config/claude-code-config/skills/aibuilder-create-saas/steps/step-06-tasks.md +446 -0
  127. package/src/config/claude-code-config/skills/explore/SKILL.md +119 -0
  128. package/src/config/claude-code-config/skills/frontend-design/LICENSE.txt +177 -0
  129. package/src/config/claude-code-config/skills/frontend-design/SKILL.md +42 -0
  130. package/src/config/claude-code-config/skills/git-commit/SKILL.md +42 -0
  131. package/src/config/claude-code-config/skills/git-create-pr/SKILL.md +53 -0
  132. package/src/config/claude-code-config/skills/git-fix-pr-comments/SKILL.md +51 -0
  133. package/src/config/claude-code-config/skills/git-merge/SKILL.md +68 -0
  134. package/src/config/claude-code-config/skills/marketing-copywriting/SKILL.md +72 -0
  135. package/src/config/claude-code-config/skills/meta-claude-memory/SKILL.md +694 -0
  136. package/src/config/claude-code-config/skills/meta-claude-memory/references/comprehensive-example.md +175 -0
  137. package/src/config/claude-code-config/skills/meta-claude-memory/references/project-patterns.md +334 -0
  138. package/src/config/claude-code-config/skills/meta-claude-memory/references/prompting-techniques.md +411 -0
  139. package/src/config/claude-code-config/skills/meta-claude-memory/references/rules-directory-guide.md +298 -0
  140. package/src/config/claude-code-config/skills/meta-claude-memory/references/section-templates.md +347 -0
  141. package/src/config/claude-code-config/skills/meta-hooks-creator/SKILL.md +357 -0
  142. package/src/config/claude-code-config/skills/meta-hooks-creator/references/command-vs-prompt.md +287 -0
  143. package/src/config/claude-code-config/skills/meta-hooks-creator/references/examples.md +689 -0
  144. package/src/config/claude-code-config/skills/meta-hooks-creator/references/hook-types.md +495 -0
  145. package/src/config/claude-code-config/skills/meta-hooks-creator/references/input-output-schemas.md +503 -0
  146. package/src/config/claude-code-config/skills/meta-hooks-creator/references/matchers.md +517 -0
  147. package/src/config/claude-code-config/skills/meta-hooks-creator/references/troubleshooting.md +653 -0
  148. package/src/config/claude-code-config/skills/meta-prompt-creator/SKILL.md +285 -0
  149. package/src/config/claude-code-config/skills/meta-prompt-creator/references/anthropic-best-practices.md +126 -0
  150. package/src/config/claude-code-config/skills/meta-prompt-creator/references/anti-patterns.md +57 -0
  151. package/src/config/claude-code-config/skills/meta-prompt-creator/references/clarity-principles.md +54 -0
  152. package/src/config/claude-code-config/skills/meta-prompt-creator/references/context-management.md +389 -0
  153. package/src/config/claude-code-config/skills/meta-prompt-creator/references/few-shot-patterns.md +47 -0
  154. package/src/config/claude-code-config/skills/meta-prompt-creator/references/openai-best-practices.md +50 -0
  155. package/src/config/claude-code-config/skills/meta-prompt-creator/references/prompt-templates.md +110 -0
  156. package/src/config/claude-code-config/skills/meta-prompt-creator/references/reasoning-techniques.md +52 -0
  157. package/src/config/claude-code-config/skills/meta-prompt-creator/references/system-prompt-patterns.md +48 -0
  158. package/src/config/claude-code-config/skills/meta-prompt-creator/references/xml-structure.md +36 -0
  159. package/src/config/claude-code-config/skills/meta-skill-creator/LICENSE.txt +202 -0
  160. package/src/config/claude-code-config/skills/meta-skill-creator/SKILL.md +421 -0
  161. package/src/config/claude-code-config/skills/meta-skill-creator/package.json +5 -0
  162. package/src/config/claude-code-config/skills/meta-skill-creator/references/output-patterns.md +82 -0
  163. package/src/config/claude-code-config/skills/meta-skill-creator/references/progressive-disclosure-patterns.md +374 -0
  164. package/src/config/claude-code-config/skills/meta-skill-creator/references/prompting-integration.md +363 -0
  165. package/src/config/claude-code-config/skills/meta-skill-creator/references/real-world-examples.md +513 -0
  166. package/src/config/claude-code-config/skills/meta-skill-creator/references/script-patterns.md +385 -0
  167. package/src/config/claude-code-config/skills/meta-skill-creator/references/workflows.md +28 -0
  168. package/src/config/claude-code-config/skills/meta-skill-creator/references/xml-tag-guide.md +606 -0
  169. package/src/config/claude-code-config/skills/meta-skill-creator/scripts/init-skill.ts +214 -0
  170. package/src/config/claude-code-config/skills/meta-skill-creator/scripts/package-skill.ts +146 -0
  171. package/src/config/claude-code-config/skills/meta-skill-creator/scripts/validate.ts +138 -0
  172. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/SKILL.md +390 -0
  173. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/references/ask-patterns.md +225 -0
  174. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/references/prompt-engineering.md +377 -0
  175. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/references/state-management.md +275 -0
  176. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/references/step-template.md +334 -0
  177. package/src/config/claude-code-config/skills/meta-skill-workflow-creator/references/workflow-patterns.md +300 -0
  178. package/src/config/claude-code-config/skills/meta-subagent-creator/SKILL.md +451 -0
  179. package/src/config/claude-code-config/skills/meta-subagent-creator/references/context-management.md +567 -0
  180. package/src/config/claude-code-config/skills/meta-subagent-creator/references/debugging-agents.md +714 -0
  181. package/src/config/claude-code-config/skills/meta-subagent-creator/references/error-handling-and-recovery.md +502 -0
  182. package/src/config/claude-code-config/skills/meta-subagent-creator/references/evaluation-and-testing.md +374 -0
  183. package/src/config/claude-code-config/skills/meta-subagent-creator/references/orchestration-patterns.md +591 -0
  184. package/src/config/claude-code-config/skills/meta-subagent-creator/references/subagents.md +599 -0
  185. package/src/config/claude-code-config/skills/meta-subagent-creator/references/writing-subagent-prompts.md +513 -0
  186. package/src/config/claude-code-config/skills/ralph-loop/SKILL.md +117 -0
  187. package/src/config/claude-code-config/skills/ralph-loop/scripts/setup.sh +278 -0
  188. package/src/config/claude-code-config/skills/ralph-loop/steps/step-00-init.md +215 -0
  189. package/src/config/claude-code-config/skills/ralph-loop/steps/step-01-interactive-prd.md +366 -0
  190. package/src/config/claude-code-config/skills/ralph-loop/steps/step-02-create-stories.md +273 -0
  191. package/src/config/claude-code-config/skills/ralph-loop/steps/step-03-finish.md +245 -0
  192. package/src/config/claude-code-config/skills/ralph-tasks/SKILL.md +88 -0
  193. package/src/config/claude-code-config/skills/ralph-tasks/scripts/add-task.sh +36 -0
  194. package/src/config/claude-code-config/skills/ralph-tasks/scripts/list-tasks.sh +66 -0
  195. package/src/config/claude-code-config/skills/ralph-tasks/scripts/remove-task.sh +47 -0
  196. package/src/config/claude-code-config/skills/ralph-tasks/scripts/setup.sh +201 -0
  197. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-add-search.md +131 -0
  198. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-add.md +46 -0
  199. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-init.md +123 -0
  200. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-list.md +58 -0
  201. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-remove.md +48 -0
  202. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-setup.md +46 -0
  203. package/src/config/claude-code-config/skills/ralph-tasks/steps/action-wake-up.md +62 -0
  204. package/src/config/claude-code-config/skills/utils-fix-errors/SKILL.md +61 -0
  205. package/src/config/claude-code-config/skills/utils-fix-grammar/SKILL.md +59 -0
  206. package/src/config/claude-code-config/skills/utils-oneshot/SKILL.md +56 -0
  207. package/src/config/claude-code-config/skills/utils-refactor/SKILL.md +89 -0
  208. package/src/config/claude-code-config/skills/utils-save-docs/SKILL.md +74 -0
  209. package/src/config/claude-code-config/skills/utils-ultrathink/SKILL.md +42 -0
  210. package/src/config/claude-code-config/skills/workflow-apex/SKILL.md +116 -0
  211. package/src/config/claude-code-config/skills/workflow-apex/scripts/setup-templates.sh +144 -0
  212. package/src/config/claude-code-config/skills/workflow-apex/scripts/update-progress.sh +80 -0
  213. package/src/config/claude-code-config/skills/workflow-apex/steps/step-00-init.md +273 -0
  214. package/src/config/claude-code-config/skills/workflow-apex/steps/step-00b-branch.md +126 -0
  215. package/src/config/claude-code-config/skills/workflow-apex/steps/step-00b-economy.md +244 -0
  216. package/src/config/claude-code-config/skills/workflow-apex/steps/step-00b-interactive.md +165 -0
  217. package/src/config/claude-code-config/skills/workflow-apex/steps/step-00b-save.md +123 -0
  218. package/src/config/claude-code-config/skills/workflow-apex/steps/step-01-analyze.md +361 -0
  219. package/src/config/claude-code-config/skills/workflow-apex/steps/step-02-plan.md +422 -0
  220. package/src/config/claude-code-config/skills/workflow-apex/steps/step-02b-tasks.md +301 -0
  221. package/src/config/claude-code-config/skills/workflow-apex/steps/step-03-execute-teams.md +297 -0
  222. package/src/config/claude-code-config/skills/workflow-apex/steps/step-03-execute.md +239 -0
  223. package/src/config/claude-code-config/skills/workflow-apex/steps/step-04-validate.md +264 -0
  224. package/src/config/claude-code-config/skills/workflow-apex/steps/step-05-examine.md +294 -0
  225. package/src/config/claude-code-config/skills/workflow-apex/steps/step-06-resolve.md +237 -0
  226. package/src/config/claude-code-config/skills/workflow-apex/steps/step-07-tests.md +250 -0
  227. package/src/config/claude-code-config/skills/workflow-apex/steps/step-08-run-tests.md +308 -0
  228. package/src/config/claude-code-config/skills/workflow-apex/steps/step-09-finish.md +193 -0
  229. package/src/config/claude-code-config/skills/workflow-apex/templates/00-context.md +53 -0
  230. package/src/config/claude-code-config/skills/workflow-apex/templates/01-analyze.md +10 -0
  231. package/src/config/claude-code-config/skills/workflow-apex/templates/02-plan.md +10 -0
  232. package/src/config/claude-code-config/skills/workflow-apex/templates/03-execute.md +10 -0
  233. package/src/config/claude-code-config/skills/workflow-apex/templates/04-validate.md +10 -0
  234. package/src/config/claude-code-config/skills/workflow-apex/templates/05-examine.md +10 -0
  235. package/src/config/claude-code-config/skills/workflow-apex/templates/06-resolve.md +10 -0
  236. package/src/config/claude-code-config/skills/workflow-apex/templates/07-tests.md +10 -0
  237. package/src/config/claude-code-config/skills/workflow-apex/templates/08-run-tests.md +10 -0
  238. package/src/config/claude-code-config/skills/workflow-apex/templates/09-finish.md +10 -0
  239. package/src/config/claude-code-config/skills/workflow-apex/templates/README.md +195 -0
  240. package/src/config/claude-code-config/skills/workflow-apex/templates/step-complete.md +7 -0
  241. package/src/config/claude-code-config/skills/workflow-brainstorm/SKILL.md +127 -0
  242. package/src/config/claude-code-config/skills/workflow-brainstorm/steps/step-01-explore.md +230 -0
  243. package/src/config/claude-code-config/skills/workflow-brainstorm/steps/step-02-challenge.md +238 -0
  244. package/src/config/claude-code-config/skills/workflow-brainstorm/steps/step-03-synthesize.md +337 -0
  245. package/src/config/claude-code-config/skills/workflow-brainstorm/steps/step-04-action.md +285 -0
  246. package/src/config/claude-code-config/skills/workflow-ci-fixer/SKILL.md +150 -0
  247. package/src/config/claude-code-config/skills/workflow-ci-fixer/references/cli-commands.md +122 -0
  248. package/src/config/claude-code-config/skills/workflow-ci-fixer/references/github-cli.md +243 -0
  249. package/src/config/claude-code-config/skills/workflow-ci-fixer/references/troubleshooting.md +362 -0
  250. package/src/config/claude-code-config/skills/workflow-ci-fixer/references/vercel-cli.md +192 -0
  251. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-00-init.md +157 -0
  252. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-01-watch-ci.md +192 -0
  253. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-02-analyze-errors.md +263 -0
  254. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-03-fix-locally.md +312 -0
  255. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-04-commit-push.md +206 -0
  256. package/src/config/claude-code-config/skills/workflow-ci-fixer/steps/step-05-cleanup.md +196 -0
  257. package/src/config/claude-code-config/skills/workflow-clean-code/SKILL.md +129 -0
  258. package/src/config/claude-code-config/skills/workflow-clean-code/references/general-clean-code.md +347 -0
  259. package/src/config/claude-code-config/skills/workflow-clean-code/references/nextjs-clean-code.md +458 -0
  260. package/src/config/claude-code-config/skills/workflow-clean-code/references/react-clean-code.md +406 -0
  261. package/src/config/claude-code-config/skills/workflow-clean-code/references/tanstack-query-best-practices.md +516 -0
  262. package/src/config/claude-code-config/skills/workflow-clean-code/references/zustand-best-practices.md +491 -0
  263. package/src/config/claude-code-config/skills/workflow-clean-code/steps/step-01-scan.md +137 -0
  264. package/src/config/claude-code-config/skills/workflow-clean-code/steps/step-02-apply.md +152 -0
  265. package/src/config/claude-code-config/skills/workflow-clean-code/steps/step-03-verify.md +143 -0
  266. package/src/config/claude-code-config/skills/workflow-debug/SKILL.md +126 -0
  267. package/src/config/claude-code-config/skills/workflow-debug/references/log-technique.md +285 -0
  268. package/src/config/claude-code-config/skills/workflow-debug/steps/step-00-init.md +94 -0
  269. package/src/config/claude-code-config/skills/workflow-debug/steps/step-01-analyze.md +180 -0
  270. package/src/config/claude-code-config/skills/workflow-debug/steps/step-01b-log-instrumentation.md +271 -0
  271. package/src/config/claude-code-config/skills/workflow-debug/steps/step-02-find-solutions.md +141 -0
  272. package/src/config/claude-code-config/skills/workflow-debug/steps/step-03-propose.md +142 -0
  273. package/src/config/claude-code-config/skills/workflow-debug/steps/step-04-fix.md +176 -0
  274. package/src/config/claude-code-config/skills/workflow-debug/steps/step-05-verify.md +279 -0
  275. package/src/config/claude-code-config/skills/workflow-review-code/SKILL.md +219 -0
  276. package/src/config/claude-code-config/skills/workflow-review-code/references/clean-code-principles.md +140 -0
  277. package/src/config/claude-code-config/skills/workflow-review-code/references/code-quality-metrics.md +174 -0
  278. package/src/config/claude-code-config/skills/workflow-review-code/references/feedback-patterns.md +149 -0
  279. package/src/config/claude-code-config/skills/workflow-review-code/references/security-checklist.md +127 -0
  280. package/src/config/claude-code-config/song/finish.mp3 +0 -0
  281. package/src/config/claude-code-config/song/need-human.mp3 +0 -0
@@ -0,0 +1,516 @@
1
+ # TanStack Query v5 Best Practices
2
+
3
+ ## Setup with Next.js App Router
4
+
5
+ ### Provider Configuration
6
+
7
+ ```typescript
8
+ // app/providers.tsx
9
+ 'use client';
10
+
11
+ import {
12
+ isServer,
13
+ QueryClient,
14
+ QueryClientProvider,
15
+ } from '@tanstack/react-query';
16
+ import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
17
+
18
+ function makeQueryClient() {
19
+ return new QueryClient({
20
+ defaultOptions: {
21
+ queries: {
22
+ staleTime: 60 * 1000, // 1 minute
23
+ retry: 1,
24
+ refetchOnWindowFocus: false,
25
+ },
26
+ },
27
+ });
28
+ }
29
+
30
+ let browserQueryClient: QueryClient | undefined = undefined;
31
+
32
+ function getQueryClient() {
33
+ if (isServer) {
34
+ return makeQueryClient(); // New client for each request
35
+ } else {
36
+ if (!browserQueryClient) browserQueryClient = makeQueryClient();
37
+ return browserQueryClient; // Reuse in browser
38
+ }
39
+ }
40
+
41
+ export default function Providers({ children }: { children: React.ReactNode }) {
42
+ const queryClient = getQueryClient();
43
+
44
+ return (
45
+ <QueryClientProvider client={queryClient}>
46
+ {children}
47
+ <ReactQueryDevtools initialIsOpen={false} />
48
+ </QueryClientProvider>
49
+ );
50
+ }
51
+ ```
52
+
53
+ ```typescript
54
+ // app/layout.tsx
55
+ import Providers from './providers';
56
+
57
+ export default function RootLayout({ children }: { children: React.ReactNode }) {
58
+ return (
59
+ <html>
60
+ <body>
61
+ <Providers>{children}</Providers>
62
+ </body>
63
+ </html>
64
+ );
65
+ }
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Migrating from useEffect
71
+
72
+ ### Before (useEffect)
73
+
74
+ ```typescript
75
+ // ❌ OLD PATTERN
76
+ function UserProfile({ userId }: { userId: string }) {
77
+ const [user, setUser] = useState<User | null>(null);
78
+ const [isLoading, setIsLoading] = useState(true);
79
+ const [error, setError] = useState<Error | null>(null);
80
+
81
+ useEffect(() => {
82
+ setIsLoading(true);
83
+ fetchUser(userId)
84
+ .then(setUser)
85
+ .catch(setError)
86
+ .finally(() => setIsLoading(false));
87
+ }, [userId]);
88
+
89
+ if (isLoading) return <Spinner />;
90
+ if (error) return <Error message={error.message} />;
91
+ return <ProfileCard user={user} />;
92
+ }
93
+ ```
94
+
95
+ ### After (TanStack Query)
96
+
97
+ ```typescript
98
+ // ✅ NEW PATTERN
99
+ function UserProfile({ userId }: { userId: string }) {
100
+ const { data: user, isLoading, error } = useQuery({
101
+ queryKey: ['user', userId],
102
+ queryFn: () => fetchUser(userId),
103
+ });
104
+
105
+ if (isLoading) return <Spinner />;
106
+ if (error) return <Error message={error.message} />;
107
+ return <ProfileCard user={user} />;
108
+ }
109
+ ```
110
+
111
+ ---
112
+
113
+ ## useSuspenseQuery (v5 Preferred)
114
+
115
+ Use with Suspense boundaries for cleaner loading states:
116
+
117
+ ```typescript
118
+ 'use client';
119
+
120
+ import { useSuspenseQuery } from '@tanstack/react-query';
121
+
122
+ function UserProfile({ userId }: { userId: string }) {
123
+ // Data is guaranteed to exist - no loading checks needed
124
+ const { data: user } = useSuspenseQuery({
125
+ queryKey: ['user', userId],
126
+ queryFn: () => fetchUser(userId),
127
+ });
128
+
129
+ return <ProfileCard user={user} />;
130
+ }
131
+
132
+ // In parent component
133
+ import { Suspense } from 'react';
134
+
135
+ export default function Page() {
136
+ return (
137
+ <Suspense fallback={<ProfileSkeleton />}>
138
+ <UserProfile userId="123" />
139
+ </Suspense>
140
+ );
141
+ }
142
+ ```
143
+
144
+ ---
145
+
146
+ ## Prefetching Patterns
147
+
148
+ ### Server Component with await
149
+
150
+ ```typescript
151
+ // app/posts/page.tsx
152
+ import { dehydrate, HydrationBoundary, QueryClient } from '@tanstack/react-query';
153
+ import PostList from './post-list';
154
+
155
+ export default async function PostsPage() {
156
+ const queryClient = new QueryClient();
157
+
158
+ await queryClient.prefetchQuery({
159
+ queryKey: ['posts'],
160
+ queryFn: getPosts,
161
+ });
162
+
163
+ return (
164
+ <HydrationBoundary state={dehydrate(queryClient)}>
165
+ <PostList />
166
+ </HydrationBoundary>
167
+ );
168
+ }
169
+ ```
170
+
171
+ ### Streaming (Without await)
172
+
173
+ ```typescript
174
+ // Allows streaming - doesn't block render
175
+ export default function PostsPage() {
176
+ const queryClient = getQueryClient();
177
+
178
+ // No await - shows loading on client
179
+ queryClient.prefetchQuery({
180
+ queryKey: ['posts'],
181
+ queryFn: getPosts,
182
+ });
183
+
184
+ return (
185
+ <HydrationBoundary state={dehydrate(queryClient)}>
186
+ <PostList />
187
+ </HydrationBoundary>
188
+ );
189
+ }
190
+ ```
191
+
192
+ ---
193
+
194
+ ## Custom Query Hooks
195
+
196
+ ### Create Reusable Hooks
197
+
198
+ ```typescript
199
+ // hooks/useUser.ts
200
+ export function useUser(userId: string) {
201
+ return useQuery({
202
+ queryKey: ['user', userId],
203
+ queryFn: () => api.getUser(userId),
204
+ enabled: !!userId,
205
+ });
206
+ }
207
+
208
+ // hooks/useUsers.ts
209
+ export function useUsers(filters?: UserFilters) {
210
+ return useQuery({
211
+ queryKey: ['users', filters],
212
+ queryFn: () => api.getUsers(filters),
213
+ });
214
+ }
215
+
216
+ // Usage
217
+ function UserCard({ userId }: { userId: string }) {
218
+ const { data: user, isLoading } = useUser(userId);
219
+ if (isLoading) return <Skeleton />;
220
+ return <Card user={user} />;
221
+ }
222
+ ```
223
+
224
+ ---
225
+
226
+ ## Query Key Factories
227
+
228
+ Ensure consistency across your app:
229
+
230
+ ```typescript
231
+ // lib/query-keys.ts
232
+ export const userKeys = {
233
+ all: ['users'] as const,
234
+ lists: () => [...userKeys.all, 'list'] as const,
235
+ list: (filters: string) => [...userKeys.lists(), { filters }] as const,
236
+ details: () => [...userKeys.all, 'detail'] as const,
237
+ detail: (id: string) => [...userKeys.details(), id] as const,
238
+ };
239
+
240
+ export const postKeys = {
241
+ all: ['posts'] as const,
242
+ lists: () => [...postKeys.all, 'list'] as const,
243
+ list: (filters?: PostFilters) => [...postKeys.lists(), filters] as const,
244
+ detail: (id: string) => [...postKeys.all, 'detail', id] as const,
245
+ byUser: (userId: string) => [...postKeys.all, 'user', userId] as const,
246
+ };
247
+ ```
248
+
249
+ ### Usage
250
+
251
+ ```typescript
252
+ // In components
253
+ useQuery({ queryKey: userKeys.detail(userId), queryFn: () => getUser(userId) });
254
+ useQuery({ queryKey: postKeys.byUser(userId), queryFn: () => getUserPosts(userId) });
255
+
256
+ // Invalidation
257
+ queryClient.invalidateQueries({ queryKey: userKeys.all }); // All users
258
+ queryClient.invalidateQueries({ queryKey: userKeys.detail(id) }); // Specific user
259
+ queryClient.invalidateQueries({ queryKey: postKeys.byUser(userId) }); // User's posts
260
+ ```
261
+
262
+ ---
263
+
264
+ ## Mutations
265
+
266
+ ### Basic Mutation
267
+
268
+ ```typescript
269
+ const mutation = useMutation({
270
+ mutationFn: (newUser: CreateUser) => api.createUser(newUser),
271
+ onSuccess: () => {
272
+ queryClient.invalidateQueries({ queryKey: userKeys.all });
273
+ },
274
+ });
275
+
276
+ // Usage
277
+ <button onClick={() => mutation.mutate({ name: 'John' })}>
278
+ {mutation.isPending ? 'Creating...' : 'Create User'}
279
+ </button>
280
+ ```
281
+
282
+ ### Optimistic Updates
283
+
284
+ ```typescript
285
+ const updateUserMutation = useMutation({
286
+ mutationFn: updateUser,
287
+
288
+ onMutate: async (newUser) => {
289
+ // Cancel outgoing refetches
290
+ await queryClient.cancelQueries({ queryKey: userKeys.detail(newUser.id) });
291
+
292
+ // Snapshot previous value
293
+ const previousUser = queryClient.getQueryData(userKeys.detail(newUser.id));
294
+
295
+ // Optimistically update
296
+ queryClient.setQueryData(userKeys.detail(newUser.id), newUser);
297
+
298
+ return { previousUser };
299
+ },
300
+
301
+ onError: (err, newUser, context) => {
302
+ // Rollback on error
303
+ queryClient.setQueryData(
304
+ userKeys.detail(newUser.id),
305
+ context?.previousUser
306
+ );
307
+ },
308
+
309
+ onSettled: (data, error, variables) => {
310
+ // Always refetch to ensure consistency
311
+ queryClient.invalidateQueries({ queryKey: userKeys.detail(variables.id) });
312
+ },
313
+ });
314
+ ```
315
+
316
+ ### Form Mutation Hook
317
+
318
+ ```typescript
319
+ export function useUpdateUser() {
320
+ const queryClient = useQueryClient();
321
+
322
+ return useMutation({
323
+ mutationFn: (data: UpdateUser) => api.updateUser(data),
324
+ onSuccess: (data, variables) => {
325
+ queryClient.invalidateQueries({ queryKey: userKeys.detail(variables.id) });
326
+ queryClient.invalidateQueries({ queryKey: userKeys.lists() });
327
+ },
328
+ });
329
+ }
330
+
331
+ // Usage in form
332
+ function EditUserForm({ userId }: { userId: string }) {
333
+ const { data: user } = useUser(userId);
334
+ const updateUser = useUpdateUser();
335
+
336
+ const handleSubmit = (formData: FormData) => {
337
+ updateUser.mutate({
338
+ id: userId,
339
+ name: formData.get('name') as string,
340
+ });
341
+ };
342
+
343
+ return (
344
+ <form action={handleSubmit}>
345
+ <input name="name" defaultValue={user?.name} />
346
+ <button disabled={updateUser.isPending}>
347
+ {updateUser.isPending ? 'Saving...' : 'Save'}
348
+ </button>
349
+ </form>
350
+ );
351
+ }
352
+ ```
353
+
354
+ ---
355
+
356
+ ## Infinite Queries
357
+
358
+ ```typescript
359
+ function ProjectList() {
360
+ const {
361
+ data,
362
+ fetchNextPage,
363
+ hasNextPage,
364
+ isFetchingNextPage,
365
+ } = useInfiniteQuery({
366
+ queryKey: ['projects'],
367
+ queryFn: ({ pageParam }) => fetchProjects(pageParam),
368
+ initialPageParam: 0,
369
+ getNextPageParam: (lastPage) => lastPage.nextCursor,
370
+ maxPages: 5, // Limit memory usage
371
+ });
372
+
373
+ return (
374
+ <>
375
+ {data?.pages.map((page, i) => (
376
+ <Fragment key={i}>
377
+ {page.data.map((project) => (
378
+ <ProjectCard key={project.id} project={project} />
379
+ ))}
380
+ </Fragment>
381
+ ))}
382
+
383
+ <button
384
+ onClick={() => fetchNextPage()}
385
+ disabled={!hasNextPage || isFetchingNextPage}
386
+ >
387
+ {isFetchingNextPage
388
+ ? 'Loading...'
389
+ : hasNextPage
390
+ ? 'Load More'
391
+ : 'No more projects'}
392
+ </button>
393
+ </>
394
+ );
395
+ }
396
+ ```
397
+
398
+ ---
399
+
400
+ ## Server Component Integration
401
+
402
+ ### Shared Query Options
403
+
404
+ ```typescript
405
+ // queries/posts.ts
406
+ export const postsOptions = {
407
+ queryKey: ['posts'] as const,
408
+ queryFn: async () => {
409
+ const response = await fetch('/api/posts');
410
+ return response.json();
411
+ },
412
+ staleTime: 60 * 1000,
413
+ };
414
+ ```
415
+
416
+ ### Server Prefetch
417
+
418
+ ```typescript
419
+ // app/posts/page.tsx (Server Component)
420
+ import { dehydrate, HydrationBoundary } from '@tanstack/react-query';
421
+ import { getQueryClient } from '@/app/get-query-client';
422
+ import { postsOptions } from '@/queries/posts';
423
+ import PostList from './post-list';
424
+
425
+ export default async function PostsPage() {
426
+ const queryClient = getQueryClient();
427
+ await queryClient.prefetchQuery(postsOptions);
428
+
429
+ return (
430
+ <HydrationBoundary state={dehydrate(queryClient)}>
431
+ <PostList />
432
+ </HydrationBoundary>
433
+ );
434
+ }
435
+ ```
436
+
437
+ ### Client Consumption
438
+
439
+ ```typescript
440
+ // app/posts/post-list.tsx (Client Component)
441
+ 'use client';
442
+
443
+ import { useQuery } from '@tanstack/react-query';
444
+ import { postsOptions } from '@/queries/posts';
445
+
446
+ export function PostList() {
447
+ const { data: posts } = useQuery(postsOptions);
448
+
449
+ return (
450
+ <ul>
451
+ {posts?.map((post) => (
452
+ <li key={post.id}>{post.title}</li>
453
+ ))}
454
+ </ul>
455
+ );
456
+ }
457
+ ```
458
+
459
+ ---
460
+
461
+ ## Query Invalidation Strategies
462
+
463
+ ```typescript
464
+ // After mutation - invalidate related queries
465
+ const mutation = useMutation({
466
+ mutationFn: createPost,
467
+ onSuccess: () => {
468
+ // Invalidate all posts
469
+ queryClient.invalidateQueries({ queryKey: ['posts'] });
470
+
471
+ // Invalidate specific user's posts
472
+ queryClient.invalidateQueries({ queryKey: ['posts', 'user', userId] });
473
+
474
+ // Invalidate exact match only
475
+ queryClient.invalidateQueries({ queryKey: ['posts'], exact: true });
476
+ },
477
+ });
478
+
479
+ // Refetch vs Invalidate
480
+ queryClient.invalidateQueries({ queryKey: ['posts'] }); // Mark stale, fetch on next use
481
+ queryClient.refetchQueries({ queryKey: ['posts'] }); // Fetch immediately
482
+ ```
483
+
484
+ ---
485
+
486
+ ## Configuration Options
487
+
488
+ | Option | Default | Recommended |
489
+ |--------|---------|-------------|
490
+ | `staleTime` | 0 | 60000 (1 min) |
491
+ | `gcTime` | 5 min | Keep default |
492
+ | `retry` | 3 | 1 |
493
+ | `refetchOnWindowFocus` | true | false |
494
+ | `refetchOnReconnect` | true | true |
495
+
496
+ ---
497
+
498
+ ## Best Practices Summary
499
+
500
+ ### Do's ✅
501
+ - Use `getQueryClient()` pattern for SSR
502
+ - Set `staleTime > 0` to prevent immediate refetch
503
+ - Use `HydrationBoundary` to bridge server/client
504
+ - Implement query key factories
505
+ - Use `useSuspenseQuery` with Suspense boundaries
506
+ - Cancel queries before optimistic updates
507
+ - Always invalidate after mutations
508
+ - Use `maxPages` for infinite queries
509
+
510
+ ### Don'ts ❌
511
+ - Don't fetch in useEffect
512
+ - Don't store query data in useState
513
+ - Don't use string-only query keys
514
+ - Don't forget to invalidate after mutations
515
+ - Don't ignore loading/error states
516
+ - Don't skip error boundaries