hool-cli 0.7.0 → 0.7.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 (57) hide show
  1. package/agents/claude/be-dev.md +19 -1
  2. package/agents/claude/be-tech-lead.md +18 -0
  3. package/agents/claude/fe-dev.md +19 -1
  4. package/agents/claude/fe-tech-lead.md +18 -0
  5. package/agents/claude/forensic.md +18 -0
  6. package/agents/claude/governor.md +18 -0
  7. package/agents/claude/qa.md +18 -0
  8. package/agents/cursor/be-dev.md +12 -0
  9. package/agents/cursor/be-tech-lead.md +12 -0
  10. package/agents/cursor/fe-dev.md +12 -0
  11. package/agents/cursor/fe-tech-lead.md +12 -0
  12. package/agents/cursor/forensic.md +12 -0
  13. package/agents/cursor/governor.md +12 -0
  14. package/agents/cursor/qa.md +12 -0
  15. package/dist/adapters/adapters.test.d.ts +1 -0
  16. package/dist/adapters/adapters.test.js +198 -0
  17. package/dist/adapters/adapters.test.js.map +1 -0
  18. package/dist/adapters/claude-code.js +21 -11
  19. package/dist/adapters/claude-code.js.map +1 -1
  20. package/dist/core/scaffold.d.ts +0 -2
  21. package/dist/core/scaffold.js +22 -20
  22. package/dist/core/scaffold.js.map +1 -1
  23. package/dist/core/scaffold.test.d.ts +1 -0
  24. package/dist/core/scaffold.test.js +349 -0
  25. package/dist/core/scaffold.test.js.map +1 -0
  26. package/dist/core/templates.js +2 -2
  27. package/dist/core/templates.js.map +1 -1
  28. package/dist/core/templates.test.d.ts +1 -0
  29. package/dist/core/templates.test.js +146 -0
  30. package/dist/core/templates.test.js.map +1 -0
  31. package/dist/e2e.test.d.ts +1 -0
  32. package/dist/e2e.test.js +161 -0
  33. package/dist/e2e.test.js.map +1 -0
  34. package/dist/index.js +8 -7
  35. package/dist/index.js.map +1 -1
  36. package/dist/mcps/mcps.test.d.ts +1 -0
  37. package/dist/mcps/mcps.test.js +110 -0
  38. package/dist/mcps/mcps.test.js.map +1 -0
  39. package/hooks/inject-pl-context.sh +22 -3
  40. package/hooks/suggest-compact.sh +8 -12
  41. package/hooks/track-prompt-count.sh +24 -22
  42. package/package.json +13 -3
  43. package/prompts/agents/05-fe-tech-lead.md +3 -0
  44. package/prompts/agents/06-be-tech-lead.md +3 -0
  45. package/prompts/agents/08-be-dev.md +4 -1
  46. package/prompts/agents/08-fe-dev.md +4 -1
  47. package/prompts/agents/10-qa.md +1 -0
  48. package/prompts/agents/11-forensic.md +1 -0
  49. package/prompts/agents/governor.md +1 -0
  50. package/prompts/orchestrator.md +177 -33
  51. package/settings/be-dev.json +17 -0
  52. package/settings/be-tech-lead.json +17 -0
  53. package/settings/fe-dev.json +17 -0
  54. package/settings/fe-tech-lead.json +17 -0
  55. package/settings/forensic.json +17 -0
  56. package/settings/governor.json +17 -0
  57. package/settings/qa.json +17 -0
@@ -19,7 +19,7 @@ function generateClaudeMd(config, orchestratorContent) {
19
19
  # HOOL — Agent-Driven SDLC
20
20
 
21
21
  This project uses the HOOL framework. The Product Lead is the sole user-facing agent.
22
- All other agents are internal — dispatched by the Product Lead as subagents.
22
+ All other agents are internal — dispatched by the Product Lead via CLI.
23
23
 
24
24
  ## Quick Start
25
25
 
@@ -31,16 +31,26 @@ You are the Product Lead. On every invocation — **before answering any questio
31
31
  5. **If there are pending tasks**: Tell the user what's pending and ask if you should proceed, or if they have something else in mind. Do NOT silently wait for explicit instructions — you are the driver, not a passenger.
32
32
  6. Continue from where you left off (see Autonomous Execution Loop below)
33
33
 
34
- ## How to Dispatch Subagents
35
-
36
- When you need to dispatch an agent (Phases 5-12), use the **Agent tool**:
37
-
38
- 1. Read the agent's prompt from \`.claude/agents/<name>.md\` — identity is baked in
39
- 2. Read the agent's memory files (\`.hool/memory/<agent>/hot.md\`, \`best-practices.md\`, \`issues.md\`)
40
- 3. Call the Agent tool with:
41
- - \`prompt\`: The task description + relevant context file paths
42
- - The subagent reads its own prompt, memory, and the files you specify
43
- 4. When the subagent returns, check its output and continue the dispatch loop
34
+ ## How to Dispatch Agents
35
+
36
+ When you need to dispatch an agent (Phases 5-12), use the Bash tool to run an independent CLI session:
37
+
38
+ \`\`\`bash
39
+ env -u CLAUDECODE claude -p \\
40
+ --agent <role> \\
41
+ --settings .hool/settings/<role>.json \\
42
+ --model opus \\
43
+ --output-format stream-json \\
44
+ --verbose \\
45
+ --dangerously-skip-permissions \\
46
+ --no-session-persistence \\
47
+ "<task prompt>" \\
48
+ > .hool/operations/logs/<TASK-ID>-<agent>-<NN>.jsonl 2>&1
49
+ \`\`\`
50
+
51
+ Each dispatched agent runs as a FULL independent session — full MCP access, full hooks, own context window.
52
+ Output streams as real-time JSON to the log file — read it mid-execution to monitor progress.
53
+ See the orchestrator prompt below for full dispatch documentation.
44
54
 
45
55
  ### Agent Registry
46
56
  All agents are defined in \`.hool/agents.json\` — read it for the full list of agents, their prompts, memory paths, and which phases they participate in.
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,6 @@ import type { ProjectType, ExecutionMode, AgentPlatform } from '../adapters/type
2
2
  export declare function scaffoldProject(projectDir: string, projectType: ProjectType, mode?: ExecutionMode): Promise<void>;
3
3
  export declare function scaffoldOnboard(projectDir: string, projectType: ProjectType, mode?: ExecutionMode): Promise<void>;
4
4
  export declare function reonboard(projectDir: string, mode?: ExecutionMode): Promise<void>;
5
- /** @deprecated Use copySkills + copyChecklists instead */
6
- export declare function copyPrompts(projectDir: string, promptsSourceDir: string): Promise<void>;
7
5
  export declare function copySkills(projectDir: string, promptsSourceDir: string): Promise<void>;
8
6
  export declare function copyChecklists(projectDir: string, promptsSourceDir: string): Promise<void>;
9
7
  export declare function writeMcpManifest(projectDir: string, projectType: ProjectType, requiredMcps: string[]): Promise<void>;
@@ -59,6 +59,8 @@ export async function scaffoldProject(projectDir, projectType, mode = 'interacti
59
59
  await fs.mkdir(path.join(projectDir, '.hool/operations'), { recursive: true });
60
60
  await fs.mkdir(path.join(projectDir, '.hool/operations/context'), { recursive: true });
61
61
  await fs.mkdir(path.join(projectDir, '.hool/operations/dispatch'), { recursive: true });
62
+ await fs.mkdir(path.join(projectDir, '.hool/operations/logs'), { recursive: true });
63
+ await fs.writeFile(path.join(projectDir, '.hool/operations/logs/.gitignore'), '*.jsonl\n', 'utf-8');
62
64
  const opTemplates = getOperationTemplates(mode);
63
65
  for (const [filename, content] of Object.entries(opTemplates)) {
64
66
  await fs.writeFile(path.join(projectDir, '.hool/operations', filename), content, 'utf-8');
@@ -77,6 +79,7 @@ export async function scaffoldProject(projectDir, projectType, mode = 'interacti
77
79
  await fs.mkdir(path.join(projectDir, '.hool/hooks'), { recursive: true });
78
80
  await fs.mkdir(path.join(projectDir, '.hool/logs'), { recursive: true });
79
81
  await fs.mkdir(path.join(projectDir, '.hool/metrics'), { recursive: true });
82
+ await fs.mkdir(path.join(projectDir, '.hool/settings'), { recursive: true });
80
83
  // NOTE: src/, tests/ are NOT created here.
81
84
  // Those are project concerns decided during architecture (Phase 4)
82
85
  // and scaffolded by Tech Leads during Phases 5-6 (LLD).
@@ -95,6 +98,8 @@ export async function scaffoldOnboard(projectDir, projectType, mode = 'interacti
95
98
  await fs.mkdir(path.join(projectDir, '.hool/operations'), { recursive: true });
96
99
  await fs.mkdir(path.join(projectDir, '.hool/operations/context'), { recursive: true });
97
100
  await fs.mkdir(path.join(projectDir, '.hool/operations/dispatch'), { recursive: true });
101
+ await fs.mkdir(path.join(projectDir, '.hool/operations/logs'), { recursive: true });
102
+ await fs.writeFile(path.join(projectDir, '.hool/operations/logs/.gitignore'), '*.jsonl\n', 'utf-8');
98
103
  const opTemplates = getOnboardOperationTemplates(mode);
99
104
  for (const [filename, content] of Object.entries(opTemplates)) {
100
105
  await fs.writeFile(path.join(projectDir, '.hool/operations', filename), content, 'utf-8');
@@ -113,6 +118,7 @@ export async function scaffoldOnboard(projectDir, projectType, mode = 'interacti
113
118
  await fs.mkdir(path.join(projectDir, '.hool/hooks'), { recursive: true });
114
119
  await fs.mkdir(path.join(projectDir, '.hool/logs'), { recursive: true });
115
120
  await fs.mkdir(path.join(projectDir, '.hool/metrics'), { recursive: true });
121
+ await fs.mkdir(path.join(projectDir, '.hool/settings'), { recursive: true });
116
122
  }
117
123
  export async function reonboard(projectDir, mode = 'interactive') {
118
124
  // Only overwrite current-phase.md and prepend onboard tasks to task-board.md
@@ -131,26 +137,6 @@ export async function reonboard(projectDir, mode = 'interactive') {
131
137
  const body = existing.startsWith('# Task Board') ? existing.replace(/^# Task Board\n*/, '') : existing;
132
138
  await fs.writeFile(taskBoardPath, header + prepend + body, 'utf-8');
133
139
  }
134
- /** @deprecated Use copySkills + copyChecklists instead */
135
- export async function copyPrompts(projectDir, promptsSourceDir) {
136
- // Legacy: copies all prompts to .hool/prompts/ — kept for backwards compat
137
- const hoolPromptsDir = path.join(projectDir, '.hool/prompts');
138
- async function copyDir(src, dest) {
139
- await fs.mkdir(dest, { recursive: true });
140
- const entries = await fs.readdir(src, { withFileTypes: true });
141
- for (const entry of entries) {
142
- const srcPath = path.join(src, entry.name);
143
- const destPath = path.join(dest, entry.name);
144
- if (entry.isDirectory()) {
145
- await copyDir(srcPath, destPath);
146
- }
147
- else if (entry.name.endsWith('.md')) {
148
- await fs.copyFile(srcPath, destPath);
149
- }
150
- }
151
- }
152
- await copyDir(promptsSourceDir, hoolPromptsDir);
153
- }
154
140
  export async function copySkills(projectDir, promptsSourceDir) {
155
141
  const skillsSourceDir = path.join(promptsSourceDir, 'skills');
156
142
  try {
@@ -365,6 +351,22 @@ export async function copyPlatformFiles(projectDir, templateRootDir, platform) {
365
351
  }
366
352
  }
367
353
  catch { /* ok */ }
354
+ // Copy per-role settings to .hool/settings/
355
+ const roleSettingsSrc = path.join(hoolMiniDir, 'settings');
356
+ const roleSettingsDest = path.join(projectDir, '.hool/settings');
357
+ await fs.mkdir(roleSettingsDest, { recursive: true });
358
+ try {
359
+ const settingsEntries = await fs.readdir(roleSettingsSrc);
360
+ for (const entry of settingsEntries) {
361
+ // Skip the PL settings file (claude-settings.json) — it goes to .claude/settings.json
362
+ if (entry === 'claude-settings.json')
363
+ continue;
364
+ if (!entry.endsWith('.json'))
365
+ continue;
366
+ await fs.copyFile(path.join(roleSettingsSrc, entry), path.join(roleSettingsDest, entry));
367
+ }
368
+ }
369
+ catch { /* ok */ }
368
370
  }
369
371
  if (platform === 'cursor') {
370
372
  // Copy .cursor/agents/*.md
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/core/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/core/scaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,349 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import fs from 'fs/promises';
3
+ import path from 'path';
4
+ import os from 'os';
5
+ import { scaffoldProject, scaffoldOnboard, reonboard, writeMcpManifest, writeAgentManifest, copyPlatformFiles, copySkills, copyChecklists, } from './scaffold.js';
6
+ import * as scaffoldExports from './scaffold.js';
7
+ let tmpDir;
8
+ beforeEach(async () => {
9
+ tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'hool-test-'));
10
+ });
11
+ afterEach(async () => {
12
+ await fs.rm(tmpDir, { recursive: true, force: true });
13
+ });
14
+ describe('scaffoldProject', () => {
15
+ it('creates .hool/operations/ with all template files', async () => {
16
+ await scaffoldProject(tmpDir, 'web-app');
17
+ const files = await fs.readdir(path.join(tmpDir, '.hool/operations'));
18
+ expect(files).toContain('current-phase.md');
19
+ expect(files).toContain('task-board.md');
20
+ expect(files).toContain('bugs.md');
21
+ expect(files).toContain('issues.md');
22
+ expect(files).toContain('inconsistencies.md');
23
+ expect(files).toContain('needs-human-review.md');
24
+ expect(files).toContain('client-preferences.md');
25
+ expect(files).toContain('governor-rules.md');
26
+ expect(files).toContain('governor-log.md');
27
+ });
28
+ it('creates context and dispatch subdirs', async () => {
29
+ await scaffoldProject(tmpDir, 'web-app');
30
+ const stat1 = await fs.stat(path.join(tmpDir, '.hool/operations/context'));
31
+ const stat2 = await fs.stat(path.join(tmpDir, '.hool/operations/dispatch'));
32
+ expect(stat1.isDirectory()).toBe(true);
33
+ expect(stat2.isDirectory()).toBe(true);
34
+ });
35
+ it('creates memory dirs for all 8 agents', async () => {
36
+ await scaffoldProject(tmpDir, 'web-app');
37
+ const agents = ['product-lead', 'fe-tech-lead', 'be-tech-lead', 'fe-dev', 'be-dev', 'qa', 'forensic', 'governor'];
38
+ for (const agent of agents) {
39
+ const agentDir = path.join(tmpDir, '.hool/memory', agent);
40
+ const files = await fs.readdir(agentDir);
41
+ expect(files).toContain('hot.md');
42
+ expect(files).toContain('cold.md');
43
+ expect(files).toContain('best-practices.md');
44
+ expect(files).toContain('issues.md');
45
+ expect(files).toContain('governor-feedback.md');
46
+ }
47
+ });
48
+ it('creates project-profile.md with correct type and mode', async () => {
49
+ await scaffoldProject(tmpDir, 'cli-tool', 'full-hool');
50
+ const profile = await fs.readFile(path.join(tmpDir, '.hool/phases/00-init/project-profile.md'), 'utf-8');
51
+ expect(profile).toContain('cli-tool');
52
+ expect(profile).toContain('full-hool');
53
+ });
54
+ it('creates all phase directories for web-app', async () => {
55
+ await scaffoldProject(tmpDir, 'web-app');
56
+ const expectedDirs = [
57
+ '.hool/phases/00-init',
58
+ '.hool/phases/01-brainstorm',
59
+ '.hool/phases/02-spec/features',
60
+ '.hool/phases/03-design/cards',
61
+ '.hool/phases/03-design/flows',
62
+ '.hool/phases/04-architecture/contracts',
63
+ '.hool/phases/04-architecture/flows',
64
+ '.hool/phases/05-fe-scaffold/pages',
65
+ '.hool/phases/06-be-scaffold/services',
66
+ '.hool/phases/07-test-plan/cases',
67
+ ];
68
+ for (const dir of expectedDirs) {
69
+ const stat = await fs.stat(path.join(tmpDir, dir));
70
+ expect(stat.isDirectory()).toBe(true);
71
+ }
72
+ });
73
+ it('skips design and fe-scaffold for cli-tool', async () => {
74
+ await scaffoldProject(tmpDir, 'cli-tool');
75
+ // These should NOT exist
76
+ await expect(fs.access(path.join(tmpDir, '.hool/phases/03-design'))).rejects.toThrow();
77
+ await expect(fs.access(path.join(tmpDir, '.hool/phases/05-fe-scaffold'))).rejects.toThrow();
78
+ // These SHOULD exist
79
+ const stat = await fs.stat(path.join(tmpDir, '.hool/phases/06-be-scaffold/services'));
80
+ expect(stat.isDirectory()).toBe(true);
81
+ });
82
+ it('skips be-scaffold for animation', async () => {
83
+ await scaffoldProject(tmpDir, 'animation');
84
+ await expect(fs.access(path.join(tmpDir, '.hool/phases/06-be-scaffold'))).rejects.toThrow();
85
+ const stat = await fs.stat(path.join(tmpDir, '.hool/phases/05-fe-scaffold/pages'));
86
+ expect(stat.isDirectory()).toBe(true);
87
+ });
88
+ it('creates .hool utility directories', async () => {
89
+ await scaffoldProject(tmpDir, 'web-app');
90
+ for (const dir of ['checklists', 'hooks', 'logs', 'metrics', 'settings']) {
91
+ const stat = await fs.stat(path.join(tmpDir, '.hool', dir));
92
+ expect(stat.isDirectory()).toBe(true);
93
+ }
94
+ });
95
+ it('defaults to interactive mode', async () => {
96
+ await scaffoldProject(tmpDir, 'web-app');
97
+ const phase = await fs.readFile(path.join(tmpDir, '.hool/operations/current-phase.md'), 'utf-8');
98
+ expect(phase).toContain('interactive');
99
+ });
100
+ });
101
+ describe('scaffoldOnboard', () => {
102
+ it('creates .hool structure with onboarding phase', async () => {
103
+ await scaffoldOnboard(tmpDir, 'web-app');
104
+ const phase = await fs.readFile(path.join(tmpDir, '.hool/operations/current-phase.md'), 'utf-8');
105
+ expect(phase).toContain('onboarding');
106
+ });
107
+ it('creates task-board with ONBOARD tasks', async () => {
108
+ await scaffoldOnboard(tmpDir, 'web-app');
109
+ const board = await fs.readFile(path.join(tmpDir, '.hool/operations/task-board.md'), 'utf-8');
110
+ expect(board).toContain('ONBOARD-001');
111
+ expect(board).toContain('ONBOARD-011');
112
+ });
113
+ it('marks project-profile as onboarded', async () => {
114
+ await scaffoldOnboard(tmpDir, 'cli-tool', 'full-hool');
115
+ const profile = await fs.readFile(path.join(tmpDir, '.hool/phases/00-init/project-profile.md'), 'utf-8');
116
+ expect(profile).toContain('onboarded');
117
+ expect(profile).toContain('cli-tool');
118
+ expect(profile).toContain('full-hool');
119
+ });
120
+ it('respects skip phases same as init', async () => {
121
+ await scaffoldOnboard(tmpDir, 'api-only');
122
+ await expect(fs.access(path.join(tmpDir, '.hool/phases/03-design'))).rejects.toThrow();
123
+ await expect(fs.access(path.join(tmpDir, '.hool/phases/05-fe-scaffold'))).rejects.toThrow();
124
+ });
125
+ });
126
+ describe('reonboard', () => {
127
+ it('overwrites current-phase to onboarding', async () => {
128
+ await scaffoldProject(tmpDir, 'web-app');
129
+ // Verify it starts at phase 0
130
+ let phase = await fs.readFile(path.join(tmpDir, '.hool/operations/current-phase.md'), 'utf-8');
131
+ expect(phase).toContain('Phase**: 0');
132
+ await reonboard(tmpDir);
133
+ phase = await fs.readFile(path.join(tmpDir, '.hool/operations/current-phase.md'), 'utf-8');
134
+ expect(phase).toContain('onboarding');
135
+ });
136
+ it('prepends re-onboard tasks to existing task-board', async () => {
137
+ await scaffoldProject(tmpDir, 'web-app');
138
+ // Add a custom task
139
+ const taskBoardPath = path.join(tmpDir, '.hool/operations/task-board.md');
140
+ await fs.writeFile(taskBoardPath, '# Task Board\n\n## Active Tasks\n- [ ] TASK-099: Custom task | assigned: be-dev\n', 'utf-8');
141
+ await reonboard(tmpDir);
142
+ const board = await fs.readFile(taskBoardPath, 'utf-8');
143
+ expect(board).toContain('## Re-onboard Tasks');
144
+ expect(board).toContain('ONBOARD-001');
145
+ expect(board).toContain('TASK-099'); // preserved
146
+ });
147
+ it('works when no existing task-board', async () => {
148
+ await fs.mkdir(path.join(tmpDir, '.hool/operations'), { recursive: true });
149
+ await reonboard(tmpDir);
150
+ const board = await fs.readFile(path.join(tmpDir, '.hool/operations/task-board.md'), 'utf-8');
151
+ expect(board).toContain('# Task Board');
152
+ expect(board).toContain('ONBOARD-001');
153
+ });
154
+ });
155
+ describe('writeMcpManifest', () => {
156
+ it('writes valid JSON manifest', async () => {
157
+ await fs.mkdir(path.join(tmpDir, '.hool'), { recursive: true });
158
+ await writeMcpManifest(tmpDir, 'web-app', ['context7', 'playwright']);
159
+ const content = await fs.readFile(path.join(tmpDir, '.hool/mcps.json'), 'utf-8');
160
+ const manifest = JSON.parse(content);
161
+ expect(manifest.domain).toBe('web-app');
162
+ expect(manifest.servers).toHaveProperty('context7');
163
+ expect(manifest.servers).toHaveProperty('playwright');
164
+ expect(manifest.servers.context7).toHaveProperty('command');
165
+ expect(manifest.servers.context7).toHaveProperty('args');
166
+ });
167
+ it('includes optional field', async () => {
168
+ await fs.mkdir(path.join(tmpDir, '.hool'), { recursive: true });
169
+ await writeMcpManifest(tmpDir, 'cli-tool', ['context7']);
170
+ const manifest = JSON.parse(await fs.readFile(path.join(tmpDir, '.hool/mcps.json'), 'utf-8'));
171
+ expect(manifest.optional).toContain('hool-context-mcp');
172
+ });
173
+ it('skips unknown MCP names gracefully', async () => {
174
+ await fs.mkdir(path.join(tmpDir, '.hool'), { recursive: true });
175
+ await writeMcpManifest(tmpDir, 'web-app', ['context7', 'nonexistent-mcp']);
176
+ const manifest = JSON.parse(await fs.readFile(path.join(tmpDir, '.hool/mcps.json'), 'utf-8'));
177
+ expect(manifest.servers).toHaveProperty('context7');
178
+ expect(manifest.servers).not.toHaveProperty('nonexistent-mcp');
179
+ });
180
+ });
181
+ describe('writeAgentManifest', () => {
182
+ it('writes valid JSON with all 8 agents', async () => {
183
+ await fs.mkdir(path.join(tmpDir, '.hool'), { recursive: true });
184
+ await writeAgentManifest(tmpDir);
185
+ const content = await fs.readFile(path.join(tmpDir, '.hool/agents.json'), 'utf-8');
186
+ const agents = JSON.parse(content);
187
+ expect(agents).toHaveLength(8);
188
+ const names = agents.map((a) => a.name);
189
+ expect(names).toContain('product-lead');
190
+ expect(names).toContain('be-dev');
191
+ expect(names).toContain('fe-dev');
192
+ expect(names).toContain('qa');
193
+ expect(names).toContain('governor');
194
+ });
195
+ it('each agent has required fields', async () => {
196
+ await fs.mkdir(path.join(tmpDir, '.hool'), { recursive: true });
197
+ await writeAgentManifest(tmpDir);
198
+ const agents = JSON.parse(await fs.readFile(path.join(tmpDir, '.hool/agents.json'), 'utf-8'));
199
+ for (const agent of agents) {
200
+ expect(agent).toHaveProperty('name');
201
+ expect(agent).toHaveProperty('role');
202
+ expect(agent).toHaveProperty('prompt');
203
+ expect(agent).toHaveProperty('memory');
204
+ }
205
+ });
206
+ it('agent memory paths use .hool/memory/ prefix', async () => {
207
+ await fs.mkdir(path.join(tmpDir, '.hool'), { recursive: true });
208
+ await writeAgentManifest(tmpDir);
209
+ const agents = JSON.parse(await fs.readFile(path.join(tmpDir, '.hool/agents.json'), 'utf-8'));
210
+ for (const agent of agents) {
211
+ expect(agent.memory).toMatch(/^\.hool\/memory\//);
212
+ }
213
+ });
214
+ });
215
+ describe('copyPlatformFiles', () => {
216
+ let templateDir;
217
+ beforeEach(async () => {
218
+ templateDir = await fs.mkdtemp(path.join(os.tmpdir(), 'hool-templates-'));
219
+ // Create minimal template structure
220
+ await fs.mkdir(path.join(templateDir, 'agents/claude'), { recursive: true });
221
+ await fs.writeFile(path.join(templateDir, 'agents/claude/be-dev.md'), '---\nname: BE Dev\n---\nBE Dev agent');
222
+ await fs.writeFile(path.join(templateDir, 'agents/claude/qa.md'), '---\nname: QA\n---\nQA agent');
223
+ await fs.mkdir(path.join(templateDir, 'hooks'), { recursive: true });
224
+ await fs.writeFile(path.join(templateDir, 'hooks/block-pl-src-write.sh'), '#!/bin/bash\necho test');
225
+ await fs.writeFile(path.join(templateDir, 'hooks/track-prompt-count.sh'), '#!/bin/bash\necho test');
226
+ await fs.mkdir(path.join(templateDir, 'settings'), { recursive: true });
227
+ await fs.writeFile(path.join(templateDir, 'settings/claude-settings.json'), JSON.stringify({
228
+ hooks: { PreToolUse: [{ matcher: 'Edit', hooks: [{ type: 'command', command: '.hool/hooks/block-pl-src-write.sh' }] }] }
229
+ }));
230
+ await fs.writeFile(path.join(templateDir, 'settings/be-dev.json'), JSON.stringify({
231
+ hooks: { Stop: [{ matcher: '', hooks: [{ type: 'command', command: '.hool/hooks/agent-checklist.sh' }] }] }
232
+ }));
233
+ await fs.writeFile(path.join(templateDir, 'settings/qa.json'), JSON.stringify({
234
+ hooks: { Stop: [{ matcher: '', hooks: [{ type: 'command', command: '.hool/hooks/agent-checklist.sh' }] }] }
235
+ }));
236
+ await fs.mkdir(path.join(templateDir, 'prompts/skills'), { recursive: true });
237
+ await fs.writeFile(path.join(templateDir, 'prompts/skills/01-brainstorm.md'), '# Brainstorm skill');
238
+ await fs.mkdir(path.join(templateDir, 'prompts/checklists'), { recursive: true });
239
+ await fs.writeFile(path.join(templateDir, 'prompts/checklists/code-review.md'), '# Code review checklist');
240
+ });
241
+ afterEach(async () => {
242
+ await fs.rm(templateDir, { recursive: true, force: true });
243
+ });
244
+ it('copies agent definitions to .claude/agents/ for claude-code', async () => {
245
+ await copyPlatformFiles(tmpDir, templateDir, 'claude-code');
246
+ const agents = await fs.readdir(path.join(tmpDir, '.claude/agents'));
247
+ expect(agents).toContain('be-dev.md');
248
+ expect(agents).toContain('qa.md');
249
+ });
250
+ it('copies hooks to .hool/hooks/ and makes them executable', async () => {
251
+ await copyPlatformFiles(tmpDir, templateDir, 'claude-code');
252
+ const hookPath = path.join(tmpDir, '.hool/hooks/block-pl-src-write.sh');
253
+ const stat = await fs.stat(hookPath);
254
+ expect(stat.mode & 0o111).toBeGreaterThan(0); // executable
255
+ });
256
+ it('copies settings.json to .claude/settings.json', async () => {
257
+ await copyPlatformFiles(tmpDir, templateDir, 'claude-code');
258
+ const settings = JSON.parse(await fs.readFile(path.join(tmpDir, '.claude/settings.json'), 'utf-8'));
259
+ expect(settings.hooks).toHaveProperty('PreToolUse');
260
+ });
261
+ it('merges with existing .claude/settings.json', async () => {
262
+ await fs.mkdir(path.join(tmpDir, '.claude'), { recursive: true });
263
+ await fs.writeFile(path.join(tmpDir, '.claude/settings.json'), JSON.stringify({
264
+ hooks: { PostToolUse: [{ matcher: 'Test', hooks: [{ type: 'command', command: 'test.sh' }] }] }
265
+ }));
266
+ await copyPlatformFiles(tmpDir, templateDir, 'claude-code');
267
+ const settings = JSON.parse(await fs.readFile(path.join(tmpDir, '.claude/settings.json'), 'utf-8'));
268
+ expect(settings.hooks).toHaveProperty('PreToolUse'); // from HOOL
269
+ expect(settings.hooks).toHaveProperty('PostToolUse'); // preserved
270
+ });
271
+ it('copies per-role settings to .hool/settings/ (excluding claude-settings.json)', async () => {
272
+ await fs.mkdir(path.join(tmpDir, '.hool/settings'), { recursive: true });
273
+ await copyPlatformFiles(tmpDir, templateDir, 'claude-code');
274
+ const settingsFiles = await fs.readdir(path.join(tmpDir, '.hool/settings'));
275
+ expect(settingsFiles).toContain('be-dev.json');
276
+ expect(settingsFiles).toContain('qa.json');
277
+ expect(settingsFiles).not.toContain('claude-settings.json');
278
+ });
279
+ it('copies skills to .claude/skills/', async () => {
280
+ await copyPlatformFiles(tmpDir, templateDir, 'claude-code');
281
+ const skillFile = await fs.readFile(path.join(tmpDir, '.claude/skills/brainstorm/SKILL.md'), 'utf-8');
282
+ expect(skillFile).toContain('Brainstorm skill');
283
+ });
284
+ it('copies checklists to .hool/checklists/', async () => {
285
+ await copyPlatformFiles(tmpDir, templateDir, 'claude-code');
286
+ const checklist = await fs.readFile(path.join(tmpDir, '.hool/checklists/code-review.md'), 'utf-8');
287
+ expect(checklist).toContain('Code review checklist');
288
+ });
289
+ it('copies cursor agents for cursor platform', async () => {
290
+ await fs.mkdir(path.join(templateDir, 'agents/cursor'), { recursive: true });
291
+ await fs.writeFile(path.join(templateDir, 'agents/cursor/be-dev.md'), 'cursor be-dev');
292
+ await fs.mkdir(path.join(templateDir, 'rules/cursor'), { recursive: true });
293
+ await fs.writeFile(path.join(templateDir, 'rules/cursor/be-dev.mdc'), 'cursor rule');
294
+ await copyPlatformFiles(tmpDir, templateDir, 'cursor');
295
+ const agentContent = await fs.readFile(path.join(tmpDir, '.cursor/agents/be-dev.md'), 'utf-8');
296
+ expect(agentContent).toBe('cursor be-dev');
297
+ const ruleContent = await fs.readFile(path.join(tmpDir, '.cursor/rules/be-dev.mdc'), 'utf-8');
298
+ expect(ruleContent).toBe('cursor rule');
299
+ });
300
+ });
301
+ describe('copySkills', () => {
302
+ it('copies skill files with correct naming', async () => {
303
+ const skillsDir = path.join(tmpDir, 'skills');
304
+ await fs.mkdir(skillsDir, { recursive: true });
305
+ await fs.writeFile(path.join(skillsDir, '01-brainstorm.md'), '# Brainstorm');
306
+ await fs.writeFile(path.join(skillsDir, '02-spec.md'), '# Spec');
307
+ const projectDir = await fs.mkdtemp(path.join(os.tmpdir(), 'hool-proj-'));
308
+ await copySkills(projectDir, tmpDir);
309
+ expect(await fs.readFile(path.join(projectDir, '.claude/skills/brainstorm/SKILL.md'), 'utf-8')).toBe('# Brainstorm');
310
+ expect(await fs.readFile(path.join(projectDir, '.claude/skills/spec/SKILL.md'), 'utf-8')).toBe('# Spec');
311
+ await fs.rm(projectDir, { recursive: true, force: true });
312
+ });
313
+ it('handles missing skills directory gracefully', async () => {
314
+ const projectDir = await fs.mkdtemp(path.join(os.tmpdir(), 'hool-proj-'));
315
+ await expect(copySkills(projectDir, '/nonexistent')).resolves.toBeUndefined();
316
+ await fs.rm(projectDir, { recursive: true, force: true });
317
+ });
318
+ });
319
+ describe('copyChecklists', () => {
320
+ it('copies checklist files', async () => {
321
+ const checklistsDir = path.join(tmpDir, 'checklists');
322
+ await fs.mkdir(checklistsDir, { recursive: true });
323
+ await fs.writeFile(path.join(checklistsDir, 'review.md'), '# Review');
324
+ const projectDir = await fs.mkdtemp(path.join(os.tmpdir(), 'hool-proj-'));
325
+ await copyChecklists(projectDir, tmpDir);
326
+ expect(await fs.readFile(path.join(projectDir, '.hool/checklists/review.md'), 'utf-8')).toBe('# Review');
327
+ await fs.rm(projectDir, { recursive: true, force: true });
328
+ });
329
+ });
330
+ describe('copyPrompts removal', () => {
331
+ it('does not export copyPrompts', () => {
332
+ expect(scaffoldExports).not.toHaveProperty('copyPrompts');
333
+ });
334
+ });
335
+ describe('scaffoldProject .gitignore', () => {
336
+ it('creates .hool/operations/logs/.gitignore with *.jsonl', async () => {
337
+ await scaffoldProject(tmpDir, 'web-app');
338
+ const gitignore = await fs.readFile(path.join(tmpDir, '.hool/operations/logs/.gitignore'), 'utf-8');
339
+ expect(gitignore).toContain('*.jsonl');
340
+ });
341
+ });
342
+ describe('scaffoldOnboard .gitignore', () => {
343
+ it('creates .hool/operations/logs/.gitignore with *.jsonl', async () => {
344
+ await scaffoldOnboard(tmpDir, 'web-app');
345
+ const gitignore = await fs.readFile(path.join(tmpDir, '.hool/operations/logs/.gitignore'), 'utf-8');
346
+ expect(gitignore).toContain('*.jsonl');
347
+ });
348
+ });
349
+ //# sourceMappingURL=scaffold.test.js.map