@devrik-tools/claude-gates 0.2.0 → 0.3.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 (99) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/README.es.md +7 -6
  3. package/README.md +16 -7
  4. package/cli/index.mjs +4 -0
  5. package/cli/init.mjs +18 -1
  6. package/cli/install.mjs +26 -1
  7. package/package.json +5 -2
  8. package/plugins/gates/.claude-plugin/plugin.json +1 -1
  9. package/plugins/gates/hooks/gates/autonomous-mode/index.mjs +8 -6
  10. package/plugins/gates/hooks/gates/autonomous-mode/stop.mjs +78 -0
  11. package/plugins/gates/hooks/gates/bash-commands/index.mjs +11 -81
  12. package/plugins/gates/hooks/gates/block-remote-publish/index.mjs +140 -0
  13. package/plugins/gates/hooks/gates/dependency-skills/index.mjs +130 -126
  14. package/plugins/gates/hooks/gates/neutral-spanish/index.mjs +104 -79
  15. package/plugins/gates/hooks/gates/no-memory-dependency/index.mjs +138 -123
  16. package/plugins/gates/hooks/gates/root-whitelist/index.mjs +59 -44
  17. package/plugins/gates/hooks/gates/test-after-implementation/index.mjs +124 -101
  18. package/plugins/gates/hooks/hooks.json +365 -346
  19. package/plugins/gates/hooks/lib/hook-io.mjs +39 -0
  20. package/plugins/tasks/.claude-plugin/plugin.json +1 -1
  21. package/plugins/tasks/hooks/register-requests.mjs +7 -3
  22. package/registry.json +738 -793
  23. package/cli/__tests__/config.test.mjs +0 -113
  24. package/cli/__tests__/init-flags.test.mjs +0 -111
  25. package/cli/__tests__/install.test.mjs +0 -102
  26. package/cli/__tests__/materialize.test.mjs +0 -95
  27. package/cli/__tests__/registry-gates-consistency.test.mjs +0 -52
  28. package/cli/__tests__/selection.test.mjs +0 -200
  29. package/cli/__tests__/task.test.mjs +0 -124
  30. package/cli/__tests__/version-consistency.test.mjs +0 -44
  31. package/plugins/gates/hooks/__tests__/ask-adoption.test.mjs +0 -83
  32. package/plugins/gates/hooks/__tests__/doctor.test.mjs +0 -85
  33. package/plugins/gates/hooks/__tests__/wiring-check.test.mjs +0 -65
  34. package/plugins/gates/hooks/gates/audit-before-build/audit-before-build.edge.test.mjs +0 -83
  35. package/plugins/gates/hooks/gates/audit-before-build/test.mjs +0 -117
  36. package/plugins/gates/hooks/gates/autonomous-mode/autonomous.edge.test.mjs +0 -104
  37. package/plugins/gates/hooks/gates/autonomous-mode/test.mjs +0 -58
  38. package/plugins/gates/hooks/gates/bash-commands/bash-commands.edge.test.mjs +0 -165
  39. package/plugins/gates/hooks/gates/bash-commands/test.mjs +0 -126
  40. package/plugins/gates/hooks/gates/brief-before-delegate/brief-before-delegate.edge.test.mjs +0 -151
  41. package/plugins/gates/hooks/gates/brief-before-delegate/test.mjs +0 -111
  42. package/plugins/gates/hooks/gates/circuit-breaker/circuit-breaker.edge.test.mjs +0 -207
  43. package/plugins/gates/hooks/gates/circuit-breaker/test.mjs +0 -161
  44. package/plugins/gates/hooks/gates/dependency-skills/dependency-skills.edge.test.mjs +0 -69
  45. package/plugins/gates/hooks/gates/dependency-skills/test.mjs +0 -109
  46. package/plugins/gates/hooks/gates/diagnosis-before-patch/diagnosis-before-patch.edge.test.mjs +0 -68
  47. package/plugins/gates/hooks/gates/diagnosis-before-patch/test.mjs +0 -68
  48. package/plugins/gates/hooks/gates/feature-catalog/edge.edge.test.mjs +0 -83
  49. package/plugins/gates/hooks/gates/feature-catalog/test.mjs +0 -97
  50. package/plugins/gates/hooks/gates/force-parallel/test.mjs +0 -88
  51. package/plugins/gates/hooks/gates/forge-flow/forge-flow.edge.test.mjs +0 -155
  52. package/plugins/gates/hooks/gates/forge-flow/test.mjs +0 -135
  53. package/plugins/gates/hooks/gates/implementation-pipeline/edge.edge.test.mjs +0 -66
  54. package/plugins/gates/hooks/gates/implementation-pipeline/test.mjs +0 -86
  55. package/plugins/gates/hooks/gates/intent-flow/intent-flow.edge.test.mjs +0 -96
  56. package/plugins/gates/hooks/gates/intent-flow/test.mjs +0 -165
  57. package/plugins/gates/hooks/gates/lint-commit/test.mjs +0 -85
  58. package/plugins/gates/hooks/gates/mandatory-flow/edge.edge.test.mjs +0 -100
  59. package/plugins/gates/hooks/gates/mandatory-flow/test.mjs +0 -119
  60. package/plugins/gates/hooks/gates/neutral-spanish/neutral-spanish.edge.test.mjs +0 -80
  61. package/plugins/gates/hooks/gates/neutral-spanish/test.mjs +0 -65
  62. package/plugins/gates/hooks/gates/never-assume/never-assume.edge.test.mjs +0 -71
  63. package/plugins/gates/hooks/gates/never-assume/test.mjs +0 -95
  64. package/plugins/gates/hooks/gates/no-blocking/no-blocking.edge.test.mjs +0 -109
  65. package/plugins/gates/hooks/gates/no-blocking/test.mjs +0 -108
  66. package/plugins/gates/hooks/gates/no-memory-dependency/no-memory-dependency.edge.test.mjs +0 -83
  67. package/plugins/gates/hooks/gates/no-memory-dependency/test.mjs +0 -106
  68. package/plugins/gates/hooks/gates/no-reconfirm/no-reconfirm.edge.test.mjs +0 -91
  69. package/plugins/gates/hooks/gates/no-reconfirm/test.mjs +0 -131
  70. package/plugins/gates/hooks/gates/protected-paths/protected-paths.edge.test.mjs +0 -126
  71. package/plugins/gates/hooks/gates/protected-paths/test.mjs +0 -75
  72. package/plugins/gates/hooks/gates/recurrence-lock/recurrence-lock.edge.test.mjs +0 -102
  73. package/plugins/gates/hooks/gates/recurrence-lock/test.mjs +0 -99
  74. package/plugins/gates/hooks/gates/reuse-before-build/edge.edge.test.mjs +0 -94
  75. package/plugins/gates/hooks/gates/reuse-before-build/test.mjs +0 -101
  76. package/plugins/gates/hooks/gates/risk-level/risk-level.edge.test.mjs +0 -116
  77. package/plugins/gates/hooks/gates/risk-level/test.mjs +0 -153
  78. package/plugins/gates/hooks/gates/root-cause-first/root-cause-first.edge.test.mjs +0 -58
  79. package/plugins/gates/hooks/gates/root-cause-first/test.mjs +0 -73
  80. package/plugins/gates/hooks/gates/root-whitelist/root-whitelist.edge.test.mjs +0 -97
  81. package/plugins/gates/hooks/gates/root-whitelist/test.mjs +0 -80
  82. package/plugins/gates/hooks/gates/rule-skill-autodiscovery/rule-skill-autodiscovery.edge.test.mjs +0 -126
  83. package/plugins/gates/hooks/gates/rule-skill-autodiscovery/test.mjs +0 -78
  84. package/plugins/gates/hooks/gates/sdd-specs/edge.edge.test.mjs +0 -130
  85. package/plugins/gates/hooks/gates/sdd-specs/test.mjs +0 -163
  86. package/plugins/gates/hooks/gates/stop-pending/test.mjs +0 -114
  87. package/plugins/gates/hooks/gates/test-after-implementation/test-after-implementation.edge.test.mjs +0 -72
  88. package/plugins/gates/hooks/gates/test-after-implementation/test.mjs +0 -81
  89. package/plugins/gates/hooks/gates/test-matrix/edge.edge.test.mjs +0 -63
  90. package/plugins/gates/hooks/gates/test-matrix/test.mjs +0 -114
  91. package/plugins/gates/hooks/gates/tool-map/edge.edge.test.mjs +0 -62
  92. package/plugins/gates/hooks/gates/tool-map/test.mjs +0 -87
  93. package/plugins/gates/hooks/lib/__tests__/config.test.mjs +0 -173
  94. package/plugins/gates/hooks/lib/__tests__/hook-io.test.mjs +0 -210
  95. package/plugins/gates/hooks/lib/__tests__/signals.test.mjs +0 -114
  96. package/plugins/gates/hooks/lib/hook-io-config.edge.test.mjs +0 -189
  97. package/plugins/tasks/hooks/__tests__/register-requests.test.mjs +0 -100
  98. package/plugins/tasks/hooks/__tests__/session-tasks.test.mjs +0 -95
  99. package/plugins/tasks/hooks/lib/__tests__/task-store.test.mjs +0 -180
@@ -1,346 +1,365 @@
1
- {
2
- "hooks": {
3
- "PreToolUse": [
4
- {
5
- "matcher": "Bash|run_command|Agent|Task|invoke_subagent|mcp__.*",
6
- "hooks": [
7
- {
8
- "type": "command",
9
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/bash-commands/index.mjs\"",
10
- "timeout": 10
11
- }
12
- ]
13
- },
14
- {
15
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Bash|run_command|mcp__.*",
16
- "hooks": [
17
- {
18
- "type": "command",
19
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/protected-paths/index.mjs\"",
20
- "timeout": 10
21
- }
22
- ]
23
- },
24
- {
25
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
26
- "hooks": [
27
- {
28
- "type": "command",
29
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/root-whitelist/index.mjs\"",
30
- "timeout": 10
31
- }
32
- ]
33
- },
34
- {
35
- "matcher": "Bash|run_command|Agent|Task|invoke_subagent|mcp__.*",
36
- "hooks": [
37
- {
38
- "type": "command",
39
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/no-blocking/index.mjs\"",
40
- "timeout": 10
41
- }
42
- ]
43
- },
44
- {
45
- "matcher": "Agent|Task|invoke_subagent|mcp__.*",
46
- "hooks": [
47
- {
48
- "type": "command",
49
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/brief-before-delegate/index.mjs\"",
50
- "timeout": 10
51
- }
52
- ]
53
- },
54
- {
55
- "matcher": "Agent|Task|invoke_subagent|mcp__.*",
56
- "hooks": [
57
- {
58
- "type": "command",
59
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/intent-flow/index.mjs\"",
60
- "timeout": 10
61
- }
62
- ]
63
- },
64
- {
65
- "matcher": "Agent|Task|invoke_subagent|mcp__.*",
66
- "hooks": [
67
- {
68
- "type": "command",
69
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/risk-level/index.mjs\"",
70
- "timeout": 10
71
- }
72
- ]
73
- },
74
- {
75
- "matcher": "Agent|Task|invoke_subagent|mcp__.*",
76
- "hooks": [
77
- {
78
- "type": "command",
79
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/circuit-breaker/index.mjs\"",
80
- "timeout": 10
81
- }
82
- ]
83
- },
84
- {
85
- "matcher": "Agent|Task|invoke_subagent|mcp__.*",
86
- "hooks": [
87
- {
88
- "type": "command",
89
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/no-memory-dependency/index.mjs\"",
90
- "timeout": 10
91
- }
92
- ]
93
- },
94
- {
95
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
96
- "hooks": [
97
- {
98
- "type": "command",
99
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/feature-catalog/index.mjs\"",
100
- "timeout": 10
101
- }
102
- ]
103
- },
104
- {
105
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Agent|Task|invoke_subagent|mcp__.*",
106
- "hooks": [
107
- {
108
- "type": "command",
109
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/sdd-specs/index.mjs\"",
110
- "timeout": 10
111
- }
112
- ]
113
- },
114
- {
115
- "matcher": "Agent|Task|invoke_subagent|mcp__.*",
116
- "hooks": [
117
- {
118
- "type": "command",
119
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/implementation-pipeline/index.mjs\"",
120
- "timeout": 10
121
- }
122
- ]
123
- },
124
- {
125
- "matcher": "Agent|Task|invoke_subagent|mcp__.*",
126
- "hooks": [
127
- {
128
- "type": "command",
129
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/mandatory-flow/index.mjs\"",
130
- "timeout": 10
131
- }
132
- ]
133
- },
134
- {
135
- "matcher": "Agent|Task|invoke_subagent|mcp__.*",
136
- "hooks": [
137
- {
138
- "type": "command",
139
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/test-matrix/index.mjs\"",
140
- "timeout": 10
141
- }
142
- ]
143
- },
144
- {
145
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
146
- "hooks": [
147
- {
148
- "type": "command",
149
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/dependency-skills/index.mjs\"",
150
- "timeout": 10
151
- }
152
- ]
153
- },
154
- {
155
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Agent|Task|invoke_subagent|mcp__.*",
156
- "hooks": [
157
- {
158
- "type": "command",
159
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/root-cause-first/index.mjs\"",
160
- "timeout": 10
161
- }
162
- ]
163
- },
164
- {
165
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Agent|Task|invoke_subagent|mcp__.*",
166
- "hooks": [
167
- {
168
- "type": "command",
169
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/audit-before-build/index.mjs\"",
170
- "timeout": 10
171
- }
172
- ]
173
- },
174
- {
175
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Agent|Task|invoke_subagent|mcp__.*",
176
- "hooks": [
177
- {
178
- "type": "command",
179
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/never-assume/index.mjs\"",
180
- "timeout": 10
181
- }
182
- ]
183
- },
184
- {
185
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Bash|run_command|mcp__ide__executeCode|Agent|Task|invoke_subagent|mcp__.*",
186
- "hooks": [
187
- {
188
- "type": "command",
189
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/rule-skill-autodiscovery/index.mjs\"",
190
- "timeout": 10
191
- }
192
- ]
193
- },
194
- {
195
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Bash|run_command|mcp__ide__executeCode|Agent|Task|invoke_subagent|mcp__.*",
196
- "hooks": [
197
- {
198
- "type": "command",
199
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/recurrence-lock/index.mjs\"",
200
- "timeout": 10
201
- }
202
- ]
203
- },
204
- {
205
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
206
- "hooks": [
207
- {
208
- "type": "command",
209
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/test-after-implementation/index.mjs\"",
210
- "timeout": 10
211
- }
212
- ]
213
- },
214
- {
215
- "matcher": "AskUserQuestion|mcp__.*",
216
- "hooks": [
217
- {
218
- "type": "command",
219
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/no-reconfirm/index.mjs\"",
220
- "timeout": 10
221
- }
222
- ]
223
- },
224
- {
225
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
226
- "hooks": [
227
- {
228
- "type": "command",
229
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/neutral-spanish/index.mjs\"",
230
- "timeout": 10
231
- }
232
- ]
233
- },
234
- {
235
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
236
- "hooks": [
237
- {
238
- "type": "command",
239
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/diagnosis-before-patch/index.mjs\"",
240
- "timeout": 10
241
- }
242
- ]
243
- },
244
- {
245
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Agent|Task|invoke_subagent|mcp__.*",
246
- "hooks": [
247
- {
248
- "type": "command",
249
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/reuse-before-build/index.mjs\"",
250
- "timeout": 10
251
- }
252
- ]
253
- },
254
- {
255
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
256
- "hooks": [
257
- {
258
- "type": "command",
259
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/tool-map/index.mjs\"",
260
- "timeout": 10
261
- }
262
- ]
263
- },
264
- {
265
- "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Bash|run_command|mcp__.*",
266
- "hooks": [
267
- {
268
- "type": "command",
269
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/forge-flow/index.mjs\"",
270
- "timeout": 10
271
- }
272
- ]
273
- },
274
- {
275
- "matcher": "AskUserQuestion|mcp__.*",
276
- "hooks": [
277
- {
278
- "type": "command",
279
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/autonomous-mode/index.mjs\"",
280
- "timeout": 10
281
- }
282
- ]
283
- },
284
- {
285
- "matcher": "Bash|run_command|mcp__.*",
286
- "hooks": [
287
- {
288
- "type": "command",
289
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/lint-commit/index.mjs\"",
290
- "timeout": 65
291
- }
292
- ]
293
- },
294
- {
295
- "matcher": "Agent|Task|invoke_subagent|mcp__.*",
296
- "hooks": [
297
- {
298
- "type": "command",
299
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/force-parallel/index.mjs\"",
300
- "timeout": 10
301
- }
302
- ]
303
- }
304
- ],
305
- "Stop": [
306
- {
307
- "hooks": [
308
- {
309
- "type": "command",
310
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/stop-pending/index.mjs\"",
311
- "timeout": 10
312
- }
313
- ]
314
- }
315
- ],
316
- "SessionStart": [
317
- {
318
- "hooks": [
319
- {
320
- "type": "command",
321
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/doctor.mjs\"",
322
- "timeout": 10
323
- }
324
- ]
325
- },
326
- {
327
- "hooks": [
328
- {
329
- "type": "command",
330
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/ask-adoption.mjs\"",
331
- "timeout": 10
332
- }
333
- ]
334
- },
335
- {
336
- "hooks": [
337
- {
338
- "type": "command",
339
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/wiring-check.mjs\"",
340
- "timeout": 10
341
- }
342
- ]
343
- }
344
- ]
345
- }
346
- }
1
+ {
2
+ "hooks": {
3
+ "PreToolUse": [
4
+ {
5
+ "matcher": "Bash|run_command|Agent|Task|invoke_subagent|mcp__.*",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/bash-commands/index.mjs\"",
10
+ "timeout": 30
11
+ }
12
+ ]
13
+ },
14
+ {
15
+ "matcher": "Bash|run_command|Agent|Task|invoke_subagent|mcp__.*",
16
+ "hooks": [
17
+ {
18
+ "type": "command",
19
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/block-remote-publish/index.mjs\"",
20
+ "timeout": 30
21
+ }
22
+ ]
23
+ },
24
+ {
25
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Bash|run_command|mcp__.*",
26
+ "hooks": [
27
+ {
28
+ "type": "command",
29
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/protected-paths/index.mjs\"",
30
+ "timeout": 30
31
+ }
32
+ ]
33
+ },
34
+ {
35
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Bash|run_command|mcp__.*",
36
+ "hooks": [
37
+ {
38
+ "type": "command",
39
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/root-whitelist/index.mjs\"",
40
+ "timeout": 30
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "matcher": "Bash|run_command|Agent|Task|invoke_subagent|mcp__.*",
46
+ "hooks": [
47
+ {
48
+ "type": "command",
49
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/no-blocking/index.mjs\"",
50
+ "timeout": 30
51
+ }
52
+ ]
53
+ },
54
+ {
55
+ "matcher": "Agent|Task|invoke_subagent|mcp__.*",
56
+ "hooks": [
57
+ {
58
+ "type": "command",
59
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/brief-before-delegate/index.mjs\"",
60
+ "timeout": 30
61
+ }
62
+ ]
63
+ },
64
+ {
65
+ "matcher": "Agent|Task|invoke_subagent|mcp__.*",
66
+ "hooks": [
67
+ {
68
+ "type": "command",
69
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/intent-flow/index.mjs\"",
70
+ "timeout": 30
71
+ }
72
+ ]
73
+ },
74
+ {
75
+ "matcher": "Agent|Task|invoke_subagent|mcp__.*",
76
+ "hooks": [
77
+ {
78
+ "type": "command",
79
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/risk-level/index.mjs\"",
80
+ "timeout": 30
81
+ }
82
+ ]
83
+ },
84
+ {
85
+ "matcher": "Agent|Task|invoke_subagent|mcp__.*",
86
+ "hooks": [
87
+ {
88
+ "type": "command",
89
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/circuit-breaker/index.mjs\"",
90
+ "timeout": 30
91
+ }
92
+ ]
93
+ },
94
+ {
95
+ "matcher": "Agent|Task|invoke_subagent|mcp__.*",
96
+ "hooks": [
97
+ {
98
+ "type": "command",
99
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/no-memory-dependency/index.mjs\"",
100
+ "timeout": 30
101
+ }
102
+ ]
103
+ },
104
+ {
105
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
106
+ "hooks": [
107
+ {
108
+ "type": "command",
109
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/feature-catalog/index.mjs\"",
110
+ "timeout": 30
111
+ }
112
+ ]
113
+ },
114
+ {
115
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Agent|Task|invoke_subagent|mcp__.*",
116
+ "hooks": [
117
+ {
118
+ "type": "command",
119
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/sdd-specs/index.mjs\"",
120
+ "timeout": 30
121
+ }
122
+ ]
123
+ },
124
+ {
125
+ "matcher": "Agent|Task|invoke_subagent|mcp__.*",
126
+ "hooks": [
127
+ {
128
+ "type": "command",
129
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/implementation-pipeline/index.mjs\"",
130
+ "timeout": 30
131
+ }
132
+ ]
133
+ },
134
+ {
135
+ "matcher": "Agent|Task|invoke_subagent|mcp__.*",
136
+ "hooks": [
137
+ {
138
+ "type": "command",
139
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/mandatory-flow/index.mjs\"",
140
+ "timeout": 30
141
+ }
142
+ ]
143
+ },
144
+ {
145
+ "matcher": "Agent|Task|invoke_subagent|mcp__.*",
146
+ "hooks": [
147
+ {
148
+ "type": "command",
149
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/test-matrix/index.mjs\"",
150
+ "timeout": 30
151
+ }
152
+ ]
153
+ },
154
+ {
155
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
156
+ "hooks": [
157
+ {
158
+ "type": "command",
159
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/dependency-skills/index.mjs\"",
160
+ "timeout": 30
161
+ }
162
+ ]
163
+ },
164
+ {
165
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Agent|Task|invoke_subagent|mcp__.*",
166
+ "hooks": [
167
+ {
168
+ "type": "command",
169
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/root-cause-first/index.mjs\"",
170
+ "timeout": 30
171
+ }
172
+ ]
173
+ },
174
+ {
175
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Agent|Task|invoke_subagent|mcp__.*",
176
+ "hooks": [
177
+ {
178
+ "type": "command",
179
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/audit-before-build/index.mjs\"",
180
+ "timeout": 30
181
+ }
182
+ ]
183
+ },
184
+ {
185
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Agent|Task|invoke_subagent|mcp__.*",
186
+ "hooks": [
187
+ {
188
+ "type": "command",
189
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/never-assume/index.mjs\"",
190
+ "timeout": 30
191
+ }
192
+ ]
193
+ },
194
+ {
195
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Bash|run_command|mcp__ide__executeCode|Agent|Task|invoke_subagent|mcp__.*",
196
+ "hooks": [
197
+ {
198
+ "type": "command",
199
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/rule-skill-autodiscovery/index.mjs\"",
200
+ "timeout": 30
201
+ }
202
+ ]
203
+ },
204
+ {
205
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Bash|run_command|mcp__ide__executeCode|Agent|Task|invoke_subagent|mcp__.*",
206
+ "hooks": [
207
+ {
208
+ "type": "command",
209
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/recurrence-lock/index.mjs\"",
210
+ "timeout": 30
211
+ }
212
+ ]
213
+ },
214
+ {
215
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
216
+ "hooks": [
217
+ {
218
+ "type": "command",
219
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/test-after-implementation/index.mjs\"",
220
+ "timeout": 30
221
+ }
222
+ ]
223
+ },
224
+ {
225
+ "matcher": "AskUserQuestion|mcp__.*",
226
+ "hooks": [
227
+ {
228
+ "type": "command",
229
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/no-reconfirm/index.mjs\"",
230
+ "timeout": 30
231
+ }
232
+ ]
233
+ },
234
+ {
235
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
236
+ "hooks": [
237
+ {
238
+ "type": "command",
239
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/neutral-spanish/index.mjs\"",
240
+ "timeout": 30
241
+ }
242
+ ]
243
+ },
244
+ {
245
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
246
+ "hooks": [
247
+ {
248
+ "type": "command",
249
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/diagnosis-before-patch/index.mjs\"",
250
+ "timeout": 30
251
+ }
252
+ ]
253
+ },
254
+ {
255
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Agent|Task|invoke_subagent|mcp__.*",
256
+ "hooks": [
257
+ {
258
+ "type": "command",
259
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/reuse-before-build/index.mjs\"",
260
+ "timeout": 30
261
+ }
262
+ ]
263
+ },
264
+ {
265
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|mcp__.*",
266
+ "hooks": [
267
+ {
268
+ "type": "command",
269
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/tool-map/index.mjs\"",
270
+ "timeout": 30
271
+ }
272
+ ]
273
+ },
274
+ {
275
+ "matcher": "Write|Edit|NotebookEdit|write_to_file|replace_file_content|Bash|run_command|mcp__.*",
276
+ "hooks": [
277
+ {
278
+ "type": "command",
279
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/forge-flow/index.mjs\"",
280
+ "timeout": 30
281
+ }
282
+ ]
283
+ },
284
+ {
285
+ "matcher": "AskUserQuestion|mcp__.*",
286
+ "hooks": [
287
+ {
288
+ "type": "command",
289
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/autonomous-mode/index.mjs\"",
290
+ "timeout": 30
291
+ }
292
+ ]
293
+ },
294
+ {
295
+ "matcher": "Bash|run_command|mcp__.*",
296
+ "hooks": [
297
+ {
298
+ "type": "command",
299
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/lint-commit/index.mjs\"",
300
+ "timeout": 65
301
+ }
302
+ ]
303
+ },
304
+ {
305
+ "matcher": "Agent|Task|invoke_subagent|mcp__.*",
306
+ "hooks": [
307
+ {
308
+ "type": "command",
309
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/force-parallel/index.mjs\"",
310
+ "timeout": 30
311
+ }
312
+ ]
313
+ }
314
+ ],
315
+ "Stop": [
316
+ {
317
+ "hooks": [
318
+ {
319
+ "type": "command",
320
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/stop-pending/index.mjs\"",
321
+ "timeout": 30
322
+ }
323
+ ]
324
+ },
325
+ {
326
+ "hooks": [
327
+ {
328
+ "type": "command",
329
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/gates/autonomous-mode/stop.mjs\"",
330
+ "timeout": 30
331
+ }
332
+ ]
333
+ }
334
+ ],
335
+ "SessionStart": [
336
+ {
337
+ "hooks": [
338
+ {
339
+ "type": "command",
340
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/doctor.mjs\"",
341
+ "timeout": 30
342
+ }
343
+ ]
344
+ },
345
+ {
346
+ "hooks": [
347
+ {
348
+ "type": "command",
349
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/ask-adoption.mjs\"",
350
+ "timeout": 30
351
+ }
352
+ ]
353
+ },
354
+ {
355
+ "hooks": [
356
+ {
357
+ "type": "command",
358
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/wiring-check.mjs\"",
359
+ "timeout": 30
360
+ }
361
+ ]
362
+ }
363
+ ]
364
+ }
365
+ }