@codyswann/lisa 1.56.0 → 1.56.2

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 (469) hide show
  1. package/.claude-plugin/marketplace.json +11 -5
  2. package/all/merge/.claude/settings.json +7 -0
  3. package/package.json +1 -1
  4. package/plugins/lisa/.claude-plugin/plugin.json +148 -0
  5. package/plugins/lisa-cdk/.claude-plugin/plugin.json +3 -159
  6. package/plugins/lisa-expo/.claude-plugin/plugin.json +2 -146
  7. package/plugins/lisa-expo/commands/jira/add-journey.md +1 -1
  8. package/plugins/lisa-expo/commands/jira/create.md +1 -1
  9. package/plugins/lisa-expo/commands/jira/evidence.md +1 -1
  10. package/plugins/lisa-expo/commands/jira/journey.md +1 -1
  11. package/plugins/lisa-expo/commands/jira/verify.md +1 -1
  12. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +3 -159
  13. package/plugins/lisa-rails/.claude-plugin/plugin.json +2 -120
  14. package/plugins/lisa-rails/commands/jira/add-journey.md +1 -1
  15. package/plugins/lisa-rails/commands/jira/create.md +1 -1
  16. package/plugins/lisa-rails/commands/jira/evidence.md +1 -1
  17. package/plugins/lisa-rails/commands/jira/journey.md +1 -1
  18. package/plugins/lisa-rails/commands/jira/verify.md +1 -1
  19. package/plugins/lisa-rails/commands/plan/add-test-coverage.md +1 -1
  20. package/plugins/lisa-rails/commands/plan/fix-linter-error.md +1 -1
  21. package/plugins/lisa-rails/commands/plan/lower-code-complexity.md +1 -1
  22. package/plugins/lisa-rails/commands/plan/reduce-max-lines-per-function.md +1 -1
  23. package/plugins/lisa-rails/commands/plan/reduce-max-lines.md +1 -1
  24. package/plugins/lisa-typescript/.claude-plugin/plugin.json +2 -127
  25. package/plugins/src/base/.claude-plugin/plugin.json +78 -0
  26. package/plugins/src/cdk/.claude-plugin/plugin.json +2 -81
  27. package/plugins/src/expo/.claude-plugin/plugin.json +1 -68
  28. package/plugins/{lisa-typescript → src/expo}/commands/jira/add-journey.md +1 -1
  29. package/plugins/{lisa-nestjs → src/expo}/commands/jira/create.md +1 -1
  30. package/plugins/{lisa-nestjs → src/expo}/commands/jira/evidence.md +1 -1
  31. package/plugins/{lisa-nestjs → src/expo}/commands/jira/journey.md +1 -1
  32. package/plugins/{lisa-nestjs → src/expo}/commands/jira/verify.md +1 -1
  33. package/plugins/src/nestjs/.claude-plugin/plugin.json +2 -81
  34. package/plugins/src/rails/.claude-plugin/plugin.json +1 -59
  35. package/plugins/{lisa-nestjs → src/rails}/commands/jira/add-journey.md +1 -1
  36. package/plugins/{lisa-typescript → src/rails}/commands/jira/create.md +1 -1
  37. package/plugins/{lisa-typescript → src/rails}/commands/jira/evidence.md +1 -1
  38. package/plugins/{lisa-typescript → src/rails}/commands/jira/journey.md +1 -1
  39. package/plugins/{lisa-typescript → src/rails}/commands/jira/verify.md +1 -1
  40. package/plugins/{lisa-expo → src/rails}/commands/plan/add-test-coverage.md +1 -1
  41. package/plugins/{lisa-expo → src/rails}/commands/plan/fix-linter-error.md +1 -1
  42. package/plugins/{lisa-expo → src/rails}/commands/plan/lower-code-complexity.md +1 -1
  43. package/plugins/{lisa-expo → src/rails}/commands/plan/reduce-max-lines-per-function.md +1 -1
  44. package/plugins/{lisa-expo → src/rails}/commands/plan/reduce-max-lines.md +1 -1
  45. package/plugins/src/typescript/.claude-plugin/plugin.json +1 -58
  46. package/scripts/build-plugins.sh +30 -17
  47. package/scripts/install-claude-plugins.sh +28 -11
  48. package/typescript/merge/.claude/settings.json +2 -2
  49. package/typescript/package-lisa/package.lisa.json +2 -1
  50. package/plugins/lisa-expo/agents/agent-architect.md +0 -310
  51. package/plugins/lisa-expo/agents/architecture-specialist.md +0 -53
  52. package/plugins/lisa-expo/agents/debug-specialist.md +0 -204
  53. package/plugins/lisa-expo/agents/git-history-analyzer.md +0 -183
  54. package/plugins/lisa-expo/agents/hooks-expert.md +0 -74
  55. package/plugins/lisa-expo/agents/implementer.md +0 -54
  56. package/plugins/lisa-expo/agents/learner.md +0 -44
  57. package/plugins/lisa-expo/agents/performance-specialist.md +0 -95
  58. package/plugins/lisa-expo/agents/product-specialist.md +0 -72
  59. package/plugins/lisa-expo/agents/quality-specialist.md +0 -55
  60. package/plugins/lisa-expo/agents/security-specialist.md +0 -58
  61. package/plugins/lisa-expo/agents/skill-evaluator.md +0 -246
  62. package/plugins/lisa-expo/agents/slash-command-architect.md +0 -87
  63. package/plugins/lisa-expo/agents/test-specialist.md +0 -64
  64. package/plugins/lisa-expo/agents/verification-specialist.md +0 -189
  65. package/plugins/lisa-expo/agents/web-search-researcher.md +0 -112
  66. package/plugins/lisa-expo/commands/git/commit-and-submit-pr.md +0 -7
  67. package/plugins/lisa-expo/commands/git/commit-submit-pr-and-verify.md +0 -7
  68. package/plugins/lisa-expo/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  69. package/plugins/lisa-expo/commands/git/commit.md +0 -7
  70. package/plugins/lisa-expo/commands/git/prune.md +0 -6
  71. package/plugins/lisa-expo/commands/git/submit-pr.md +0 -7
  72. package/plugins/lisa-expo/commands/jira/fix.md +0 -7
  73. package/plugins/lisa-expo/commands/jira/implement.md +0 -7
  74. package/plugins/lisa-expo/commands/jira/sync.md +0 -7
  75. package/plugins/lisa-expo/commands/plan/create.md +0 -6
  76. package/plugins/lisa-expo/commands/plan/execute.md +0 -7
  77. package/plugins/lisa-expo/commands/plan/local-code-review.md +0 -6
  78. package/plugins/lisa-expo/commands/pull-request/review.md +0 -7
  79. package/plugins/lisa-expo/commands/review/implementation.md +0 -7
  80. package/plugins/lisa-expo/commands/security/zap-scan.md +0 -6
  81. package/plugins/lisa-expo/commands/sonarqube/check.md +0 -6
  82. package/plugins/lisa-expo/commands/sonarqube/fix.md +0 -6
  83. package/plugins/lisa-expo/commands/tasks/load.md +0 -7
  84. package/plugins/lisa-expo/commands/tasks/sync.md +0 -7
  85. package/plugins/lisa-expo/hooks/debug-hook.sh +0 -47
  86. package/plugins/lisa-expo/hooks/enforce-plan-rules.sh +0 -15
  87. package/plugins/lisa-expo/hooks/format-on-edit.sh +0 -76
  88. package/plugins/lisa-expo/hooks/install-pkgs.sh +0 -64
  89. package/plugins/lisa-expo/hooks/lint-on-edit.sh +0 -81
  90. package/plugins/lisa-expo/hooks/notify-ntfy.sh +0 -183
  91. package/plugins/lisa-expo/hooks/setup-jira-cli.sh +0 -52
  92. package/plugins/lisa-expo/hooks/sg-scan-on-edit.sh +0 -68
  93. package/plugins/lisa-expo/hooks/sync-tasks.sh +0 -107
  94. package/plugins/lisa-expo/hooks/ticket-sync-reminder.sh +0 -23
  95. package/plugins/lisa-expo/hooks/track-plan-sessions.sh +0 -164
  96. package/plugins/lisa-expo/hooks/verify-completion.sh +0 -77
  97. package/plugins/lisa-expo/rules/README.md +0 -240
  98. package/plugins/lisa-expo/rules/coding-philosophy.md +0 -428
  99. package/plugins/lisa-expo/rules/lisa.md +0 -37
  100. package/plugins/lisa-expo/rules/verfication.md +0 -596
  101. package/plugins/lisa-expo/skills/agent-design-best-practices/SKILL.md +0 -219
  102. package/plugins/lisa-expo/skills/git-commit/SKILL.md +0 -48
  103. package/plugins/lisa-expo/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  104. package/plugins/lisa-expo/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  105. package/plugins/lisa-expo/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  106. package/plugins/lisa-expo/skills/git-prune/SKILL.md +0 -35
  107. package/plugins/lisa-expo/skills/git-submit-pr/SKILL.md +0 -44
  108. package/plugins/lisa-expo/skills/jira-fix/SKILL.md +0 -16
  109. package/plugins/lisa-expo/skills/jira-implement/SKILL.md +0 -18
  110. package/plugins/lisa-expo/skills/jira-sync/SKILL.md +0 -63
  111. package/plugins/lisa-expo/skills/jsdoc-best-practices/SKILL.md +0 -432
  112. package/plugins/lisa-expo/skills/lisa-review-implementation/SKILL.md +0 -209
  113. package/plugins/lisa-expo/skills/plan-add-test-coverage/SKILL.md +0 -44
  114. package/plugins/lisa-expo/skills/plan-execute/SKILL.md +0 -89
  115. package/plugins/lisa-expo/skills/plan-fix-linter-error/SKILL.md +0 -45
  116. package/plugins/lisa-expo/skills/plan-local-code-review/SKILL.md +0 -88
  117. package/plugins/lisa-expo/skills/plan-lower-code-complexity/SKILL.md +0 -44
  118. package/plugins/lisa-expo/skills/plan-reduce-max-lines/SKILL.md +0 -45
  119. package/plugins/lisa-expo/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  120. package/plugins/lisa-expo/skills/pull-request-review/SKILL.md +0 -68
  121. package/plugins/lisa-expo/skills/security-zap-scan/SKILL.md +0 -33
  122. package/plugins/lisa-expo/skills/sonarqube-check/SKILL.md +0 -11
  123. package/plugins/lisa-expo/skills/sonarqube-fix/SKILL.md +0 -8
  124. package/plugins/lisa-expo/skills/tasks-load/SKILL.md +0 -88
  125. package/plugins/lisa-expo/skills/tasks-sync/SKILL.md +0 -108
  126. package/plugins/lisa-nestjs/agents/agent-architect.md +0 -310
  127. package/plugins/lisa-nestjs/agents/architecture-specialist.md +0 -53
  128. package/plugins/lisa-nestjs/agents/debug-specialist.md +0 -204
  129. package/plugins/lisa-nestjs/agents/git-history-analyzer.md +0 -183
  130. package/plugins/lisa-nestjs/agents/hooks-expert.md +0 -74
  131. package/plugins/lisa-nestjs/agents/implementer.md +0 -54
  132. package/plugins/lisa-nestjs/agents/learner.md +0 -44
  133. package/plugins/lisa-nestjs/agents/performance-specialist.md +0 -95
  134. package/plugins/lisa-nestjs/agents/product-specialist.md +0 -72
  135. package/plugins/lisa-nestjs/agents/quality-specialist.md +0 -55
  136. package/plugins/lisa-nestjs/agents/security-specialist.md +0 -58
  137. package/plugins/lisa-nestjs/agents/skill-evaluator.md +0 -246
  138. package/plugins/lisa-nestjs/agents/slash-command-architect.md +0 -87
  139. package/plugins/lisa-nestjs/agents/test-specialist.md +0 -64
  140. package/plugins/lisa-nestjs/agents/verification-specialist.md +0 -189
  141. package/plugins/lisa-nestjs/agents/web-search-researcher.md +0 -112
  142. package/plugins/lisa-nestjs/commands/git/commit-and-submit-pr.md +0 -7
  143. package/plugins/lisa-nestjs/commands/git/commit-submit-pr-and-verify.md +0 -7
  144. package/plugins/lisa-nestjs/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  145. package/plugins/lisa-nestjs/commands/git/commit.md +0 -7
  146. package/plugins/lisa-nestjs/commands/git/prune.md +0 -6
  147. package/plugins/lisa-nestjs/commands/git/submit-pr.md +0 -7
  148. package/plugins/lisa-nestjs/commands/jira/fix.md +0 -7
  149. package/plugins/lisa-nestjs/commands/jira/implement.md +0 -7
  150. package/plugins/lisa-nestjs/commands/jira/sync.md +0 -7
  151. package/plugins/lisa-nestjs/commands/plan/add-test-coverage.md +0 -7
  152. package/plugins/lisa-nestjs/commands/plan/create.md +0 -6
  153. package/plugins/lisa-nestjs/commands/plan/execute.md +0 -7
  154. package/plugins/lisa-nestjs/commands/plan/fix-linter-error.md +0 -7
  155. package/plugins/lisa-nestjs/commands/plan/local-code-review.md +0 -6
  156. package/plugins/lisa-nestjs/commands/plan/lower-code-complexity.md +0 -6
  157. package/plugins/lisa-nestjs/commands/plan/reduce-max-lines-per-function.md +0 -7
  158. package/plugins/lisa-nestjs/commands/plan/reduce-max-lines.md +0 -7
  159. package/plugins/lisa-nestjs/commands/pull-request/review.md +0 -7
  160. package/plugins/lisa-nestjs/commands/review/implementation.md +0 -7
  161. package/plugins/lisa-nestjs/commands/security/zap-scan.md +0 -6
  162. package/plugins/lisa-nestjs/commands/sonarqube/check.md +0 -6
  163. package/plugins/lisa-nestjs/commands/sonarqube/fix.md +0 -6
  164. package/plugins/lisa-nestjs/commands/tasks/load.md +0 -7
  165. package/plugins/lisa-nestjs/commands/tasks/sync.md +0 -7
  166. package/plugins/lisa-nestjs/hooks/debug-hook.sh +0 -47
  167. package/plugins/lisa-nestjs/hooks/enforce-plan-rules.sh +0 -15
  168. package/plugins/lisa-nestjs/hooks/format-on-edit.sh +0 -76
  169. package/plugins/lisa-nestjs/hooks/install-pkgs.sh +0 -64
  170. package/plugins/lisa-nestjs/hooks/lint-on-edit.sh +0 -81
  171. package/plugins/lisa-nestjs/hooks/notify-ntfy.sh +0 -183
  172. package/plugins/lisa-nestjs/hooks/setup-jira-cli.sh +0 -52
  173. package/plugins/lisa-nestjs/hooks/sg-scan-on-edit.sh +0 -68
  174. package/plugins/lisa-nestjs/hooks/sync-tasks.sh +0 -107
  175. package/plugins/lisa-nestjs/hooks/ticket-sync-reminder.sh +0 -23
  176. package/plugins/lisa-nestjs/hooks/track-plan-sessions.sh +0 -164
  177. package/plugins/lisa-nestjs/hooks/verify-completion.sh +0 -77
  178. package/plugins/lisa-nestjs/rules/README.md +0 -240
  179. package/plugins/lisa-nestjs/rules/coding-philosophy.md +0 -428
  180. package/plugins/lisa-nestjs/rules/lisa.md +0 -37
  181. package/plugins/lisa-nestjs/rules/verfication.md +0 -596
  182. package/plugins/lisa-nestjs/skills/agent-design-best-practices/SKILL.md +0 -219
  183. package/plugins/lisa-nestjs/skills/git-commit/SKILL.md +0 -48
  184. package/plugins/lisa-nestjs/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  185. package/plugins/lisa-nestjs/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  186. package/plugins/lisa-nestjs/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  187. package/plugins/lisa-nestjs/skills/git-prune/SKILL.md +0 -35
  188. package/plugins/lisa-nestjs/skills/git-submit-pr/SKILL.md +0 -44
  189. package/plugins/lisa-nestjs/skills/jira-add-journey/SKILL.md +0 -120
  190. package/plugins/lisa-nestjs/skills/jira-create/SKILL.md +0 -95
  191. package/plugins/lisa-nestjs/skills/jira-evidence/SKILL.md +0 -73
  192. package/plugins/lisa-nestjs/skills/jira-evidence/scripts/post-evidence.sh +0 -163
  193. package/plugins/lisa-nestjs/skills/jira-fix/SKILL.md +0 -16
  194. package/plugins/lisa-nestjs/skills/jira-implement/SKILL.md +0 -18
  195. package/plugins/lisa-nestjs/skills/jira-journey/SKILL.md +0 -125
  196. package/plugins/lisa-nestjs/skills/jira-journey/scripts/generate-templates.py +0 -233
  197. package/plugins/lisa-nestjs/skills/jira-journey/scripts/parse-plan.py +0 -368
  198. package/plugins/lisa-nestjs/skills/jira-sync/SKILL.md +0 -63
  199. package/plugins/lisa-nestjs/skills/jira-verify/SKILL.md +0 -48
  200. package/plugins/lisa-nestjs/skills/jsdoc-best-practices/SKILL.md +0 -432
  201. package/plugins/lisa-nestjs/skills/lisa-review-implementation/SKILL.md +0 -209
  202. package/plugins/lisa-nestjs/skills/plan-add-test-coverage/SKILL.md +0 -44
  203. package/plugins/lisa-nestjs/skills/plan-execute/SKILL.md +0 -89
  204. package/plugins/lisa-nestjs/skills/plan-fix-linter-error/SKILL.md +0 -45
  205. package/plugins/lisa-nestjs/skills/plan-local-code-review/SKILL.md +0 -88
  206. package/plugins/lisa-nestjs/skills/plan-lower-code-complexity/SKILL.md +0 -44
  207. package/plugins/lisa-nestjs/skills/plan-reduce-max-lines/SKILL.md +0 -45
  208. package/plugins/lisa-nestjs/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  209. package/plugins/lisa-nestjs/skills/pull-request-review/SKILL.md +0 -68
  210. package/plugins/lisa-nestjs/skills/security-zap-scan/SKILL.md +0 -33
  211. package/plugins/lisa-nestjs/skills/sonarqube-check/SKILL.md +0 -11
  212. package/plugins/lisa-nestjs/skills/sonarqube-fix/SKILL.md +0 -8
  213. package/plugins/lisa-nestjs/skills/tasks-load/SKILL.md +0 -88
  214. package/plugins/lisa-nestjs/skills/tasks-sync/SKILL.md +0 -108
  215. package/plugins/lisa-rails/agents/agent-architect.md +0 -310
  216. package/plugins/lisa-rails/agents/architecture-specialist.md +0 -53
  217. package/plugins/lisa-rails/agents/debug-specialist.md +0 -204
  218. package/plugins/lisa-rails/agents/git-history-analyzer.md +0 -183
  219. package/plugins/lisa-rails/agents/hooks-expert.md +0 -74
  220. package/plugins/lisa-rails/agents/implementer.md +0 -54
  221. package/plugins/lisa-rails/agents/learner.md +0 -44
  222. package/plugins/lisa-rails/agents/performance-specialist.md +0 -95
  223. package/plugins/lisa-rails/agents/product-specialist.md +0 -72
  224. package/plugins/lisa-rails/agents/quality-specialist.md +0 -55
  225. package/plugins/lisa-rails/agents/security-specialist.md +0 -58
  226. package/plugins/lisa-rails/agents/skill-evaluator.md +0 -246
  227. package/plugins/lisa-rails/agents/slash-command-architect.md +0 -87
  228. package/plugins/lisa-rails/agents/test-specialist.md +0 -64
  229. package/plugins/lisa-rails/agents/verification-specialist.md +0 -189
  230. package/plugins/lisa-rails/agents/web-search-researcher.md +0 -112
  231. package/plugins/lisa-rails/commands/git/commit-and-submit-pr.md +0 -7
  232. package/plugins/lisa-rails/commands/git/commit-submit-pr-and-verify.md +0 -7
  233. package/plugins/lisa-rails/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  234. package/plugins/lisa-rails/commands/git/commit.md +0 -7
  235. package/plugins/lisa-rails/commands/git/prune.md +0 -6
  236. package/plugins/lisa-rails/commands/git/submit-pr.md +0 -7
  237. package/plugins/lisa-rails/commands/jira/fix.md +0 -7
  238. package/plugins/lisa-rails/commands/jira/implement.md +0 -7
  239. package/plugins/lisa-rails/commands/jira/sync.md +0 -7
  240. package/plugins/lisa-rails/commands/plan/create.md +0 -6
  241. package/plugins/lisa-rails/commands/plan/execute.md +0 -7
  242. package/plugins/lisa-rails/commands/plan/local-code-review.md +0 -6
  243. package/plugins/lisa-rails/commands/pull-request/review.md +0 -7
  244. package/plugins/lisa-rails/commands/review/implementation.md +0 -7
  245. package/plugins/lisa-rails/commands/security/zap-scan.md +0 -6
  246. package/plugins/lisa-rails/commands/sonarqube/check.md +0 -6
  247. package/plugins/lisa-rails/commands/sonarqube/fix.md +0 -6
  248. package/plugins/lisa-rails/commands/tasks/load.md +0 -7
  249. package/plugins/lisa-rails/commands/tasks/sync.md +0 -7
  250. package/plugins/lisa-rails/hooks/debug-hook.sh +0 -47
  251. package/plugins/lisa-rails/hooks/enforce-plan-rules.sh +0 -15
  252. package/plugins/lisa-rails/hooks/format-on-edit.sh +0 -76
  253. package/plugins/lisa-rails/hooks/install-pkgs.sh +0 -64
  254. package/plugins/lisa-rails/hooks/lint-on-edit.sh +0 -81
  255. package/plugins/lisa-rails/hooks/notify-ntfy.sh +0 -183
  256. package/plugins/lisa-rails/hooks/setup-jira-cli.sh +0 -52
  257. package/plugins/lisa-rails/hooks/sg-scan-on-edit.sh +0 -68
  258. package/plugins/lisa-rails/hooks/sync-tasks.sh +0 -107
  259. package/plugins/lisa-rails/hooks/ticket-sync-reminder.sh +0 -23
  260. package/plugins/lisa-rails/hooks/track-plan-sessions.sh +0 -164
  261. package/plugins/lisa-rails/hooks/verify-completion.sh +0 -77
  262. package/plugins/lisa-rails/rules/README.md +0 -240
  263. package/plugins/lisa-rails/rules/coding-philosophy.md +0 -428
  264. package/plugins/lisa-rails/rules/verfication.md +0 -596
  265. package/plugins/lisa-rails/skills/agent-design-best-practices/SKILL.md +0 -219
  266. package/plugins/lisa-rails/skills/git-commit/SKILL.md +0 -48
  267. package/plugins/lisa-rails/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  268. package/plugins/lisa-rails/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  269. package/plugins/lisa-rails/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  270. package/plugins/lisa-rails/skills/git-prune/SKILL.md +0 -35
  271. package/plugins/lisa-rails/skills/git-submit-pr/SKILL.md +0 -44
  272. package/plugins/lisa-rails/skills/jira-fix/SKILL.md +0 -16
  273. package/plugins/lisa-rails/skills/jira-implement/SKILL.md +0 -18
  274. package/plugins/lisa-rails/skills/jira-journey/scripts/generate-templates.py +0 -233
  275. package/plugins/lisa-rails/skills/jira-journey/scripts/parse-plan.py +0 -368
  276. package/plugins/lisa-rails/skills/jira-sync/SKILL.md +0 -63
  277. package/plugins/lisa-rails/skills/jsdoc-best-practices/SKILL.md +0 -432
  278. package/plugins/lisa-rails/skills/lisa-review-implementation/SKILL.md +0 -209
  279. package/plugins/lisa-rails/skills/plan-execute/SKILL.md +0 -89
  280. package/plugins/lisa-rails/skills/plan-local-code-review/SKILL.md +0 -88
  281. package/plugins/lisa-rails/skills/pull-request-review/SKILL.md +0 -68
  282. package/plugins/lisa-rails/skills/security-zap-scan/SKILL.md +0 -33
  283. package/plugins/lisa-rails/skills/sonarqube-check/SKILL.md +0 -11
  284. package/plugins/lisa-rails/skills/sonarqube-fix/SKILL.md +0 -8
  285. package/plugins/lisa-rails/skills/tasks-load/SKILL.md +0 -88
  286. package/plugins/lisa-rails/skills/tasks-sync/SKILL.md +0 -108
  287. package/plugins/lisa-typescript/agents/agent-architect.md +0 -310
  288. package/plugins/lisa-typescript/agents/architecture-specialist.md +0 -53
  289. package/plugins/lisa-typescript/agents/debug-specialist.md +0 -204
  290. package/plugins/lisa-typescript/agents/git-history-analyzer.md +0 -183
  291. package/plugins/lisa-typescript/agents/hooks-expert.md +0 -74
  292. package/plugins/lisa-typescript/agents/implementer.md +0 -54
  293. package/plugins/lisa-typescript/agents/learner.md +0 -44
  294. package/plugins/lisa-typescript/agents/performance-specialist.md +0 -95
  295. package/plugins/lisa-typescript/agents/product-specialist.md +0 -72
  296. package/plugins/lisa-typescript/agents/quality-specialist.md +0 -55
  297. package/plugins/lisa-typescript/agents/security-specialist.md +0 -58
  298. package/plugins/lisa-typescript/agents/skill-evaluator.md +0 -246
  299. package/plugins/lisa-typescript/agents/slash-command-architect.md +0 -87
  300. package/plugins/lisa-typescript/agents/test-specialist.md +0 -64
  301. package/plugins/lisa-typescript/agents/verification-specialist.md +0 -189
  302. package/plugins/lisa-typescript/agents/web-search-researcher.md +0 -112
  303. package/plugins/lisa-typescript/commands/git/commit-and-submit-pr.md +0 -7
  304. package/plugins/lisa-typescript/commands/git/commit-submit-pr-and-verify.md +0 -7
  305. package/plugins/lisa-typescript/commands/git/commit-submit-pr-deploy-and-verify.md +0 -7
  306. package/plugins/lisa-typescript/commands/git/commit.md +0 -7
  307. package/plugins/lisa-typescript/commands/git/prune.md +0 -6
  308. package/plugins/lisa-typescript/commands/git/submit-pr.md +0 -7
  309. package/plugins/lisa-typescript/commands/jira/fix.md +0 -7
  310. package/plugins/lisa-typescript/commands/jira/implement.md +0 -7
  311. package/plugins/lisa-typescript/commands/jira/sync.md +0 -7
  312. package/plugins/lisa-typescript/commands/plan/add-test-coverage.md +0 -7
  313. package/plugins/lisa-typescript/commands/plan/create.md +0 -6
  314. package/plugins/lisa-typescript/commands/plan/execute.md +0 -7
  315. package/plugins/lisa-typescript/commands/plan/fix-linter-error.md +0 -7
  316. package/plugins/lisa-typescript/commands/plan/local-code-review.md +0 -6
  317. package/plugins/lisa-typescript/commands/plan/lower-code-complexity.md +0 -6
  318. package/plugins/lisa-typescript/commands/plan/reduce-max-lines-per-function.md +0 -7
  319. package/plugins/lisa-typescript/commands/plan/reduce-max-lines.md +0 -7
  320. package/plugins/lisa-typescript/commands/pull-request/review.md +0 -7
  321. package/plugins/lisa-typescript/commands/review/implementation.md +0 -7
  322. package/plugins/lisa-typescript/commands/security/zap-scan.md +0 -6
  323. package/plugins/lisa-typescript/commands/sonarqube/check.md +0 -6
  324. package/plugins/lisa-typescript/commands/sonarqube/fix.md +0 -6
  325. package/plugins/lisa-typescript/commands/tasks/load.md +0 -7
  326. package/plugins/lisa-typescript/commands/tasks/sync.md +0 -7
  327. package/plugins/lisa-typescript/hooks/debug-hook.sh +0 -47
  328. package/plugins/lisa-typescript/hooks/enforce-plan-rules.sh +0 -15
  329. package/plugins/lisa-typescript/hooks/install-pkgs.sh +0 -64
  330. package/plugins/lisa-typescript/hooks/notify-ntfy.sh +0 -183
  331. package/plugins/lisa-typescript/hooks/setup-jira-cli.sh +0 -52
  332. package/plugins/lisa-typescript/hooks/sync-tasks.sh +0 -107
  333. package/plugins/lisa-typescript/hooks/ticket-sync-reminder.sh +0 -23
  334. package/plugins/lisa-typescript/hooks/track-plan-sessions.sh +0 -164
  335. package/plugins/lisa-typescript/hooks/verify-completion.sh +0 -77
  336. package/plugins/lisa-typescript/rules/README.md +0 -240
  337. package/plugins/lisa-typescript/rules/coding-philosophy.md +0 -428
  338. package/plugins/lisa-typescript/rules/verfication.md +0 -596
  339. package/plugins/lisa-typescript/skills/agent-design-best-practices/SKILL.md +0 -219
  340. package/plugins/lisa-typescript/skills/git-commit/SKILL.md +0 -48
  341. package/plugins/lisa-typescript/skills/git-commit-and-submit-pr/SKILL.md +0 -8
  342. package/plugins/lisa-typescript/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -7
  343. package/plugins/lisa-typescript/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -7
  344. package/plugins/lisa-typescript/skills/git-prune/SKILL.md +0 -35
  345. package/plugins/lisa-typescript/skills/git-submit-pr/SKILL.md +0 -44
  346. package/plugins/lisa-typescript/skills/jira-add-journey/SKILL.md +0 -120
  347. package/plugins/lisa-typescript/skills/jira-create/SKILL.md +0 -95
  348. package/plugins/lisa-typescript/skills/jira-evidence/SKILL.md +0 -73
  349. package/plugins/lisa-typescript/skills/jira-evidence/scripts/post-evidence.sh +0 -163
  350. package/plugins/lisa-typescript/skills/jira-fix/SKILL.md +0 -16
  351. package/plugins/lisa-typescript/skills/jira-implement/SKILL.md +0 -18
  352. package/plugins/lisa-typescript/skills/jira-journey/SKILL.md +0 -125
  353. package/plugins/lisa-typescript/skills/jira-journey/scripts/generate-templates.py +0 -233
  354. package/plugins/lisa-typescript/skills/jira-journey/scripts/parse-plan.py +0 -368
  355. package/plugins/lisa-typescript/skills/jira-sync/SKILL.md +0 -63
  356. package/plugins/lisa-typescript/skills/jira-verify/SKILL.md +0 -48
  357. package/plugins/lisa-typescript/skills/jsdoc-best-practices/SKILL.md +0 -432
  358. package/plugins/lisa-typescript/skills/lisa-review-implementation/SKILL.md +0 -209
  359. package/plugins/lisa-typescript/skills/plan-add-test-coverage/SKILL.md +0 -44
  360. package/plugins/lisa-typescript/skills/plan-execute/SKILL.md +0 -89
  361. package/plugins/lisa-typescript/skills/plan-fix-linter-error/SKILL.md +0 -45
  362. package/plugins/lisa-typescript/skills/plan-local-code-review/SKILL.md +0 -88
  363. package/plugins/lisa-typescript/skills/plan-lower-code-complexity/SKILL.md +0 -44
  364. package/plugins/lisa-typescript/skills/plan-reduce-max-lines/SKILL.md +0 -45
  365. package/plugins/lisa-typescript/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -46
  366. package/plugins/lisa-typescript/skills/pull-request-review/SKILL.md +0 -68
  367. package/plugins/lisa-typescript/skills/security-zap-scan/SKILL.md +0 -33
  368. package/plugins/lisa-typescript/skills/sonarqube-check/SKILL.md +0 -11
  369. package/plugins/lisa-typescript/skills/sonarqube-fix/SKILL.md +0 -8
  370. package/plugins/lisa-typescript/skills/tasks-load/SKILL.md +0 -88
  371. package/plugins/lisa-typescript/skills/tasks-sync/SKILL.md +0 -108
  372. package/plugins/src/base/hooks/format-on-edit.sh +0 -76
  373. package/plugins/src/base/hooks/lint-on-edit.sh +0 -81
  374. package/plugins/src/base/hooks/sg-scan-on-edit.sh +0 -68
  375. package/plugins/src/base/rules/lisa.md +0 -37
  376. /package/plugins/{lisa-cdk → lisa}/agents/agent-architect.md +0 -0
  377. /package/plugins/{lisa-cdk → lisa}/agents/architecture-specialist.md +0 -0
  378. /package/plugins/{lisa-cdk → lisa}/agents/debug-specialist.md +0 -0
  379. /package/plugins/{lisa-cdk → lisa}/agents/git-history-analyzer.md +0 -0
  380. /package/plugins/{lisa-cdk → lisa}/agents/hooks-expert.md +0 -0
  381. /package/plugins/{lisa-cdk → lisa}/agents/implementer.md +0 -0
  382. /package/plugins/{lisa-cdk → lisa}/agents/learner.md +0 -0
  383. /package/plugins/{lisa-cdk → lisa}/agents/performance-specialist.md +0 -0
  384. /package/plugins/{lisa-cdk → lisa}/agents/product-specialist.md +0 -0
  385. /package/plugins/{lisa-cdk → lisa}/agents/quality-specialist.md +0 -0
  386. /package/plugins/{lisa-cdk → lisa}/agents/security-specialist.md +0 -0
  387. /package/plugins/{lisa-cdk → lisa}/agents/skill-evaluator.md +0 -0
  388. /package/plugins/{lisa-cdk → lisa}/agents/slash-command-architect.md +0 -0
  389. /package/plugins/{lisa-cdk → lisa}/agents/test-specialist.md +0 -0
  390. /package/plugins/{lisa-cdk → lisa}/agents/verification-specialist.md +0 -0
  391. /package/plugins/{lisa-cdk → lisa}/agents/web-search-researcher.md +0 -0
  392. /package/plugins/{lisa-cdk → lisa}/commands/git/commit-and-submit-pr.md +0 -0
  393. /package/plugins/{lisa-cdk → lisa}/commands/git/commit-submit-pr-and-verify.md +0 -0
  394. /package/plugins/{lisa-cdk → lisa}/commands/git/commit-submit-pr-deploy-and-verify.md +0 -0
  395. /package/plugins/{lisa-cdk → lisa}/commands/git/commit.md +0 -0
  396. /package/plugins/{lisa-cdk → lisa}/commands/git/prune.md +0 -0
  397. /package/plugins/{lisa-cdk → lisa}/commands/git/submit-pr.md +0 -0
  398. /package/plugins/{lisa-cdk → lisa}/commands/jira/add-journey.md +0 -0
  399. /package/plugins/{lisa-cdk → lisa}/commands/jira/create.md +0 -0
  400. /package/plugins/{lisa-cdk → lisa}/commands/jira/evidence.md +0 -0
  401. /package/plugins/{lisa-cdk → lisa}/commands/jira/fix.md +0 -0
  402. /package/plugins/{lisa-cdk → lisa}/commands/jira/implement.md +0 -0
  403. /package/plugins/{lisa-cdk → lisa}/commands/jira/journey.md +0 -0
  404. /package/plugins/{lisa-cdk → lisa}/commands/jira/sync.md +0 -0
  405. /package/plugins/{lisa-cdk → lisa}/commands/jira/verify.md +0 -0
  406. /package/plugins/{lisa-cdk → lisa}/commands/plan/add-test-coverage.md +0 -0
  407. /package/plugins/{lisa-cdk → lisa}/commands/plan/create.md +0 -0
  408. /package/plugins/{lisa-cdk → lisa}/commands/plan/execute.md +0 -0
  409. /package/plugins/{lisa-cdk → lisa}/commands/plan/fix-linter-error.md +0 -0
  410. /package/plugins/{lisa-cdk → lisa}/commands/plan/local-code-review.md +0 -0
  411. /package/plugins/{lisa-cdk → lisa}/commands/plan/lower-code-complexity.md +0 -0
  412. /package/plugins/{lisa-cdk → lisa}/commands/plan/reduce-max-lines-per-function.md +0 -0
  413. /package/plugins/{lisa-cdk → lisa}/commands/plan/reduce-max-lines.md +0 -0
  414. /package/plugins/{lisa-cdk → lisa}/commands/pull-request/review.md +0 -0
  415. /package/plugins/{lisa-cdk → lisa}/commands/review/implementation.md +0 -0
  416. /package/plugins/{lisa-cdk → lisa}/commands/security/zap-scan.md +0 -0
  417. /package/plugins/{lisa-cdk → lisa}/commands/sonarqube/check.md +0 -0
  418. /package/plugins/{lisa-cdk → lisa}/commands/sonarqube/fix.md +0 -0
  419. /package/plugins/{lisa-cdk → lisa}/commands/tasks/load.md +0 -0
  420. /package/plugins/{lisa-cdk → lisa}/commands/tasks/sync.md +0 -0
  421. /package/plugins/{lisa-cdk → lisa}/hooks/debug-hook.sh +0 -0
  422. /package/plugins/{lisa-cdk → lisa}/hooks/enforce-plan-rules.sh +0 -0
  423. /package/plugins/{lisa-cdk → lisa}/hooks/install-pkgs.sh +0 -0
  424. /package/plugins/{lisa-cdk → lisa}/hooks/notify-ntfy.sh +0 -0
  425. /package/plugins/{lisa-cdk → lisa}/hooks/setup-jira-cli.sh +0 -0
  426. /package/plugins/{lisa-cdk → lisa}/hooks/sync-tasks.sh +0 -0
  427. /package/plugins/{lisa-cdk → lisa}/hooks/ticket-sync-reminder.sh +0 -0
  428. /package/plugins/{lisa-cdk → lisa}/hooks/track-plan-sessions.sh +0 -0
  429. /package/plugins/{lisa-cdk → lisa}/hooks/verify-completion.sh +0 -0
  430. /package/plugins/{lisa-cdk → lisa}/rules/README.md +0 -0
  431. /package/plugins/{lisa-cdk → lisa}/rules/coding-philosophy.md +0 -0
  432. /package/plugins/{lisa-cdk → lisa}/rules/verfication.md +0 -0
  433. /package/plugins/{lisa-cdk → lisa}/skills/agent-design-best-practices/SKILL.md +0 -0
  434. /package/plugins/{lisa-cdk → lisa}/skills/git-commit/SKILL.md +0 -0
  435. /package/plugins/{lisa-cdk → lisa}/skills/git-commit-and-submit-pr/SKILL.md +0 -0
  436. /package/plugins/{lisa-cdk → lisa}/skills/git-commit-submit-pr-and-verify/SKILL.md +0 -0
  437. /package/plugins/{lisa-cdk → lisa}/skills/git-commit-submit-pr-deploy-and-verify/SKILL.md +0 -0
  438. /package/plugins/{lisa-cdk → lisa}/skills/git-prune/SKILL.md +0 -0
  439. /package/plugins/{lisa-cdk → lisa}/skills/git-submit-pr/SKILL.md +0 -0
  440. /package/plugins/{lisa-cdk → lisa}/skills/jira-add-journey/SKILL.md +0 -0
  441. /package/plugins/{lisa-cdk → lisa}/skills/jira-create/SKILL.md +0 -0
  442. /package/plugins/{lisa-cdk → lisa}/skills/jira-evidence/SKILL.md +0 -0
  443. /package/plugins/{lisa-cdk → lisa}/skills/jira-evidence/scripts/post-evidence.sh +0 -0
  444. /package/plugins/{lisa-cdk → lisa}/skills/jira-fix/SKILL.md +0 -0
  445. /package/plugins/{lisa-cdk → lisa}/skills/jira-implement/SKILL.md +0 -0
  446. /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/SKILL.md +0 -0
  447. /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/scripts/generate-templates.py +0 -0
  448. /package/plugins/{lisa-cdk → lisa}/skills/jira-journey/scripts/parse-plan.py +0 -0
  449. /package/plugins/{lisa-cdk → lisa}/skills/jira-sync/SKILL.md +0 -0
  450. /package/plugins/{lisa-cdk → lisa}/skills/jira-verify/SKILL.md +0 -0
  451. /package/plugins/{lisa-cdk → lisa}/skills/jsdoc-best-practices/SKILL.md +0 -0
  452. /package/plugins/{lisa-cdk → lisa}/skills/lisa-review-implementation/SKILL.md +0 -0
  453. /package/plugins/{lisa-cdk → lisa}/skills/plan-add-test-coverage/SKILL.md +0 -0
  454. /package/plugins/{lisa-cdk → lisa}/skills/plan-execute/SKILL.md +0 -0
  455. /package/plugins/{lisa-cdk → lisa}/skills/plan-fix-linter-error/SKILL.md +0 -0
  456. /package/plugins/{lisa-cdk → lisa}/skills/plan-local-code-review/SKILL.md +0 -0
  457. /package/plugins/{lisa-cdk → lisa}/skills/plan-lower-code-complexity/SKILL.md +0 -0
  458. /package/plugins/{lisa-cdk → lisa}/skills/plan-reduce-max-lines/SKILL.md +0 -0
  459. /package/plugins/{lisa-cdk → lisa}/skills/plan-reduce-max-lines-per-function/SKILL.md +0 -0
  460. /package/plugins/{lisa-cdk → lisa}/skills/pull-request-review/SKILL.md +0 -0
  461. /package/plugins/{lisa-cdk → lisa}/skills/security-zap-scan/SKILL.md +0 -0
  462. /package/plugins/{lisa-cdk → lisa}/skills/sonarqube-check/SKILL.md +0 -0
  463. /package/plugins/{lisa-cdk → lisa}/skills/sonarqube-fix/SKILL.md +0 -0
  464. /package/plugins/{lisa-cdk → lisa}/skills/tasks-load/SKILL.md +0 -0
  465. /package/plugins/{lisa-cdk → lisa}/skills/tasks-sync/SKILL.md +0 -0
  466. /package/plugins/{lisa-cdk → src/typescript}/hooks/format-on-edit.sh +0 -0
  467. /package/plugins/{lisa-cdk → src/typescript}/hooks/lint-on-edit.sh +0 -0
  468. /package/plugins/{lisa-cdk → src/typescript}/hooks/sg-scan-on-edit.sh +0 -0
  469. /package/plugins/{lisa-cdk → src/typescript}/rules/lisa.md +0 -0
@@ -1,183 +0,0 @@
1
- #!/bin/bash
2
- # This file is managed by Lisa.
3
- # Do not edit directly — changes will be overwritten on the next `lisa` run.
4
- # =============================================================================
5
- # ntfy.sh Notification Hook for Claude Code
6
- # =============================================================================
7
- # Sends desktop and mobile notifications via ntfy.sh when Claude needs
8
- # attention or finishes a task.
9
- #
10
- # Setup:
11
- # 1. Install ntfy app on mobile (iOS App Store / Android Play Store)
12
- # 2. Subscribe to your unique topic in the app
13
- # 3. Set NTFY_TOPIC environment variable (e.g., in ~/.bashrc or ~/.zshrc):
14
- # export NTFY_TOPIC="my-claude-alerts-xyz123"
15
- #
16
- # @see https://ntfy.sh
17
- # =============================================================================
18
-
19
- # Read JSON input from stdin
20
- INPUT=$(cat)
21
-
22
- # Extract hook event name
23
- HOOK_EVENT=$(echo "$INPUT" | grep -o '"hook_event_name"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
24
-
25
- # Extract notification type (for Notification hooks)
26
- NOTIFICATION_TYPE=$(echo "$INPUT" | grep -o '"notification_type"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
27
-
28
- # Extract message if available
29
- MESSAGE=$(echo "$INPUT" | grep -o '"message"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
30
-
31
- # Extract session ID (first 8 chars for brevity)
32
- FULL_SESSION_ID=$(echo "$INPUT" | grep -o '"session_id"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
33
- SESSION_ID="${FULL_SESSION_ID:0:8}"
34
-
35
- # Extract transcript path for task summary
36
- TRANSCRIPT_PATH=$(echo "$INPUT" | grep -o '"transcript_path"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
37
-
38
- # Determine source (Web vs Local)
39
- if [ "$CLAUDE_CODE_REMOTE" = "true" ]; then
40
- SOURCE="Web"
41
- else
42
- SOURCE="Local"
43
- fi
44
-
45
- # Get project name from current directory
46
- PROJECT_NAME=$(basename "$CLAUDE_PROJECT_DIR" 2>/dev/null || basename "$(pwd)")
47
-
48
- # Load NTFY_TOPIC from local config if not already set
49
- if [ -z "$NTFY_TOPIC" ]; then
50
- # Check for project-local config (gitignored)
51
- if [ -f "$CLAUDE_PROJECT_DIR/.claude/env.local" ]; then
52
- # shellcheck source=/dev/null
53
- source "$CLAUDE_PROJECT_DIR/.claude/env.local"
54
- fi
55
- # Check for user-global config
56
- if [ -z "$NTFY_TOPIC" ] && [ -f "$HOME/.claude/env.local" ]; then
57
- # shellcheck source=/dev/null
58
- source "$HOME/.claude/env.local"
59
- fi
60
- fi
61
-
62
- # Exit silently if still not configured
63
- if [ -z "$NTFY_TOPIC" ]; then
64
- exit 0
65
- fi
66
-
67
- # Extract task summary from transcript (last assistant message, truncated)
68
- TASK_SUMMARY=""
69
- if [ -n "$TRANSCRIPT_PATH" ] && [ -f "$TRANSCRIPT_PATH" ]; then
70
- # Get the last assistant message from the JSONL transcript
71
- # The transcript contains lines with "type":"assistant" and "message" content
72
- # Use awk for cross-platform compatibility (tac is not available on macOS)
73
- LAST_ASSISTANT=$(awk '/"type"[[:space:]]*:[[:space:]]*"assistant"/{line=$0} END{if(line) print line}' "$TRANSCRIPT_PATH" 2>/dev/null)
74
- if [ -n "$LAST_ASSISTANT" ]; then
75
- # Extract the message content - look for text content in the message
76
- # Format: {"message":{"content":[{"type":"text","text":"..."}]}}
77
- # Use jq for robust JSON parsing when available, fallback to grep/sed
78
- if command -v jq >/dev/null 2>&1; then
79
- RAW_SUMMARY=$(echo "$LAST_ASSISTANT" | jq -r '.message.content[] | select(.type == "text") | .text' 2>/dev/null | head -1)
80
- else
81
- # Fallback: simple regex extraction (may fail on escaped quotes)
82
- RAW_SUMMARY=$(echo "$LAST_ASSISTANT" | grep -o '"text"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*: *"//' | sed 's/"$//')
83
- fi
84
- if [ -n "$RAW_SUMMARY" ]; then
85
- # Truncate to 100 chars and clean up newlines
86
- TASK_SUMMARY=$(echo "$RAW_SUMMARY" | tr '\n' ' ' | cut -c1-100)
87
- # Add ellipsis if truncated
88
- if [ ${#RAW_SUMMARY} -gt 100 ]; then
89
- TASK_SUMMARY="${TASK_SUMMARY}..."
90
- fi
91
- fi
92
- fi
93
- fi
94
-
95
- # Build session info string (shown in body)
96
- SESSION_INFO=""
97
- if [ -n "$SESSION_ID" ]; then
98
- SESSION_INFO="Session: $SESSION_ID"
99
- fi
100
-
101
- # Determine notification title and body based on hook type
102
- case "$HOOK_EVENT" in
103
- "Notification")
104
- case "$NOTIFICATION_TYPE" in
105
- "permission_prompt")
106
- TITLE="Claude [$SOURCE] - Permission Required"
107
- BODY="${MESSAGE:-Claude needs your permission to continue}"
108
- if [ -n "$SESSION_INFO" ]; then
109
- BODY="$SESSION_INFO
110
- $BODY"
111
- fi
112
- PRIORITY="high"
113
- TAGS="warning"
114
- ;;
115
- "idle_prompt")
116
- TITLE="Claude [$SOURCE] - Waiting"
117
- BODY="${MESSAGE:-Claude is waiting for your input}"
118
- if [ -n "$SESSION_INFO" ]; then
119
- BODY="$SESSION_INFO
120
- $BODY"
121
- fi
122
- PRIORITY="default"
123
- TAGS="hourglass"
124
- ;;
125
- *)
126
- TITLE="Claude [$SOURCE] - Attention"
127
- BODY="${MESSAGE:-Claude needs your attention}"
128
- if [ -n "$SESSION_INFO" ]; then
129
- BODY="$SESSION_INFO
130
- $BODY"
131
- fi
132
- PRIORITY="default"
133
- TAGS="bell"
134
- ;;
135
- esac
136
- ;;
137
- "Stop")
138
- TITLE="Claude [$SOURCE] - Finished"
139
- BODY="$PROJECT_NAME"
140
- if [ -n "$SESSION_INFO" ]; then
141
- BODY="$SESSION_INFO | $BODY"
142
- fi
143
- if [ -n "$TASK_SUMMARY" ]; then
144
- BODY="$BODY
145
- $TASK_SUMMARY"
146
- fi
147
- PRIORITY="default"
148
- TAGS="white_check_mark"
149
- ;;
150
- "SubagentStop")
151
- TITLE="Claude [$SOURCE] - Subagent Done"
152
- BODY="$PROJECT_NAME"
153
- if [ -n "$SESSION_INFO" ]; then
154
- BODY="$SESSION_INFO | $BODY"
155
- fi
156
- if [ -n "$TASK_SUMMARY" ]; then
157
- BODY="$BODY
158
- $TASK_SUMMARY"
159
- fi
160
- PRIORITY="low"
161
- TAGS="checkered_flag"
162
- ;;
163
- *)
164
- TITLE="Claude [$SOURCE]"
165
- BODY="${MESSAGE:-Event: $HOOK_EVENT}"
166
- if [ -n "$SESSION_INFO" ]; then
167
- BODY="$SESSION_INFO
168
- $BODY"
169
- fi
170
- PRIORITY="default"
171
- TAGS="robot"
172
- ;;
173
- esac
174
-
175
- # Send notification via ntfy.sh
176
- curl -s \
177
- -H "Title: $TITLE" \
178
- -H "Priority: $PRIORITY" \
179
- -H "Tags: $TAGS" \
180
- -d "$BODY" \
181
- "https://ntfy.sh/$NTFY_TOPIC" > /dev/null 2>&1
182
-
183
- exit 0
@@ -1,52 +0,0 @@
1
- #!/usr/bin/env bash
2
- ##
3
- # Writes the JIRA CLI config file from environment variables.
4
- # Runs on SessionStart so the config is available for every session.
5
- #
6
- # Required env vars (must be created in your Claude Code Web environment):
7
- # JIRA_INSTALLATION - cloud or local
8
- # JIRA_SERVER - Atlassian instance URL
9
- # JIRA_LOGIN - login email
10
- # JIRA_PROJECT - default project key
11
- # JIRA_API_TOKEN - already expected by jira-cli natively
12
- #
13
- # Optional env vars:
14
- # JIRA_BOARD - default board name
15
- ##
16
-
17
- set -euo pipefail
18
-
19
- # Fix jira-cli installation if install-pkgs.sh failed to extract correctly.
20
- # The tarball nests the binary at jira_VERSION_linux_x86_64/bin/jira,
21
- # but install-pkgs.sh expects a top-level "jira" file.
22
- if ! command -v jira &>/dev/null; then
23
- JIRA_CLI_VERSION="1.7.0"
24
- TMPDIR=$(mktemp -d)
25
- curl -sSfL "https://github.com/ankitpokhrel/jira-cli/releases/download/v${JIRA_CLI_VERSION}/jira_${JIRA_CLI_VERSION}_linux_x86_64.tar.gz" \
26
- | tar -xz -C "${TMPDIR}"
27
- cp "${TMPDIR}/jira_${JIRA_CLI_VERSION}_linux_x86_64/bin/jira" /usr/local/bin/jira
28
- chmod +x /usr/local/bin/jira
29
- rm -rf "${TMPDIR}"
30
- fi
31
-
32
- CONFIG_DIR="${HOME}/.config/.jira"
33
- CONFIG_FILE="${CONFIG_DIR}/.config.yml"
34
-
35
- # Skip config write if required vars are missing
36
- if [[ -z "${JIRA_SERVER:-}" || -z "${JIRA_LOGIN:-}" ]]; then
37
- exit 0
38
- fi
39
-
40
- mkdir -p "${CONFIG_DIR}"
41
-
42
- cat > "${CONFIG_FILE}" << EOF
43
- installation: ${JIRA_INSTALLATION:-cloud}
44
- server: ${JIRA_SERVER}
45
- login: ${JIRA_LOGIN}
46
- project: ${JIRA_PROJECT:-}
47
- board: "${JIRA_BOARD:-}"
48
- auth_type: basic
49
- epic:
50
- name: Epic Name
51
- link: Epic Link
52
- EOF
@@ -1,68 +0,0 @@
1
- #!/bin/bash
2
- # This file is managed by Lisa.
3
- # Do not edit directly — changes will be overwritten on the next `lisa` run.
4
-
5
- # Hook script to run ast-grep scan after Claude edits files
6
- # This script receives JSON input via stdin with tool information
7
- # Reference: https://docs.claude.com/en/docs/claude-code/hooks
8
- # Note: This hook is BLOCKING - it returns non-zero exit codes so Claude must fix issues
9
-
10
- # Extract file path from JSON input
11
- FILE_PATH=$(cat | grep -o '"file_path":"[^"]*"' | head -1 | cut -d'"' -f4)
12
-
13
- if [ -z "$FILE_PATH" ] || [ ! -f "$FILE_PATH" ]; then
14
- exit 0
15
- fi
16
-
17
- # Check if file type is supported (TypeScript, JavaScript)
18
- case "${FILE_PATH##*.}" in
19
- ts|tsx|js|jsx|mjs|cjs) ;;
20
- *) exit 0 ;;
21
- esac
22
-
23
- # Validate project directory
24
- if [ -z "${CLAUDE_PROJECT_DIR:-}" ]; then
25
- exit 0
26
- fi
27
-
28
- # Check if file is in a source directory
29
- RELATIVE_PATH="${FILE_PATH#$CLAUDE_PROJECT_DIR/}"
30
- case "$RELATIVE_PATH" in
31
- src/*|apps/*|libs/*|test/*|tests/*|features/*|components/*|hooks/*|screens/*|app/*|constants/*|utils/*|providers/*|stores/*) ;;
32
- *) exit 0 ;;
33
- esac
34
-
35
- cd "$CLAUDE_PROJECT_DIR" || exit 0
36
-
37
- # Verify ast-grep configuration exists
38
- if [ ! -f "sgconfig.yml" ]; then
39
- exit 0
40
- fi
41
-
42
- # Verify rules are defined
43
- RULE_COUNT=$(find ast-grep/rules -name "*.yml" -o -name "*.yaml" 2>/dev/null | grep -v ".gitkeep" | wc -l | tr -d ' ')
44
- if [ "$RULE_COUNT" -eq 0 ]; then
45
- exit 0
46
- fi
47
-
48
- # Detect package manager
49
- if [ -f "bun.lockb" ] || [ -f "bun.lock" ]; then
50
- PKG_MANAGER="bun"
51
- elif [ -f "pnpm-lock.yaml" ]; then
52
- PKG_MANAGER="pnpm"
53
- elif [ -f "yarn.lock" ]; then
54
- PKG_MANAGER="yarn"
55
- else
56
- PKG_MANAGER="npm"
57
- fi
58
-
59
- # Run ast-grep scan
60
- echo "Running ast-grep scan on: $FILE_PATH"
61
- if OUTPUT=$($PKG_MANAGER run sg:scan "$FILE_PATH" 2>&1); then
62
- echo "ast-grep: No issues found in $(basename "$FILE_PATH")"
63
- exit 0
64
- else
65
- echo "ast-grep found issues in: $FILE_PATH" >&2
66
- echo "$OUTPUT" >&2
67
- exit 1
68
- fi
@@ -1,107 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # sync-tasks.sh - Syncs Claude Code tasks to project directories
4
- #
5
- # This hook is triggered on PostToolUse for TaskCreate and TaskUpdate.
6
- # It reads the task metadata to determine the project and syncs
7
- # task JSON files to ./projects/{project}/tasks/{session-id}/
8
- #
9
- # This session-based structure preserves task history across /clear commands,
10
- # preventing overwrites when new sessions create tasks with the same IDs.
11
- #
12
- # Input (via stdin): JSON with tool_name, tool_input, tool_response
13
- #
14
-
15
- # Temporarily disable this hook
16
- exit 0
17
-
18
- set -euo pipefail
19
-
20
- # Read JSON input from stdin
21
- INPUT=$(cat)
22
-
23
- # Extract tool name
24
- TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // empty')
25
-
26
- # Only process TaskCreate and TaskUpdate
27
- if [[ "$TOOL_NAME" != "TaskCreate" && "$TOOL_NAME" != "TaskUpdate" ]]; then
28
- exit 0
29
- fi
30
-
31
- # Try to get project from multiple sources:
32
- # 1. Task metadata (passed in tool_input)
33
- # 2. .claude-active-project marker file
34
-
35
- PROJECT=""
36
-
37
- # Check tool_input metadata for project
38
- PROJECT=$(echo "$INPUT" | jq -r '.tool_input.metadata.project // empty')
39
-
40
- # If no project in metadata, check marker file
41
- if [[ -z "$PROJECT" && -f ".claude-active-project" ]]; then
42
- PROJECT=$(cat .claude-active-project | tr -d '[:space:]')
43
- fi
44
-
45
- # If still no project, skip syncing
46
- if [[ -z "$PROJECT" ]]; then
47
- exit 0
48
- fi
49
-
50
- # Validate project name (kebab-case, no path traversal)
51
- if [[ ! "$PROJECT" =~ ^[a-z0-9-]+$ ]]; then
52
- echo "Warning: Invalid project name '$PROJECT', skipping sync" >&2
53
- exit 0
54
- fi
55
-
56
- # Get task ID
57
- TASK_ID=""
58
- if [[ "$TOOL_NAME" == "TaskCreate" ]]; then
59
- # For TaskCreate, ID is in tool_response.task.id
60
- TASK_ID=$(echo "$INPUT" | jq -r '.tool_response.task.id // empty')
61
- elif [[ "$TOOL_NAME" == "TaskUpdate" ]]; then
62
- # For TaskUpdate, ID is in tool_input
63
- TASK_ID=$(echo "$INPUT" | jq -r '.tool_input.taskId // empty')
64
- fi
65
-
66
- if [[ -z "$TASK_ID" ]]; then
67
- exit 0
68
- fi
69
-
70
- # Find the task file in ~/.claude/tasks/
71
- # Tasks are stored in ~/.claude/tasks/{session-uuid}/{id}.json
72
- CLAUDE_TASKS_DIR="${HOME}/.claude/tasks"
73
- TASK_FILE=""
74
-
75
- # Get session ID from hook input (preferred - 100% accurate)
76
- SESSION_ID=$(echo "$INPUT" | jq -r '.session_id // empty')
77
-
78
- if [[ -n "$SESSION_ID" && -f "${CLAUDE_TASKS_DIR}/${SESSION_ID}/${TASK_ID}.json" ]]; then
79
- # Use session ID directly - guaranteed correct session
80
- TASK_FILE="${CLAUDE_TASKS_DIR}/${SESSION_ID}/${TASK_ID}.json"
81
- else
82
- # Fallback: find most recently modified task file with this ID
83
- # This handles edge cases where session_id isn't available
84
- TASK_FILE=$(find "$CLAUDE_TASKS_DIR" -name "${TASK_ID}.json" -exec stat -f '%m %N' {} \; 2>/dev/null | sort -rn | head -1 | cut -d' ' -f2-)
85
- fi
86
-
87
- if [[ -z "$TASK_FILE" || ! -f "$TASK_FILE" ]]; then
88
- exit 0
89
- fi
90
-
91
- # Require session ID for proper history tracking
92
- if [[ -z "$SESSION_ID" ]]; then
93
- echo "Warning: No session_id available, skipping sync" >&2
94
- exit 0
95
- fi
96
-
97
- # Ensure project tasks directory exists (includes session ID for history preservation)
98
- PROJECT_TASKS_DIR="./projects/${PROJECT}/tasks/${SESSION_ID}"
99
- mkdir -p "$PROJECT_TASKS_DIR"
100
-
101
- # Copy task file to project directory
102
- cp "$TASK_FILE" "${PROJECT_TASKS_DIR}/${TASK_ID}.json"
103
-
104
- # Optionally stage the file for git (non-blocking)
105
- git add "${PROJECT_TASKS_DIR}/${TASK_ID}.json" 2>/dev/null || true
106
-
107
- exit 0
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Ticket sync reminder hook
3
- # Runs on TaskUpdate to remind about updating linked tickets
4
- # Non-blocking (exit 0) - this is a reminder, not enforcement
5
-
6
- # Temporarily disable this hook
7
- exit 0
8
-
9
- PLANS_DIR="${CLAUDE_PROJECT_DIR}/plans"
10
-
11
- # Find the active plan file (most recently modified .md in plans/)
12
- ACTIVE_PLAN=$(find "$PLANS_DIR" -maxdepth 1 -name "*.md" -type f 2>/dev/null | head -1)
13
-
14
- if [ -z "$ACTIVE_PLAN" ]; then
15
- exit 0
16
- fi
17
-
18
- # Check if the plan contains a ticket URL (JIRA, Linear, GitHub Issues)
19
- if grep -qiE "(https?://.*(atlassian|jira|linear|github\.com/.*/issues))" "$ACTIVE_PLAN" 2>/dev/null; then
20
- echo "REMINDER: This plan is linked to a ticket. Consider running /jira:sync to update the ticket with current progress."
21
- fi
22
-
23
- exit 0
@@ -1,164 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # track-plan-sessions.sh - Tracks which sessions work on each plan file
4
- #
5
- # Triggered by two hooks:
6
- # 1. PostToolUse (Write|Edit) - Detects plan file writes via absolute path comparison,
7
- # stamps session ID into the plan's ## Sessions table, and saves a session-specific
8
- # marker file so subsequent UserPromptSubmit events can reliably find the active plan.
9
- # 2. UserPromptSubmit - Finds the active plan file by checking for a session-specific
10
- # marker file first (set by PostToolUse), falling back to the most recently CREATED
11
- # .md file in plans/ (ls -tU on macOS sorts by birth time). This avoids the mtime bug
12
- # where another plan file's modification time (e.g., from a hook writing a session ID
13
- # to it, or format-on-edit touching it) could cause the wrong file to appear "newest."
14
- #
15
- # Marker files: $PLANS_DIR/.active-plan-<session-id> contain the absolute path to the
16
- # active plan file. Stale markers (>24h) are cleaned up on each invocation.
17
- #
18
- # Dedup: Session ID dedup is scoped to the ## Sessions section only, not the entire
19
- # file. This prevents false positives when session IDs appear elsewhere in plan content
20
- # (e.g., scratchpad directory paths like /private/tmp/claude-501/.../SESSION_ID/...).
21
- #
22
- # Debug logging: All key decisions are logged to $PLANS_DIR/.track-plan-debug.log for
23
- # diagnostics if session IDs land in the wrong plan file.
24
- #
25
- # Input (via stdin): JSON with session_id, permission_mode, hook_event_name, etc.
26
- #
27
-
28
- set -euo pipefail
29
-
30
- INPUT=$(cat)
31
-
32
- SESSION_ID=$(echo "$INPUT" | jq -r '.session_id // empty')
33
- PERMISSION_MODE=$(echo "$INPUT" | jq -r '.permission_mode // "default"')
34
- HOOK_EVENT=$(echo "$INPUT" | jq -r '.hook_event_name // empty')
35
-
36
- # Temporarily disable this hook
37
- exit 0
38
-
39
- # Session ID is required
40
- if [[ -z "$SESSION_ID" ]]; then
41
- exit 0
42
- fi
43
-
44
- # Resolve plans directory from settings (default ./plans)
45
- PLANS_DIR="./plans"
46
- SETTINGS_FILE="${CLAUDE_PROJECT_DIR:-.}/.claude/settings.json"
47
- if [[ -f "$SETTINGS_FILE" ]]; then
48
- CONFIGURED_DIR=$(jq -r '.plansDirectory // empty' "$SETTINGS_FILE")
49
- if [[ -n "$CONFIGURED_DIR" ]]; then
50
- PLANS_DIR="$CONFIGURED_DIR"
51
- fi
52
- fi
53
-
54
- # Debug logging
55
- DEBUG_LOG="$PLANS_DIR/.track-plan-debug.log"
56
-
57
- log_debug() {
58
- printf '[%s] [%s] [%s] %s\n' \
59
- "$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
60
- "$SESSION_ID" \
61
- "$HOOK_EVENT" \
62
- "$1" >> "$DEBUG_LOG" 2>/dev/null || true
63
- }
64
-
65
- # Session-specific marker file for reliable active-plan detection
66
- MARKER_FILE="$PLANS_DIR/.active-plan-${SESSION_ID}"
67
-
68
- # Clean stale marker files older than 24h
69
- find "$PLANS_DIR" -name ".active-plan-*" -mmin +1440 -delete 2>/dev/null || true
70
-
71
- PLAN_FILE=""
72
- RESOLUTION_METHOD=""
73
-
74
- if [[ "$HOOK_EVENT" == "PostToolUse" ]]; then
75
- # Trigger A: Plan file was written/edited
76
- FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
77
-
78
- if [[ -z "$FILE_PATH" ]]; then
79
- log_debug "PostToolUse: no file_path in tool_input, exiting"
80
- exit 0
81
- fi
82
-
83
- # Resolve PLANS_DIR to absolute path for comparison
84
- ABS_PLANS_DIR=$(cd "$PLANS_DIR" 2>/dev/null && pwd)
85
-
86
- if [[ -z "$ABS_PLANS_DIR" ]]; then
87
- log_debug "PostToolUse: could not resolve PLANS_DIR=$PLANS_DIR to absolute path, exiting"
88
- exit 0
89
- fi
90
-
91
- # Check if the written file is in the plans directory
92
- if [[ "$FILE_PATH" == "$ABS_PLANS_DIR"/* ]]; then
93
- PLAN_FILE="$FILE_PATH"
94
- RESOLUTION_METHOD="PostToolUse-direct"
95
- log_debug "PostToolUse: matched plan file=$PLAN_FILE"
96
-
97
- # Save marker so UserPromptSubmit can find this plan reliably
98
- echo "$PLAN_FILE" > "$MARKER_FILE"
99
- log_debug "PostToolUse: saved marker file=$MARKER_FILE"
100
- else
101
- log_debug "PostToolUse: file_path=$FILE_PATH not in plans dir=$ABS_PLANS_DIR, exiting"
102
- exit 0
103
- fi
104
-
105
- elif [[ "$HOOK_EVENT" == "UserPromptSubmit" ]]; then
106
- # Trigger B: Find the active plan file
107
- # Priority 1: Session-specific marker file (reliable — set by PostToolUse when plan was written)
108
- if [[ -f "$MARKER_FILE" ]]; then
109
- PLAN_FILE=$(cat "$MARKER_FILE")
110
- RESOLUTION_METHOD="marker-file"
111
- log_debug "UserPromptSubmit: resolved via marker file=$PLAN_FILE"
112
- else
113
- # Priority 2: Most recently CREATED file (ls -tU on macOS sorts by birth time)
114
- PLAN_FILE=$(ls -tU "$PLANS_DIR"/*.md 2>/dev/null | head -1)
115
- RESOLUTION_METHOD="fallback-ls-tU"
116
- log_debug "UserPromptSubmit: no marker file, fallback ls -tU resolved=$PLAN_FILE"
117
- fi
118
-
119
- if [[ -z "$PLAN_FILE" || ! -f "$PLAN_FILE" ]]; then
120
- log_debug "UserPromptSubmit: no valid plan file found, exiting"
121
- exit 0
122
- fi
123
- else
124
- exit 0
125
- fi
126
-
127
- # Verify the plan file exists
128
- if [[ ! -f "$PLAN_FILE" ]]; then
129
- log_debug "plan file=$PLAN_FILE does not exist, exiting"
130
- exit 0
131
- fi
132
-
133
- # Check if session ID already exists in the ## Sessions section (dedup)
134
- # Only search within the Sessions section to avoid false positives from session IDs
135
- # appearing in plan content (e.g., scratchpad paths contain session IDs)
136
- if sed -n '/^## Sessions$/,$p' "$PLAN_FILE" 2>/dev/null | grep -qF "$SESSION_ID"; then
137
- log_debug "dedup: session ID already in $PLAN_FILE sessions section (resolved via $RESOLUTION_METHOD), skipping write"
138
- exit 0
139
- fi
140
-
141
- # Determine phase from permission_mode
142
- PHASE=$( [[ "$PERMISSION_MODE" == "plan" ]] && echo "plan" || echo "implement" )
143
- TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
144
-
145
- # Check if ## Sessions section exists
146
- if grep -q "^## Sessions" "$PLAN_FILE" 2>/dev/null; then
147
- # Append row to existing table
148
- printf '| %s | %s | %s |\n' "$SESSION_ID" "$TIMESTAMP" "$PHASE" >> "$PLAN_FILE"
149
- else
150
- # Create ## Sessions section at end of file
151
- {
152
- echo ""
153
- echo "## Sessions"
154
- echo ""
155
- echo "<!-- Auto-maintained by track-plan-sessions.sh -->"
156
- echo "| Session ID | First Seen | Phase |"
157
- echo "|------------|------------|-------|"
158
- printf '| %s | %s | %s |\n' "$SESSION_ID" "$TIMESTAMP" "$PHASE"
159
- } >> "$PLAN_FILE"
160
- fi
161
-
162
- log_debug "wrote session to $PLAN_FILE (resolved via $RESOLUTION_METHOD, phase=$PHASE)"
163
-
164
- exit 0
@@ -1,77 +0,0 @@
1
- #!/bin/bash
2
- # This file is managed by Lisa.
3
- # Do not edit directly — changes will be overwritten on the next `lisa` run.
4
- # =============================================================================
5
- # Verification Level Enforcement Hook (Stop)
6
- # =============================================================================
7
- # Checks whether the agent declared a verification level when the session
8
- # involved code changes. Does NOT re-run lint/typecheck/tests (husky does that).
9
- #
10
- # Logic:
11
- # 1. If no Write/Edit tools were used → exit 0 (research/conversation only)
12
- # 2. If code was written → check last assistant message for verification level
13
- # 3. If verification level found → exit 0
14
- # 4. If missing and stop_hook_active is false → block with instructions
15
- # 5. If missing and stop_hook_active is true → exit 0 (avoid infinite loops)
16
- #
17
- # @see .claude/rules/verfication.md "Self-Correction Loop" section
18
- # =============================================================================
19
-
20
- # Read JSON input from stdin
21
- INPUT=$(cat)
22
-
23
- # Extract transcript path
24
- TRANSCRIPT_PATH=$(echo "$INPUT" | grep -o '"transcript_path"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
25
-
26
- # Exit silently if no transcript available
27
- if [ -z "$TRANSCRIPT_PATH" ] || [ ! -f "$TRANSCRIPT_PATH" ]; then
28
- exit 0
29
- fi
30
-
31
- # Check if Write or Edit tools were used during the session
32
- # Look for tool_use entries with Write or Edit tool names
33
- if ! grep -q '"tool_name"[[:space:]]*:[[:space:]]*"\(Write\|Edit\|NotebookEdit\)"' "$TRANSCRIPT_PATH" 2>/dev/null; then
34
- # No code changes — this was research/conversation, allow stop
35
- exit 0
36
- fi
37
-
38
- # Code was written — check if a verification level was declared
39
- # Extract the last assistant message
40
- LAST_ASSISTANT=$(awk '/"type"[[:space:]]*:[[:space:]]*"assistant"/{line=$0} END{if(line) print line}' "$TRANSCRIPT_PATH" 2>/dev/null)
41
-
42
- if [ -z "$LAST_ASSISTANT" ]; then
43
- exit 0
44
- fi
45
-
46
- # Extract the text content from the assistant message
47
- RESPONSE_TEXT=""
48
- if command -v jq >/dev/null 2>&1; then
49
- RESPONSE_TEXT=$(echo "$LAST_ASSISTANT" | jq -r '.message.content[] | select(.type == "text") | .text' 2>/dev/null)
50
- else
51
- RESPONSE_TEXT=$(echo "$LAST_ASSISTANT" | grep -o '"text"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*: *"//' | sed 's/"$//')
52
- fi
53
-
54
- if [ -z "$RESPONSE_TEXT" ]; then
55
- exit 0
56
- fi
57
-
58
- # Check for verification level keywords (case-insensitive)
59
- if echo "$RESPONSE_TEXT" | grep -qi "FULLY VERIFIED\|PARTIALLY VERIFIED\|UNVERIFIED"; then
60
- exit 0
61
- fi
62
-
63
- # Check if this is a retry (stop_hook_active flag)
64
- # The stop_hook_active field is set to true when a Stop hook has already blocked once
65
- STOP_HOOK_ACTIVE=$(echo "$INPUT" | grep -o '"stop_hook_active"[[:space:]]*:[[:space:]]*true' || echo "")
66
-
67
- if [ -n "$STOP_HOOK_ACTIVE" ]; then
68
- # Already blocked once — allow stop to prevent infinite loop
69
- exit 0
70
- fi
71
-
72
- # No verification level declared after code changes — block
73
- cat << 'EOF'
74
- {"decision":"block","reason":"You changed code but didn't declare a verification level. Run your verification, then declare FULLY VERIFIED, PARTIALLY VERIFIED, or UNVERIFIED with evidence. See .claude/rules/verfication.md for requirements."}
75
- EOF
76
-
77
- exit 0