@hivehub/rulebook 5.4.1 → 5.5.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 (418) hide show
  1. package/.claude/commands/analysis.md +35 -35
  2. package/.claude/commands/continue.md +33 -33
  3. package/.claude/commands/ralph-config.md +112 -112
  4. package/.claude/commands/ralph-history.md +110 -110
  5. package/.claude/commands/ralph-init.md +72 -72
  6. package/.claude/commands/ralph-pause-resume.md +105 -105
  7. package/.claude/commands/ralph-run.md +101 -101
  8. package/.claude/commands/ralph-status.md +76 -76
  9. package/.claude/commands/rulebook-decision-create.md +55 -55
  10. package/.claude/commands/rulebook-decision-list.md +15 -15
  11. package/.claude/commands/rulebook-knowledge-add.md +41 -41
  12. package/.claude/commands/rulebook-knowledge-list.md +15 -15
  13. package/.claude/commands/rulebook-learn-capture.md +48 -48
  14. package/.claude/commands/rulebook-learn-list.md +13 -13
  15. package/.claude/commands/rulebook-memory-save.md +48 -48
  16. package/.claude/commands/rulebook-memory-search.md +47 -47
  17. package/.claude/commands/rulebook-task-apply.md +67 -67
  18. package/.claude/commands/rulebook-task-archive.md +94 -94
  19. package/.claude/commands/rulebook-task-create.md +93 -93
  20. package/.claude/commands/rulebook-task-list.md +42 -42
  21. package/.claude/commands/rulebook-task-show.md +52 -52
  22. package/.claude/commands/rulebook-task-validate.md +53 -53
  23. package/.claude-plugin/marketplace.json +28 -28
  24. package/.claude-plugin/plugin.json +8 -8
  25. package/README.md +394 -393
  26. package/dist/core/generator.d.ts +1 -1
  27. package/dist/core/generator.d.ts.map +1 -1
  28. package/dist/core/generator.js +1 -0
  29. package/dist/core/generator.js.map +1 -1
  30. package/dist/hooks/terse-activate.d.ts +59 -0
  31. package/dist/hooks/terse-activate.d.ts.map +1 -0
  32. package/dist/hooks/terse-activate.js +149 -0
  33. package/dist/hooks/terse-activate.js.map +1 -0
  34. package/dist/hooks/terse-config.d.ts +51 -0
  35. package/dist/hooks/terse-config.d.ts.map +1 -0
  36. package/dist/hooks/terse-config.js +130 -0
  37. package/dist/hooks/terse-config.js.map +1 -0
  38. package/dist/hooks/terse-mode-tracker.d.ts +78 -0
  39. package/dist/hooks/terse-mode-tracker.d.ts.map +1 -0
  40. package/dist/hooks/terse-mode-tracker.js +213 -0
  41. package/dist/hooks/terse-mode-tracker.js.map +1 -0
  42. package/dist/index.js +0 -0
  43. package/dist/mcp/rulebook-server.js +0 -0
  44. package/package.json +21 -22
  45. package/templates/agents/accessibility-reviewer.md +43 -43
  46. package/templates/agents/api-designer.md +42 -42
  47. package/templates/agents/architect.md +51 -51
  48. package/templates/agents/build-engineer.md +36 -36
  49. package/templates/agents/code-reviewer.md +47 -47
  50. package/templates/agents/compiler/codegen-debugger.md +34 -34
  51. package/templates/agents/compiler/stdlib-engineer.md +28 -28
  52. package/templates/agents/compiler/test-coverage-guardian.md +31 -31
  53. package/templates/agents/context-intelligence.md +52 -52
  54. package/templates/agents/database-architect.md +41 -41
  55. package/templates/agents/devops-engineer.md +42 -42
  56. package/templates/agents/docs-writer.md +38 -38
  57. package/templates/agents/game-engine/cpp-core-expert.md +35 -35
  58. package/templates/agents/game-engine/render-engineer.md +22 -22
  59. package/templates/agents/game-engine/shader-engineer.md +38 -38
  60. package/templates/agents/game-engine/systems-integration.md +43 -43
  61. package/templates/agents/generic/code-reviewer.md +41 -41
  62. package/templates/agents/generic/docs-writer.md +25 -25
  63. package/templates/agents/generic/project-manager.md +36 -36
  64. package/templates/agents/generic/researcher.md +34 -34
  65. package/templates/agents/generic/test-engineer.md +41 -41
  66. package/templates/agents/i18n-engineer.md +42 -42
  67. package/templates/agents/implementer.md +42 -42
  68. package/templates/agents/migration-engineer.md +42 -42
  69. package/templates/agents/mobile/platform-specialist.md +22 -22
  70. package/templates/agents/mobile/ui-engineer.md +22 -22
  71. package/templates/agents/performance-engineer.md +49 -49
  72. package/templates/agents/refactoring-agent.md +41 -41
  73. package/templates/agents/researcher.md +38 -38
  74. package/templates/agents/security-reviewer.md +40 -40
  75. package/templates/agents/team-lead.md +37 -37
  76. package/templates/agents/tester.md +48 -48
  77. package/templates/agents/ux-reviewer.md +43 -43
  78. package/templates/agents/web-app/api-designer.md +22 -22
  79. package/templates/agents/web-app/backend-engineer.md +30 -30
  80. package/templates/agents/web-app/database-engineer.md +22 -22
  81. package/templates/agents/web-app/frontend-engineer.md +29 -29
  82. package/templates/agents/web-app/security-reviewer.md +32 -32
  83. package/templates/ci/rulebook-review.yml +26 -26
  84. package/templates/cli/AIDER.md +49 -49
  85. package/templates/cli/AMAZON_Q.md +25 -25
  86. package/templates/cli/AUGGIE.md +32 -32
  87. package/templates/cli/CLAUDE.md +117 -117
  88. package/templates/cli/CLINE.md +99 -99
  89. package/templates/cli/CODEBUDDY.md +20 -20
  90. package/templates/cli/CODEIUM.md +20 -20
  91. package/templates/cli/CODEX.md +21 -21
  92. package/templates/cli/CONTINUE.md +34 -34
  93. package/templates/cli/CURSOR_CLI.md +62 -62
  94. package/templates/cli/FACTORY.md +18 -18
  95. package/templates/cli/GEMINI.md +35 -35
  96. package/templates/cli/KILOCODE.md +18 -18
  97. package/templates/cli/OPENCODE.md +18 -18
  98. package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
  99. package/templates/commands/rulebook-decision-create.md +55 -55
  100. package/templates/commands/rulebook-decision-list.md +15 -15
  101. package/templates/commands/rulebook-knowledge-add.md +41 -41
  102. package/templates/commands/rulebook-knowledge-list.md +15 -15
  103. package/templates/commands/rulebook-learn-capture.md +48 -48
  104. package/templates/commands/rulebook-learn-list.md +13 -13
  105. package/templates/commands/rulebook-memory-save.md +48 -48
  106. package/templates/commands/rulebook-memory-search.md +47 -47
  107. package/templates/commands/rulebook-task-apply.md +67 -67
  108. package/templates/commands/rulebook-task-archive.md +94 -94
  109. package/templates/commands/rulebook-task-create.md +93 -93
  110. package/templates/commands/rulebook-task-list.md +42 -42
  111. package/templates/commands/rulebook-task-show.md +52 -52
  112. package/templates/commands/rulebook-task-validate.md +53 -53
  113. package/templates/compact-context/_default.md +23 -23
  114. package/templates/compact-context/cpp.md +26 -26
  115. package/templates/compact-context/go.md +26 -26
  116. package/templates/compact-context/python.md +26 -26
  117. package/templates/compact-context/rust.md +28 -28
  118. package/templates/compact-context/typescript.md +29 -29
  119. package/templates/core/AGENTS_LEAN.md +9 -0
  120. package/templates/core/AGENTS_OVERRIDE.md +16 -16
  121. package/templates/core/AGENT_AUTOMATION.md +296 -296
  122. package/templates/core/CLAUDE_MD_v2.md +80 -71
  123. package/templates/core/DAG.md +304 -304
  124. package/templates/core/DECISIONS.md +38 -38
  125. package/templates/core/DOCUMENTATION_RULES.md +36 -36
  126. package/templates/core/KNOWLEDGE.md +49 -49
  127. package/templates/core/MULTI_AGENT.md +74 -74
  128. package/templates/core/PLANS.md +28 -28
  129. package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
  130. package/templates/core/RALPH.md +471 -471
  131. package/templates/core/RULEBOOK.md +1947 -1947
  132. package/templates/core/TIER1_PROHIBITIONS.md +154 -154
  133. package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
  134. package/templates/frameworks/ANGULAR.md +36 -36
  135. package/templates/frameworks/DJANGO.md +83 -83
  136. package/templates/frameworks/ELECTRON.md +147 -147
  137. package/templates/frameworks/FLASK.md +38 -38
  138. package/templates/frameworks/FLUTTER.md +55 -55
  139. package/templates/frameworks/JQUERY.md +32 -32
  140. package/templates/frameworks/LARAVEL.md +38 -38
  141. package/templates/frameworks/NESTJS.md +43 -43
  142. package/templates/frameworks/NEXTJS.md +127 -127
  143. package/templates/frameworks/NUXT.md +40 -40
  144. package/templates/frameworks/RAILS.md +66 -66
  145. package/templates/frameworks/REACT.md +38 -38
  146. package/templates/frameworks/REACT_NATIVE.md +47 -47
  147. package/templates/frameworks/SPRING.md +39 -39
  148. package/templates/frameworks/SYMFONY.md +36 -36
  149. package/templates/frameworks/VUE.md +36 -36
  150. package/templates/frameworks/ZEND.md +35 -35
  151. package/templates/git/CI_CD_PATTERNS.md +661 -661
  152. package/templates/git/GITHUB_ACTIONS.md +728 -728
  153. package/templates/git/GITLAB_CI.md +730 -730
  154. package/templates/git/GIT_WORKFLOW.md +1192 -1192
  155. package/templates/git/SECRETS_MANAGEMENT.md +585 -585
  156. package/templates/hooks/COMMIT_MSG.md +530 -530
  157. package/templates/hooks/POST_CHECKOUT.md +546 -546
  158. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
  159. package/templates/hooks/PRE_COMMIT.md +414 -414
  160. package/templates/hooks/PRE_PUSH.md +601 -601
  161. package/templates/hooks/check-context-and-handoff.ps1 +58 -58
  162. package/templates/hooks/check-context-and-handoff.sh +76 -76
  163. package/templates/hooks/enforce-team-for-background-agents.ps1 +63 -63
  164. package/templates/hooks/enforce-team-for-background-agents.sh +55 -55
  165. package/templates/hooks/on-compact-reinject.sh +34 -34
  166. package/templates/hooks/resume-from-handoff.ps1 +40 -40
  167. package/templates/hooks/resume-from-handoff.sh +61 -61
  168. package/templates/hooks/terse-activate.ps1 +143 -143
  169. package/templates/hooks/terse-activate.sh +197 -197
  170. package/templates/hooks/terse-mode-tracker.ps1 +153 -153
  171. package/templates/hooks/terse-mode-tracker.sh +187 -187
  172. package/templates/ides/CONTINUE_RULES.md +16 -16
  173. package/templates/ides/COPILOT.md +37 -37
  174. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
  175. package/templates/ides/CURSOR.md +43 -43
  176. package/templates/ides/GEMINI_RULES.md +17 -17
  177. package/templates/ides/JETBRAINS_AI.md +35 -35
  178. package/templates/ides/REPLIT.md +36 -36
  179. package/templates/ides/TABNINE.md +29 -29
  180. package/templates/ides/VSCODE.md +40 -40
  181. package/templates/ides/WINDSURF.md +36 -36
  182. package/templates/ides/WINDSURF_RULES.md +14 -14
  183. package/templates/ides/ZED.md +32 -32
  184. package/templates/ides/cursor-mdc/go.mdc +24 -24
  185. package/templates/ides/cursor-mdc/python.mdc +24 -24
  186. package/templates/ides/cursor-mdc/quality.mdc +25 -25
  187. package/templates/ides/cursor-mdc/ralph.mdc +39 -39
  188. package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
  189. package/templates/ides/cursor-mdc/rust.mdc +24 -24
  190. package/templates/ides/cursor-mdc/typescript.mdc +25 -25
  191. package/templates/languages/C.md +333 -333
  192. package/templates/languages/CPP.md +743 -743
  193. package/templates/languages/CSHARP.md +417 -417
  194. package/templates/languages/ELIXIR.md +454 -454
  195. package/templates/languages/ERLANG.md +361 -361
  196. package/templates/languages/GO.md +645 -645
  197. package/templates/languages/HASKELL.md +177 -177
  198. package/templates/languages/JAVA.md +607 -607
  199. package/templates/languages/JAVASCRIPT.md +631 -631
  200. package/templates/languages/JULIA.md +97 -97
  201. package/templates/languages/KOTLIN.md +511 -511
  202. package/templates/languages/LISP.md +100 -100
  203. package/templates/languages/LUA.md +74 -74
  204. package/templates/languages/OBJECTIVEC.md +90 -90
  205. package/templates/languages/PHP.md +416 -416
  206. package/templates/languages/PYTHON.md +682 -682
  207. package/templates/languages/RUBY.md +421 -421
  208. package/templates/languages/RUST.md +477 -477
  209. package/templates/languages/SAS.md +73 -73
  210. package/templates/languages/SCALA.md +348 -348
  211. package/templates/languages/SOLIDITY.md +580 -580
  212. package/templates/languages/SQL.md +137 -137
  213. package/templates/languages/SWIFT.md +466 -466
  214. package/templates/languages/TYPESCRIPT.md +591 -591
  215. package/templates/languages/ZIG.md +265 -265
  216. package/templates/modules/ATLASSIAN.md +255 -255
  217. package/templates/modules/CONTEXT7.md +54 -54
  218. package/templates/modules/FIGMA.md +267 -267
  219. package/templates/modules/GITHUB_MCP.md +64 -64
  220. package/templates/modules/GRAFANA.md +328 -328
  221. package/templates/modules/MEMORY.md +126 -126
  222. package/templates/modules/NOTION.md +247 -247
  223. package/templates/modules/PLAYWRIGHT.md +90 -90
  224. package/templates/modules/RULEBOOK_MCP.md +208 -208
  225. package/templates/modules/SERENA.md +337 -337
  226. package/templates/modules/SUPABASE.md +223 -223
  227. package/templates/modules/SYNAP.md +69 -69
  228. package/templates/modules/VECTORIZER.md +63 -63
  229. package/templates/modules/sequential-thinking.md +42 -42
  230. package/templates/ralph/ralph-history.bat +4 -4
  231. package/templates/ralph/ralph-history.sh +5 -5
  232. package/templates/ralph/ralph-init.bat +5 -5
  233. package/templates/ralph/ralph-init.sh +5 -5
  234. package/templates/ralph/ralph-pause.bat +5 -5
  235. package/templates/ralph/ralph-pause.sh +5 -5
  236. package/templates/ralph/ralph-run.bat +5 -5
  237. package/templates/ralph/ralph-run.sh +5 -5
  238. package/templates/ralph/ralph-status.bat +4 -4
  239. package/templates/ralph/ralph-status.sh +5 -5
  240. package/templates/rules/consult-analysis-before-implementing.md +23 -23
  241. package/templates/rules/cpp.md +46 -46
  242. package/templates/rules/csharp.md +44 -44
  243. package/templates/rules/diagnostic-first.md +39 -39
  244. package/templates/rules/fail-twice-escalate.md +46 -46
  245. package/templates/rules/follow-task-sequence.md +36 -36
  246. package/templates/rules/git-safety.md +29 -29
  247. package/templates/rules/go.md +40 -40
  248. package/templates/rules/incremental-implementation.md +56 -56
  249. package/templates/rules/incremental-tests.md +29 -29
  250. package/templates/rules/java.md +43 -43
  251. package/templates/rules/javascript.md +39 -39
  252. package/templates/rules/knowledge-base-usage.md +41 -41
  253. package/templates/rules/multi-agent-teams.md +75 -75
  254. package/templates/rules/no-deferred.md +31 -31
  255. package/templates/rules/no-shortcuts.md +30 -30
  256. package/templates/rules/python.md +43 -43
  257. package/templates/rules/research-first.md +30 -30
  258. package/templates/rules/respect-handoff-trigger.md +41 -41
  259. package/templates/rules/rust.md +40 -40
  260. package/templates/rules/sequential-editing.md +21 -21
  261. package/templates/rules/session-workflow.md +24 -24
  262. package/templates/rules/task-decomposition.md +32 -32
  263. package/templates/rules/typescript.md +40 -40
  264. package/templates/services/AZURE_BLOB.md +184 -184
  265. package/templates/services/CASSANDRA.md +239 -239
  266. package/templates/services/DATADOG.md +26 -26
  267. package/templates/services/DOCKER.md +124 -124
  268. package/templates/services/DOCKER_COMPOSE.md +168 -168
  269. package/templates/services/DYNAMODB.md +308 -308
  270. package/templates/services/ELASTICSEARCH.md +347 -347
  271. package/templates/services/GCS.md +178 -178
  272. package/templates/services/HELM.md +194 -194
  273. package/templates/services/INFLUXDB.md +265 -265
  274. package/templates/services/KAFKA.md +341 -341
  275. package/templates/services/KUBERNETES.md +208 -208
  276. package/templates/services/MARIADB.md +183 -183
  277. package/templates/services/MEMCACHED.md +242 -242
  278. package/templates/services/MINIO.md +201 -201
  279. package/templates/services/MONGODB.md +268 -268
  280. package/templates/services/MYSQL.md +358 -358
  281. package/templates/services/NEO4J.md +247 -247
  282. package/templates/services/OPENTELEMETRY.md +25 -25
  283. package/templates/services/ORACLE.md +290 -290
  284. package/templates/services/PINO.md +24 -24
  285. package/templates/services/POSTGRESQL.md +326 -326
  286. package/templates/services/PROMETHEUS.md +33 -33
  287. package/templates/services/RABBITMQ.md +286 -286
  288. package/templates/services/REDIS.md +292 -292
  289. package/templates/services/S3.md +298 -298
  290. package/templates/services/SENTRY.md +23 -23
  291. package/templates/services/SQLITE.md +294 -294
  292. package/templates/services/SQLSERVER.md +294 -294
  293. package/templates/services/WINSTON.md +30 -30
  294. package/templates/skills/cli/aider/SKILL.md +59 -59
  295. package/templates/skills/cli/amazon-q/SKILL.md +35 -35
  296. package/templates/skills/cli/auggie/SKILL.md +42 -42
  297. package/templates/skills/cli/claude/SKILL.md +42 -42
  298. package/templates/skills/cli/cline/SKILL.md +42 -42
  299. package/templates/skills/cli/codebuddy/SKILL.md +30 -30
  300. package/templates/skills/cli/codeium/SKILL.md +30 -30
  301. package/templates/skills/cli/codex/SKILL.md +31 -31
  302. package/templates/skills/cli/continue/SKILL.md +44 -44
  303. package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
  304. package/templates/skills/cli/factory/SKILL.md +28 -28
  305. package/templates/skills/cli/gemini/SKILL.md +45 -45
  306. package/templates/skills/cli/kilocode/SKILL.md +28 -28
  307. package/templates/skills/cli/opencode/SKILL.md +28 -28
  308. package/templates/skills/core/agent-automation/SKILL.md +194 -194
  309. package/templates/skills/core/dag/SKILL.md +314 -314
  310. package/templates/skills/core/documentation-rules/SKILL.md +46 -46
  311. package/templates/skills/core/karpathy-guidelines/SKILL.md +93 -0
  312. package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
  313. package/templates/skills/core/rulebook/SKILL.md +176 -176
  314. package/templates/skills/core/rulebook-terse/SKILL.md +116 -116
  315. package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -96
  316. package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -112
  317. package/templates/skills/dev/accessibility/SKILL.md +17 -17
  318. package/templates/skills/dev/analysis/SKILL.md +19 -19
  319. package/templates/skills/dev/api-design/SKILL.md +15 -15
  320. package/templates/skills/dev/architect/SKILL.md +17 -17
  321. package/templates/skills/dev/build-fix/SKILL.md +17 -17
  322. package/templates/skills/dev/db-design/SKILL.md +15 -15
  323. package/templates/skills/dev/debug/SKILL.md +16 -16
  324. package/templates/skills/dev/deploy/SKILL.md +17 -17
  325. package/templates/skills/dev/docs/SKILL.md +17 -17
  326. package/templates/skills/dev/handoff/SKILL.md +27 -27
  327. package/templates/skills/dev/migrate/SKILL.md +15 -15
  328. package/templates/skills/dev/perf/SKILL.md +17 -17
  329. package/templates/skills/dev/refactor/SKILL.md +17 -17
  330. package/templates/skills/dev/research/SKILL.md +14 -14
  331. package/templates/skills/dev/review/SKILL.md +18 -18
  332. package/templates/skills/dev/security-audit/SKILL.md +17 -17
  333. package/templates/skills/frameworks/angular/SKILL.md +46 -46
  334. package/templates/skills/frameworks/django/SKILL.md +93 -93
  335. package/templates/skills/frameworks/electron/SKILL.md +157 -157
  336. package/templates/skills/frameworks/flask/SKILL.md +48 -48
  337. package/templates/skills/frameworks/flutter/SKILL.md +65 -65
  338. package/templates/skills/frameworks/jquery/SKILL.md +42 -42
  339. package/templates/skills/frameworks/laravel/SKILL.md +48 -48
  340. package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
  341. package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
  342. package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
  343. package/templates/skills/frameworks/rails/SKILL.md +76 -76
  344. package/templates/skills/frameworks/react/SKILL.md +48 -48
  345. package/templates/skills/frameworks/react-native/SKILL.md +57 -57
  346. package/templates/skills/frameworks/spring/SKILL.md +49 -49
  347. package/templates/skills/frameworks/symfony/SKILL.md +46 -46
  348. package/templates/skills/frameworks/vue/SKILL.md +46 -46
  349. package/templates/skills/frameworks/zend/SKILL.md +45 -45
  350. package/templates/skills/ides/copilot/SKILL.md +47 -47
  351. package/templates/skills/ides/cursor/SKILL.md +53 -53
  352. package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
  353. package/templates/skills/ides/replit/SKILL.md +46 -46
  354. package/templates/skills/ides/tabnine/SKILL.md +39 -39
  355. package/templates/skills/ides/vscode/SKILL.md +50 -50
  356. package/templates/skills/ides/windsurf/SKILL.md +46 -46
  357. package/templates/skills/ides/zed/SKILL.md +42 -42
  358. package/templates/skills/languages/c/SKILL.md +343 -343
  359. package/templates/skills/languages/cpp/SKILL.md +753 -753
  360. package/templates/skills/languages/csharp/SKILL.md +427 -427
  361. package/templates/skills/languages/elixir/SKILL.md +464 -464
  362. package/templates/skills/languages/erlang/SKILL.md +371 -371
  363. package/templates/skills/languages/go/SKILL.md +655 -655
  364. package/templates/skills/languages/haskell/SKILL.md +187 -187
  365. package/templates/skills/languages/java/SKILL.md +617 -617
  366. package/templates/skills/languages/javascript/SKILL.md +641 -641
  367. package/templates/skills/languages/julia/SKILL.md +107 -107
  368. package/templates/skills/languages/kotlin/SKILL.md +521 -521
  369. package/templates/skills/languages/lisp/SKILL.md +110 -110
  370. package/templates/skills/languages/lua/SKILL.md +84 -84
  371. package/templates/skills/languages/objectivec/SKILL.md +100 -100
  372. package/templates/skills/languages/php/SKILL.md +426 -426
  373. package/templates/skills/languages/python/SKILL.md +692 -692
  374. package/templates/skills/languages/ruby/SKILL.md +431 -431
  375. package/templates/skills/languages/rust/SKILL.md +487 -487
  376. package/templates/skills/languages/sas/SKILL.md +83 -83
  377. package/templates/skills/languages/scala/SKILL.md +358 -358
  378. package/templates/skills/languages/solidity/SKILL.md +590 -590
  379. package/templates/skills/languages/sql/SKILL.md +147 -147
  380. package/templates/skills/languages/swift/SKILL.md +476 -476
  381. package/templates/skills/languages/typescript/SKILL.md +302 -302
  382. package/templates/skills/languages/zig/SKILL.md +275 -275
  383. package/templates/skills/modules/atlassian/SKILL.md +265 -265
  384. package/templates/skills/modules/context7/SKILL.md +64 -64
  385. package/templates/skills/modules/figma/SKILL.md +277 -277
  386. package/templates/skills/modules/github-mcp/SKILL.md +74 -74
  387. package/templates/skills/modules/grafana/SKILL.md +338 -338
  388. package/templates/skills/modules/memory/SKILL.md +73 -73
  389. package/templates/skills/modules/notion/SKILL.md +257 -257
  390. package/templates/skills/modules/playwright/SKILL.md +100 -100
  391. package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
  392. package/templates/skills/modules/serena/SKILL.md +347 -347
  393. package/templates/skills/modules/supabase/SKILL.md +233 -233
  394. package/templates/skills/modules/synap/SKILL.md +79 -79
  395. package/templates/skills/modules/vectorizer/SKILL.md +73 -73
  396. package/templates/skills/services/azure-blob/SKILL.md +194 -194
  397. package/templates/skills/services/cassandra/SKILL.md +249 -249
  398. package/templates/skills/services/dynamodb/SKILL.md +318 -318
  399. package/templates/skills/services/elasticsearch/SKILL.md +357 -357
  400. package/templates/skills/services/gcs/SKILL.md +188 -188
  401. package/templates/skills/services/influxdb/SKILL.md +275 -275
  402. package/templates/skills/services/kafka/SKILL.md +351 -351
  403. package/templates/skills/services/mariadb/SKILL.md +193 -193
  404. package/templates/skills/services/memcached/SKILL.md +252 -252
  405. package/templates/skills/services/minio/SKILL.md +211 -211
  406. package/templates/skills/services/mongodb/SKILL.md +278 -278
  407. package/templates/skills/services/mysql/SKILL.md +368 -368
  408. package/templates/skills/services/neo4j/SKILL.md +257 -257
  409. package/templates/skills/services/oracle/SKILL.md +300 -300
  410. package/templates/skills/services/postgresql/SKILL.md +336 -336
  411. package/templates/skills/services/rabbitmq/SKILL.md +296 -296
  412. package/templates/skills/services/redis/SKILL.md +302 -302
  413. package/templates/skills/services/s3/SKILL.md +308 -308
  414. package/templates/skills/services/sqlite/SKILL.md +304 -304
  415. package/templates/skills/services/sqlserver/SKILL.md +304 -304
  416. package/templates/skills/workflows/ralph/SKILL.md +309 -309
  417. package/templates/skills/workflows/ralph/install.sh +87 -87
  418. package/templates/skills/workflows/ralph/manifest.json +158 -158
@@ -1,58 +1,58 @@
1
- # Claude Code Stop hook — context freshness monitor (PowerShell).
2
- # See check-context-and-handoff.sh for the full design rationale.
3
-
4
- $ErrorActionPreference = 'Stop'
5
-
6
- # Read hook input from stdin to get the actual project cwd
7
- $hookInput = [Console]::In.ReadToEnd()
8
- $ProjectRoot = $null
9
- if ($hookInput) {
10
- try { $ProjectRoot = ($hookInput | ConvertFrom-Json).cwd } catch {}
11
- }
12
- if (-not $ProjectRoot) { $ProjectRoot = $env:CLAUDE_PROJECT_DIR }
13
- if (-not $ProjectRoot) { $ProjectRoot = (Get-Location).Path }
14
-
15
- $ConfigFile = Join-Path $ProjectRoot '.rulebook/rulebook.json'
16
- $HandoffDir = Join-Path $ProjectRoot '.rulebook/handoff'
17
-
18
- $WarnPct = 75
19
- $ForcePct = 90
20
- $MaxContextChars = 1600000
21
-
22
- if (Test-Path $ConfigFile) {
23
- try {
24
- $cfg = Get-Content $ConfigFile -Raw | ConvertFrom-Json
25
- if ($cfg.handoff.warnThresholdPct) { $WarnPct = $cfg.handoff.warnThresholdPct }
26
- if ($cfg.handoff.forceThresholdPct) { $ForcePct = $cfg.handoff.forceThresholdPct }
27
- } catch {}
28
- }
29
-
30
- $TranscriptSize = 0
31
- $ClaudeDir = Join-Path $env:USERPROFILE '.claude/projects'
32
- if (Test-Path $ClaudeDir) {
33
- $latest = Get-ChildItem $ClaudeDir -Recurse -Filter '*.jsonl' -File |
34
- Sort-Object LastWriteTime -Descending | Select-Object -First 1
35
- if ($latest) { $TranscriptSize = $latest.Length }
36
- }
37
-
38
- if ($TranscriptSize -eq 0) {
39
- Write-Output '{}'
40
- exit 0
41
- }
42
-
43
- $Pct = [math]::Floor($TranscriptSize * 100 / $MaxContextChars)
44
-
45
- if ($Pct -ge $ForcePct) {
46
- if (-not (Test-Path $HandoffDir)) { New-Item -ItemType Directory -Path $HandoffDir -Force | Out-Null }
47
- New-Item -ItemType File -Path (Join-Path $HandoffDir '.urgent') -Force | Out-Null
48
- $msg = "CONTEXT AT ${Pct}% (FORCE THRESHOLD). You MUST invoke /handoff NOW."
49
- $out = @{ hookSpecificOutput = @{ hookEventName = 'Stop'; additionalContext = $msg } } | ConvertTo-Json -Compress -Depth 4
50
- Write-Output $out
51
- } elseif ($Pct -ge $WarnPct) {
52
- $msg = "Context at ${Pct}%. Recommended: invoke /handoff to save session state."
53
- $out = @{ hookSpecificOutput = @{ hookEventName = 'Stop'; additionalContext = $msg } } | ConvertTo-Json -Compress -Depth 4
54
- Write-Output $out
55
- } else {
56
- Write-Output '{}'
57
- }
58
- exit 0
1
+ # Claude Code Stop hook — context freshness monitor (PowerShell).
2
+ # See check-context-and-handoff.sh for the full design rationale.
3
+
4
+ $ErrorActionPreference = 'Stop'
5
+
6
+ # Read hook input from stdin to get the actual project cwd
7
+ $hookInput = [Console]::In.ReadToEnd()
8
+ $ProjectRoot = $null
9
+ if ($hookInput) {
10
+ try { $ProjectRoot = ($hookInput | ConvertFrom-Json).cwd } catch {}
11
+ }
12
+ if (-not $ProjectRoot) { $ProjectRoot = $env:CLAUDE_PROJECT_DIR }
13
+ if (-not $ProjectRoot) { $ProjectRoot = (Get-Location).Path }
14
+
15
+ $ConfigFile = Join-Path $ProjectRoot '.rulebook/rulebook.json'
16
+ $HandoffDir = Join-Path $ProjectRoot '.rulebook/handoff'
17
+
18
+ $WarnPct = 75
19
+ $ForcePct = 90
20
+ $MaxContextChars = 1600000
21
+
22
+ if (Test-Path $ConfigFile) {
23
+ try {
24
+ $cfg = Get-Content $ConfigFile -Raw | ConvertFrom-Json
25
+ if ($cfg.handoff.warnThresholdPct) { $WarnPct = $cfg.handoff.warnThresholdPct }
26
+ if ($cfg.handoff.forceThresholdPct) { $ForcePct = $cfg.handoff.forceThresholdPct }
27
+ } catch {}
28
+ }
29
+
30
+ $TranscriptSize = 0
31
+ $ClaudeDir = Join-Path $env:USERPROFILE '.claude/projects'
32
+ if (Test-Path $ClaudeDir) {
33
+ $latest = Get-ChildItem $ClaudeDir -Recurse -Filter '*.jsonl' -File |
34
+ Sort-Object LastWriteTime -Descending | Select-Object -First 1
35
+ if ($latest) { $TranscriptSize = $latest.Length }
36
+ }
37
+
38
+ if ($TranscriptSize -eq 0) {
39
+ Write-Output '{}'
40
+ exit 0
41
+ }
42
+
43
+ $Pct = [math]::Floor($TranscriptSize * 100 / $MaxContextChars)
44
+
45
+ if ($Pct -ge $ForcePct) {
46
+ if (-not (Test-Path $HandoffDir)) { New-Item -ItemType Directory -Path $HandoffDir -Force | Out-Null }
47
+ New-Item -ItemType File -Path (Join-Path $HandoffDir '.urgent') -Force | Out-Null
48
+ $msg = "CONTEXT AT ${Pct}% (FORCE THRESHOLD). You MUST invoke /handoff NOW."
49
+ $out = @{ hookSpecificOutput = @{ hookEventName = 'Stop'; additionalContext = $msg } } | ConvertTo-Json -Compress -Depth 4
50
+ Write-Output $out
51
+ } elseif ($Pct -ge $WarnPct) {
52
+ $msg = "Context at ${Pct}%. Recommended: invoke /handoff to save session state."
53
+ $out = @{ hookSpecificOutput = @{ hookEventName = 'Stop'; additionalContext = $msg } } | ConvertTo-Json -Compress -Depth 4
54
+ Write-Output $out
55
+ } else {
56
+ Write-Output '{}'
57
+ }
58
+ exit 0
@@ -1,76 +1,76 @@
1
- #!/usr/bin/env bash
2
- # Claude Code Stop hook — context freshness monitor.
3
- #
4
- # Runs after every model turn. Estimates the current context usage
5
- # from the JSONL transcript and, when it exceeds the configured
6
- # threshold, emits additionalContext instructing the model to invoke
7
- # the /handoff skill and tell the user to type /clear.
8
- #
9
- # Thresholds are read from .rulebook/rulebook.json `handoff` section.
10
- # Defaults: warn=75, force=90 (percentage of estimated max context).
11
-
12
- set -euo pipefail
13
-
14
- # Read the hook input from stdin (Claude Code passes it as JSON)
15
- input="$(cat)"
16
-
17
- # Resolve project root from hook input cwd, NOT $(pwd) — the hook may be
18
- # invoked from a sub-directory the user is currently editing.
19
- PROJECT_ROOT=""
20
- if [[ -n "$input" ]] && command -v jq &>/dev/null; then
21
- PROJECT_ROOT="$(printf '%s' "$input" | jq -r '.cwd // empty' 2>/dev/null || true)"
22
- fi
23
- [[ -z "$PROJECT_ROOT" ]] && PROJECT_ROOT="${CLAUDE_PROJECT_DIR:-$(pwd)}"
24
-
25
- CONFIG_FILE="${PROJECT_ROOT}/.rulebook/rulebook.json"
26
- HANDOFF_DIR="${PROJECT_ROOT}/.rulebook/handoff"
27
-
28
- # Defaults
29
- WARN_PCT=75
30
- FORCE_PCT=90
31
- MAX_CONTEXT_CHARS=1600000 # ~400k tokens ≈ 1.6M chars (rough 1:4 ratio)
32
-
33
- # Override from config if available
34
- if [[ -f "$CONFIG_FILE" ]] && command -v jq &>/dev/null; then
35
- WARN_PCT=$(jq -r '.handoff.warnThresholdPct // 75' "$CONFIG_FILE" 2>/dev/null || echo 75)
36
- FORCE_PCT=$(jq -r '.handoff.forceThresholdPct // 90' "$CONFIG_FILE" 2>/dev/null || echo 90)
37
- fi
38
-
39
- # Try to find the transcript path from the session
40
- # Claude Code stores transcripts as JSONL in ~/.claude/projects/<hash>/
41
- # The hook input may or may not contain session info; we fall back to
42
- # estimating from the input itself.
43
- transcript_size=0
44
-
45
- # Strategy 1: check the most recent JSONL in the project-specific Claude dir
46
- CLAUDE_PROJECTS_DIR="${HOME}/.claude/projects"
47
- if [[ -d "$CLAUDE_PROJECTS_DIR" ]]; then
48
- latest_jsonl=$(find "$CLAUDE_PROJECTS_DIR" -name "*.jsonl" -type f -printf '%T@ %p\n' 2>/dev/null | sort -rn | head -1 | awk '{print $2}' || true)
49
- if [[ -n "$latest_jsonl" && -f "$latest_jsonl" ]]; then
50
- transcript_size=$(stat -c%s "$latest_jsonl" 2>/dev/null || stat -f%z "$latest_jsonl" 2>/dev/null || echo 0)
51
- fi
52
- fi
53
-
54
- # If we couldn't get transcript size, emit nothing (no-op)
55
- if [[ "$transcript_size" -eq 0 ]]; then
56
- printf '%s' '{}'
57
- exit 0
58
- fi
59
-
60
- # Estimate context percentage
61
- pct=$(( transcript_size * 100 / MAX_CONTEXT_CHARS ))
62
-
63
- if [[ "$pct" -ge "$FORCE_PCT" ]]; then
64
- # Force mode: write urgent sentinel + emit strong instruction
65
- mkdir -p "$HANDOFF_DIR"
66
- touch "${HANDOFF_DIR}/.urgent"
67
- msg="⚠️ CONTEXT AT ${pct}% (FORCE THRESHOLD). You MUST invoke /handoff NOW to save session state to .rulebook/handoff/_pending.md. After it succeeds, tell the user: '>>> TYPE /clear NOW — your context will be auto-restored in the next session <<<'. Do NOT continue working until the user has typed /clear."
68
- jq -nc --arg msg "$msg" '{ hookSpecificOutput: { hookEventName: "Stop", additionalContext: $msg } }'
69
- elif [[ "$pct" -ge "$WARN_PCT" ]]; then
70
- msg="⚠️ Context at ${pct}%. Recommended: invoke /handoff to save session state. After it succeeds, tell the user to type /clear for a fresh session."
71
- jq -nc --arg msg "$msg" '{ hookSpecificOutput: { hookEventName: "Stop", additionalContext: $msg } }'
72
- else
73
- # Below threshold — no-op
74
- printf '%s' '{}'
75
- fi
76
- exit 0
1
+ #!/usr/bin/env bash
2
+ # Claude Code Stop hook — context freshness monitor.
3
+ #
4
+ # Runs after every model turn. Estimates the current context usage
5
+ # from the JSONL transcript and, when it exceeds the configured
6
+ # threshold, emits additionalContext instructing the model to invoke
7
+ # the /handoff skill and tell the user to type /clear.
8
+ #
9
+ # Thresholds are read from .rulebook/rulebook.json `handoff` section.
10
+ # Defaults: warn=75, force=90 (percentage of estimated max context).
11
+
12
+ set -euo pipefail
13
+
14
+ # Read the hook input from stdin (Claude Code passes it as JSON)
15
+ input="$(cat)"
16
+
17
+ # Resolve project root from hook input cwd, NOT $(pwd) — the hook may be
18
+ # invoked from a sub-directory the user is currently editing.
19
+ PROJECT_ROOT=""
20
+ if [[ -n "$input" ]] && command -v jq &>/dev/null; then
21
+ PROJECT_ROOT="$(printf '%s' "$input" | jq -r '.cwd // empty' 2>/dev/null || true)"
22
+ fi
23
+ [[ -z "$PROJECT_ROOT" ]] && PROJECT_ROOT="${CLAUDE_PROJECT_DIR:-$(pwd)}"
24
+
25
+ CONFIG_FILE="${PROJECT_ROOT}/.rulebook/rulebook.json"
26
+ HANDOFF_DIR="${PROJECT_ROOT}/.rulebook/handoff"
27
+
28
+ # Defaults
29
+ WARN_PCT=75
30
+ FORCE_PCT=90
31
+ MAX_CONTEXT_CHARS=1600000 # ~400k tokens ≈ 1.6M chars (rough 1:4 ratio)
32
+
33
+ # Override from config if available
34
+ if [[ -f "$CONFIG_FILE" ]] && command -v jq &>/dev/null; then
35
+ WARN_PCT=$(jq -r '.handoff.warnThresholdPct // 75' "$CONFIG_FILE" 2>/dev/null || echo 75)
36
+ FORCE_PCT=$(jq -r '.handoff.forceThresholdPct // 90' "$CONFIG_FILE" 2>/dev/null || echo 90)
37
+ fi
38
+
39
+ # Try to find the transcript path from the session
40
+ # Claude Code stores transcripts as JSONL in ~/.claude/projects/<hash>/
41
+ # The hook input may or may not contain session info; we fall back to
42
+ # estimating from the input itself.
43
+ transcript_size=0
44
+
45
+ # Strategy 1: check the most recent JSONL in the project-specific Claude dir
46
+ CLAUDE_PROJECTS_DIR="${HOME}/.claude/projects"
47
+ if [[ -d "$CLAUDE_PROJECTS_DIR" ]]; then
48
+ latest_jsonl=$(find "$CLAUDE_PROJECTS_DIR" -name "*.jsonl" -type f -printf '%T@ %p\n' 2>/dev/null | sort -rn | head -1 | awk '{print $2}' || true)
49
+ if [[ -n "$latest_jsonl" && -f "$latest_jsonl" ]]; then
50
+ transcript_size=$(stat -c%s "$latest_jsonl" 2>/dev/null || stat -f%z "$latest_jsonl" 2>/dev/null || echo 0)
51
+ fi
52
+ fi
53
+
54
+ # If we couldn't get transcript size, emit nothing (no-op)
55
+ if [[ "$transcript_size" -eq 0 ]]; then
56
+ printf '%s' '{}'
57
+ exit 0
58
+ fi
59
+
60
+ # Estimate context percentage
61
+ pct=$(( transcript_size * 100 / MAX_CONTEXT_CHARS ))
62
+
63
+ if [[ "$pct" -ge "$FORCE_PCT" ]]; then
64
+ # Force mode: write urgent sentinel + emit strong instruction
65
+ mkdir -p "$HANDOFF_DIR"
66
+ touch "${HANDOFF_DIR}/.urgent"
67
+ msg="⚠️ CONTEXT AT ${pct}% (FORCE THRESHOLD). You MUST invoke /handoff NOW to save session state to .rulebook/handoff/_pending.md. After it succeeds, tell the user: '>>> TYPE /clear NOW — your context will be auto-restored in the next session <<<'. Do NOT continue working until the user has typed /clear."
68
+ jq -nc --arg msg "$msg" '{ hookSpecificOutput: { hookEventName: "Stop", additionalContext: $msg } }'
69
+ elif [[ "$pct" -ge "$WARN_PCT" ]]; then
70
+ msg="⚠️ Context at ${pct}%. Recommended: invoke /handoff to save session state. After it succeeds, tell the user to type /clear for a fresh session."
71
+ jq -nc --arg msg "$msg" '{ hookSpecificOutput: { hookEventName: "Stop", additionalContext: $msg } }'
72
+ else
73
+ # Below threshold — no-op
74
+ printf '%s' '{}'
75
+ fi
76
+ exit 0
@@ -1,63 +1,63 @@
1
- # Claude Code PreToolUse hook for the Agent tool (PowerShell variant).
2
- #
3
- # Policy enforced by @hivehub/rulebook v5.3.0:
4
- # - A single Agent call is fine (foreground or background).
5
- # - Spawning multiple standalone background Agents is FORBIDDEN.
6
- # Parallel multi-agent work MUST go through a Team so agents can
7
- # communicate via SendMessage.
8
- #
9
- # Block any Agent invocation with run_in_background=true UNLESS it
10
- # targets subagent_type=team-lead or provides a team_name. This forces
11
- # background parallel work through a Team.
12
-
13
- $ErrorActionPreference = 'Stop'
14
-
15
- $input = [Console]::In.ReadToEnd()
16
- $data = $null
17
- try { $data = $input | ConvertFrom-Json } catch {}
18
-
19
- $toolName = $null
20
- if ($data -and $data.PSObject.Properties.Name -contains 'tool_name') { $toolName = $data.tool_name }
21
-
22
- if ($toolName -ne 'Agent') {
23
- Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
24
- exit 0
25
- }
26
-
27
- $runInBackground = $false
28
- $subagentType = ''
29
- $teamName = ''
30
- if ($data.tool_input) {
31
- if ($data.tool_input.PSObject.Properties.Name -contains 'run_in_background') {
32
- $runInBackground = [bool]$data.tool_input.run_in_background
33
- }
34
- if ($data.tool_input.PSObject.Properties.Name -contains 'subagent_type') {
35
- $subagentType = [string]$data.tool_input.subagent_type
36
- }
37
- if ($data.tool_input.PSObject.Properties.Name -contains 'team_name') {
38
- $teamName = [string]$data.tool_input.team_name
39
- }
40
- }
41
-
42
- if (-not $runInBackground) {
43
- Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
44
- exit 0
45
- }
46
-
47
- if ($subagentType -eq 'team-lead' -or $teamName) {
48
- Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
49
- exit 0
50
- }
51
-
52
- $reason = 'POLICY VIOLATION: Spawning standalone background Agents is forbidden. Multi-agent parallel work MUST use a Team so agents can communicate via SendMessage. Either (a) use TeamCreate to create a team, (b) spawn a team-lead that creates the team, or (c) set team_name on the Agent call. See .claude/rules/multi-agent-teams.md for the policy.'
53
-
54
- $out = @{
55
- hookSpecificOutput = @{
56
- hookEventName = 'PreToolUse'
57
- permissionDecision = 'deny'
58
- permissionDecisionReason = $reason
59
- }
60
- } | ConvertTo-Json -Compress -Depth 4
61
-
62
- Write-Output $out
63
- exit 0
1
+ # Claude Code PreToolUse hook for the Agent tool (PowerShell variant).
2
+ #
3
+ # Policy enforced by @hivehub/rulebook v5.3.0:
4
+ # - A single Agent call is fine (foreground or background).
5
+ # - Spawning multiple standalone background Agents is FORBIDDEN.
6
+ # Parallel multi-agent work MUST go through a Team so agents can
7
+ # communicate via SendMessage.
8
+ #
9
+ # Block any Agent invocation with run_in_background=true UNLESS it
10
+ # targets subagent_type=team-lead or provides a team_name. This forces
11
+ # background parallel work through a Team.
12
+
13
+ $ErrorActionPreference = 'Stop'
14
+
15
+ $input = [Console]::In.ReadToEnd()
16
+ $data = $null
17
+ try { $data = $input | ConvertFrom-Json } catch {}
18
+
19
+ $toolName = $null
20
+ if ($data -and $data.PSObject.Properties.Name -contains 'tool_name') { $toolName = $data.tool_name }
21
+
22
+ if ($toolName -ne 'Agent') {
23
+ Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
24
+ exit 0
25
+ }
26
+
27
+ $runInBackground = $false
28
+ $subagentType = ''
29
+ $teamName = ''
30
+ if ($data.tool_input) {
31
+ if ($data.tool_input.PSObject.Properties.Name -contains 'run_in_background') {
32
+ $runInBackground = [bool]$data.tool_input.run_in_background
33
+ }
34
+ if ($data.tool_input.PSObject.Properties.Name -contains 'subagent_type') {
35
+ $subagentType = [string]$data.tool_input.subagent_type
36
+ }
37
+ if ($data.tool_input.PSObject.Properties.Name -contains 'team_name') {
38
+ $teamName = [string]$data.tool_input.team_name
39
+ }
40
+ }
41
+
42
+ if (-not $runInBackground) {
43
+ Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
44
+ exit 0
45
+ }
46
+
47
+ if ($subagentType -eq 'team-lead' -or $teamName) {
48
+ Write-Output '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
49
+ exit 0
50
+ }
51
+
52
+ $reason = 'POLICY VIOLATION: Spawning standalone background Agents is forbidden. Multi-agent parallel work MUST use a Team so agents can communicate via SendMessage. Either (a) use TeamCreate to create a team, (b) spawn a team-lead that creates the team, or (c) set team_name on the Agent call. See .claude/rules/multi-agent-teams.md for the policy.'
53
+
54
+ $out = @{
55
+ hookSpecificOutput = @{
56
+ hookEventName = 'PreToolUse'
57
+ permissionDecision = 'deny'
58
+ permissionDecisionReason = $reason
59
+ }
60
+ } | ConvertTo-Json -Compress -Depth 4
61
+
62
+ Write-Output $out
63
+ exit 0
@@ -1,55 +1,55 @@
1
- #!/usr/bin/env bash
2
- # Claude Code PreToolUse hook for the Agent tool.
3
- #
4
- # Policy enforced by @hivehub/rulebook v5.3.0:
5
- # - A single Agent call is fine (foreground or background).
6
- # - Spawning multiple standalone Agents for parallel work is FORBIDDEN.
7
- # Parallel multi-agent work MUST go through a Team so agents can
8
- # communicate via SendMessage.
9
- #
10
- # Enforcement strategy:
11
- # Block any Agent invocation with `run_in_background: true` UNLESS it
12
- # targets `subagent_type: team-lead` or provides a `team_name`. This
13
- # forces background parallel work to be coordinated through a Team.
14
- #
15
- # The hook reads the tool input JSON from stdin and emits a permission
16
- # decision JSON on stdout, per Claude Code's PreToolUse hook contract.
17
-
18
- set -euo pipefail
19
-
20
- input="$(cat)"
21
-
22
- tool_name="$(printf '%s' "$input" | jq -r '.tool_name // empty' 2>/dev/null || true)"
23
- if [[ "$tool_name" != "Agent" ]]; then
24
- # Not our concern — allow.
25
- printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
26
- exit 0
27
- fi
28
-
29
- run_in_background="$(printf '%s' "$input" | jq -r '.tool_input.run_in_background // false' 2>/dev/null || echo false)"
30
- subagent_type="$(printf '%s' "$input" | jq -r '.tool_input.subagent_type // empty' 2>/dev/null || true)"
31
- team_name="$(printf '%s' "$input" | jq -r '.tool_input.team_name // empty' 2>/dev/null || true)"
32
-
33
- # Foreground single agent → always allowed.
34
- if [[ "$run_in_background" != "true" ]]; then
35
- printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
36
- exit 0
37
- fi
38
-
39
- # Background agents must be part of a team OR be the team-lead coordinator.
40
- if [[ "$subagent_type" == "team-lead" ]] || [[ -n "$team_name" ]]; then
41
- printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
42
- exit 0
43
- fi
44
-
45
- # Block standalone background agent.
46
- reason="POLICY VIOLATION: Spawning standalone background Agents is forbidden. Multi-agent parallel work MUST use a Team so agents can communicate via SendMessage. Either (a) use TeamCreate to create a team, (b) spawn a team-lead that creates the team, or (c) set team_name on the Agent call. See .claude/rules/multi-agent-teams.md for the policy."
47
-
48
- jq -nc --arg reason "$reason" '{
49
- hookSpecificOutput: {
50
- hookEventName: "PreToolUse",
51
- permissionDecision: "deny",
52
- permissionDecisionReason: $reason
53
- }
54
- }'
55
- exit 0
1
+ #!/usr/bin/env bash
2
+ # Claude Code PreToolUse hook for the Agent tool.
3
+ #
4
+ # Policy enforced by @hivehub/rulebook v5.3.0:
5
+ # - A single Agent call is fine (foreground or background).
6
+ # - Spawning multiple standalone Agents for parallel work is FORBIDDEN.
7
+ # Parallel multi-agent work MUST go through a Team so agents can
8
+ # communicate via SendMessage.
9
+ #
10
+ # Enforcement strategy:
11
+ # Block any Agent invocation with `run_in_background: true` UNLESS it
12
+ # targets `subagent_type: team-lead` or provides a `team_name`. This
13
+ # forces background parallel work to be coordinated through a Team.
14
+ #
15
+ # The hook reads the tool input JSON from stdin and emits a permission
16
+ # decision JSON on stdout, per Claude Code's PreToolUse hook contract.
17
+
18
+ set -euo pipefail
19
+
20
+ input="$(cat)"
21
+
22
+ tool_name="$(printf '%s' "$input" | jq -r '.tool_name // empty' 2>/dev/null || true)"
23
+ if [[ "$tool_name" != "Agent" ]]; then
24
+ # Not our concern — allow.
25
+ printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
26
+ exit 0
27
+ fi
28
+
29
+ run_in_background="$(printf '%s' "$input" | jq -r '.tool_input.run_in_background // false' 2>/dev/null || echo false)"
30
+ subagent_type="$(printf '%s' "$input" | jq -r '.tool_input.subagent_type // empty' 2>/dev/null || true)"
31
+ team_name="$(printf '%s' "$input" | jq -r '.tool_input.team_name // empty' 2>/dev/null || true)"
32
+
33
+ # Foreground single agent → always allowed.
34
+ if [[ "$run_in_background" != "true" ]]; then
35
+ printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
36
+ exit 0
37
+ fi
38
+
39
+ # Background agents must be part of a team OR be the team-lead coordinator.
40
+ if [[ "$subagent_type" == "team-lead" ]] || [[ -n "$team_name" ]]; then
41
+ printf '%s' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}'
42
+ exit 0
43
+ fi
44
+
45
+ # Block standalone background agent.
46
+ reason="POLICY VIOLATION: Spawning standalone background Agents is forbidden. Multi-agent parallel work MUST use a Team so agents can communicate via SendMessage. Either (a) use TeamCreate to create a team, (b) spawn a team-lead that creates the team, or (c) set team_name on the Agent call. See .claude/rules/multi-agent-teams.md for the policy."
47
+
48
+ jq -nc --arg reason "$reason" '{
49
+ hookSpecificOutput: {
50
+ hookEventName: "PreToolUse",
51
+ permissionDecision: "deny",
52
+ permissionDecisionReason: $reason
53
+ }
54
+ }'
55
+ exit 0
@@ -1,34 +1,34 @@
1
- #!/usr/bin/env bash
2
- # Claude Code SessionStart hook (matcher: "compact").
3
- #
4
- # Re-injects critical architectural context after a conversation
5
- # compaction. Claude Code already re-loads CLAUDE.md on compact, so
6
- # this hook is defense-in-depth: it outputs a short, always-fresh
7
- # cheat sheet from `.rulebook/COMPACT_CONTEXT.md` so the model has
8
- # the load-bearing reminders immediately available without waiting
9
- # for the CLAUDE.md re-read.
10
- #
11
- # The file is user-editable. Rulebook seeds it during `init` from a
12
- # stack-specific template and never overwrites it afterward.
13
-
14
- set -euo pipefail
15
-
16
- PROJECT_ROOT="$(pwd)"
17
- CONTEXT_FILE="${PROJECT_ROOT}/.rulebook/COMPACT_CONTEXT.md"
18
-
19
- if [[ ! -f "$CONTEXT_FILE" ]]; then
20
- # Nothing to inject — emit a benign empty additionalContext.
21
- printf '%s' '{"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":""}}'
22
- exit 0
23
- fi
24
-
25
- content="$(cat "$CONTEXT_FILE")"
26
-
27
- # Emit as additionalContext via jq so we correctly escape newlines/quotes.
28
- jq -nc --arg ctx "$content" '{
29
- hookSpecificOutput: {
30
- hookEventName: "SessionStart",
31
- additionalContext: $ctx
32
- }
33
- }'
34
- exit 0
1
+ #!/usr/bin/env bash
2
+ # Claude Code SessionStart hook (matcher: "compact").
3
+ #
4
+ # Re-injects critical architectural context after a conversation
5
+ # compaction. Claude Code already re-loads CLAUDE.md on compact, so
6
+ # this hook is defense-in-depth: it outputs a short, always-fresh
7
+ # cheat sheet from `.rulebook/COMPACT_CONTEXT.md` so the model has
8
+ # the load-bearing reminders immediately available without waiting
9
+ # for the CLAUDE.md re-read.
10
+ #
11
+ # The file is user-editable. Rulebook seeds it during `init` from a
12
+ # stack-specific template and never overwrites it afterward.
13
+
14
+ set -euo pipefail
15
+
16
+ PROJECT_ROOT="$(pwd)"
17
+ CONTEXT_FILE="${PROJECT_ROOT}/.rulebook/COMPACT_CONTEXT.md"
18
+
19
+ if [[ ! -f "$CONTEXT_FILE" ]]; then
20
+ # Nothing to inject — emit a benign empty additionalContext.
21
+ printf '%s' '{"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":""}}'
22
+ exit 0
23
+ fi
24
+
25
+ content="$(cat "$CONTEXT_FILE")"
26
+
27
+ # Emit as additionalContext via jq so we correctly escape newlines/quotes.
28
+ jq -nc --arg ctx "$content" '{
29
+ hookSpecificOutput: {
30
+ hookEventName: "SessionStart",
31
+ additionalContext: $ctx
32
+ }
33
+ }'
34
+ exit 0