heyspex 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/.claude-plugin/marketplace.json +14 -0
  2. package/bin/hs.mjs +181 -15
  3. package/dist/cli/hs-check.mjs +88 -46
  4. package/dist/cli/hs-claim.mjs +84 -39
  5. package/dist/cli/hs-connect.mjs +583 -129
  6. package/dist/cli/hs-defer.mjs +251 -30
  7. package/dist/cli/hs-dev.mjs +20 -8
  8. package/dist/cli/hs-env.mjs +62 -34
  9. package/dist/cli/hs-index-rebuild.mjs +288 -83
  10. package/dist/cli/hs-index-reconcile.mjs +397 -111
  11. package/dist/cli/hs-init.mjs +2143 -91
  12. package/dist/cli/hs-install.mjs +628 -106
  13. package/dist/cli/hs-join.mjs +686 -236
  14. package/dist/cli/hs-vault-pull.mjs +3189 -179
  15. package/dist/cli/hs-vault-push.mjs +6433 -0
  16. package/dist/cli/hs-vault.mjs +396 -178
  17. package/dist/cli/hs-workspace.mjs +289 -151
  18. package/dist/cli-templates/harness-commands/claude/hs-backfill.md +28 -28
  19. package/dist/cli-templates/harness-commands/claude/hs-capture.md +62 -62
  20. package/dist/cli-templates/harness-commands/claude/hs-defer.md +29 -29
  21. package/dist/cli-templates/harness-commands/claude/hs-ground.md +30 -28
  22. package/dist/cli-templates/harness-commands/claude/hs-next.md +29 -29
  23. package/dist/cli-templates/harness-commands/claude/hs-promote.md +70 -70
  24. package/dist/cli-templates/harness-commands/claude/hs-push.md +35 -35
  25. package/dist/cli-templates/harness-commands/claude/hs-qc.md +27 -27
  26. package/dist/cli-templates/harness-commands/claude/hs-resolve.md +23 -23
  27. package/dist/cli-templates/harness-commands/claude/hs-review.md +23 -23
  28. package/dist/cli-templates/harness-commands/claude/hs-view.md +28 -26
  29. package/dist/cli-templates/harness-commands/claude/kill-ports.md +32 -32
  30. package/dist/cli-templates/harness-commands/claude/prototype.md +91 -91
  31. package/dist/cli-templates/harness-commands/cursor/hs-backfill.md +22 -22
  32. package/dist/cli-templates/harness-commands/cursor/hs-capture.md +56 -56
  33. package/dist/cli-templates/harness-commands/cursor/hs-defer.md +23 -23
  34. package/dist/cli-templates/harness-commands/cursor/hs-ground.md +24 -22
  35. package/dist/cli-templates/harness-commands/cursor/hs-next.md +23 -23
  36. package/dist/cli-templates/harness-commands/cursor/hs-promote.md +64 -64
  37. package/dist/cli-templates/harness-commands/cursor/hs-push.md +29 -29
  38. package/dist/cli-templates/harness-commands/cursor/hs-qc.md +21 -21
  39. package/dist/cli-templates/harness-commands/cursor/hs-resolve.md +17 -17
  40. package/dist/cli-templates/harness-commands/cursor/hs-review.md +17 -17
  41. package/dist/cli-templates/harness-commands/cursor/hs-view.md +24 -22
  42. package/dist/cli-templates/harness-commands/cursor/kill-ports.md +26 -26
  43. package/dist/cli-templates/harness-commands/cursor/prototype.md +86 -86
  44. package/docs/copilot-plugin-install.md +177 -0
  45. package/docs/driving-heyspex-from-copilot.md +165 -0
  46. package/package.json +21 -2
  47. package/plugins/heyspex/.claude-plugin/plugin.json +12 -12
  48. package/plugins/heyspex/.cursor-plugin/plugin.json +15 -15
  49. package/plugins/heyspex/README.md +312 -0
  50. package/plugins/heyspex/bin/run-hook.mjs +20 -2
  51. package/plugins/heyspex/hooks/cursor-hooks.json +81 -0
  52. package/plugins/heyspex/hooks/hooks.json +94 -37
  53. package/scripts/claude-hooks/_intent-classifier-router.mjs +456 -410
  54. package/scripts/claude-hooks/_intent-classifier-semantic.mjs +5 -0
  55. package/scripts/claude-hooks/_run.mjs +316 -23
  56. package/scripts/claude-hooks/capture-execution-gate.mjs +51 -0
  57. package/scripts/claude-hooks/claim-liveness-shared.mjs +2 -0
  58. package/scripts/claude-hooks/diagnose-capture-reminder.mjs +11 -0
  59. package/scripts/claude-hooks/directive-obligation-gate.mjs +11 -0
  60. package/scripts/claude-hooks/inject-communication-style.mjs +20 -0
  61. package/scripts/claude-hooks/intent-classifier-trigger.mjs +279 -247
  62. package/scripts/claude-hooks/session-end.mjs +2 -0
  63. package/scripts/claude-hooks/vault-mirror-catchup.mjs +11 -0
  64. package/scripts/claude-hooks/vault-write-tier-guard.mjs +11 -0
  65. package/scripts/claude-hooks/wip-checkpoint.mjs +5 -1
  66. package/scripts/cursor-hooks/manifest.mjs +46 -0
  67. package/scripts/heyspex-mode.mjs +20 -0
  68. package/scripts/hs-mode.mjs +1 -1
  69. package/scripts/hs-view.mjs +180 -17
  70. package/scripts/install-claude-code-hooks.mjs +3 -1
  71. package/scripts/install-copilot-hooks.mjs +288 -0
  72. package/scripts/lib/console-url-resolver.mjs +3 -2
  73. package/scripts/lib/customer-kit.mjs +327 -10
  74. package/scripts/lib/dev-mode.mjs +7 -6
  75. package/scripts/lib/directive-obligations.mjs +349 -0
  76. package/scripts/lib/hook-dispositions.mjs +210 -0
  77. package/scripts/lib/hook-vault-header.mjs +30 -0
  78. package/scripts/lib/hs-source-branch.mjs +196 -0
  79. package/scripts/lib/hs-source-log.mjs +2 -1
  80. package/scripts/lib/hs-source-preflight.mjs +18 -4
  81. package/scripts/lib/hs-source-push.mjs +386 -356
  82. package/scripts/lib/window-placement.mjs +109 -0
  83. package/spexharness/src/adapters/claude-code.mjs +11 -3
  84. package/spexharness/src/adapters/copilot.mjs +236 -0
  85. package/spexharness/src/adapters/detect-harness.mjs +34 -0
  86. package/spexharness/src/gates/_shell-write-targets.mjs +77 -0
  87. package/spexharness/src/gates/deep-research-cost-gate.mjs +4 -3
  88. package/spexharness/src/gates/diagnose-capture-reminder.mjs +112 -0
  89. package/spexharness/src/gates/directive-obligation-gate.decide.mjs +132 -0
  90. package/spexharness/src/gates/directive-obligation-gate.mjs +183 -0
  91. package/spexharness/src/gates/vault-mirror-catchup.mjs +124 -0
  92. package/spexharness/src/gates/vault-write-tier-guard.decide.mjs +125 -0
  93. package/spexharness/src/gates/vault-write-tier-guard.mjs +42 -0
  94. package/spexharness/src/intent-classifier.mjs +4 -2
  95. package/spexharness/src/intent-directive.mjs +626 -541
  96. package/spexharness/src/rule-table.mjs +31 -1
  97. package/vendor/heyspex-mcp/account-switch.mjs +6 -5
  98. package/vendor/heyspex-mcp/capture-buffer-patches.mjs +31 -3
  99. package/vendor/heyspex-mcp/capture-console-client.mjs +37 -2
  100. package/vendor/heyspex-mcp/capture-focus.mjs +26 -2
  101. package/vendor/heyspex-mcp/capture-outbox.mjs +10 -4
  102. package/vendor/heyspex-mcp/capture-sources.mjs +195 -0
  103. package/vendor/heyspex-mcp/capture-tools.mjs +56 -11
  104. package/vendor/heyspex-mcp/claim-tools.mjs +25 -2
  105. package/vendor/heyspex-mcp/cli-verbs.mjs +19 -21
  106. package/vendor/heyspex-mcp/cli.mjs +7 -1
  107. package/vendor/heyspex-mcp/close-branch-report.mjs +102 -0
  108. package/vendor/heyspex-mcp/cloud-vault-writes.mjs +197 -7
  109. package/vendor/heyspex-mcp/console-fetch.mjs +192 -28
  110. package/vendor/heyspex-mcp/console-transport.mjs +7 -1
  111. package/vendor/heyspex-mcp/credentials.mjs +9 -8
  112. package/vendor/heyspex-mcp/dev-tools.mjs +7 -0
  113. package/vendor/heyspex-mcp/filing-tools.mjs +35 -0
  114. package/vendor/heyspex-mcp/fleet-queue-tools.mjs +2 -1
  115. package/vendor/heyspex-mcp/folder-trust-store.mjs +2 -1
  116. package/vendor/heyspex-mcp/http-transport.mjs +2 -0
  117. package/vendor/heyspex-mcp/list-tools.mjs +1 -1
  118. package/vendor/heyspex-mcp/mcp-config.mjs +14 -1
  119. package/vendor/heyspex-mcp/memory-tools.mjs +523 -523
  120. package/vendor/heyspex-mcp/obligation-backstop.mjs +103 -0
  121. package/vendor/heyspex-mcp/occupied-keys.mjs +1 -0
  122. package/vendor/heyspex-mcp/on-deck-brief.mjs +19 -2
  123. package/vendor/heyspex-mcp/on-deck-scheduler.mjs +1708 -1708
  124. package/vendor/heyspex-mcp/plan-push.mjs +3 -2
  125. package/vendor/heyspex-mcp/preflight-gate.mjs +1 -0
  126. package/vendor/heyspex-mcp/procedure-handlers.mjs +327 -325
  127. package/vendor/heyspex-mcp/procedure-tools.mjs +1181 -1159
  128. package/vendor/heyspex-mcp/promote-capture.mjs +2 -0
  129. package/vendor/heyspex-mcp/promote-research.mjs +6 -0
  130. package/vendor/heyspex-mcp/read-path.mjs +162 -6
  131. package/vendor/heyspex-mcp/request-context.mjs +25 -1
  132. package/vendor/heyspex-mcp/research-handlers.mjs +6 -4
  133. package/vendor/heyspex-mcp/roadmap-default.mjs +70 -0
  134. package/vendor/heyspex-mcp/session-owner.mjs +3 -2
  135. package/vendor/heyspex-mcp/session-tools.mjs +10 -0
  136. package/vendor/heyspex-mcp/spec-edit-tools.mjs +8 -1
  137. package/vendor/heyspex-mcp/split-research.mjs +3 -0
  138. package/vendor/heyspex-mcp/submit-for-review.mjs +18 -1
  139. package/vendor/heyspex-mcp/summary-write-tools.mjs +5 -1
  140. package/vendor/heyspex-mcp/test-helpers.mjs +18 -3
  141. package/vendor/heyspex-mcp/tool-catalog.mjs +7 -1
  142. package/vendor/heyspex-mcp/tool-dispatch.mjs +18 -0
  143. package/vendor/heyspex-mcp/vault-io.mjs +720 -724
  144. package/vendor/heyspex-mcp/vault-resolve.mjs +197 -9
  145. package/vendor/heyspex-mcp/whoami.mjs +2 -1
  146. package/vendor/heyspex-mcp/write-outbox.mjs +512 -0
@@ -19,12 +19,26 @@
19
19
  // 4. node_modules/heyspex containing this launcher (published package)
20
20
  // 5. $CLAUDE_PROJECT_DIR, $CURSOR_PROJECT_DIR (the platform repo itself)
21
21
  //
22
- // Fail-open like the shim: nothing found → one stderr line, exit 0.
22
+ // Fail-open like the shim: nothing found → one stderr line, exit 0. This matters most on GitHub Copilot, which
23
+ // turns ANY non-zero hook exit into a deny: a failed shim import, a throw while the shim loads, an unhandled
24
+ // rejection or an uncaught exception all log to stderr and exit 0 here. (The launcher cannot know the harness
25
+ // before the shim reads stdin; for Claude Code a crash exit was already non-blocking, so exiting 0 only changes
26
+ // the exit status, never a decision. Deliberate exit codes - the shim's legacy `exit 2` deny - pass through.)
23
27
 
24
28
  import { existsSync } from 'node:fs';
25
29
  import { dirname, resolve, sep } from 'node:path';
26
30
  import { fileURLToPath, pathToFileURL } from 'node:url';
27
31
 
32
+ function failOpen(what) {
33
+ return (err) => {
34
+ try { process.stderr.write(`[heyspex plugin] hook ${process.argv[2] ?? '?'} ${what} (failing open): ${err?.message ?? err}
35
+ `); } catch { /* ignore */ }
36
+ process.exit(0);
37
+ };
38
+ }
39
+ process.on('uncaughtException', failOpen('crashed'));
40
+ process.on('unhandledRejection', failOpen('rejected'));
41
+
28
42
  const SHIM_REL = ['scripts', 'claude-hooks', '_run.mjs'];
29
43
  const here = dirname(fileURLToPath(import.meta.url));
30
44
 
@@ -59,4 +73,8 @@ if (!shim) {
59
73
  }
60
74
 
61
75
  // argv is already [node, <this>, <hook>, ...args] — the shape _run.mjs reads.
62
- await import(pathToFileURL(shim).href);
76
+ try {
77
+ await import(pathToFileURL(shim).href);
78
+ } catch (err) {
79
+ failOpen('failed to load the shim')(err);
80
+ }
@@ -15,6 +15,10 @@
15
15
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" inject-coo-seat",
16
16
  "timeout": 5
17
17
  },
18
+ {
19
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" inject-doctrine",
20
+ "timeout": 5
21
+ },
18
22
  {
19
23
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" coo-guard-check",
20
24
  "timeout": 5
@@ -30,6 +34,14 @@
30
34
  {
31
35
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" check-mcp-freshness-hook",
32
36
  "timeout": 5
37
+ },
38
+ {
39
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" git-reflog-audit",
40
+ "timeout": 5
41
+ },
42
+ {
43
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" vault-mirror-catchup",
44
+ "timeout": 5
33
45
  }
34
46
  ],
35
47
  "preCompact": [
@@ -50,6 +62,10 @@
50
62
  {
51
63
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" inject-communication-style",
52
64
  "timeout": 5
65
+ },
66
+ {
67
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" inject-vault-context",
68
+ "timeout": 10
53
69
  }
54
70
  ],
55
71
  "preToolUse": [
@@ -73,6 +89,11 @@
73
89
  "timeout": 5,
74
90
  "matcher": "Write|Delete"
75
91
  },
92
+ {
93
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" vault-write-tier-guard",
94
+ "timeout": 5,
95
+ "matcher": "Write"
96
+ },
76
97
  {
77
98
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" settings-write-gate",
78
99
  "timeout": 5,
@@ -98,6 +119,11 @@
98
119
  "timeout": 5,
99
120
  "matcher": "Write"
100
121
  },
122
+ {
123
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" directive-obligation-gate",
124
+ "timeout": 5,
125
+ "matcher": "Write"
126
+ },
101
127
  {
102
128
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" coo-guard-check --hs-tool=\"heyspex_claim_spec$\"",
103
129
  "timeout": 5,
@@ -118,6 +144,16 @@
118
144
  "timeout": 10,
119
145
  "matcher": ".*"
120
146
  },
147
+ {
148
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" diagnose-capture-reminder --hs-tool=\"heyspex_file_spec$\"",
149
+ "timeout": 5,
150
+ "matcher": ".*"
151
+ },
152
+ {
153
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" research-method-guard --hs-tool=\"^(Workflow|Skill)$\"",
154
+ "timeout": 5,
155
+ "matcher": ".*"
156
+ },
121
157
  {
122
158
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" deep-research-cost-gate --hs-tool=\"^(Workflow|Skill)$\"",
123
159
  "timeout": 5,
@@ -134,6 +170,10 @@
134
170
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" env-vault-guard",
135
171
  "timeout": 5
136
172
  },
173
+ {
174
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" vault-write-tier-guard",
175
+ "timeout": 5
176
+ },
137
177
  {
138
178
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" settings-write-gate",
139
179
  "timeout": 5
@@ -157,12 +197,32 @@
157
197
  {
158
198
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" git-stash-gate",
159
199
  "timeout": 10
200
+ },
201
+ {
202
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" git-identity-guard",
203
+ "timeout": 5
204
+ },
205
+ {
206
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" capture-execution-gate",
207
+ "timeout": 5
208
+ },
209
+ {
210
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" directive-obligation-gate",
211
+ "timeout": 5
160
212
  }
161
213
  ],
162
214
  "subagentStart": [
163
215
  {
164
216
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" agent-spawn-delegation-gate",
165
217
  "timeout": 5
218
+ },
219
+ {
220
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" capture-execution-gate",
221
+ "timeout": 5
222
+ },
223
+ {
224
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" directive-obligation-gate",
225
+ "timeout": 5
166
226
  }
167
227
  ],
168
228
  "postToolUse": [
@@ -176,6 +236,11 @@
176
236
  "timeout": 5,
177
237
  "matcher": ".*"
178
238
  },
239
+ {
240
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" directive-obligation-gate",
241
+ "timeout": 5,
242
+ "matcher": ".*"
243
+ },
179
244
  {
180
245
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" close-terminal-on-ship",
181
246
  "timeout": 5,
@@ -208,9 +273,25 @@
208
273
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" naughty-list-gate",
209
274
  "timeout": 5
210
275
  },
276
+ {
277
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" id-display-format-gate",
278
+ "timeout": 5
279
+ },
280
+ {
281
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" epic-milestone-phrasing-gate",
282
+ "timeout": 5
283
+ },
284
+ {
285
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" git-reflog-audit",
286
+ "timeout": 5
287
+ },
211
288
  {
212
289
  "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" enforce-session-sequence",
213
290
  "timeout": 5
291
+ },
292
+ {
293
+ "command": "node \"$CURSOR_PROJECT_DIR/scripts/cursor-hooks/_run.mjs\" directive-obligation-gate",
294
+ "timeout": 5
214
295
  }
215
296
  ],
216
297
  "sessionEnd": [
@@ -1,12 +1,11 @@
1
1
  {
2
- "_comment": "GENERATED from scripts/lib/customer-kit.mjs (customer-scoped rows only) — do not edit by hand; run `node scripts/lib/customer-kit.mjs --write-plugin-hooks`. Every command goes through bin/run-hook.mjs, which finds the hook runtime (HEYSPEX_PLATFORM_ROOT / HEYSPEX_MCP_ENTRY when set in the machine's own env, then the plugin's own location, node_modules/heyspex, $CLAUDE_PROJECT_DIR) — never $CLAUDE_PROJECT_DIR/scripts, which only exists in heyspex-app. WARNING: a repo whose .claude/settings.json already carries the hs install kit hooks runs every hook twice if this plugin is also enabled — use one or the other.",
3
2
  "hooks": {
4
3
  "SessionStart": [
5
4
  {
6
5
  "hooks": [
7
6
  {
8
7
  "type": "command",
9
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" wip-checkpoint",
8
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" wip-checkpoint",
10
9
  "timeout": 5
11
10
  }
12
11
  ]
@@ -15,7 +14,7 @@
15
14
  "hooks": [
16
15
  {
17
16
  "type": "command",
18
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" inject-doctrine",
17
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" inject-doctrine",
19
18
  "timeout": 5
20
19
  }
21
20
  ]
@@ -24,7 +23,7 @@
24
23
  "hooks": [
25
24
  {
26
25
  "type": "command",
27
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" check-auto-memory-budget",
26
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" check-auto-memory-budget",
28
27
  "timeout": 5
29
28
  }
30
29
  ]
@@ -33,7 +32,7 @@
33
32
  "hooks": [
34
33
  {
35
34
  "type": "command",
36
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" check-claude-md-budget",
35
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" check-claude-md-budget",
37
36
  "timeout": 5
38
37
  }
39
38
  ]
@@ -42,7 +41,16 @@
42
41
  "hooks": [
43
42
  {
44
43
  "type": "command",
45
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" git-reflog-audit",
44
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" git-reflog-audit",
45
+ "timeout": 5
46
+ }
47
+ ]
48
+ },
49
+ {
50
+ "hooks": [
51
+ {
52
+ "type": "command",
53
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" vault-mirror-catchup",
46
54
  "timeout": 5
47
55
  }
48
56
  ]
@@ -53,7 +61,7 @@
53
61
  "hooks": [
54
62
  {
55
63
  "type": "command",
56
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" wip-checkpoint",
64
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" wip-checkpoint",
57
65
  "timeout": 5
58
66
  }
59
67
  ]
@@ -64,7 +72,7 @@
64
72
  "hooks": [
65
73
  {
66
74
  "type": "command",
67
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" preflight-reminder",
75
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" preflight-reminder",
68
76
  "timeout": 5
69
77
  }
70
78
  ]
@@ -73,7 +81,7 @@
73
81
  "hooks": [
74
82
  {
75
83
  "type": "command",
76
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" intent-classifier-trigger",
84
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" intent-classifier-trigger",
77
85
  "timeout": 5
78
86
  }
79
87
  ]
@@ -82,7 +90,7 @@
82
90
  "hooks": [
83
91
  {
84
92
  "type": "command",
85
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" inject-communication-style",
93
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" inject-communication-style",
86
94
  "timeout": 5
87
95
  }
88
96
  ]
@@ -91,7 +99,7 @@
91
99
  "hooks": [
92
100
  {
93
101
  "type": "command",
94
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" inject-vault-context",
102
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" inject-vault-context",
95
103
  "timeout": 10
96
104
  }
97
105
  ]
@@ -103,7 +111,17 @@
103
111
  "hooks": [
104
112
  {
105
113
  "type": "command",
106
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" git-identity-guard",
114
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" git-identity-guard",
115
+ "timeout": 5
116
+ }
117
+ ]
118
+ },
119
+ {
120
+ "matcher": "Write|Edit|MultiEdit|NotebookEdit|Bash|PowerShell",
121
+ "hooks": [
122
+ {
123
+ "type": "command",
124
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" vault-write-tier-guard",
107
125
  "timeout": 5
108
126
  }
109
127
  ]
@@ -113,7 +131,7 @@
113
131
  "hooks": [
114
132
  {
115
133
  "type": "command",
116
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" settings-write-gate",
134
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" settings-write-gate",
117
135
  "timeout": 5
118
136
  }
119
137
  ]
@@ -123,7 +141,17 @@
123
141
  "hooks": [
124
142
  {
125
143
  "type": "command",
126
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" emit-claim-status --event=PreToolUse",
144
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" emit-claim-status --event=PreToolUse",
145
+ "timeout": 5
146
+ }
147
+ ]
148
+ },
149
+ {
150
+ "matcher": "Agent|Task|Edit|Write|MultiEdit|NotebookEdit|Bash|PowerShell",
151
+ "hooks": [
152
+ {
153
+ "type": "command",
154
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" directive-obligation-gate",
127
155
  "timeout": 5
128
156
  }
129
157
  ]
@@ -133,7 +161,7 @@
133
161
  "hooks": [
134
162
  {
135
163
  "type": "command",
136
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" enforce-vault-naming",
164
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" enforce-vault-naming",
137
165
  "timeout": 5
138
166
  }
139
167
  ]
@@ -143,7 +171,7 @@
143
171
  "hooks": [
144
172
  {
145
173
  "type": "command",
146
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" guard-auto-memory-writes",
174
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" guard-auto-memory-writes",
147
175
  "timeout": 5
148
176
  }
149
177
  ]
@@ -153,7 +181,7 @@
153
181
  "hooks": [
154
182
  {
155
183
  "type": "command",
156
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" preflight-reminder",
184
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" preflight-reminder",
157
185
  "timeout": 5
158
186
  }
159
187
  ]
@@ -163,7 +191,7 @@
163
191
  "hooks": [
164
192
  {
165
193
  "type": "command",
166
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" plan-review-gate",
194
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" plan-review-gate",
167
195
  "timeout": 8
168
196
  }
169
197
  ]
@@ -173,7 +201,7 @@
173
201
  "hooks": [
174
202
  {
175
203
  "type": "command",
176
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" plan-exit-ingest-gate",
204
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" plan-exit-ingest-gate",
177
205
  "timeout": 5
178
206
  }
179
207
  ]
@@ -183,7 +211,7 @@
183
211
  "hooks": [
184
212
  {
185
213
  "type": "command",
186
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" claim-before-code-gate",
214
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" claim-before-code-gate",
187
215
  "timeout": 5
188
216
  }
189
217
  ]
@@ -193,17 +221,27 @@
193
221
  "hooks": [
194
222
  {
195
223
  "type": "command",
196
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" capture-workflow-gate",
224
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" capture-workflow-gate",
197
225
  "timeout": 8
198
226
  }
199
227
  ]
200
228
  },
229
+ {
230
+ "matcher": "mcp__heyspex__heyspex_file_spec|mcp__plugin_heyspex_heyspex__heyspex_file_spec",
231
+ "hooks": [
232
+ {
233
+ "type": "command",
234
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" diagnose-capture-reminder",
235
+ "timeout": 5
236
+ }
237
+ ]
238
+ },
201
239
  {
202
240
  "matcher": "Bash|PowerShell",
203
241
  "hooks": [
204
242
  {
205
243
  "type": "command",
206
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" git-stash-gate",
244
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" git-stash-gate",
207
245
  "timeout": 10
208
246
  }
209
247
  ]
@@ -213,7 +251,7 @@
213
251
  "hooks": [
214
252
  {
215
253
  "type": "command",
216
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" research-method-guard",
254
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" research-method-guard",
217
255
  "timeout": 5
218
256
  }
219
257
  ]
@@ -223,7 +261,7 @@
223
261
  "hooks": [
224
262
  {
225
263
  "type": "command",
226
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" deep-research-cost-gate",
264
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" deep-research-cost-gate",
227
265
  "timeout": 5
228
266
  }
229
267
  ]
@@ -233,7 +271,7 @@
233
271
  "hooks": [
234
272
  {
235
273
  "type": "command",
236
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" research-protocol-gate",
274
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" research-protocol-gate",
237
275
  "timeout": 5
238
276
  }
239
277
  ]
@@ -244,7 +282,16 @@
244
282
  "hooks": [
245
283
  {
246
284
  "type": "command",
247
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" emit-claim-status --event=Stop",
285
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" emit-claim-status --event=Stop",
286
+ "timeout": 5
287
+ }
288
+ ]
289
+ },
290
+ {
291
+ "hooks": [
292
+ {
293
+ "type": "command",
294
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" naughty-list-gate",
248
295
  "timeout": 5
249
296
  }
250
297
  ]
@@ -253,7 +300,7 @@
253
300
  "hooks": [
254
301
  {
255
302
  "type": "command",
256
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" naughty-list-gate",
303
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" id-display-format-gate",
257
304
  "timeout": 5
258
305
  }
259
306
  ]
@@ -262,7 +309,7 @@
262
309
  "hooks": [
263
310
  {
264
311
  "type": "command",
265
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" id-display-format-gate",
312
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" epic-milestone-phrasing-gate",
266
313
  "timeout": 5
267
314
  }
268
315
  ]
@@ -271,7 +318,7 @@
271
318
  "hooks": [
272
319
  {
273
320
  "type": "command",
274
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" epic-milestone-phrasing-gate",
321
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" git-reflog-audit",
275
322
  "timeout": 5
276
323
  }
277
324
  ]
@@ -280,7 +327,7 @@
280
327
  "hooks": [
281
328
  {
282
329
  "type": "command",
283
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" git-reflog-audit",
330
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" enforce-session-sequence",
284
331
  "timeout": 5
285
332
  }
286
333
  ]
@@ -289,7 +336,7 @@
289
336
  "hooks": [
290
337
  {
291
338
  "type": "command",
292
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" enforce-session-sequence",
339
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" directive-obligation-gate",
293
340
  "timeout": 5
294
341
  }
295
342
  ]
@@ -301,7 +348,17 @@
301
348
  "hooks": [
302
349
  {
303
350
  "type": "command",
304
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" emit-claim-status --event=PostToolUse",
351
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" emit-claim-status --event=PostToolUse",
352
+ "timeout": 5
353
+ }
354
+ ]
355
+ },
356
+ {
357
+ "matcher": "Skill|mcp__heyspex__heyspex_update_capture|mcp__plugin_heyspex_heyspex__heyspex_update_capture|mcp__heyspex__heyspex_promote_capture.*|mcp__plugin_heyspex_heyspex__heyspex_promote_capture.*|mcp__heyspex__heyspex_file_spec|mcp__plugin_heyspex_heyspex__heyspex_file_spec|mcp__heyspex__heyspex_claim_spec|mcp__plugin_heyspex_heyspex__heyspex_claim_spec|mcp__heyspex__heyspex_release_spec|mcp__plugin_heyspex_heyspex__heyspex_release_spec|mcp__heyspex__heyspex_defer_spec|mcp__plugin_heyspex_heyspex__heyspex_defer_spec",
358
+ "hooks": [
359
+ {
360
+ "type": "command",
361
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" directive-obligation-gate",
305
362
  "timeout": 5
306
363
  }
307
364
  ]
@@ -311,7 +368,7 @@
311
368
  "hooks": [
312
369
  {
313
370
  "type": "command",
314
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" notify-status-flip",
371
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" notify-status-flip",
315
372
  "timeout": 5
316
373
  }
317
374
  ]
@@ -321,7 +378,7 @@
321
378
  "hooks": [
322
379
  {
323
380
  "type": "command",
324
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" close-terminal-on-ship",
381
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" close-terminal-on-ship",
325
382
  "timeout": 5
326
383
  }
327
384
  ]
@@ -331,7 +388,7 @@
331
388
  "hooks": [
332
389
  {
333
390
  "type": "command",
334
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" scripts/stamp-provenance-on-edit.mjs",
391
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" scripts/stamp-provenance-on-edit.mjs",
335
392
  "timeout": 5
336
393
  }
337
394
  ]
@@ -342,7 +399,7 @@
342
399
  "hooks": [
343
400
  {
344
401
  "type": "command",
345
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" session-end",
402
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" session-end",
346
403
  "timeout": 5
347
404
  }
348
405
  ]
@@ -351,7 +408,7 @@
351
408
  "hooks": [
352
409
  {
353
410
  "type": "command",
354
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/bin/run-hook.mjs\" close-terminal-on-ship",
411
+ "command": "node -e \"var f=require('fs'),p=require('path'),u=require('url'),e=process.env,n=['scripts','claude-hooks','_run.mjs'],s='',m=e.CLAUDE_PLUGIN_ROOT||e.COPILOT_PLUGIN_ROOT||e.PLUGIN_ROOT;if(m&&f.existsSync(p.join(m,'bin','run-hook.mjs')))s=p.join(m,'bin','run-hook.mjs');if(!s){var d=process.cwd(),r=e.CLAUDE_PROJECT_DIR;if(!r||!f.existsSync(p.join(r,...n))){r='';for(;;){if(f.existsSync(p.join(d,...n))){r=d;break}var q=p.dirname(d);if(q===d)break;d=q}}if(r){e.CLAUDE_PROJECT_DIR=r;s=p.join(r,...n)}}if(!s)process.exit(0);process.argv=[process.argv[0],s].concat(process.argv.slice(1));import(u.pathToFileURL(s).href).catch(function(){process.exit(0)});//bin/run-hook.mjs\" close-terminal-on-ship",
355
412
  "timeout": 5
356
413
  }
357
414
  ]