xtrm-tools 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/CHANGELOG.md +496 -0
  2. package/README.md +762 -0
  3. package/cli/dist/index.cjs +55245 -0
  4. package/cli/dist/index.cjs.map +1 -0
  5. package/cli/dist/index.d.cts +2 -0
  6. package/cli/package.json +43 -0
  7. package/config/.env.example +40 -0
  8. package/config/hooks.json +36 -0
  9. package/config/mcp_servers.json +46 -0
  10. package/config/mcp_servers_optional.json +53 -0
  11. package/config/settings.json +70 -0
  12. package/hooks/README.md +156 -0
  13. package/hooks/__pycache__/agent_context.cpython-314.pyc +0 -0
  14. package/hooks/agent_context.py +105 -0
  15. package/hooks/gitnexus/gitnexus-hook.cjs +133 -0
  16. package/hooks/serena-workflow-reminder.py +74 -0
  17. package/hooks/skill-discovery.py +90 -0
  18. package/hooks/skill-suggestion.py +112 -0
  19. package/hooks/test_agent_context.py +112 -0
  20. package/hooks/type-safety-enforcement.py +107 -0
  21. package/package.json +48 -0
  22. package/project-skills/main-guard/.claude/hooks/main-guard.cjs +188 -0
  23. package/project-skills/main-guard/.claude/settings.json +16 -0
  24. package/project-skills/main-guard/.claude/skills/using-main-guard/SKILL.md +135 -0
  25. package/project-skills/main-guard/README.md +163 -0
  26. package/project-skills/py-quality-gate/.claude/hooks/quality-check.py +311 -0
  27. package/project-skills/py-quality-gate/.claude/settings.json +16 -0
  28. package/project-skills/py-quality-gate/.claude/skills/using-py-quality-gate/SKILL.md +112 -0
  29. package/project-skills/py-quality-gate/README.md +147 -0
  30. package/project-skills/service-skills-set/.claude/git-hooks/__pycache__/doc_reminder.cpython-314.pyc +0 -0
  31. package/project-skills/service-skills-set/.claude/git-hooks/__pycache__/skill_staleness.cpython-314.pyc +0 -0
  32. package/project-skills/service-skills-set/.claude/git-hooks/doc_reminder.py +67 -0
  33. package/project-skills/service-skills-set/.claude/git-hooks/skill_staleness.py +194 -0
  34. package/project-skills/service-skills-set/.claude/service-registry.json +4 -0
  35. package/project-skills/service-skills-set/.claude/settings.json +37 -0
  36. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/SKILL.md +433 -0
  37. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/references/script_quality_standards.md +412 -0
  38. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/references/service_skill_system_guide.md +264 -0
  39. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/bootstrap.py +308 -0
  40. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/deep_dive.py +304 -0
  41. package/project-skills/service-skills-set/.claude/skills/creating-service-skills/scripts/scaffolder.py +482 -0
  42. package/project-skills/service-skills-set/.claude/skills/scoping-service-skills/SKILL.md +231 -0
  43. package/project-skills/service-skills-set/.claude/skills/scoping-service-skills/scripts/scope.py +74 -0
  44. package/project-skills/service-skills-set/.claude/skills/updating-service-skills/SKILL.md +136 -0
  45. package/project-skills/service-skills-set/.claude/skills/updating-service-skills/scripts/__pycache__/drift_detector.cpython-314.pyc +0 -0
  46. package/project-skills/service-skills-set/.claude/skills/updating-service-skills/scripts/drift_detector.py +222 -0
  47. package/project-skills/service-skills-set/.claude/skills/using-service-skills/SKILL.md +108 -0
  48. package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/__pycache__/cataloger.cpython-314.pyc +0 -0
  49. package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/__pycache__/skill_activator.cpython-314.pyc +0 -0
  50. package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/cataloger.py +74 -0
  51. package/project-skills/service-skills-set/.claude/skills/using-service-skills/scripts/skill_activator.py +152 -0
  52. package/project-skills/service-skills-set/README.md +93 -0
  53. package/project-skills/service-skills-set/__pycache__/install-service-skills.cpython-314.pyc +0 -0
  54. package/project-skills/service-skills-set/install-service-skills.py +163 -0
  55. package/project-skills/service-skills-set/service-skills-readme.md +236 -0
  56. package/project-skills/tdd-guard/.claude/settings.json +38 -0
  57. package/project-skills/tdd-guard/.claude/skills/using-tdd-guard/SKILL.md +74 -0
  58. package/project-skills/tdd-guard/CLAUDE.md +98 -0
  59. package/project-skills/tdd-guard/CONTRIBUTING.md +38 -0
  60. package/project-skills/tdd-guard/DEVELOPMENT.md +127 -0
  61. package/project-skills/tdd-guard/LICENSE +21 -0
  62. package/project-skills/tdd-guard/README.md +396 -0
  63. package/project-skills/tdd-guard/docs/adr/001-claude-session-subdirectory.md +52 -0
  64. package/project-skills/tdd-guard/docs/adr/002-secure-claude-binary-path.md +56 -0
  65. package/project-skills/tdd-guard/docs/adr/003-remove-configurable-data-directory.md +56 -0
  66. package/project-skills/tdd-guard/docs/adr/004-monorepo-architecture.md +64 -0
  67. package/project-skills/tdd-guard/docs/adr/005-claude-project-dir-support.md +55 -0
  68. package/project-skills/tdd-guard/docs/adr/006-phpunit-separate-repository.md +93 -0
  69. package/project-skills/tdd-guard/docs/adr/007-golangci-lint-path-support.md +83 -0
  70. package/project-skills/tdd-guard/docs/adr/008-storybook-reporter-design.md +182 -0
  71. package/project-skills/tdd-guard/docs/assets/tdd-guard-demo-screenshot.gif +0 -0
  72. package/project-skills/tdd-guard/docs/config-migration.md +143 -0
  73. package/project-skills/tdd-guard/docs/configuration.md +137 -0
  74. package/project-skills/tdd-guard/docs/custom-instructions.md +43 -0
  75. package/project-skills/tdd-guard/docs/enforcement.md +46 -0
  76. package/project-skills/tdd-guard/docs/ignore-patterns.md +81 -0
  77. package/project-skills/tdd-guard/docs/linting.md +109 -0
  78. package/project-skills/tdd-guard/docs/quick-commands.md +52 -0
  79. package/project-skills/tdd-guard/docs/session-management.md +75 -0
  80. package/project-skills/tdd-guard/docs/storybook-vitest-addon.md +120 -0
  81. package/project-skills/tdd-guard/docs/validation-model.md +63 -0
  82. package/project-skills/tdd-guard/eslint.config.mjs +140 -0
  83. package/project-skills/tdd-guard/package-lock.json +16937 -0
  84. package/project-skills/tdd-guard/package.json +102 -0
  85. package/project-skills/tdd-guard/reporters/go/README.md +67 -0
  86. package/project-skills/tdd-guard/reporters/go/cmd/tdd-guard-go/main.go +127 -0
  87. package/project-skills/tdd-guard/reporters/go/cmd/tdd-guard-go/main_test.go +280 -0
  88. package/project-skills/tdd-guard/reporters/go/go.mod +3 -0
  89. package/project-skills/tdd-guard/reporters/go/go.sum +0 -0
  90. package/project-skills/tdd-guard/reporters/go/internal/formatter/formatter.go +126 -0
  91. package/project-skills/tdd-guard/reporters/go/internal/formatter/formatter_test.go +264 -0
  92. package/project-skills/tdd-guard/reporters/go/internal/io/tee_reader.go +26 -0
  93. package/project-skills/tdd-guard/reporters/go/internal/io/tee_reader_test.go +37 -0
  94. package/project-skills/tdd-guard/reporters/go/internal/parser/mixed_reader.go +94 -0
  95. package/project-skills/tdd-guard/reporters/go/internal/parser/mixed_reader_test.go +198 -0
  96. package/project-skills/tdd-guard/reporters/go/internal/parser/parser.go +245 -0
  97. package/project-skills/tdd-guard/reporters/go/internal/parser/parser_test.go +547 -0
  98. package/project-skills/tdd-guard/reporters/go/internal/storage/storage.go +35 -0
  99. package/project-skills/tdd-guard/reporters/go/internal/storage/storage_test.go +113 -0
  100. package/project-skills/tdd-guard/reporters/go/internal/transformer/transformer.go +103 -0
  101. package/project-skills/tdd-guard/reporters/go/internal/transformer/transformer_test.go +303 -0
  102. package/project-skills/tdd-guard/reporters/jest/README.md +102 -0
  103. package/project-skills/tdd-guard/reporters/jest/package.json +38 -0
  104. package/project-skills/tdd-guard/reporters/phpunit/.php-cs-fixer.php +28 -0
  105. package/project-skills/tdd-guard/reporters/phpunit/README.md +97 -0
  106. package/project-skills/tdd-guard/reporters/phpunit/SYNC_README.md +29 -0
  107. package/project-skills/tdd-guard/reporters/phpunit/composer.json +55 -0
  108. package/project-skills/tdd-guard/reporters/phpunit/phpunit.xml.dist +19 -0
  109. package/project-skills/tdd-guard/reporters/phpunit/psalm.xml +44 -0
  110. package/project-skills/tdd-guard/reporters/phpunit/src/Event/ErroredTestSubscriber.php +28 -0
  111. package/project-skills/tdd-guard/reporters/phpunit/src/Event/FailedTestSubscriber.php +28 -0
  112. package/project-skills/tdd-guard/reporters/phpunit/src/Event/IncompleteTestSubscriber.php +28 -0
  113. package/project-skills/tdd-guard/reporters/phpunit/src/Event/PassedTestSubscriber.php +27 -0
  114. package/project-skills/tdd-guard/reporters/phpunit/src/Event/SkippedTestSubscriber.php +28 -0
  115. package/project-skills/tdd-guard/reporters/phpunit/src/Event/TestRunnerFinishedSubscriber.php +24 -0
  116. package/project-skills/tdd-guard/reporters/phpunit/src/PathValidator.php +88 -0
  117. package/project-skills/tdd-guard/reporters/phpunit/src/Storage.php +26 -0
  118. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardExtension.php +33 -0
  119. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardListener.php +158 -0
  120. package/project-skills/tdd-guard/reporters/phpunit/src/TddGuardSubscriber.php +35 -0
  121. package/project-skills/tdd-guard/reporters/phpunit/src/TestResultCollector.php +105 -0
  122. package/project-skills/tdd-guard/reporters/phpunit/tests/PathValidatorTest.php +74 -0
  123. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardExtensionFailedTest.php +241 -0
  124. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardExtensionTest.php +84 -0
  125. package/project-skills/tdd-guard/reporters/phpunit/tests/TddGuardStorageLocationTest.php +71 -0
  126. package/project-skills/tdd-guard/reporters/pytest/README.md +77 -0
  127. package/project-skills/tdd-guard/reporters/pytest/pyproject.toml +43 -0
  128. package/project-skills/tdd-guard/reporters/pytest/pytest.ini.example +7 -0
  129. package/project-skills/tdd-guard/reporters/pytest/tdd_guard_pytest/__init__.py +1 -0
  130. package/project-skills/tdd-guard/reporters/pytest/tdd_guard_pytest/pytest_reporter.py +134 -0
  131. package/project-skills/tdd-guard/reporters/pytest/tests/__init__.py +1 -0
  132. package/project-skills/tdd-guard/reporters/pytest/tests/conftest.py +3 -0
  133. package/project-skills/tdd-guard/reporters/pytest/tests/helpers.py +293 -0
  134. package/project-skills/tdd-guard/reporters/pytest/tests/test_config_option.py +38 -0
  135. package/project-skills/tdd-guard/reporters/pytest/tests/test_path_validation.py +59 -0
  136. package/project-skills/tdd-guard/reporters/pytest/tests/test_plugin_config.py +32 -0
  137. package/project-skills/tdd-guard/reporters/pytest/tests/test_project_root.py +296 -0
  138. package/project-skills/tdd-guard/reporters/pytest/tests/test_pytest_reporter.py +137 -0
  139. package/project-skills/tdd-guard/reporters/rspec/Gemfile +3 -0
  140. package/project-skills/tdd-guard/reporters/rust/Cargo.lock +458 -0
  141. package/project-skills/tdd-guard/reporters/rust/Cargo.toml +33 -0
  142. package/project-skills/tdd-guard/reporters/rust/Makefile.example +95 -0
  143. package/project-skills/tdd-guard/reporters/rust/README.md +88 -0
  144. package/project-skills/tdd-guard/reporters/rust/src/error_parser.rs +309 -0
  145. package/project-skills/tdd-guard/reporters/rust/src/main.rs +464 -0
  146. package/project-skills/tdd-guard/reporters/rust/src/parser.rs +225 -0
  147. package/project-skills/tdd-guard/reporters/rust/src/transformer.rs +409 -0
  148. package/project-skills/tdd-guard/reporters/storybook/README.md +108 -0
  149. package/project-skills/tdd-guard/reporters/storybook/package-lock.json +9482 -0
  150. package/project-skills/tdd-guard/reporters/storybook/package.json +43 -0
  151. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.test-data.ts +22 -0
  152. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.test.ts +190 -0
  153. package/project-skills/tdd-guard/reporters/storybook/src/StorybookReporter.ts +88 -0
  154. package/project-skills/tdd-guard/reporters/storybook/src/index.ts +12 -0
  155. package/project-skills/tdd-guard/reporters/storybook/src/types.ts +37 -0
  156. package/project-skills/tdd-guard/reporters/storybook/tsconfig.json +11 -0
  157. package/project-skills/tdd-guard/reporters/test/artifacts/go/failing/go.mod +3 -0
  158. package/project-skills/tdd-guard/reporters/test/artifacts/go/failing/single_failing_test.go +13 -0
  159. package/project-skills/tdd-guard/reporters/test/artifacts/go/import/go.mod +3 -0
  160. package/project-skills/tdd-guard/reporters/test/artifacts/go/import/single_import_error_test.go +17 -0
  161. package/project-skills/tdd-guard/reporters/test/artifacts/go/passing/go.mod +3 -0
  162. package/project-skills/tdd-guard/reporters/test/artifacts/go/passing/single_passing_test.go +13 -0
  163. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-failing.test.js +5 -0
  164. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-import-error.test.js +8 -0
  165. package/project-skills/tdd-guard/reporters/test/artifacts/jest/single-passing.test.js +5 -0
  166. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SingleFailingTest.php +11 -0
  167. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SingleImportErrorTest.php +14 -0
  168. package/project-skills/tdd-guard/reporters/test/artifacts/phpunit/SinglePassingTest.php +11 -0
  169. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_failing.py +3 -0
  170. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_import_error.py +6 -0
  171. package/project-skills/tdd-guard/reporters/test/artifacts/pytest/test_single_passing.py +3 -0
  172. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/Cargo.lock +7 -0
  173. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/Cargo.toml +4 -0
  174. package/project-skills/tdd-guard/reporters/test/artifacts/rust/failing/src/lib.rs +14 -0
  175. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/Cargo.lock +7 -0
  176. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/Cargo.toml +4 -0
  177. package/project-skills/tdd-guard/reporters/test/artifacts/rust/import/src/lib.rs +13 -0
  178. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/Cargo.lock +7 -0
  179. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/Cargo.toml +4 -0
  180. package/project-skills/tdd-guard/reporters/test/artifacts/rust/passing/src/lib.rs +14 -0
  181. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/Calculator.js +4 -0
  182. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-failing.stories.js +15 -0
  183. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-import-error.stories.js +14 -0
  184. package/project-skills/tdd-guard/reporters/test/artifacts/storybook/single-passing.stories.js +15 -0
  185. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-failing.test.js +7 -0
  186. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-import-error.test.js +9 -0
  187. package/project-skills/tdd-guard/reporters/test/artifacts/vitest/single-passing.test.js +7 -0
  188. package/project-skills/tdd-guard/reporters/test/factories/go.ts +59 -0
  189. package/project-skills/tdd-guard/reporters/test/factories/helpers.ts +48 -0
  190. package/project-skills/tdd-guard/reporters/test/factories/index.ts +7 -0
  191. package/project-skills/tdd-guard/reporters/test/factories/jest.ts +51 -0
  192. package/project-skills/tdd-guard/reporters/test/factories/phpunit.ts +63 -0
  193. package/project-skills/tdd-guard/reporters/test/factories/pytest.ts +41 -0
  194. package/project-skills/tdd-guard/reporters/test/factories/rust.ts +158 -0
  195. package/project-skills/tdd-guard/reporters/test/factories/storybook.ts +198 -0
  196. package/project-skills/tdd-guard/reporters/test/factories/vitest.ts +51 -0
  197. package/project-skills/tdd-guard/reporters/test/reporters.integration.test.ts +735 -0
  198. package/project-skills/tdd-guard/reporters/test/types.ts +28 -0
  199. package/project-skills/tdd-guard/reporters/vitest/README.md +64 -0
  200. package/project-skills/tdd-guard/reporters/vitest/package.json +35 -0
  201. package/project-skills/tdd-guard/src/cli/buildContext.test.ts +200 -0
  202. package/project-skills/tdd-guard/src/cli/buildContext.ts +48 -0
  203. package/project-skills/tdd-guard/src/cli/tdd-guard.test.ts +159 -0
  204. package/project-skills/tdd-guard/src/cli/tdd-guard.ts +48 -0
  205. package/project-skills/tdd-guard/src/config/Config.test.ts +538 -0
  206. package/project-skills/tdd-guard/src/config/Config.ts +172 -0
  207. package/project-skills/tdd-guard/src/contracts/schemas/guardSchemas.test.ts +58 -0
  208. package/project-skills/tdd-guard/src/contracts/schemas/guardSchemas.ts +8 -0
  209. package/project-skills/tdd-guard/src/contracts/schemas/lintSchemas.test.ts +347 -0
  210. package/project-skills/tdd-guard/src/contracts/schemas/lintSchemas.ts +61 -0
  211. package/project-skills/tdd-guard/src/contracts/schemas/pytestSchemas.test.ts +24 -0
  212. package/project-skills/tdd-guard/src/contracts/schemas/pytestSchemas.ts +7 -0
  213. package/project-skills/tdd-guard/src/contracts/schemas/reporterSchemas.test.ts +377 -0
  214. package/project-skills/tdd-guard/src/contracts/schemas/reporterSchemas.ts +75 -0
  215. package/project-skills/tdd-guard/src/contracts/schemas/toolSchemas.test.ts +563 -0
  216. package/project-skills/tdd-guard/src/contracts/schemas/toolSchemas.ts +140 -0
  217. package/project-skills/tdd-guard/src/contracts/types/ClientType.ts +1 -0
  218. package/project-skills/tdd-guard/src/contracts/types/ConfigOptions.ts +12 -0
  219. package/project-skills/tdd-guard/src/contracts/types/Context.ts +16 -0
  220. package/project-skills/tdd-guard/src/contracts/types/ModelClient.ts +3 -0
  221. package/project-skills/tdd-guard/src/contracts/types/ValidationResult.ts +6 -0
  222. package/project-skills/tdd-guard/src/guard/GuardManager.test.ts +336 -0
  223. package/project-skills/tdd-guard/src/guard/GuardManager.ts +83 -0
  224. package/project-skills/tdd-guard/src/hooks/HookEvents.test.ts +107 -0
  225. package/project-skills/tdd-guard/src/hooks/HookEvents.ts +39 -0
  226. package/project-skills/tdd-guard/src/hooks/fileTypeDetection.ts +16 -0
  227. package/project-skills/tdd-guard/src/hooks/postToolLint.test.ts +327 -0
  228. package/project-skills/tdd-guard/src/hooks/postToolLint.ts +165 -0
  229. package/project-skills/tdd-guard/src/hooks/processHookData.test.ts +465 -0
  230. package/project-skills/tdd-guard/src/hooks/processHookData.ts +203 -0
  231. package/project-skills/tdd-guard/src/hooks/sessionHandler.test.ts +136 -0
  232. package/project-skills/tdd-guard/src/hooks/sessionHandler.ts +31 -0
  233. package/project-skills/tdd-guard/src/hooks/userPromptHandler.test.ts +131 -0
  234. package/project-skills/tdd-guard/src/hooks/userPromptHandler.ts +55 -0
  235. package/project-skills/tdd-guard/src/index.ts +19 -0
  236. package/project-skills/tdd-guard/src/linters/Linter.ts +5 -0
  237. package/project-skills/tdd-guard/src/linters/eslint/ESLint.test.ts +183 -0
  238. package/project-skills/tdd-guard/src/linters/eslint/ESLint.ts +82 -0
  239. package/project-skills/tdd-guard/src/linters/golangci/GolangciLint.test.ts +170 -0
  240. package/project-skills/tdd-guard/src/linters/golangci/GolangciLint.ts +148 -0
  241. package/project-skills/tdd-guard/src/processors/index.ts +1 -0
  242. package/project-skills/tdd-guard/src/processors/lintProcessor.ts +77 -0
  243. package/project-skills/tdd-guard/src/processors/testResults/TestResultsProcessor.test.ts +303 -0
  244. package/project-skills/tdd-guard/src/processors/testResults/TestResultsProcessor.ts +255 -0
  245. package/project-skills/tdd-guard/src/providers/LinterProvider.test.ts +43 -0
  246. package/project-skills/tdd-guard/src/providers/LinterProvider.ts +20 -0
  247. package/project-skills/tdd-guard/src/providers/ModelClientProvider.test.ts +68 -0
  248. package/project-skills/tdd-guard/src/providers/ModelClientProvider.ts +22 -0
  249. package/project-skills/tdd-guard/src/storage/FileStorage.test.ts +76 -0
  250. package/project-skills/tdd-guard/src/storage/FileStorage.ts +108 -0
  251. package/project-skills/tdd-guard/src/storage/MemoryStorage.ts +57 -0
  252. package/project-skills/tdd-guard/src/storage/Storage.test.ts +227 -0
  253. package/project-skills/tdd-guard/src/storage/Storage.ts +17 -0
  254. package/project-skills/tdd-guard/src/validation/context/context.test.ts +364 -0
  255. package/project-skills/tdd-guard/src/validation/context/context.ts +155 -0
  256. package/project-skills/tdd-guard/src/validation/models/AnthropicApi.test.ts +171 -0
  257. package/project-skills/tdd-guard/src/validation/models/AnthropicApi.ts +49 -0
  258. package/project-skills/tdd-guard/src/validation/models/ClaudeAgentSdk.test.ts +167 -0
  259. package/project-skills/tdd-guard/src/validation/models/ClaudeAgentSdk.ts +54 -0
  260. package/project-skills/tdd-guard/src/validation/models/ClaudeCli.test.ts +239 -0
  261. package/project-skills/tdd-guard/src/validation/models/ClaudeCli.ts +57 -0
  262. package/project-skills/tdd-guard/src/validation/prompts/file-types.ts +52 -0
  263. package/project-skills/tdd-guard/src/validation/prompts/operations/edit.ts +58 -0
  264. package/project-skills/tdd-guard/src/validation/prompts/operations/multi-edit.ts +54 -0
  265. package/project-skills/tdd-guard/src/validation/prompts/operations/write.ts +54 -0
  266. package/project-skills/tdd-guard/src/validation/prompts/response.ts +40 -0
  267. package/project-skills/tdd-guard/src/validation/prompts/rules.ts +51 -0
  268. package/project-skills/tdd-guard/src/validation/prompts/system-prompt.ts +10 -0
  269. package/project-skills/tdd-guard/src/validation/prompts/tools/lint-results.ts +15 -0
  270. package/project-skills/tdd-guard/src/validation/prompts/tools/test-output.ts +14 -0
  271. package/project-skills/tdd-guard/src/validation/prompts/tools/todos.ts +9 -0
  272. package/project-skills/tdd-guard/src/validation/validator.test.ts +268 -0
  273. package/project-skills/tdd-guard/src/validation/validator.ts +159 -0
  274. package/project-skills/tdd-guard/test/artifacts/go/.golangci.yml +6 -0
  275. package/project-skills/tdd-guard/test/artifacts/go/with-issues/file-with-issues.go +12 -0
  276. package/project-skills/tdd-guard/test/artifacts/go/with-issues/go.mod +3 -0
  277. package/project-skills/tdd-guard/test/artifacts/go/without-issues/file-without-issues.go +7 -0
  278. package/project-skills/tdd-guard/test/artifacts/go/without-issues/go.mod +3 -0
  279. package/project-skills/tdd-guard/test/artifacts/javascript/eslint.config.js +20 -0
  280. package/project-skills/tdd-guard/test/artifacts/javascript/file-with-issues.js +12 -0
  281. package/project-skills/tdd-guard/test/artifacts/javascript/file-without-issues.js +10 -0
  282. package/project-skills/tdd-guard/test/hooks/fileTypeDetection.test.ts +26 -0
  283. package/project-skills/tdd-guard/test/hooks/processHookData.fileType.test.ts +46 -0
  284. package/project-skills/tdd-guard/test/hooks/processHookData.python.test.ts +68 -0
  285. package/project-skills/tdd-guard/test/integration/test-context.test.ts +66 -0
  286. package/project-skills/tdd-guard/test/integration/validator.core.test.ts +96 -0
  287. package/project-skills/tdd-guard/test/integration/validator.scenarios.test.ts +497 -0
  288. package/project-skills/tdd-guard/test/utils/assertions.ts +29 -0
  289. package/project-skills/tdd-guard/test/utils/factories/contextFactory.ts +30 -0
  290. package/project-skills/tdd-guard/test/utils/factories/editFactory.ts +82 -0
  291. package/project-skills/tdd-guard/test/utils/factories/helpers.test.ts +46 -0
  292. package/project-skills/tdd-guard/test/utils/factories/helpers.ts +46 -0
  293. package/project-skills/tdd-guard/test/utils/factories/lintFactory.ts +352 -0
  294. package/project-skills/tdd-guard/test/utils/factories/modelClientProviderFactory.ts +21 -0
  295. package/project-skills/tdd-guard/test/utils/factories/multiEditFactory.ts +79 -0
  296. package/project-skills/tdd-guard/test/utils/factories/operations.ts +57 -0
  297. package/project-skills/tdd-guard/test/utils/factories/reporterFactory.ts +55 -0
  298. package/project-skills/tdd-guard/test/utils/factories/scenarios/index.ts +22 -0
  299. package/project-skills/tdd-guard/test/utils/factories/scenarios/languages/python.ts +745 -0
  300. package/project-skills/tdd-guard/test/utils/factories/scenarios/languages/typescript.ts +767 -0
  301. package/project-skills/tdd-guard/test/utils/factories/scenarios/types.ts +77 -0
  302. package/project-skills/tdd-guard/test/utils/factories/scenarios/utils.ts +15 -0
  303. package/project-skills/tdd-guard/test/utils/factories/sessionStartFactory.ts +36 -0
  304. package/project-skills/tdd-guard/test/utils/factories/testDefaults.ts +90 -0
  305. package/project-skills/tdd-guard/test/utils/factories/testResultsFactory.ts +234 -0
  306. package/project-skills/tdd-guard/test/utils/factories/todoFactory.ts +99 -0
  307. package/project-skills/tdd-guard/test/utils/factories/userPromptSubmitFactory.ts +39 -0
  308. package/project-skills/tdd-guard/test/utils/factories/writeFactory.ts +70 -0
  309. package/project-skills/tdd-guard/test/utils/index.ts +131 -0
  310. package/project-skills/tdd-guard/tsconfig.build.json +16 -0
  311. package/project-skills/tdd-guard/tsconfig.eslint.json +17 -0
  312. package/project-skills/tdd-guard/tsconfig.json +32 -0
  313. package/project-skills/tdd-guard/tsconfig.node.json +10 -0
  314. package/project-skills/tdd-guard/vitest.config.ts +85 -0
  315. package/project-skills/ts-quality-gate/.claude/hooks/hook-config.json +66 -0
  316. package/project-skills/ts-quality-gate/.claude/hooks/quality-check.cjs +1251 -0
  317. package/project-skills/ts-quality-gate/.claude/settings.json +16 -0
  318. package/project-skills/ts-quality-gate/.claude/skills/using-ts-quality-gate/SKILL.md +81 -0
  319. package/project-skills/ts-quality-gate/README.md +115 -0
  320. package/skills/README.txt +31 -0
  321. package/skills/clean-code/SKILL.md +201 -0
  322. package/skills/delegating/SKILL.md +196 -0
  323. package/skills/delegating/config.yaml +210 -0
  324. package/skills/delegating/references/orchestration-protocols.md +41 -0
  325. package/skills/docker-expert/SKILL.md +409 -0
  326. package/skills/documenting/CHANGELOG.md +23 -0
  327. package/skills/documenting/README.md +148 -0
  328. package/skills/documenting/SKILL.md +113 -0
  329. package/skills/documenting/examples/example_pattern.md +70 -0
  330. package/skills/documenting/examples/example_reference.md +70 -0
  331. package/skills/documenting/examples/example_ssot_analytics.md +64 -0
  332. package/skills/documenting/examples/example_workflow.md +141 -0
  333. package/skills/documenting/references/changelog-format.md +97 -0
  334. package/skills/documenting/references/metadata-schema.md +136 -0
  335. package/skills/documenting/references/taxonomy.md +81 -0
  336. package/skills/documenting/references/versioning-rules.md +78 -0
  337. package/skills/documenting/scripts/__pycache__/drift_detector.cpython-314.pyc +0 -0
  338. package/skills/documenting/scripts/__pycache__/orchestrator.cpython-314.pyc +0 -0
  339. package/skills/documenting/scripts/__pycache__/validate_metadata.cpython-314.pyc +0 -0
  340. package/skills/documenting/scripts/bump_version.sh +60 -0
  341. package/skills/documenting/scripts/changelog/__init__.py +0 -0
  342. package/skills/documenting/scripts/changelog/__pycache__/__init__.cpython-314.pyc +0 -0
  343. package/skills/documenting/scripts/changelog/__pycache__/add_entry.cpython-314.pyc +0 -0
  344. package/skills/documenting/scripts/changelog/__pycache__/bump_release.cpython-314.pyc +0 -0
  345. package/skills/documenting/scripts/changelog/__pycache__/validate_changelog.cpython-314.pyc +0 -0
  346. package/skills/documenting/scripts/changelog/add_entry.py +216 -0
  347. package/skills/documenting/scripts/changelog/bump_release.py +117 -0
  348. package/skills/documenting/scripts/changelog/init_changelog.py +54 -0
  349. package/skills/documenting/scripts/changelog/validate_changelog.py +128 -0
  350. package/skills/documenting/scripts/drift_detector.py +266 -0
  351. package/skills/documenting/scripts/generate_template.py +311 -0
  352. package/skills/documenting/scripts/list_by_category.sh +84 -0
  353. package/skills/documenting/scripts/orchestrator.py +255 -0
  354. package/skills/documenting/scripts/validate_metadata.py +242 -0
  355. package/skills/documenting/templates/CHANGELOG.md.template +13 -0
  356. package/skills/documenting/tests/__pycache__/test_changelog.cpython-314-pytest-9.0.2.pyc +0 -0
  357. package/skills/documenting/tests/__pycache__/test_drift_detector.cpython-314-pytest-9.0.2.pyc +0 -0
  358. package/skills/documenting/tests/__pycache__/test_orchestrator.cpython-314-pytest-9.0.2.pyc +0 -0
  359. package/skills/documenting/tests/__pycache__/test_validate_metadata.cpython-314-pytest-9.0.2.pyc +0 -0
  360. package/skills/documenting/tests/integration_test.sh +70 -0
  361. package/skills/documenting/tests/test_changelog.py +201 -0
  362. package/skills/documenting/tests/test_drift_detector.py +80 -0
  363. package/skills/documenting/tests/test_orchestrator.py +52 -0
  364. package/skills/documenting/tests/test_validate_metadata.py +64 -0
  365. package/skills/find-skills/SKILL.md +133 -0
  366. package/skills/gitnexus-debugging/SKILL.md +85 -0
  367. package/skills/gitnexus-exploring/SKILL.md +75 -0
  368. package/skills/gitnexus-impact-analysis/SKILL.md +94 -0
  369. package/skills/gitnexus-refactoring/SKILL.md +113 -0
  370. package/skills/hook-development/SKILL.md +797 -0
  371. package/skills/hook-development/examples/load-context.sh +55 -0
  372. package/skills/hook-development/examples/quality-check.js +1168 -0
  373. package/skills/hook-development/examples/validate-bash.sh +43 -0
  374. package/skills/hook-development/examples/validate-write.sh +38 -0
  375. package/skills/hook-development/references/advanced.md +527 -0
  376. package/skills/hook-development/references/migration.md +369 -0
  377. package/skills/hook-development/references/patterns.md +412 -0
  378. package/skills/hook-development/scripts/README.md +164 -0
  379. package/skills/hook-development/scripts/hook-linter.sh +153 -0
  380. package/skills/hook-development/scripts/test-hook.sh +252 -0
  381. package/skills/hook-development/scripts/validate-hook-schema.sh +159 -0
  382. package/skills/obsidian-cli/SKILL.md +106 -0
  383. package/skills/orchestrating-agents/SKILL.md +135 -0
  384. package/skills/orchestrating-agents/config.yaml +45 -0
  385. package/skills/orchestrating-agents/references/agent-context-integration.md +37 -0
  386. package/skills/orchestrating-agents/references/examples.md +45 -0
  387. package/skills/orchestrating-agents/references/handover-protocol.md +31 -0
  388. package/skills/orchestrating-agents/references/workflows.md +42 -0
  389. package/skills/orchestrating-agents/scripts/detect_neighbors.py +23 -0
  390. package/skills/prompt-improving/README.md +162 -0
  391. package/skills/prompt-improving/SKILL.md +74 -0
  392. package/skills/prompt-improving/references/analysis_commands.md +24 -0
  393. package/skills/prompt-improving/references/chain_of_thought.md +24 -0
  394. package/skills/prompt-improving/references/mcp_definitions.md +20 -0
  395. package/skills/prompt-improving/references/multishot.md +23 -0
  396. package/skills/prompt-improving/references/xml_core.md +60 -0
  397. package/skills/python-testing/SKILL.md +815 -0
  398. package/skills/senior-backend/SKILL.md +209 -0
  399. package/skills/senior-backend/references/api_design_patterns.md +103 -0
  400. package/skills/senior-backend/references/backend_security_practices.md +103 -0
  401. package/skills/senior-backend/references/database_optimization_guide.md +103 -0
  402. package/skills/senior-backend/scripts/api_load_tester.py +114 -0
  403. package/skills/senior-backend/scripts/api_scaffolder.py +114 -0
  404. package/skills/senior-backend/scripts/database_migration_tool.py +114 -0
  405. package/skills/senior-data-scientist/SKILL.md +226 -0
  406. package/skills/senior-data-scientist/references/experiment_design_frameworks.md +80 -0
  407. package/skills/senior-data-scientist/references/feature_engineering_patterns.md +80 -0
  408. package/skills/senior-data-scientist/references/statistical_methods_advanced.md +80 -0
  409. package/skills/senior-data-scientist/scripts/experiment_designer.py +100 -0
  410. package/skills/senior-data-scientist/scripts/feature_engineering_pipeline.py +100 -0
  411. package/skills/senior-data-scientist/scripts/model_evaluation_suite.py +100 -0
  412. package/skills/senior-devops/SKILL.md +209 -0
  413. package/skills/senior-devops/references/cicd_pipeline_guide.md +103 -0
  414. package/skills/senior-devops/references/deployment_strategies.md +103 -0
  415. package/skills/senior-devops/references/infrastructure_as_code.md +103 -0
  416. package/skills/senior-devops/scripts/deployment_manager.py +114 -0
  417. package/skills/senior-devops/scripts/pipeline_generator.py +114 -0
  418. package/skills/senior-devops/scripts/terraform_scaffolder.py +114 -0
  419. package/skills/senior-security/SKILL.md +209 -0
  420. package/skills/senior-security/references/cryptography_implementation.md +103 -0
  421. package/skills/senior-security/references/penetration_testing_guide.md +103 -0
  422. package/skills/senior-security/references/security_architecture_patterns.md +103 -0
  423. package/skills/senior-security/scripts/pentest_automator.py +114 -0
  424. package/skills/senior-security/scripts/security_auditor.py +114 -0
  425. package/skills/senior-security/scripts/threat_modeler.py +114 -0
  426. package/skills/skill-creator/LICENSE.txt +202 -0
  427. package/skills/skill-creator/SKILL.md +479 -0
  428. package/skills/skill-creator/agents/analyzer.md +274 -0
  429. package/skills/skill-creator/agents/comparator.md +202 -0
  430. package/skills/skill-creator/agents/grader.md +223 -0
  431. package/skills/skill-creator/assets/eval_review.html +146 -0
  432. package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  433. package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  434. package/skills/skill-creator/references/schemas.md +430 -0
  435. package/skills/skill-creator/scripts/__init__.py +0 -0
  436. package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  437. package/skills/skill-creator/scripts/generate_report.py +326 -0
  438. package/skills/skill-creator/scripts/improve_description.py +248 -0
  439. package/skills/skill-creator/scripts/package_skill.py +136 -0
  440. package/skills/skill-creator/scripts/quick_validate.py +103 -0
  441. package/skills/skill-creator/scripts/run_eval.py +310 -0
  442. package/skills/skill-creator/scripts/run_loop.py +332 -0
  443. package/skills/skill-creator/scripts/utils.py +47 -0
  444. package/skills/using-TDD/SKILL.md +410 -0
  445. package/skills/using-serena-lsp/README.md +8 -0
  446. package/skills/using-serena-lsp/REFERENCE.md +194 -0
  447. package/skills/using-serena-lsp/SKILL.md +82 -0
@@ -0,0 +1,797 @@
1
+ ---
2
+ name: hook-development
3
+ description: This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.
4
+ version: 0.1.0
5
+ ---
6
+
7
+ # Hook Development for Claude Code Plugins
8
+
9
+ ## Overview
10
+
11
+ Hooks are event-driven automation scripts that execute in response to Claude Code events. Use hooks to validate operations, enforce policies, add context, and integrate external tools into workflows.
12
+
13
+ **Key capabilities:**
14
+ - Validate tool calls before execution (PreToolUse)
15
+ - React to tool results (PostToolUse)
16
+ - Enforce completion standards (Stop, SubagentStop)
17
+ - Load project context (SessionStart)
18
+ - Automate workflows across the development lifecycle
19
+
20
+ ## Disclaimer & Security Considerations
21
+
22
+
23
+
24
+ **USE AT YOUR OWN RISK**: Claude Code hooks execute arbitrary shell commands on your system automatically. By using hooks, you acknowledge that:
25
+
26
+ - You are solely responsible for the commands you configure.
27
+
28
+ - Hooks can modify, delete, or access any files your user account can access.
29
+
30
+ - Malicious or poorly written hooks can cause data loss or system damage.
31
+
32
+ - Anthropic provides no warranty and assumes no liability for any damages resulting from hook usage.
33
+
34
+ - You should thoroughly test hooks in a safe environment before production use.
35
+
36
+
37
+
38
+ **Security Best Practices**:
39
+
40
+ 1. **Validate and sanitize inputs**: Never trust input data blindly.
41
+
42
+ 2. **Always quote shell variables**: Use `"$VAR"` not `$VAR`.
43
+
44
+ 3. **Block path traversal**: Check for `..` in file paths.
45
+
46
+ 4. **Use absolute paths**: Specify full paths for scripts (use `${CLAUDE_PLUGIN_ROOT}`).
47
+
48
+ 5. **Skip sensitive files**: Avoid modifying `.env`, `.git/`, keys, etc.
49
+
50
+ ## Hook Types
51
+
52
+ ### Prompt-Based Hooks (Recommended)
53
+
54
+ Use LLM-driven decision making for context-aware validation:
55
+
56
+ ```json
57
+ {
58
+ "type": "prompt",
59
+ "prompt": "Evaluate if this tool use is appropriate: $TOOL_INPUT",
60
+ "timeout": 30
61
+ }
62
+ ```
63
+
64
+ **Supported events:** Stop, SubagentStop, UserPromptSubmit, PreToolUse
65
+
66
+ **Benefits:**
67
+ - Context-aware decisions based on natural language reasoning
68
+ - Flexible evaluation logic without bash scripting
69
+ - Better edge case handling
70
+ - Easier to maintain and extend
71
+
72
+ ### Command Hooks
73
+
74
+ Execute bash commands for deterministic checks:
75
+
76
+ ```json
77
+ {
78
+ "type": "command",
79
+ "command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh",
80
+ "timeout": 60
81
+ }
82
+ ```
83
+
84
+ **Use for:**
85
+ - Fast deterministic validations
86
+ - File system operations
87
+ - External tool integrations
88
+ - Performance-critical checks
89
+
90
+ ## Hook Configuration Formats
91
+
92
+ ### Plugin hooks.json Format
93
+
94
+ **For plugin hooks** in `hooks/hooks.json`, use wrapper format:
95
+
96
+ ```json
97
+ {
98
+ "description": "Brief explanation of hooks (optional)",
99
+ "hooks": {
100
+ "PreToolUse": [...],
101
+ "Stop": [...],
102
+ "SessionStart": [...]
103
+ }
104
+ }
105
+ ```
106
+
107
+ **Key points:**
108
+ - `description` field is optional
109
+ - `hooks` field is required wrapper containing actual hook events
110
+ - This is the **plugin-specific format**
111
+
112
+ **Example:**
113
+ ```json
114
+ {
115
+ "description": "Validation hooks for code quality",
116
+ "hooks": {
117
+ "PreToolUse": [
118
+ {
119
+ "matcher": "Write",
120
+ "hooks": [
121
+ {
122
+ "type": "command",
123
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/validate.sh"
124
+ }
125
+ ]
126
+ }
127
+ ]
128
+ }
129
+ }
130
+ ```
131
+
132
+ ### Settings Format (Direct)
133
+
134
+ **For user settings** in `.claude/settings.json`, use direct format:
135
+
136
+ ```json
137
+ {
138
+ "PreToolUse": [...],
139
+ "Stop": [...],
140
+ "SessionStart": [...]
141
+ }
142
+ ```
143
+
144
+ **Key points:**
145
+ - No wrapper - events directly at top level
146
+ - No description field
147
+ - This is the **settings format**
148
+
149
+ **Important:** The examples below show the hook event structure that goes inside either format. For plugin hooks.json, wrap these in `{"hooks": {...}}`.
150
+
151
+ ## Hook Events
152
+
153
+ ### PreToolUse
154
+
155
+ Execute before any tool runs. Use to approve, deny, or modify tool calls.
156
+
157
+ **Example (prompt-based):**
158
+ ```json
159
+ {
160
+ "PreToolUse": [
161
+ {
162
+ "matcher": "Write|Edit",
163
+ "hooks": [
164
+ {
165
+ "type": "prompt",
166
+ "prompt": "Validate file write safety. Check: system paths, credentials, path traversal, sensitive content. Return 'approve' or 'deny'."
167
+ }
168
+ ]
169
+ }
170
+ ]
171
+ }
172
+ ```
173
+
174
+ **Output for PreToolUse:**
175
+ ```json
176
+ {
177
+ "hookSpecificOutput": {
178
+ "permissionDecision": "allow|deny|ask",
179
+ "updatedInput": {"field": "modified_value"}
180
+ },
181
+ "systemMessage": "Explanation for Claude"
182
+ }
183
+ ```
184
+
185
+ ### PostToolUse
186
+
187
+ Execute after tool completes. Use to react to results, provide feedback, or log.
188
+
189
+ **Example:**
190
+ ```json
191
+ {
192
+ "PostToolUse": [
193
+ {
194
+ "matcher": "Edit",
195
+ "hooks": [
196
+ {
197
+ "type": "prompt",
198
+ "prompt": "Analyze edit result for potential issues: syntax errors, security vulnerabilities, breaking changes. Provide feedback."
199
+ }
200
+ ]
201
+ }
202
+ ]
203
+ }
204
+ ```
205
+
206
+ **Output behavior:**
207
+ - Exit 0: stdout shown in transcript
208
+ - Exit 2: stderr fed back to Claude
209
+ - systemMessage included in context
210
+
211
+ ### Stop
212
+
213
+ Execute when main agent considers stopping. Use to validate completeness.
214
+
215
+ **Example:**
216
+ ```json
217
+ {
218
+ "Stop": [
219
+ {
220
+ "matcher": "*",
221
+ "hooks": [
222
+ {
223
+ "type": "prompt",
224
+ "prompt": "Verify task completion: tests run, build succeeded, questions answered. Return 'approve' to stop or 'block' with reason to continue."
225
+ }
226
+ ]
227
+ }
228
+ ]
229
+ }
230
+ ```
231
+
232
+ **Decision output:**
233
+ ```json
234
+ {
235
+ "decision": "approve|block",
236
+ "reason": "Explanation",
237
+ "systemMessage": "Additional context"
238
+ }
239
+ ```
240
+
241
+ ### SubagentStop
242
+
243
+ Execute when subagent considers stopping. Use to ensure subagent completed its task.
244
+
245
+ Similar to Stop hook, but for subagents.
246
+
247
+ ### UserPromptSubmit
248
+
249
+ Execute when user submits a prompt. Use to add context, validate, or block prompts.
250
+
251
+ **Example:**
252
+ ```json
253
+ {
254
+ "UserPromptSubmit": [
255
+ {
256
+ "matcher": "*",
257
+ "hooks": [
258
+ {
259
+ "type": "prompt",
260
+ "prompt": "Check if prompt requires security guidance. If discussing auth, permissions, or API security, return relevant warnings."
261
+ }
262
+ ]
263
+ }
264
+ ]
265
+ }
266
+ ```
267
+
268
+ ### SessionStart
269
+
270
+ Execute when Claude Code session begins. Use to load context and set environment.
271
+
272
+ **Example:**
273
+ ```json
274
+ {
275
+ "SessionStart": [
276
+ {
277
+ "matcher": "*",
278
+ "hooks": [
279
+ {
280
+ "type": "command",
281
+ "command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/load-context.sh"
282
+ }
283
+ ]
284
+ }
285
+ ]
286
+ }
287
+ ```
288
+
289
+ **Special capability:** Persist environment variables using `$CLAUDE_ENV_FILE`:
290
+ ```bash
291
+ echo "export PROJECT_TYPE=nodejs" >> "$CLAUDE_ENV_FILE"
292
+ ```
293
+
294
+ See `examples/load-context.sh` for complete example.
295
+
296
+ ### SessionEnd
297
+
298
+ Execute when session ends. Use for cleanup, logging, and state preservation.
299
+
300
+ ### PreCompact
301
+
302
+ Execute before context compaction. Use to add critical information to preserve.
303
+
304
+ ### Notification
305
+
306
+ Execute when Claude sends notifications. Use to react to user notifications.
307
+
308
+ ## Hook Output Format
309
+
310
+ ### Standard Output (All Hooks)
311
+
312
+ ```json
313
+ {
314
+ "continue": true,
315
+ "suppressOutput": false,
316
+ "systemMessage": "Message for Claude"
317
+ }
318
+ ```
319
+
320
+ - `continue`: If false, halt processing (default true)
321
+ - `suppressOutput`: Hide output from transcript (default false)
322
+ - `systemMessage`: Message shown to Claude
323
+
324
+ ### Exit Codes
325
+
326
+ - `0` - Success (stdout shown in transcript)
327
+ - `2` - Blocking error (stderr fed back to Claude)
328
+ - Other - Non-blocking error
329
+
330
+ ## Hook Input Format
331
+
332
+ All hooks receive JSON via stdin with common fields:
333
+
334
+ ```json
335
+ {
336
+ "session_id": "abc123",
337
+ "transcript_path": "/path/to/transcript.txt",
338
+ "cwd": "/current/working/dir",
339
+ "permission_mode": "ask|allow",
340
+ "hook_event_name": "PreToolUse"
341
+ }
342
+ ```
343
+
344
+ **Event-specific fields:**
345
+
346
+ - **PreToolUse/PostToolUse:** `tool_name`, `tool_input`, `tool_result`
347
+ - **UserPromptSubmit:** `user_prompt`
348
+ - **Stop/SubagentStop:** `reason`
349
+
350
+ Access fields in prompts using `$TOOL_INPUT`, `$TOOL_RESULT`, `$USER_PROMPT`, etc.
351
+
352
+ ## Environment Variables
353
+
354
+ Available in all command hooks:
355
+
356
+ - `$CLAUDE_PROJECT_DIR` - Project root path
357
+ - `$CLAUDE_PLUGIN_ROOT` - Plugin directory (use for portable paths)
358
+ - `$CLAUDE_ENV_FILE` - SessionStart only: persist env vars here
359
+ - `$CLAUDE_CODE_REMOTE` - Set if running in remote context
360
+
361
+ **Always use ${CLAUDE_PLUGIN_ROOT} in hook commands for portability:**
362
+
363
+ ```json
364
+ {
365
+ "type": "command",
366
+ "command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"
367
+ }
368
+ ```
369
+
370
+ ## Plugin Hook Configuration
371
+
372
+ In plugins, define hooks in `hooks/hooks.json`:
373
+
374
+ ```json
375
+ {
376
+ "PreToolUse": [
377
+ {
378
+ "matcher": "Write|Edit",
379
+ "hooks": [
380
+ {
381
+ "type": "prompt",
382
+ "prompt": "Validate file write safety"
383
+ }
384
+ ]
385
+ }
386
+ ],
387
+ "Stop": [
388
+ {
389
+ "matcher": "*",
390
+ "hooks": [
391
+ {
392
+ "type": "prompt",
393
+ "prompt": "Verify task completion"
394
+ }
395
+ ]
396
+ }
397
+ ],
398
+ "SessionStart": [
399
+ {
400
+ "matcher": "*",
401
+ "hooks": [
402
+ {
403
+ "type": "command",
404
+ "command": "bash ${CLAUDE_PLUGIN_ROOT}/scripts/load-context.sh",
405
+ "timeout": 10
406
+ }
407
+ ]
408
+ }
409
+ ]
410
+ }
411
+ ```
412
+
413
+ Plugin hooks merge with user's hooks and run in parallel.
414
+
415
+ ## Matchers
416
+
417
+ ### Tool Name Matching
418
+
419
+ **Exact match:**
420
+ ```json
421
+ "matcher": "Write"
422
+ ```
423
+
424
+ **Multiple tools:**
425
+ ```json
426
+ "matcher": "Read|Write|Edit"
427
+ ```
428
+
429
+ **Wildcard (all tools):**
430
+ ```json
431
+ "matcher": "*"
432
+ ```
433
+
434
+ **Regex patterns:**
435
+ ```json
436
+ "matcher": "mcp__.*__delete.*" // All MCP delete tools
437
+ ```
438
+
439
+ **Note:** Matchers are case-sensitive.
440
+
441
+ ### Common Patterns
442
+
443
+ ```json
444
+ // All MCP tools
445
+ "matcher": "mcp__.*"
446
+
447
+ // Specific plugin's MCP tools
448
+ "matcher": "mcp__plugin_asana_.*"
449
+
450
+ // All file operations
451
+ "matcher": "Read|Write|Edit"
452
+
453
+ // Bash commands only
454
+ "matcher": "Bash"
455
+ ```
456
+
457
+ ## Security Best Practices
458
+
459
+ ### Input Validation
460
+
461
+ Always validate inputs in command hooks:
462
+
463
+ ```bash
464
+ #!/bin/bash
465
+ set -euo pipefail
466
+
467
+ input=$(cat)
468
+ tool_name=$(echo "$input" | jq -r '.tool_name')
469
+
470
+ # Validate tool name format
471
+ if [[ ! "$tool_name" =~ ^[a-zA-Z0-9_]+$ ]]; then
472
+ echo '{"decision": "deny", "reason": "Invalid tool name"}' >&2
473
+ exit 2
474
+ fi
475
+ ```
476
+
477
+ ### Path Safety
478
+
479
+ Check for path traversal and sensitive files:
480
+
481
+ ```bash
482
+ file_path=$(echo "$input" | jq -r '.tool_input.file_path')
483
+
484
+ # Deny path traversal
485
+ if [[ "$file_path" == *".."* ]]; then
486
+ echo '{"decision": "deny", "reason": "Path traversal detected"}' >&2
487
+ exit 2
488
+ fi
489
+
490
+ # Deny sensitive files
491
+ if [[ "$file_path" == *".env"* ]]; then
492
+ echo '{"decision": "deny", "reason": "Sensitive file"}' >&2
493
+ exit 2
494
+ fi
495
+ ```
496
+
497
+ See `examples/validate-write.sh` and `examples/validate-bash.sh` for complete examples.
498
+
499
+ ### Quote All Variables
500
+
501
+ ```bash
502
+ # GOOD: Quoted
503
+ echo "$file_path"
504
+ cd "$CLAUDE_PROJECT_DIR"
505
+
506
+ # BAD: Unquoted (injection risk)
507
+ echo $file_path
508
+ cd $CLAUDE_PROJECT_DIR
509
+ ```
510
+
511
+ ### Set Appropriate Timeouts
512
+
513
+ ```json
514
+ {
515
+ "type": "command",
516
+ "command": "bash script.sh",
517
+ "timeout": 10
518
+ }
519
+ ```
520
+
521
+ **Defaults:** Command hooks (60s), Prompt hooks (30s)
522
+
523
+ ## Performance Considerations
524
+
525
+ ### Parallel Execution
526
+
527
+ All matching hooks run **in parallel**:
528
+
529
+ ```json
530
+ {
531
+ "PreToolUse": [
532
+ {
533
+ "matcher": "Write",
534
+ "hooks": [
535
+ {"type": "command", "command": "check1.sh"}, // Parallel
536
+ {"type": "command", "command": "check2.sh"}, // Parallel
537
+ {"type": "prompt", "prompt": "Validate..."} // Parallel
538
+ ]
539
+ }
540
+ ]
541
+ }
542
+ ```
543
+
544
+ **Design implications:**
545
+ - Hooks don't see each other's output
546
+ - Non-deterministic ordering
547
+ - Design for independence
548
+
549
+ ### Optimization
550
+
551
+ 1. Use command hooks for quick deterministic checks
552
+ 2. Use prompt hooks for complex reasoning
553
+ 3. Cache validation results in temp files
554
+ 4. Minimize I/O in hot paths
555
+
556
+ ## Temporarily Active Hooks
557
+
558
+ Create hooks that activate conditionally by checking for a flag file or configuration:
559
+
560
+ **Pattern: Flag file activation**
561
+ ```bash
562
+ #!/bin/bash
563
+ # Only active when flag file exists
564
+ FLAG_FILE="$CLAUDE_PROJECT_DIR/.enable-strict-validation"
565
+
566
+ if [ ! -f "$FLAG_FILE" ]; then
567
+ # Flag not present, skip validation
568
+ exit 0
569
+ fi
570
+
571
+ # Flag present, run validation
572
+ input=$(cat)
573
+ # ... validation logic ...
574
+ ```
575
+
576
+ **Pattern: Configuration-based activation**
577
+ ```bash
578
+ #!/bin/bash
579
+ # Check configuration for activation
580
+ CONFIG_FILE="$CLAUDE_PROJECT_DIR/.claude/plugin-config.json"
581
+
582
+ if [ -f "$CONFIG_FILE" ]; then
583
+ enabled=$(jq -r '.strictMode // false' "$CONFIG_FILE")
584
+ if [ "$enabled" != "true" ]; then
585
+ exit 0 # Not enabled, skip
586
+ fi
587
+ fi
588
+
589
+ # Enabled, run hook logic
590
+ input=$(cat)
591
+ # ... hook logic ...
592
+ ```
593
+
594
+ **Use cases:**
595
+ - Enable strict validation only when needed
596
+ - Temporary debugging hooks
597
+ - Project-specific hook behavior
598
+ - Feature flags for hooks
599
+
600
+ **Best practice:** Document activation mechanism in plugin README so users know how to enable/disable temporary hooks.
601
+
602
+ ## Hook Lifecycle and Limitations
603
+
604
+ ### Hooks Load at Session Start
605
+
606
+ **Important:** Hooks are loaded when Claude Code session starts. Changes to hook configuration require restarting Claude Code.
607
+
608
+ **Cannot hot-swap hooks:**
609
+ - Editing `hooks/hooks.json` won't affect current session
610
+ - Adding new hook scripts won't be recognized
611
+ - Changing hook commands/prompts won't update
612
+ - Must restart Claude Code: exit and run `claude` again
613
+
614
+ **To test hook changes:**
615
+ 1. Edit hook configuration or scripts
616
+ 2. Exit Claude Code session
617
+ 3. Restart: `claude` or `cc`
618
+ 4. New hook configuration loads
619
+ 5. Test hooks with `claude --debug`
620
+
621
+ ### Hook Validation at Startup
622
+
623
+ Hooks are validated when Claude Code starts:
624
+ - Invalid JSON in hooks.json causes loading failure
625
+ - Missing scripts cause warnings
626
+ - Syntax errors reported in debug mode
627
+
628
+ Use `/hooks` command to review loaded hooks in current session.
629
+
630
+ ## Debugging Hooks
631
+
632
+ ### Enable Debug Mode
633
+
634
+ ```bash
635
+ claude --debug
636
+ ```
637
+
638
+ Look for hook registration, execution logs, input/output JSON, and timing information.
639
+
640
+ ### Test Hook Scripts
641
+
642
+ Test command hooks directly:
643
+
644
+ ```bash
645
+ echo '{"tool_name": "Write", "tool_input": {"file_path": "/test"}}' | \
646
+ bash ${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh
647
+
648
+ echo "Exit code: $?"
649
+ ```
650
+
651
+ ### Validate JSON Output
652
+
653
+ Ensure hooks output valid JSON:
654
+
655
+ ```bash
656
+ output=$(./your-hook.sh < test-input.json)
657
+ echo "$output" | jq .
658
+ ```
659
+
660
+ ## Quick Reference
661
+
662
+ ### Hook Events Summary
663
+
664
+ | Event | When | Use For |
665
+ |-------|------|---------|
666
+ | PreToolUse | Before tool | Validation, modification |
667
+ | PostToolUse | After tool | Feedback, logging |
668
+ | UserPromptSubmit | User input | Context, validation |
669
+ | Stop | Agent stopping | Completeness check |
670
+ | SubagentStop | Subagent done | Task validation |
671
+ | SessionStart | Session begins | Context loading |
672
+ | SessionEnd | Session ends | Cleanup, logging |
673
+ | PreCompact | Before compact | Preserve context |
674
+ | Notification | User notified | Logging, reactions |
675
+
676
+ ### Best Practices
677
+
678
+ **DO:**
679
+ - ✅ Use prompt-based hooks for complex logic
680
+ - ✅ Use ${CLAUDE_PLUGIN_ROOT} for portability
681
+ - ✅ Validate all inputs in command hooks
682
+ - ✅ Quote all bash variables
683
+ - ✅ Set appropriate timeouts
684
+ - ✅ Return structured JSON output
685
+ - ✅ Test hooks thoroughly
686
+
687
+ **DON'T:**
688
+ - ❌ Use hardcoded paths
689
+ - ❌ Trust user input without validation
690
+ - ❌ Create long-running hooks
691
+ - ❌ Rely on hook execution order
692
+ - ❌ Modify global state unpredictably
693
+ - ❌ Log sensitive information
694
+
695
+ ## Additional Resources
696
+
697
+
698
+ ### Reference Files
699
+
700
+
701
+
702
+ For detailed patterns and advanced techniques, consult:
703
+
704
+ - **`references/patterns.md`** - Common hook patterns (11+ proven patterns, including OS Notifications and Quality Gates)
705
+
706
+ - **`references/migration.md`** - Migrating from basic to advanced hooks
707
+
708
+ - **`references/advanced.md`** - Advanced use cases (Agent-based and HTTP hooks)
709
+
710
+
711
+
712
+ ### Example Hook Scripts
713
+
714
+
715
+
716
+ Working examples in `examples/`:
717
+
718
+ - **`validate-write.sh`** - File write validation example
719
+
720
+ - **`validate-bash.sh`** - Bash command validation example
721
+
722
+ - **`load-context.sh`** - SessionStart context loading example
723
+
724
+ - **`quality-check.js`** - PostToolUse TypeScript/ESLint checker with smart caching
725
+
726
+
727
+ ### Reference Files
728
+
729
+ For detailed patterns and advanced techniques, consult:
730
+
731
+ - **`references/patterns.md`** - Common hook patterns (8+ proven patterns)
732
+ - **`references/migration.md`** - Migrating from basic to advanced hooks
733
+ - **`references/advanced.md`** - Advanced use cases and techniques
734
+
735
+ ### Example Hook Scripts
736
+
737
+ Working examples in `examples/`:
738
+
739
+ - **`validate-write.sh`** - File write validation example
740
+ - **`validate-bash.sh`** - Bash command validation example
741
+ - **`load-context.sh`** - SessionStart context loading example
742
+
743
+ ### Utility Scripts
744
+
745
+ Development tools in `scripts/`:
746
+
747
+ - **`validate-hook-schema.sh`** - Validate hooks.json structure and syntax
748
+ - **`test-hook.sh`** - Test hooks with sample input before deployment
749
+ - **`hook-linter.sh`** - Check hook scripts for common issues and best practices
750
+
751
+ ### External Resources
752
+
753
+ - **Official Docs**: https://docs.claude.com/en/docs/claude-code/hooks
754
+ - **Examples**: See security-guidance plugin in marketplace
755
+ - **Testing**: Use `claude --debug` for detailed logs
756
+ - **Validation**: Use `jq` to validate hook JSON output
757
+
758
+ ## Implementation Workflow
759
+
760
+ To implement hooks in a plugin:
761
+
762
+ 1. Identify events to hook into (PreToolUse, Stop, SessionStart, etc.)
763
+ 2. Decide between prompt-based (flexible) or command (deterministic) hooks
764
+ 3. Write hook configuration in `hooks/hooks.json`
765
+ 4. For command hooks, create hook scripts
766
+ 5. Use ${CLAUDE_PLUGIN_ROOT} for all file references
767
+ 6. Validate configuration with `scripts/validate-hook-schema.sh hooks/hooks.json`
768
+ 7. Test hooks with `scripts/test-hook.sh` before deployment
769
+ 8. Test in Claude Code with `claude --debug`
770
+ 9. Document hooks in plugin README
771
+
772
+ Focus on prompt-based hooks for most use cases. Reserve command hooks for performance-critical or deterministic checks.
773
+
774
+ ## Troubleshooting & Limitations
775
+
776
+ When developing hooks, keep these official limitations and common issues in mind:
777
+
778
+ ### Known Limitations
779
+ - Modifying a file that a hook reads will trigger the hook on the *old* content if the file hasn't been saved to disk yet.
780
+ - Hook outputs are limited to **1MB**. Larger outputs are truncated and might cause JSON parsing errors.
781
+ - Output from prompt-based hooks is non-deterministic; always design them to fail gracefully.
782
+
783
+ ### Common Issues
784
+ **1. Hook not firing:**
785
+ - Check if Claude Code was restarted (hooks only load on startup).
786
+ - Verify the matcher regex is correct (it's case-sensitive, e.g., `write` won't match `Write`).
787
+ - Run `/hooks` to verify it's loaded.
788
+
789
+ **2. JSON validation failed:**
790
+ - The hook must output strict JSON on `stdout`.
791
+ - Ensure your Bash script doesn't leak `echo` statements or tool logs (like `npm install`) into `stdout`. Redirect them to `stderr` (`>&2`) or `/dev/null`.
792
+
793
+ **3. Stop hook runs forever:**
794
+ - If a Stop hook returns `"decision": "block"`, Claude will try to fix the issue. If it can't figure it out, it might get stuck in an infinite loop. Always provide a clear `"reason"` on how to satisfy the hook.
795
+
796
+ **4. Hook error in output:**
797
+ - A command hook exited with a non-zero code but didn't provide valid JSON feedback on stderr. Ensure `exit 2` is accompanied by valid JSON feedback on stderr: `echo '{"decision": "deny", "reason": "..."}' >&2`.