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,121 @@
1
+ #!/usr/bin/env bun
2
+
3
+ import { join } from "node:path";
4
+ import type { HookInput, HookOutput } from "./lib/types";
5
+ import { CommandValidator } from "./lib/validator";
6
+
7
+ const LOG_FILE = join(import.meta.dir, "../data/security.log");
8
+
9
+ async function logSecurityEvent(
10
+ command: string,
11
+ toolName: string,
12
+ result: { isValid: boolean; severity: string; violations: string[] },
13
+ sessionId: string | null,
14
+ ) {
15
+ const timestamp = new Date().toISOString();
16
+ const logEntry = {
17
+ timestamp,
18
+ sessionId,
19
+ toolName,
20
+ command: command.substring(0, 500),
21
+ blocked: !result.isValid,
22
+ severity: result.severity,
23
+ violations: result.violations,
24
+ source: "claude-code-hook",
25
+ };
26
+
27
+ try {
28
+ const logLine = `${JSON.stringify(logEntry)}\n`;
29
+ const file = Bun.file(LOG_FILE);
30
+ const exists = await file.exists();
31
+
32
+ if (exists) {
33
+ const existingContent = await file.text();
34
+ await Bun.write(LOG_FILE, existingContent + logLine);
35
+ } else {
36
+ await Bun.write(LOG_FILE, logLine);
37
+ }
38
+
39
+ console.error(
40
+ `[SECURITY] ${result.isValid ? "ALLOWED" : "BLOCKED"}: ${command.substring(0, 100)}`,
41
+ );
42
+ } catch (error) {
43
+ console.error("Failed to write security log:", error);
44
+ }
45
+ }
46
+
47
+ async function main() {
48
+ const validator = new CommandValidator();
49
+
50
+ try {
51
+ const stdin = process.stdin;
52
+ const chunks: Buffer[] = [];
53
+
54
+ for await (const chunk of stdin) {
55
+ chunks.push(chunk);
56
+ }
57
+
58
+ const input = Buffer.concat(chunks).toString();
59
+
60
+ if (!input.trim()) {
61
+ console.error("No input received from stdin");
62
+ process.exit(1);
63
+ }
64
+
65
+ let hookData: HookInput;
66
+ try {
67
+ hookData = JSON.parse(input);
68
+ } catch (error) {
69
+ console.error("Invalid JSON input:", (error as Error).message);
70
+ process.exit(1);
71
+ }
72
+
73
+ const toolName = hookData.tool_name || "Unknown";
74
+ const toolInput = hookData.tool_input || {};
75
+ const sessionId = hookData.session_id || null;
76
+
77
+ if (toolName !== "Bash") {
78
+ console.log(`Skipping validation for tool: ${toolName}`);
79
+ process.exit(0);
80
+ }
81
+
82
+ const command = toolInput.command;
83
+ if (!command) {
84
+ console.error("No command found in tool input");
85
+ process.exit(1);
86
+ }
87
+
88
+ const result = validator.validate(command, toolName);
89
+
90
+ await logSecurityEvent(command, toolName, result, sessionId);
91
+
92
+ if (result.isValid) {
93
+ console.log("Command validation passed");
94
+ process.exit(0);
95
+ }
96
+
97
+ const message =
98
+ result.action === "deny"
99
+ ? `Command blocked!\n\nCommand: ${command}\nReason: ${result.violations.join(", ")}\nSeverity: ${result.severity}`
100
+ : `⚠️ Potentially dangerous command\n\nCommand: ${command}\nReason: ${result.violations.join(", ")}\nSeverity: ${result.severity}\n\nDo you want to proceed?`;
101
+
102
+ const hookOutput: HookOutput = {
103
+ hookSpecificOutput: {
104
+ hookEventName: "PreToolUse",
105
+ permissionDecision: result.action === "deny" ? "deny" : "ask",
106
+ permissionDecisionReason: message,
107
+ },
108
+ };
109
+
110
+ console.log(JSON.stringify(hookOutput));
111
+ process.exit(0);
112
+ } catch (error) {
113
+ console.error("Validation script error:", error);
114
+ process.exit(2);
115
+ }
116
+ }
117
+
118
+ main().catch((error) => {
119
+ console.error("Fatal error:", error);
120
+ process.exit(2);
121
+ });
@@ -0,0 +1,174 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ import type { SecurityRules } from "./types";
4
+
5
+ export const SECURITY_RULES: SecurityRules = {
6
+ CRITICAL_COMMANDS: [
7
+ "del",
8
+ "format",
9
+ "mkfs",
10
+ "shred",
11
+ "dd",
12
+ "fdisk",
13
+ "parted",
14
+ "gparted",
15
+ "cfdisk",
16
+ ],
17
+
18
+ PRIVILEGE_COMMANDS: [
19
+ "sudo",
20
+ "su",
21
+ "passwd",
22
+ "chpasswd",
23
+ "usermod",
24
+ "chmod",
25
+ "chown",
26
+ "chgrp",
27
+ "setuid",
28
+ "setgid",
29
+ ],
30
+
31
+ NETWORK_COMMANDS: [
32
+ "nc",
33
+ "netcat",
34
+ "nmap",
35
+ "telnet",
36
+ "ssh-keygen",
37
+ "iptables",
38
+ "ufw",
39
+ "firewall-cmd",
40
+ "ipfw",
41
+ ],
42
+
43
+ SYSTEM_COMMANDS: [
44
+ "systemctl",
45
+ "service",
46
+ "kill",
47
+ "killall",
48
+ "pkill",
49
+ "mount",
50
+ "umount",
51
+ "swapon",
52
+ "swapoff",
53
+ ],
54
+
55
+ DANGEROUS_PATTERNS: [
56
+ /rm\s+.*-rf\s*\/\s*$/i,
57
+ /rm\s+.*-rf\s*\/etc/i,
58
+ /rm\s+.*-rf\s*\/usr/i,
59
+ /rm\s+.*-rf\s*\/bin/i,
60
+ /rm\s+.*-rf\s*\/sys/i,
61
+ /rm\s+.*-rf\s*\/proc/i,
62
+ /rm\s+.*-rf\s*\/boot/i,
63
+ /rm\s+.*-rf\s*\/home\/[^/]*\s*$/i,
64
+ /rm\s+.*-rf\s*\.\.+\//i,
65
+ /rm\s+.*-rf\s*\*.*\*/i,
66
+ /rm\s+.*-rf\s*\$\w+/i,
67
+ />\s*\/dev\/(sda|hda|nvme)/i,
68
+ /dd\s+.*of=\/dev\//i,
69
+ /shred\s+.*\/dev\//i,
70
+ /mkfs\.\w+\s+\/dev\//i,
71
+ /:\(\)\{\s*:\|:&\s*\};:/,
72
+ /while\s+true\s*;\s*do.*done/i,
73
+ /for\s*\(\(\s*;\s*;\s*\)\)/i,
74
+ /\|\s*(sh|bash|zsh|fish)$/i,
75
+ /(wget|curl)\s+.*\|\s*(sh|bash)/i,
76
+ /(wget|curl)\s+.*-O-.*\|\s*(sh|bash)/i,
77
+ /`.*rm.*`/i,
78
+ /\$\(.*rm.*\)/i,
79
+ /`.*dd.*`/i,
80
+ /\$\(.*dd.*\)/i,
81
+ /cat\s+\/etc\/(passwd|shadow|sudoers)/i,
82
+ />\s*\/etc\/(passwd|shadow|sudoers)/i,
83
+ /echo\s+.*>>\s*\/etc\/(passwd|shadow|sudoers)/i,
84
+ /\|\s*nc\s+\S+\s+\d+/i,
85
+ /curl\s+.*-d.*\$\(/i,
86
+ /wget\s+.*--post-data.*\$\(/i,
87
+ />\s*\/var\/log\//i,
88
+ /rm\s+\/var\/log\//i,
89
+ /echo\s+.*>\s*~?\/?\.bash_history/i,
90
+ /nc\s+.*-l.*-e/i,
91
+ /nc\s+.*-e.*-l/i,
92
+ /ncat\s+.*--exec/i,
93
+ /ssh-keygen.*authorized_keys/i,
94
+ /(wget|curl).*\.(sh|py|pl|exe|bin).*\|\s*(sh|bash|python)/i,
95
+ /(xmrig|ccminer|cgminer|bfgminer)/i,
96
+ /cat\s+\/dev\/(mem|kmem)/i,
97
+ /echo\s+.*>\s*\/dev\/(mem|kmem)/i,
98
+ /(insmod|rmmod|modprobe)\s+/i,
99
+ /crontab\s+-e/i,
100
+ /echo\s+.*>>\s*\/var\/spool\/cron/i,
101
+ /env\s*\|\s*grep.*PASSWORD/i,
102
+ /printenv.*PASSWORD/i,
103
+ /docker\s+(rm|rmi|kill|stop)\s+.*\$\(/i,
104
+ /docker\s+system\s+prune.*-a/i,
105
+ /docker\s+container\s+prune.*-f/i,
106
+ /docker\s+volume\s+rm.*\$\(/i,
107
+ /docker\s+network\s+rm.*\$\(/i,
108
+ /prisma\s+(migrate\s+reset|db\s+push\s+--force-reset)/i,
109
+ ],
110
+
111
+ PROTECTED_PATHS: [
112
+ "/etc/",
113
+ "/usr/",
114
+ "/sbin/",
115
+ "/boot/",
116
+ "/sys/",
117
+ "/proc/",
118
+ "/dev/",
119
+ "/root/",
120
+ ],
121
+
122
+ SAFE_EXECUTABLE_PATHS: [
123
+ "/Applications/",
124
+ "/usr/local/bin/",
125
+ "/usr/bin/",
126
+ "/bin/",
127
+ "/opt/",
128
+ ],
129
+
130
+ SAFE_RM_PATHS: [
131
+ join(homedir(), "Developer/"),
132
+ "/tmp/",
133
+ "/var/tmp/",
134
+ `${process.cwd()}/`,
135
+ ],
136
+ };
137
+
138
+ export const SAFE_COMMANDS = [
139
+ "ls",
140
+ "dir",
141
+ "pwd",
142
+ "whoami",
143
+ "date",
144
+ "echo",
145
+ "cat",
146
+ "head",
147
+ "tail",
148
+ "grep",
149
+ "find",
150
+ "wc",
151
+ "sort",
152
+ "uniq",
153
+ "cut",
154
+ "awk",
155
+ "sed",
156
+ "git",
157
+ "npm",
158
+ "pnpm",
159
+ "node",
160
+ "bun",
161
+ "python",
162
+ "pip",
163
+ "source",
164
+ "cd",
165
+ "cp",
166
+ "mv",
167
+ "mkdir",
168
+ "touch",
169
+ "ln",
170
+ "psql",
171
+ "mysql",
172
+ "sqlite3",
173
+ "mongo",
174
+ ];
@@ -0,0 +1,34 @@
1
+ export interface HookInput {
2
+ tool_name: string;
3
+ tool_input: {
4
+ command?: string;
5
+ };
6
+ session_id?: string;
7
+ }
8
+
9
+ export interface ValidationResult {
10
+ isValid: boolean;
11
+ severity: "LOW" | "MEDIUM" | "HIGH" | "CRITICAL";
12
+ violations: string[];
13
+ sanitizedCommand: string;
14
+ action: "allow" | "deny" | "ask";
15
+ }
16
+
17
+ export interface SecurityRules {
18
+ CRITICAL_COMMANDS: string[];
19
+ PRIVILEGE_COMMANDS: string[];
20
+ NETWORK_COMMANDS: string[];
21
+ SYSTEM_COMMANDS: string[];
22
+ DANGEROUS_PATTERNS: RegExp[];
23
+ PROTECTED_PATHS: string[];
24
+ SAFE_EXECUTABLE_PATHS: string[];
25
+ SAFE_RM_PATHS: string[];
26
+ }
27
+
28
+ export interface HookOutput {
29
+ hookSpecificOutput: {
30
+ hookEventName: string;
31
+ permissionDecision: "allow" | "block" | "ask";
32
+ permissionDecisionReason: string;
33
+ };
34
+ }
@@ -0,0 +1,90 @@
1
+ import type { ValidationResult } from "./types";
2
+
3
+ const DANGEROUS_COMMANDS = [
4
+ "sudo",
5
+ "su",
6
+ "chmod",
7
+ "chown",
8
+ "dd",
9
+ "mkfs",
10
+ "fdisk",
11
+ "kill",
12
+ "killall",
13
+ ];
14
+
15
+ export class CommandValidator {
16
+ validate(command: string, _toolName = "Unknown"): ValidationResult {
17
+ const result: ValidationResult = {
18
+ isValid: true,
19
+ severity: "LOW",
20
+ violations: [],
21
+ sanitizedCommand: command,
22
+ action: "allow",
23
+ };
24
+
25
+ if (!command || typeof command !== "string") {
26
+ result.isValid = false;
27
+ result.violations.push("Invalid command format");
28
+ result.action = "deny";
29
+ return result;
30
+ }
31
+
32
+ // rm -rf → DENY (blocked completely)
33
+ if (this.containsRmRf(command)) {
34
+ result.isValid = false;
35
+ result.severity = "CRITICAL";
36
+ result.violations.push("rm -rf is forbidden - use trash instead");
37
+ result.action = "deny";
38
+ return result;
39
+ }
40
+
41
+ // Other dangerous commands → ASK (ask for permission)
42
+ const dangerousCmd = this.containsDangerousCommand(command);
43
+ if (dangerousCmd) {
44
+ result.isValid = false;
45
+ result.severity = "HIGH";
46
+ result.violations.push(`Potentially dangerous command: ${dangerousCmd}`);
47
+ result.action = "ask";
48
+ return result;
49
+ }
50
+
51
+ return result;
52
+ }
53
+
54
+ containsRmRf(command: string): boolean {
55
+ // Check for rm -rf in any form (rm -rf, rm -fr, rm -r -f, etc.)
56
+ const rmRfPatterns = [
57
+ /\brm\s+(-[a-zA-Z]*r[a-zA-Z]*f[a-zA-Z]*|-[a-zA-Z]*f[a-zA-Z]*r[a-zA-Z]*)\s/i,
58
+ /\brm\s+-r\s+-f\s/i,
59
+ /\brm\s+-f\s+-r\s/i,
60
+ ];
61
+
62
+ for (const pattern of rmRfPatterns) {
63
+ if (pattern.test(command)) {
64
+ return true;
65
+ }
66
+ }
67
+
68
+ return false;
69
+ }
70
+
71
+ containsDangerousCommand(command: string): string | null {
72
+ const normalizedCmd = command.trim().toLowerCase();
73
+ const parts = normalizedCmd.split(/\s+/);
74
+ const mainCommand = parts[0].split("/").pop() || "";
75
+
76
+ if (DANGEROUS_COMMANDS.includes(mainCommand)) {
77
+ return mainCommand;
78
+ }
79
+
80
+ // Check in chained commands
81
+ for (const dangerous of DANGEROUS_COMMANDS) {
82
+ const pattern = new RegExp(`\\b${dangerous}\\b`, "i");
83
+ if (pattern.test(command)) {
84
+ return dangerous;
85
+ }
86
+ }
87
+
88
+ return null;
89
+ }
90
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "scripts",
3
+ "type": "module",
4
+ "scripts": {
5
+ "test": "bun test auto-rename-session claude-code-ai statusline command-validator",
6
+ "auto-rename:start": "bun auto-rename-session/src/index.ts",
7
+ "auto-rename:rename-all": "bun auto-rename-session/src/rename-all.ts",
8
+ "auto-rename:test": "bun test auto-rename-session",
9
+ "validator:cli": "bun command-validator/src/cli.ts",
10
+ "validator:test": "bun test command-validator",
11
+ "validator:lint": "biome check --write command-validator",
12
+ "ai:test": "bun test claude-code-ai",
13
+ "statusline:start": "bun statusline/src/index.ts",
14
+ "statusline:test": "bun test statusline",
15
+ "statusline:test-fixtures": "bun statusline/test-with-fixtures.ts",
16
+ "statusline:spend:day": "bun statusline/src/lib/features/spend/commands/spend-day.ts",
17
+ "statusline:spend:month": "bun statusline/src/lib/features/spend/commands/spend-month.ts",
18
+ "statusline:spend:project": "bun statusline/src/lib/features/spend/commands/spend-project.ts",
19
+ "statusline:stats": "bun statusline/src/stats.ts",
20
+ "statusline:config": "bun statusline/src/commands/interactive-config.ts",
21
+ "statusline:migrate": "bun statusline/src/lib/features/spend/commands/migrate-to-sqlite.ts",
22
+ "statusline:weekly": "bun statusline/src/lib/features/limits/commands/weekly-analysis.ts",
23
+ "statusline:debug": "bun statusline/src/debug-payloads.ts",
24
+ "statusline:usage": "bun statusline/src/analyze-daily-usage.ts",
25
+ "statusline:lint": "biome check --write statusline",
26
+ "lint": "biome check --write .",
27
+ "format": "biome format --write ."
28
+ },
29
+ "dependencies": {
30
+ "@ai-sdk/anthropic": "^3.0.6",
31
+ "ai": "^6.0.11",
32
+ "picocolors": "^1.1.1",
33
+ "table": "^6.9.0",
34
+ "zod": "^4.3.5"
35
+ },
36
+ "devDependencies": {
37
+ "@biomejs/biome": "^2.3.2",
38
+ "@types/bun": "latest"
39
+ },
40
+ "peerDependencies": {
41
+ "typescript": "^5.0.0"
42
+ }
43
+ }
@@ -0,0 +1,205 @@
1
+ # Claude Code Statusline - Project Memory
2
+
3
+ ## Overview
4
+
5
+ Clean, type-safe statusline implementation for Claude Code using Bun + TypeScript. Displays real-time session information, git status, context usage, and Claude API rate limits.
6
+
7
+ ## Project Setup & Configuration
8
+
9
+ ### Dependencies
10
+
11
+ - **Bun**: Runtime (uses `$` for shell commands)
12
+ - **@biomejs/biome**: Linting & formatting
13
+ - **TypeScript**: Type safety
14
+
15
+ No external npm packages required - pure Bun APIs.
16
+
17
+ ### Configuration in Claude Code
18
+
19
+ Add to `~/.claude/settings.json`:
20
+
21
+ ```json
22
+ {
23
+ "statusLine": {
24
+ "type": "command",
25
+ "command": "bun /Users/melvynx/.claude/scripts/statusline/src/index.ts",
26
+ "padding": 0
27
+ }
28
+ }
29
+ ```
30
+
31
+ ### Authentication
32
+
33
+ OAuth token stored in macOS Keychain:
34
+
35
+ - **Service**: `Claude Code-credentials`
36
+ - **Format**: JSON with `claudeAiOauth.accessToken`
37
+ - **Token type**: `sk-ant-oat01-...` (OAuth token, not API key)
38
+ - **Access**: `security find-generic-password -s "Claude Code-credentials" -w`
39
+
40
+ ## Architecture
41
+
42
+ ### Modular Design
43
+
44
+ The project follows a clean architecture with separated concerns:
45
+
46
+ ```
47
+ src/
48
+ ├── index.ts # Main entry - orchestrates all components
49
+ └── lib/
50
+ ├── types.ts # TypeScript interfaces (HookInput)
51
+ ├── git.ts # Git operations (branch, changes)
52
+ ├── context.ts # Transcript parsing & context calculation
53
+ ├── usage-limits.ts # Claude OAuth API integration
54
+ └── formatters.ts # Display utilities & colors
55
+ ```
56
+
57
+ ### Data Flow
58
+
59
+ ```
60
+ Claude Code Hook → stdin JSON → index.ts
61
+
62
+ ┌───────────────┴───────────────┐
63
+ ↓ ↓
64
+ [Get Git Status] [Get Context Data]
65
+ ↓ ↓
66
+ [Format Branch] [Get Usage Limits]
67
+ ↓ ↓
68
+ └───────────────┬───────────────┘
69
+
70
+ [Build Output Lines]
71
+
72
+ stdout (2 lines)
73
+ ```
74
+
75
+ ## Component Specifications
76
+
77
+ ### Context Calculation (`lib/context.ts`)
78
+
79
+ - **Purpose**: Calculate token usage from Claude Code transcript files
80
+ - **Algorithm**: Parses `.jsonl` transcript, finds most recent main-chain entry
81
+ - **Tokens counted**: `input_tokens + cache_read_input_tokens + cache_creation_input_tokens`
82
+ - **Excludes**: Sidechain entries (agent calls), API error messages
83
+ - **Output**: `{ tokens: number, percentage: number }` (0-100% of 200k context)
84
+
85
+ ### Usage Limits (`lib/usage-limits.ts`)
86
+
87
+ - **Purpose**: Fetch Claude API rate limits from OAuth endpoint
88
+ - **Auth**: Retrieves OAuth token from macOS Keychain (`Claude Code-credentials`)
89
+ - **API**: `https://api.anthropic.com/api/oauth/usage`
90
+ - **Data**: Five-hour window utilization + reset time
91
+ - **Error handling**: Fails silently, returns null on errors
92
+
93
+ ### Git Status (`lib/git.ts`)
94
+
95
+ - **Purpose**: Show current branch and uncommitted changes
96
+ - **Detection**: Checks both staged and unstaged changes
97
+ - **Output**: Branch name + line additions/deletions
98
+ - **Display**: `main* (+123 -45)` with color coding
99
+
100
+ ### Formatters (`lib/formatters.ts`)
101
+
102
+ - **Colors**: ANSI color codes for terminal output
103
+ - **Token display**: `62.5K`, `1.2M` format
104
+ - **Time formatting**: `3h21m`, `45m` for countdowns
105
+ - **Reset time**: Calculates difference between API reset time and now
106
+
107
+ ## Output Specification
108
+
109
+ ### Line 1: Session Info
110
+
111
+ ```
112
+ main* (+123 -45) | ~/.claude | Sonnet 4.5
113
+ ```
114
+
115
+ ### Line 2: Metrics
116
+
117
+ ```
118
+ $0.17 (6m) | 62.5K tokens | 31% | 15% (3h27m)
119
+ ```
120
+
121
+ **Components:**
122
+
123
+ - `$0.17` - Session cost (USD)
124
+ - `(6m)` - Session duration
125
+ - `62.5K tokens` - Context tokens used (from transcript)
126
+ - `31%` - Context percentage (tokens / 200k)
127
+ - `15%` - Five-hour usage (from Claude API)
128
+ - `(3h27m)` - Time until rate limit resets
129
+
130
+ ## Development
131
+
132
+ ### Testing
133
+
134
+ ```bash
135
+ # Run test with fixture
136
+ bun run test
137
+
138
+ # Use custom fixture
139
+ bun run test fixtures/custom.json
140
+
141
+ # Manual test
142
+ echo '{ ... }' | bun run start
143
+ ```
144
+
145
+ ### Code Conventions
146
+
147
+ - **ALWAYS** use camelCase for variables and functions
148
+ - Use TypeScript strict mode
149
+ - Follow Biome formatting rules
150
+
151
+ ### Error Handling & Performance
152
+
153
+ **Error Handling** - All components fail silently:
154
+
155
+ - Missing transcript → 0 tokens, 0%
156
+ - API failure → No usage limits shown
157
+ - Git errors → "no-git" branch
158
+ - Keychain access denied → No usage limits
159
+
160
+ This ensures statusline never crashes Claude Code.
161
+
162
+ **Performance Benchmarks:**
163
+
164
+ - Context calculation: ~10-50ms (depends on transcript size)
165
+ - API call: ~100-300ms (cached by Claude API)
166
+ - Git operations: ~20-50ms
167
+ - Total: < 500ms typical
168
+
169
+ ## Maintenance Guide
170
+
171
+ ### Adding New Metrics
172
+
173
+ 1. Add interface to `lib/types.ts`
174
+ 2. Create fetcher in `lib/*.ts`
175
+ 3. Import in `index.ts`
176
+ 4. Add to `buildSecondLine()`
177
+
178
+ ### Modifying Display
179
+
180
+ - Colors: Edit `lib/formatters.ts` colors constant
181
+ - Layout: Modify `buildFirstLine()` / `buildSecondLine()`
182
+ - Formatting: Add functions to `lib/formatters.ts`
183
+
184
+ ## Known Limitations
185
+
186
+ - macOS only (uses Keychain)
187
+ - Requires `git` CLI for git status
188
+ - Requires Claude Code OAuth (not API key)
189
+ - Transcript must be accessible (permissions)
190
+
191
+ ## Critical Requirements
192
+
193
+ ### Configuration Updates
194
+
195
+ - **CRITICAL**: When updating `statusline.config.json` or `statusline.config.ts`, you **MUST** update the interactive demo in `src/commands/interactive-config.ts`
196
+ - **ALWAYS** run `bun run config` after config changes to verify the interactive demo works correctly
197
+ - **REQUIRED**: Keep config file structure in sync with interactive prompts
198
+
199
+ ### Runtime & Dependencies
200
+
201
+ - **ALWAYS** use Bun for all commands and runtime operations
202
+ - Use `bun run <script>` instead of `npm run` or `pnpm run`
203
+ - Use `bun install` for dependency management
204
+ - **AUTHORIZED LIBRARIES**: `@biomejs/biome` for linting/formatting, third-party libraries like `tiers` are permitted if needed
205
+ - **NEVER** add external npm packages without verification - prefer Bun APIs first