hool-cli 0.3.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/claude/be-dev.md +147 -0
- package/agents/claude/be-tech-lead.md +201 -0
- package/agents/claude/fe-dev.md +137 -0
- package/agents/claude/fe-tech-lead.md +186 -0
- package/agents/claude/forensic.md +138 -0
- package/agents/claude/governor.md +90 -0
- package/agents/claude/qa.md +163 -0
- package/agents/cursor/be-dev.md +41 -0
- package/agents/cursor/be-tech-lead.md +47 -0
- package/agents/cursor/fe-dev.md +39 -0
- package/agents/cursor/fe-tech-lead.md +47 -0
- package/agents/cursor/forensic.md +39 -0
- package/agents/cursor/governor.md +37 -0
- package/agents/cursor/qa.md +40 -0
- package/dist/adapters/claude-code.js +7 -7
- package/dist/adapters/cursor.js +3 -3
- package/dist/adapters/generic.js +3 -3
- package/dist/core/scaffold.d.ts +6 -1
- package/dist/core/scaffold.js +164 -40
- package/dist/core/scaffold.js.map +1 -1
- package/dist/index.js +56 -24
- package/dist/index.js.map +1 -1
- package/hooks/agent-checklist.sh +25 -0
- package/hooks/block-pl-src-write.sh +21 -0
- package/hooks/inject-pl-context.sh +99 -0
- package/hooks/pre-compact.sh +75 -0
- package/hooks/run-if-profile.sh +43 -0
- package/hooks/session-start.sh +50 -0
- package/hooks/suggest-compact.sh +32 -0
- package/hooks/track-prompt-count.sh +50 -0
- package/package.json +6 -2
- package/prompts/agents/05-fe-tech-lead.md +47 -47
- package/prompts/agents/06-be-tech-lead.md +44 -44
- package/prompts/agents/08-be-dev.md +37 -37
- package/prompts/agents/08-fe-dev.md +37 -37
- package/prompts/agents/10-qa.md +36 -36
- package/prompts/agents/11-forensic.md +24 -24
- package/prompts/agents/governor.md +25 -25
- package/prompts/orchestrator.md +203 -203
- package/prompts/skills/01-brainstorm.md +10 -10
- package/prompts/skills/02-spec.md +14 -14
- package/prompts/skills/03-design.md +21 -21
- package/prompts/skills/04-architecture.md +23 -23
- package/rules/cursor/be-dev.mdc +38 -0
- package/rules/cursor/be-tech-lead.mdc +39 -0
- package/rules/cursor/fe-dev.mdc +36 -0
- package/rules/cursor/fe-tech-lead.mdc +39 -0
- package/rules/cursor/forensic.mdc +35 -0
- package/rules/cursor/governor.mdc +33 -0
- package/rules/cursor/qa.mdc +35 -0
- package/settings/claude-settings.json +93 -0
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import chalk from 'chalk';
|
|
|
5
5
|
import path from 'path';
|
|
6
6
|
import fs from 'fs/promises';
|
|
7
7
|
import { fileURLToPath } from 'url';
|
|
8
|
-
import { scaffoldProject, scaffoldOnboard, reonboard, copyPrompts, writeMcpManifest, writeAgentManifest } from './core/scaffold.js';
|
|
8
|
+
import { scaffoldProject, scaffoldOnboard, reonboard, copyPrompts, writeMcpManifest, writeAgentManifest, copyPlatformFiles } from './core/scaffold.js';
|
|
9
9
|
import { createAdapter } from './adapters/index.js';
|
|
10
10
|
import { checkAndInstallMcps } from './mcps/installer.js';
|
|
11
11
|
import { getRequiredMcpNames } from './mcps/registry.js';
|
|
@@ -14,21 +14,33 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
14
14
|
import { createRequire } from 'module';
|
|
15
15
|
const require = createRequire(import.meta.url);
|
|
16
16
|
const { version: PKG_VERSION } = require('../package.json');
|
|
17
|
-
//
|
|
18
|
-
|
|
17
|
+
// Template root: check monorepo dev paths first (hool-mini has agents/hooks/settings),
|
|
18
|
+
// then bundled (npm install where prepublishOnly copies them alongside dist/).
|
|
19
|
+
// Returns the directory that contains prompts/, agents/, hooks/, settings/
|
|
20
|
+
async function getTemplateRootDir() {
|
|
19
21
|
const candidates = [
|
|
20
|
-
path.resolve(__dirname, '..', '
|
|
21
|
-
path.resolve(__dirname, '..', '..', '
|
|
22
|
-
path.resolve(__dirname, '..'
|
|
22
|
+
path.resolve(__dirname, '..', '..', 'hool-mini'), // dev: cli/src/ -> hool/hool-mini/
|
|
23
|
+
path.resolve(__dirname, '..', '..', '..', 'hool-mini'), // dev: cli/dist/ -> hool/hool-mini/
|
|
24
|
+
path.resolve(__dirname, '..'), // npm: cli/dist/ -> cli/ (bundled prompts/agents/hooks/settings alongside dist/)
|
|
23
25
|
];
|
|
24
26
|
for (const dir of candidates) {
|
|
25
27
|
try {
|
|
26
|
-
|
|
28
|
+
// Check for prompts/ AND agents/ to ensure it's a complete template root
|
|
29
|
+
await fs.access(path.join(dir, 'prompts'));
|
|
30
|
+
await fs.access(path.join(dir, 'agents'));
|
|
27
31
|
return dir;
|
|
28
32
|
}
|
|
29
33
|
catch { /* not found, try next */ }
|
|
30
34
|
}
|
|
31
|
-
|
|
35
|
+
// Fallback: just check prompts/ (handles incomplete bundles)
|
|
36
|
+
for (const dir of candidates) {
|
|
37
|
+
try {
|
|
38
|
+
await fs.access(path.join(dir, 'prompts'));
|
|
39
|
+
return dir;
|
|
40
|
+
}
|
|
41
|
+
catch { /* not found, try next */ }
|
|
42
|
+
}
|
|
43
|
+
return candidates[0]; // last resort
|
|
32
44
|
}
|
|
33
45
|
const program = new Command();
|
|
34
46
|
program
|
|
@@ -78,7 +90,8 @@ program
|
|
|
78
90
|
],
|
|
79
91
|
});
|
|
80
92
|
const adapter = createAdapter(platform);
|
|
81
|
-
const
|
|
93
|
+
const templateRootDir = await getTemplateRootDir();
|
|
94
|
+
const promptsDir = path.join(templateRootDir, 'prompts');
|
|
82
95
|
const config = {
|
|
83
96
|
platform,
|
|
84
97
|
projectType,
|
|
@@ -99,11 +112,20 @@ program
|
|
|
99
112
|
catch {
|
|
100
113
|
console.log(chalk.yellow(' ⚠ Could not copy prompts (source not found). Copy them manually to .hool/prompts/'));
|
|
101
114
|
}
|
|
102
|
-
// 5.
|
|
115
|
+
// 5. Copy platform-specific files (agents, hooks, settings)
|
|
116
|
+
console.log(chalk.dim(' Copying platform files (agents, hooks, settings)...'));
|
|
117
|
+
try {
|
|
118
|
+
await copyPlatformFiles(projectDir, templateRootDir, platform);
|
|
119
|
+
console.log(chalk.green(` ✓ Platform files copied for ${platform}`));
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
console.log(chalk.yellow(` ⚠ Could not copy platform files (source not found).`));
|
|
123
|
+
}
|
|
124
|
+
// 6. Inject platform instructions
|
|
103
125
|
console.log(chalk.dim(` Configuring for ${platform}...`));
|
|
104
126
|
await adapter.injectInstructions(config);
|
|
105
127
|
console.log(chalk.green(` ✓ ${platform} instructions injected`));
|
|
106
|
-
//
|
|
128
|
+
// 7. Check & install MCPs
|
|
107
129
|
if (platform !== 'generic') {
|
|
108
130
|
console.log(chalk.dim(' Checking MCPs...'));
|
|
109
131
|
const results = await checkAndInstallMcps(adapter, config);
|
|
@@ -164,7 +186,7 @@ program
|
|
|
164
186
|
// Re-onboard: read existing mode from project profile, flip phase + prepend tasks
|
|
165
187
|
let mode = 'interactive';
|
|
166
188
|
try {
|
|
167
|
-
const profile = await fs.readFile(path.join(projectDir, 'phases/00-init/project-profile.md'), 'utf-8');
|
|
189
|
+
const profile = await fs.readFile(path.join(projectDir, '.hool/phases/00-init/project-profile.md'), 'utf-8');
|
|
168
190
|
const match = profile.match(/\*\*Mode\*\*:\s*(\S+)/);
|
|
169
191
|
if (match && (match[1] === 'interactive' || match[1] === 'full-hool')) {
|
|
170
192
|
mode = match[1];
|
|
@@ -212,7 +234,8 @@ program
|
|
|
212
234
|
],
|
|
213
235
|
});
|
|
214
236
|
const adapter = createAdapter(platform);
|
|
215
|
-
const
|
|
237
|
+
const templateRootDir = await getTemplateRootDir();
|
|
238
|
+
const promptsDir = path.join(templateRootDir, 'prompts');
|
|
216
239
|
const config = {
|
|
217
240
|
platform,
|
|
218
241
|
projectType,
|
|
@@ -233,11 +256,20 @@ program
|
|
|
233
256
|
catch {
|
|
234
257
|
console.log(chalk.yellow(' ⚠ Could not copy prompts (source not found). Copy them manually to .hool/prompts/'));
|
|
235
258
|
}
|
|
236
|
-
// 6.
|
|
259
|
+
// 6. Copy platform-specific files (agents, hooks, settings)
|
|
260
|
+
console.log(chalk.dim(' Copying platform files (agents, hooks, settings)...'));
|
|
261
|
+
try {
|
|
262
|
+
await copyPlatformFiles(projectDir, templateRootDir, platform);
|
|
263
|
+
console.log(chalk.green(` ✓ Platform files copied for ${platform}`));
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
console.log(chalk.yellow(` ⚠ Could not copy platform files (source not found).`));
|
|
267
|
+
}
|
|
268
|
+
// 7. Inject platform instructions
|
|
237
269
|
console.log(chalk.dim(` Configuring for ${platform}...`));
|
|
238
270
|
await adapter.injectInstructions(config);
|
|
239
271
|
console.log(chalk.green(` ✓ ${platform} instructions injected`));
|
|
240
|
-
//
|
|
272
|
+
// 8. Check & install MCPs
|
|
241
273
|
if (platform !== 'generic') {
|
|
242
274
|
console.log(chalk.dim(' Checking MCPs...'));
|
|
243
275
|
const results = await checkAndInstallMcps(adapter, config);
|
|
@@ -302,10 +334,10 @@ program
|
|
|
302
334
|
.action(async (opts) => {
|
|
303
335
|
const projectDir = path.resolve(opts.dir);
|
|
304
336
|
try {
|
|
305
|
-
const phase = await fs.readFile(path.join(projectDir, 'operations/current-phase.md'), 'utf-8');
|
|
306
|
-
const taskBoard = await fs.readFile(path.join(projectDir, 'operations/task-board.md'), 'utf-8');
|
|
307
|
-
const bugs = await fs.readFile(path.join(projectDir, 'operations/bugs.md'), 'utf-8');
|
|
308
|
-
const review = await fs.readFile(path.join(projectDir, 'operations/needs-human-review.md'), 'utf-8');
|
|
337
|
+
const phase = await fs.readFile(path.join(projectDir, '.hool/operations/current-phase.md'), 'utf-8');
|
|
338
|
+
const taskBoard = await fs.readFile(path.join(projectDir, '.hool/operations/task-board.md'), 'utf-8');
|
|
339
|
+
const bugs = await fs.readFile(path.join(projectDir, '.hool/operations/bugs.md'), 'utf-8');
|
|
340
|
+
const review = await fs.readFile(path.join(projectDir, '.hool/operations/needs-human-review.md'), 'utf-8');
|
|
309
341
|
console.log(chalk.bold('\n HOOL Status\n'));
|
|
310
342
|
console.log(chalk.dim(' ── Phase ──'));
|
|
311
343
|
console.log(' ' + phase.split('\n').slice(0, 5).join('\n '));
|
|
@@ -322,7 +354,7 @@ program
|
|
|
322
354
|
console.log('');
|
|
323
355
|
}
|
|
324
356
|
catch {
|
|
325
|
-
console.log(chalk.red('\n Not a HOOL project (
|
|
357
|
+
console.log(chalk.red('\n Not a HOOL project (.hool/ not found). Run `hool init` first.\n'));
|
|
326
358
|
}
|
|
327
359
|
});
|
|
328
360
|
// ── hool reset ─────────────────────────────────────────────
|
|
@@ -344,12 +376,12 @@ program
|
|
|
344
376
|
const { getOperationTemplates, getMemoryHeaders } = await import('./core/templates.js');
|
|
345
377
|
const opTemplates = getOperationTemplates();
|
|
346
378
|
for (const [filename, content] of Object.entries(opTemplates)) {
|
|
347
|
-
await fs.writeFile(path.join(projectDir, 'operations', filename), content, 'utf-8');
|
|
379
|
+
await fs.writeFile(path.join(projectDir, '.hool/operations', filename), content, 'utf-8');
|
|
348
380
|
}
|
|
349
381
|
const agents = ['product-lead', 'fe-tech-lead', 'be-tech-lead', 'fe-dev', 'be-dev', 'qa', 'forensic', 'governor'];
|
|
350
382
|
const memoryHeaders = getMemoryHeaders();
|
|
351
383
|
for (const agent of agents) {
|
|
352
|
-
const agentDir = path.join(projectDir, 'memory', agent);
|
|
384
|
+
const agentDir = path.join(projectDir, '.hool/memory', agent);
|
|
353
385
|
await fs.mkdir(agentDir, { recursive: true });
|
|
354
386
|
for (const [filename, content] of Object.entries(memoryHeaders)) {
|
|
355
387
|
await fs.writeFile(path.join(agentDir, filename), content, 'utf-8');
|
|
@@ -365,8 +397,8 @@ program
|
|
|
365
397
|
.option('-d, --dir <path>', 'Project directory', '.')
|
|
366
398
|
.action(async (newMode, opts) => {
|
|
367
399
|
const projectDir = path.resolve(opts.dir);
|
|
368
|
-
const profilePath = path.join(projectDir, 'phases/00-init/project-profile.md');
|
|
369
|
-
const phasePath = path.join(projectDir, 'operations/current-phase.md');
|
|
400
|
+
const profilePath = path.join(projectDir, '.hool/phases/00-init/project-profile.md');
|
|
401
|
+
const phasePath = path.join(projectDir, '.hool/operations/current-phase.md');
|
|
370
402
|
try {
|
|
371
403
|
let profile = await fs.readFile(profilePath, 'utf-8');
|
|
372
404
|
const currentMode = profile.match(/\*\*Mode\*\*:\s*(\S+)/)?.[1] || 'unknown';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Hook: Post-agent operational checklist reminder
|
|
3
|
+
# Type: Stop and SubagentStop
|
|
4
|
+
# Outputs JSON with additionalContext so the agent actually sees and acts on it
|
|
5
|
+
# (plain text to stdout was often ignored — JSON injection ensures visibility)
|
|
6
|
+
|
|
7
|
+
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo '.')"
|
|
8
|
+
HOOL_DIR="$PROJECT_ROOT/.hool"
|
|
9
|
+
|
|
10
|
+
# Check if task-board was recently updated (within last 5 minutes)
|
|
11
|
+
STALE_WARNING=""
|
|
12
|
+
if [ -f "$HOOL_DIR/operations/task-board.md" ]; then
|
|
13
|
+
TASK_BOARD_MOD=$(stat -f %m "$HOOL_DIR/operations/task-board.md" 2>/dev/null || stat -c %Y "$HOOL_DIR/operations/task-board.md" 2>/dev/null || echo "0")
|
|
14
|
+
NOW=$(date +%s)
|
|
15
|
+
AGE=$((NOW - TASK_BOARD_MOD))
|
|
16
|
+
if [ "$AGE" -gt 300 ]; then
|
|
17
|
+
STALE_WARNING=" WARNING: task-board.md not updated in ${AGE}s."
|
|
18
|
+
fi
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
CHECKLIST="OPERATIONAL CHECKLIST — Before finishing, verify: (1) Updated .hool/memory/<agent>/cold.md with work log entries (2) Rebuilt .hool/memory/<agent>/hot.md from cold log (3) Moved [GOTCHA]/[PATTERN] entries to best-practices.md (4) Logged issues to .hool/operations/issues.md (5) Logged inconsistencies to .hool/operations/inconsistencies.md (6) Marked task complete on .hool/operations/task-board.md (7) Verified no governor-feedback.md violations in output.${STALE_WARNING} If any items are incomplete, address them now."
|
|
22
|
+
|
|
23
|
+
printf '{"hookSpecificOutput":{"hookEventName":"Stop","additionalContext":"%s"}}\n' "$CHECKLIST"
|
|
24
|
+
|
|
25
|
+
exit 0
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Hook: Block Product Lead (main agent) from writing to src/ directly
|
|
3
|
+
# Type: PreToolUse on Edit, Write
|
|
4
|
+
# Reads CLAUDE_TOOL_INPUT from stdin (JSON)
|
|
5
|
+
|
|
6
|
+
INPUT=$(cat)
|
|
7
|
+
FILE_PATH=$(echo "$INPUT" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"file_path"[[:space:]]*:[[:space:]]*"//' | sed 's/"$//')
|
|
8
|
+
|
|
9
|
+
# Check if the file is in src/ or tests/
|
|
10
|
+
if echo "$FILE_PATH" | grep -qE '(^|/)src/|(^|/)tests/'; then
|
|
11
|
+
# This is the main agent trying to edit application code
|
|
12
|
+
# Subagents have their own identity and writable paths — they're allowed
|
|
13
|
+
# But we can't distinguish main vs subagent here, so we block at main level
|
|
14
|
+
# The hook only runs for the main conversation (PreToolUse)
|
|
15
|
+
echo "BLOCKED: Product Lead cannot edit files in src/ or tests/ directly."
|
|
16
|
+
echo "Dispatch the assigned agent (be-dev, fe-dev, qa) to make this change."
|
|
17
|
+
echo "See CLAUDE.md Forbidden Actions section."
|
|
18
|
+
exit 2
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
exit 0
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Hook: Inject Product Lead context on every user prompt
|
|
3
|
+
# Type: UserPromptSubmit — fires BEFORE Claude processes each user message
|
|
4
|
+
# Outputs JSON with additionalContext to remind the PL of its identity and state
|
|
5
|
+
|
|
6
|
+
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo '.')"
|
|
7
|
+
|
|
8
|
+
# Read current phase
|
|
9
|
+
PHASE="unknown"
|
|
10
|
+
if [ -f "$PROJECT_ROOT/.hool/operations/current-phase.md" ]; then
|
|
11
|
+
PHASE=$(head -5 "$PROJECT_ROOT/.hool/operations/current-phase.md" | grep -i "phase\|standby\|onboard" | head -1 | sed 's/^[[:space:]]*//' | tr -d '\n')
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Count pending tasks
|
|
15
|
+
PENDING=0
|
|
16
|
+
if [ -f "$PROJECT_ROOT/.hool/operations/task-board.md" ]; then
|
|
17
|
+
PENDING=$(grep -c '^\- \[ \]' "$PROJECT_ROOT/.hool/operations/task-board.md" 2>/dev/null | tr -d '\n' || echo "0")
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# Check for items needing human review
|
|
21
|
+
REVIEW_ITEMS=0
|
|
22
|
+
if [ -f "$PROJECT_ROOT/.hool/operations/needs-human-review.md" ]; then
|
|
23
|
+
REVIEW_ITEMS=$(grep -c '^##\|^- ' "$PROJECT_ROOT/.hool/operations/needs-human-review.md" 2>/dev/null | tr -d '\n' || echo "0")
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# Phase-specific guidance — different advice depending on where we are
|
|
27
|
+
PHASE_LOWER=$(echo "$PHASE" | tr '[:upper:]' '[:lower:]')
|
|
28
|
+
PHASE_GUIDANCE=""
|
|
29
|
+
case "$PHASE_LOWER" in
|
|
30
|
+
*onboard*)
|
|
31
|
+
PHASE_GUIDANCE="ONBOARDING: Complete ALL onboarding tasks immediately. Reverse-engineer docs from code. Do not wait for explicit instruction."
|
|
32
|
+
;;
|
|
33
|
+
*phase*0*|*init*)
|
|
34
|
+
PHASE_GUIDANCE="PHASE 0: Ask what we're building, determine project type and mode, capture preferences."
|
|
35
|
+
;;
|
|
36
|
+
*phase*1*|*brainstorm*)
|
|
37
|
+
PHASE_GUIDANCE="PHASE 1: Interactive brainstorm with user. Explore ideas, constraints, scope. Get explicit sign-off."
|
|
38
|
+
;;
|
|
39
|
+
*phase*2*|*spec*)
|
|
40
|
+
PHASE_GUIDANCE="PHASE 2: Define user stories and acceptance criteria. Get sign-off (interactive) or advance (full-hool)."
|
|
41
|
+
;;
|
|
42
|
+
*phase*3*|*design*)
|
|
43
|
+
PHASE_GUIDANCE="PHASE 3: Design screens, components, visual language. Get sign-off (interactive) or advance (full-hool)."
|
|
44
|
+
;;
|
|
45
|
+
*phase*4*|*arch*)
|
|
46
|
+
PHASE_GUIDANCE="PHASE 4: FINAL HUMAN GATE. Define tech stack, contracts, schema, flows. Get sign-off before autonomous."
|
|
47
|
+
;;
|
|
48
|
+
*phase*5*|*fe*scaffold*|*fe*lld*)
|
|
49
|
+
PHASE_GUIDANCE="PHASE 5: Autonomous. Dispatch FE Tech Lead for scaffold + LLD. Verify output."
|
|
50
|
+
;;
|
|
51
|
+
*phase*6*|*be*scaffold*|*be*lld*)
|
|
52
|
+
PHASE_GUIDANCE="PHASE 6: Autonomous. Dispatch BE Tech Lead for scaffold + LLD. Verify output."
|
|
53
|
+
;;
|
|
54
|
+
*phase*7*|*test*plan*)
|
|
55
|
+
PHASE_GUIDANCE="PHASE 7: Autonomous. Dispatch QA for test plan. Verify coverage of all spec criteria."
|
|
56
|
+
;;
|
|
57
|
+
*phase*8*|*impl*)
|
|
58
|
+
PHASE_GUIDANCE="PHASE 8: Autonomous. Dispatch FE/BE Devs per task. Check output, route issues."
|
|
59
|
+
;;
|
|
60
|
+
*phase*9*|*review*)
|
|
61
|
+
PHASE_GUIDANCE="PHASE 9: Autonomous. Dispatch Tech Leads for code review. Route inconsistencies."
|
|
62
|
+
;;
|
|
63
|
+
*phase*10*|*test*)
|
|
64
|
+
PHASE_GUIDANCE="PHASE 10: Autonomous. Dispatch QA for testing. Route bugs to Forensic."
|
|
65
|
+
;;
|
|
66
|
+
*phase*11*|*forensic*)
|
|
67
|
+
PHASE_GUIDANCE="PHASE 11: Autonomous. Dispatch Forensic for root cause. Route fixes to Devs."
|
|
68
|
+
;;
|
|
69
|
+
*phase*12*|*retro*)
|
|
70
|
+
PHASE_GUIDANCE="PHASE 12: Run retrospective. Read all agents' memory. Write findings to needs-human-review.md."
|
|
71
|
+
;;
|
|
72
|
+
*standby*)
|
|
73
|
+
PHASE_GUIDANCE="STANDBY: Wait for user request. Route to appropriate phase/agent based on request type."
|
|
74
|
+
;;
|
|
75
|
+
esac
|
|
76
|
+
|
|
77
|
+
# Check for unresolved inconsistencies
|
|
78
|
+
INCONSISTENCIES=0
|
|
79
|
+
if [ -f "$PROJECT_ROOT/.hool/operations/inconsistencies.md" ]; then
|
|
80
|
+
INCONSISTENCIES=$(grep -c '^- ' "$PROJECT_ROOT/.hool/operations/inconsistencies.md" 2>/dev/null | tr -d '\n' || echo "0")
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# Check governor dispatch count
|
|
84
|
+
DISPATCH_COUNT=0
|
|
85
|
+
if [ -f "$PROJECT_ROOT/.hool/metrics/dispatch-count.txt" ]; then
|
|
86
|
+
DISPATCH_COUNT=$(cat "$PROJECT_ROOT/.hool/metrics/dispatch-count.txt" 2>/dev/null | tr -d '\n' || echo "0")
|
|
87
|
+
fi
|
|
88
|
+
GOVERNOR_DUE=""
|
|
89
|
+
if [ "$DISPATCH_COUNT" -gt 0 ] && [ $(( DISPATCH_COUNT % 3 )) -ge 2 ]; then
|
|
90
|
+
GOVERNOR_DUE=" Governor audit due after next dispatch."
|
|
91
|
+
fi
|
|
92
|
+
|
|
93
|
+
# Build context as a single line (JSON-safe)
|
|
94
|
+
CONTEXT="HOOL PRODUCT LEAD CONTEXT | Current: ${PHASE} | Pending tasks: ${PENDING} | Human review: ${REVIEW_ITEMS} | Inconsistencies: ${INCONSISTENCIES} | Dispatches: ${DISPATCH_COUNT}${GOVERNOR_DUE} | ${PHASE_GUIDANCE} | RULES: (1) NEVER edit src/ or tests/ - dispatch agents (2) Read .hool/operations/current-phase.md and task-board.md FIRST (3) All state in .hool/ (4) After every 3 dispatches, run governor (5) No task too small for dispatch (6) If pending tasks, tell user and ask to proceed"
|
|
95
|
+
|
|
96
|
+
# Output valid JSON
|
|
97
|
+
printf '{"hookSpecificOutput":{"hookEventName":"UserPromptSubmit","additionalContext":"%s"}}\n' "$CONTEXT"
|
|
98
|
+
|
|
99
|
+
exit 0
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Hook: Save HOOL state snapshot before context compaction
|
|
3
|
+
# Type: PreCompact
|
|
4
|
+
# Why: Context compaction can lose critical phase/task state.
|
|
5
|
+
# This hook preserves a snapshot so the agent can recover on resume.
|
|
6
|
+
|
|
7
|
+
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo '.')"
|
|
8
|
+
HOOL_DIR="$PROJECT_ROOT/.hool"
|
|
9
|
+
SNAPSHOTS_DIR="$HOOL_DIR/metrics/snapshots"
|
|
10
|
+
mkdir -p "$SNAPSHOTS_DIR"
|
|
11
|
+
|
|
12
|
+
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")
|
|
13
|
+
SNAPSHOT_FILE="$SNAPSHOTS_DIR/pre-compact-$TIMESTAMP.md"
|
|
14
|
+
|
|
15
|
+
# Capture current phase
|
|
16
|
+
PHASE="unknown"
|
|
17
|
+
if [ -f "$HOOL_DIR/operations/current-phase.md" ]; then
|
|
18
|
+
PHASE=$(head -10 "$HOOL_DIR/operations/current-phase.md")
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
# Capture pending task count and first 5 pending tasks
|
|
22
|
+
PENDING_TASKS=""
|
|
23
|
+
if [ -f "$HOOL_DIR/operations/task-board.md" ]; then
|
|
24
|
+
PENDING_TASKS=$(grep '^\- \[ \]' "$HOOL_DIR/operations/task-board.md" 2>/dev/null | head -5)
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# Capture last 10 entries from PL cold log
|
|
28
|
+
RECENT_LOG=""
|
|
29
|
+
if [ -f "$HOOL_DIR/memory/product-lead/cold.md" ]; then
|
|
30
|
+
RECENT_LOG=$(tail -10 "$HOOL_DIR/memory/product-lead/cold.md")
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# Capture items needing human review
|
|
34
|
+
REVIEW_COUNT=0
|
|
35
|
+
if [ -f "$HOOL_DIR/operations/needs-human-review.md" ]; then
|
|
36
|
+
REVIEW_COUNT=$(grep -c '^##\|^- ' "$HOOL_DIR/operations/needs-human-review.md" 2>/dev/null | tr -d '\n' || echo "0")
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Capture dispatch count
|
|
40
|
+
DISPATCH_COUNT=0
|
|
41
|
+
if [ -f "$HOOL_DIR/metrics/dispatch-count.txt" ]; then
|
|
42
|
+
DISPATCH_COUNT=$(cat "$HOOL_DIR/metrics/dispatch-count.txt" 2>/dev/null | tr -d '\n' || echo "0")
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
# Write snapshot
|
|
46
|
+
cat > "$SNAPSHOT_FILE" << SNAPSHOT
|
|
47
|
+
# HOOL Pre-Compaction Snapshot
|
|
48
|
+
**Timestamp:** $TIMESTAMP
|
|
49
|
+
**Dispatch count:** $DISPATCH_COUNT
|
|
50
|
+
**Human review items:** $REVIEW_COUNT
|
|
51
|
+
|
|
52
|
+
## Current Phase
|
|
53
|
+
$PHASE
|
|
54
|
+
|
|
55
|
+
## Pending Tasks (first 5)
|
|
56
|
+
$PENDING_TASKS
|
|
57
|
+
|
|
58
|
+
## Recent Activity (last 10 cold log entries)
|
|
59
|
+
$RECENT_LOG
|
|
60
|
+
SNAPSHOT
|
|
61
|
+
|
|
62
|
+
# Also inject context into the conversation so the agent doesn't lose state
|
|
63
|
+
PHASE_ONELINER=$(echo "$PHASE" | head -1 | tr -d '\n')
|
|
64
|
+
TASK_COUNT=$(echo "$PENDING_TASKS" | grep -c '.' 2>/dev/null | tr -d '\n' || echo "0")
|
|
65
|
+
|
|
66
|
+
cat << JSONEOF
|
|
67
|
+
{
|
|
68
|
+
"hookSpecificOutput": {
|
|
69
|
+
"hookEventName": "PreCompact",
|
|
70
|
+
"additionalContext": "HOOL STATE SNAPSHOT (pre-compaction): Phase: ${PHASE_ONELINER} | Pending tasks: ${TASK_COUNT} | Dispatches: ${DISPATCH_COUNT} | Review items: ${REVIEW_COUNT} | IMPORTANT: After compaction, re-read .hool/operations/current-phase.md and .hool/operations/task-board.md to restore full context. Snapshot saved to ${SNAPSHOT_FILE}"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
JSONEOF
|
|
74
|
+
|
|
75
|
+
exit 0
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Hook Profile Wrapper — conditionally runs a hook based on HOOL_HOOK_PROFILE
|
|
3
|
+
# Usage: run-if-profile.sh <required-profiles-csv> <actual-hook-script>
|
|
4
|
+
# Example: run-if-profile.sh "standard,strict" ".hool/hooks/suggest-compact.sh"
|
|
5
|
+
#
|
|
6
|
+
# Profile levels:
|
|
7
|
+
# minimal — only safety-critical hooks (block-pl-src-write, pre-compact)
|
|
8
|
+
# standard — default: safety + operational (all hooks except strict-only)
|
|
9
|
+
# strict — maximum guardrails: all hooks active
|
|
10
|
+
#
|
|
11
|
+
# Set via: export HOOL_HOOK_PROFILE=minimal|standard|strict
|
|
12
|
+
# Default: standard
|
|
13
|
+
|
|
14
|
+
REQUIRED_PROFILES="$1"
|
|
15
|
+
HOOK_SCRIPT="$2"
|
|
16
|
+
|
|
17
|
+
if [ -z "$HOOK_SCRIPT" ]; then
|
|
18
|
+
echo "Usage: run-if-profile.sh <profiles-csv> <hook-script>" >&2
|
|
19
|
+
exit 0
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
# Default profile
|
|
23
|
+
CURRENT_PROFILE="${HOOL_HOOK_PROFILE:-standard}"
|
|
24
|
+
|
|
25
|
+
# Check if current profile is in the required list
|
|
26
|
+
ENABLED=false
|
|
27
|
+
IFS=',' read -ra PROFILES <<< "$REQUIRED_PROFILES"
|
|
28
|
+
for profile in "${PROFILES[@]}"; do
|
|
29
|
+
profile=$(echo "$profile" | tr -d ' ')
|
|
30
|
+
if [ "$profile" = "$CURRENT_PROFILE" ]; then
|
|
31
|
+
ENABLED=true
|
|
32
|
+
break
|
|
33
|
+
fi
|
|
34
|
+
done
|
|
35
|
+
|
|
36
|
+
if [ "$ENABLED" = false ]; then
|
|
37
|
+
# Pass through stdin unchanged
|
|
38
|
+
cat
|
|
39
|
+
exit 0
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# Profile matches — run the actual hook, passing stdin through
|
|
43
|
+
exec bash "$HOOK_SCRIPT"
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Hook: Load HOOL state on new session start
|
|
3
|
+
# Type: PreToolUse (first invocation) or UserPromptSubmit
|
|
4
|
+
# Why: When a new session begins, the agent needs to know where it left off.
|
|
5
|
+
# This hook injects the most recent pre-compact snapshot + current state.
|
|
6
|
+
|
|
7
|
+
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo '.')"
|
|
8
|
+
HOOL_DIR="$PROJECT_ROOT/.hool"
|
|
9
|
+
SNAPSHOTS_DIR="$HOOL_DIR/metrics/snapshots"
|
|
10
|
+
SESSION_MARKER="$HOOL_DIR/metrics/session-active.txt"
|
|
11
|
+
|
|
12
|
+
# Only run once per session — check if we already injected
|
|
13
|
+
if [ -f "$SESSION_MARKER" ]; then
|
|
14
|
+
MARKER_AGE=$(( $(date +%s) - $(stat -f %m "$SESSION_MARKER" 2>/dev/null || stat -c %Y "$SESSION_MARKER" 2>/dev/null || echo "0") ))
|
|
15
|
+
# If marker is less than 60 seconds old, skip (already ran this session)
|
|
16
|
+
if [ "$MARKER_AGE" -lt 60 ]; then
|
|
17
|
+
exit 0
|
|
18
|
+
fi
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
# Mark session as active
|
|
22
|
+
date +%s > "$SESSION_MARKER" 2>/dev/null
|
|
23
|
+
|
|
24
|
+
# Find the most recent snapshot
|
|
25
|
+
LATEST_SNAPSHOT=""
|
|
26
|
+
if [ -d "$SNAPSHOTS_DIR" ]; then
|
|
27
|
+
LATEST_SNAPSHOT=$(ls -t "$SNAPSHOTS_DIR"/pre-compact-*.md 2>/dev/null | head -1)
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Build session context
|
|
31
|
+
PHASE="unknown"
|
|
32
|
+
if [ -f "$HOOL_DIR/operations/current-phase.md" ]; then
|
|
33
|
+
PHASE=$(head -3 "$HOOL_DIR/operations/current-phase.md" | tr '\n' ' ' | sed 's/[[:space:]]*$//')
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
PENDING=0
|
|
37
|
+
if [ -f "$HOOL_DIR/operations/task-board.md" ]; then
|
|
38
|
+
PENDING=$(grep -c '^\- \[ \]' "$HOOL_DIR/operations/task-board.md" 2>/dev/null | tr -d '\n' || echo "0")
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
SNAPSHOT_INFO=""
|
|
42
|
+
if [ -n "$LATEST_SNAPSHOT" ]; then
|
|
43
|
+
SNAPSHOT_INFO=" | Last snapshot: $(basename "$LATEST_SNAPSHOT")"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
CONTEXT="HOOL SESSION RESUMED | Phase: ${PHASE} | Pending tasks: ${PENDING}${SNAPSHOT_INFO} | ACTION: Read .hool/operations/current-phase.md and .hool/operations/task-board.md immediately. If there are pending tasks, tell the user and ask if you should proceed."
|
|
47
|
+
|
|
48
|
+
printf '{"hookSpecificOutput":{"hookEventName":"UserPromptSubmit","additionalContext":"%s"}}\n' "$CONTEXT"
|
|
49
|
+
|
|
50
|
+
exit 0
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Hook: Suggest strategic /compact at logical intervals
|
|
3
|
+
# Type: PreToolUse on Edit|Write
|
|
4
|
+
# Why: Auto-compact happens at arbitrary points, often mid-task.
|
|
5
|
+
# Strategic compaction between phases preserves better context.
|
|
6
|
+
|
|
7
|
+
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo '.')"
|
|
8
|
+
METRICS_DIR="$PROJECT_ROOT/.hool/metrics"
|
|
9
|
+
mkdir -p "$METRICS_DIR"
|
|
10
|
+
|
|
11
|
+
COUNTER_FILE="$METRICS_DIR/tool-call-count.txt"
|
|
12
|
+
THRESHOLD="${HOOL_COMPACT_THRESHOLD:-50}"
|
|
13
|
+
|
|
14
|
+
# Read and increment counter
|
|
15
|
+
CURRENT=$(cat "$COUNTER_FILE" 2>/dev/null || echo "0")
|
|
16
|
+
NEXT=$((CURRENT + 1))
|
|
17
|
+
echo "$NEXT" > "$COUNTER_FILE"
|
|
18
|
+
|
|
19
|
+
# Suggest at threshold
|
|
20
|
+
if [ "$NEXT" -eq "$THRESHOLD" ]; then
|
|
21
|
+
echo "HOOL: ${THRESHOLD} tool calls reached. Consider running /compact if you're between phases or tasks." >&2
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Suggest every 25 calls after threshold
|
|
25
|
+
if [ "$NEXT" -gt "$THRESHOLD" ]; then
|
|
26
|
+
OVER=$((NEXT - THRESHOLD))
|
|
27
|
+
if [ $((OVER % 25)) -eq 0 ]; then
|
|
28
|
+
echo "HOOL: ${NEXT} tool calls. Good checkpoint for /compact if context feels stale." >&2
|
|
29
|
+
fi
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
exit 0
|