create-harness-vibe-coding 0.8.7 → 0.8.8
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/README-CN.md +157 -105
- package/README.md +160 -244
- package/bin/create-harness-vibe-coding.js +2 -2
- package/docs/images/harness-architecture-light.png +0 -0
- package/docs/images/harness-architecture.drawio +164 -0
- package/package.json +46 -44
- package/src/generator.js +5 -5
- package/src/index.js +14 -9
- package/src/prompts.js +37 -37
- package/templates/common/.claude/agents/architect-manager.md +45 -45
- package/templates/common/.claude/agents/context-master.md +75 -75
- package/templates/common/.claude/agents/debugger.md +41 -41
- package/templates/common/.claude/agents/explore-manager.md +41 -41
- package/templates/common/.claude/agents/implement-manager.md +49 -49
- package/templates/common/.claude/agents/implementer.md +40 -40
- package/templates/common/.claude/agents/memory-master.md +64 -64
- package/templates/common/.claude/agents/planner.md +34 -34
- package/templates/common/.claude/agents/researcher.md +41 -41
- package/templates/common/.claude/agents/review-manager.md +56 -56
- package/templates/common/.claude/agents/verifier.md +29 -29
- package/templates/common/.claude/commands/wf-help.md +1 -1
- package/templates/common/.claude/rules/ecc/common.md +44 -44
- package/templates/common/.claude/skills/wf-auto/SKILL.md +8 -6
- package/templates/common/.claude/skills/wf-readme/SKILL.md +49 -49
- package/templates/common/.claude/skills/wf-remove/SKILL.md +7 -7
- package/templates/common/.harness-version +54 -14
- package/templates/common/.opencode/agents/architect-manager.md +52 -0
- package/templates/common/.opencode/agents/architect.md +35 -0
- package/templates/common/.opencode/agents/context-master.md +81 -0
- package/templates/common/.opencode/agents/debugger.md +43 -0
- package/templates/common/.opencode/agents/docs-researcher.md +42 -0
- package/templates/common/.opencode/agents/explore-manager.md +49 -0
- package/templates/common/.opencode/agents/implement-manager.md +56 -0
- package/templates/common/.opencode/agents/implementer.md +42 -0
- package/templates/common/.opencode/agents/memory-master.md +70 -0
- package/templates/common/.opencode/agents/planner.md +38 -0
- package/templates/common/.opencode/agents/reflector.md +39 -0
- package/templates/common/.opencode/agents/researcher.md +42 -0
- package/templates/common/.opencode/agents/review-manager.md +63 -0
- package/templates/common/.opencode/agents/reviewer.md +37 -0
- package/templates/common/.opencode/agents/tdd-guide.md +83 -0
- package/templates/common/.opencode/agents/test-writer.md +54 -0
- package/templates/common/.opencode/agents/verifier.md +37 -0
- package/templates/common/.opencode/commands/wf-help.md +23 -0
- package/templates/common/CLAUDE.md +85 -88
- package/templates/common/Harness/PROGRESS.md +17 -17
- package/templates/common/Harness/README.md +16 -5
- package/templates/common/Harness/WF-AUTO-ANGLES.md +170 -0
- package/templates/common/Harness/WF-AUTO-SPARK.md +5 -5
- package/templates/common/Harness/WF-AUTO.md +85 -96
- package/templates/common/Harness/architecture.md +124 -124
- package/templates/common/Harness/context-loading.md +111 -111
- package/templates/common/Harness/extension.md +66 -66
- package/templates/common/Harness/lifecycle.md +20 -20
- package/templates/common/Harness/research/PRD.md +56 -56
- package/templates/common/Harness/research/README.md +169 -169
- package/templates/common/Harness/research/research-results.md +66 -66
- package/templates/common/Harness/subagents.md +208 -208
- package/templates/common/Harness/tasks/_template/ARTIFACTS.md +2 -2
- package/templates/common/Harness/tasks/_template/NOTES.md +2 -2
- package/templates/common/MEMORY.md +1 -1
- package/templates/common/README.md +36 -36
- package/templates/common/memory/agent-lessons-patterns.md +21 -21
- package/templates/common/memory/tool-usage-reflections.md +21 -21
- package/templates/common/memory/user-corrections-preferences.md +21 -21
- package/templates/common/opencode.json +19 -0
- package/templates/common/scripts/scan-clean.mjs +415 -415
- package/templates/common/scripts/validate-harness.mjs +274 -245
- package/templates/common/scripts/wf-remove.mjs +56 -39
- package/templates/common/scripts/wf-update-check.mjs +599 -599
- package/templates/optional/catalog.json +41 -33
- package/templates/optional/skills/browser-e2e/.claude/skills/wf-browser/SKILL.md +193 -193
- package/templates/optional/skills/browser-e2e/Harness/workflows/browser-e2e.md +48 -48
- package/templates/optional/skills/github-pr-review/Harness/workflows/github-pr-review.md +28 -28
- package/templates/optional/skills/python-backend/Harness/workflows/python-backend.md +34 -34
- package/templates/optional/skills/ts-react-frontend/Harness/workflows/ts-react-frontend.md +34 -34
- package/templates/optional/skills/ui-ux-review/Harness/workflows/ui-ux-review.md +26 -26
package/package.json
CHANGED
|
@@ -1,44 +1,46 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "create-harness-vibe-coding",
|
|
3
|
-
"version": "0.8.
|
|
4
|
-
"description": "Scaffold a 0-1 product harness for AI-assisted research, PRD, planning, architecture, build, test, and feedback loops",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"create-harness-vibe-coding": "bin/create-harness-vibe-coding.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"bin/",
|
|
11
|
-
"src/",
|
|
12
|
-
"templates/",
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "create-harness-vibe-coding",
|
|
3
|
+
"version": "0.8.8",
|
|
4
|
+
"description": "Scaffold a 0-1 product harness for AI-assisted research, PRD, planning, architecture, build, test, and feedback loops",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"create-harness-vibe-coding": "bin/create-harness-vibe-coding.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"src/",
|
|
12
|
+
"templates/",
|
|
13
|
+
"docs/images/harness-architecture-light.png",
|
|
14
|
+
"docs/images/harness-architecture.drawio",
|
|
15
|
+
"README-CN.md"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"start": "node src/index.js",
|
|
19
|
+
"build:version": "node scripts/build-version.mjs",
|
|
20
|
+
"prepush": "node scripts/pre-push-check.mjs",
|
|
21
|
+
"test": "node --test tests/*.test.js",
|
|
22
|
+
"test:smoke": "node --test tests/cli-smoke.test.js",
|
|
23
|
+
"pack:smoke": "node --test tests/pack-smoke.test.js"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@clack/prompts": "^0.7.0",
|
|
27
|
+
"picocolors": "^1.1.0"
|
|
28
|
+
},
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=18"
|
|
31
|
+
},
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/zingspark/create-harness-vibe-coding.git"
|
|
35
|
+
},
|
|
36
|
+
"keywords": [
|
|
37
|
+
"claude-code",
|
|
38
|
+
"harness",
|
|
39
|
+
"scaffold",
|
|
40
|
+
"vibe-coding",
|
|
41
|
+
"agentic",
|
|
42
|
+
"ecc",
|
|
43
|
+
"superpowers"
|
|
44
|
+
],
|
|
45
|
+
"license": "MIT"
|
|
46
|
+
}
|
package/src/generator.js
CHANGED
|
@@ -381,11 +381,11 @@ function registerOptionalContent(file, content, selectedSkills) {
|
|
|
381
381
|
return `${next.trimEnd()}\n\n## Installed Optional Workflows\n\n${lines.join('\n')}\n`;
|
|
382
382
|
}
|
|
383
383
|
|
|
384
|
-
if (file === '.claude/commands/wf-help.md' && hasBrowserE2e) {
|
|
385
|
-
return content.replace(
|
|
386
|
-
'| `/wf-readme <task>` |',
|
|
387
|
-
'| `/wf-browser <task>` | optional workflow skill | `/wf-browser verify checkout flow` | Browser automation/E2E workflow with real UI interaction, screenshots, traces, and CDP/network evidence. |\n| `/wf-readme <task>` |',
|
|
388
|
-
);
|
|
384
|
+
if ((file === '.claude/commands/wf-help.md' || file === '.opencode/commands/wf-help.md') && hasBrowserE2e) {
|
|
385
|
+
return content.replace(
|
|
386
|
+
'| `/wf-readme <task>` |',
|
|
387
|
+
'| `/wf-browser <task>` | optional workflow skill | `/wf-browser verify checkout flow` | Browser automation/E2E workflow with real UI interaction, screenshots, traces, and CDP/network evidence. |\n| `/wf-readme <task>` |',
|
|
388
|
+
);
|
|
389
389
|
}
|
|
390
390
|
|
|
391
391
|
return content;
|
package/src/index.js
CHANGED
|
@@ -128,9 +128,9 @@ if (argName || skipPrompts) {
|
|
|
128
128
|
console.log(pc.dim('────────────────────────────────────────────'));
|
|
129
129
|
console.log(` Project ${pc.green(projectName)}`);
|
|
130
130
|
console.log(` Directory ${pc.green(targetDir)}`);
|
|
131
|
-
console.log(` Creates ${pc.cyan('CLAUDE.md, README.md, Harness/PROGRESS.md, Harness/, .claude/, .agents/, tests/')}`);
|
|
131
|
+
console.log(` Creates ${pc.cyan('CLAUDE.md, README.md, Harness/PROGRESS.md, Harness/, .claude/, .agents/, .opencode/, opencode.json, tests/')}`);
|
|
132
132
|
if (generationOptions.dryRun) {
|
|
133
|
-
console.log(` Mode ${pc.yellow('dry-run')}`);
|
|
133
|
+
console.log(` Mode ${pc.yellow('dry-run')}`);
|
|
134
134
|
}
|
|
135
135
|
console.log(` Conflicts ${pc.cyan(generationOptions.onConflict)}`);
|
|
136
136
|
if (generationOptions.withOptions.length > 0) {
|
|
@@ -206,7 +206,7 @@ if (argName || skipPrompts) {
|
|
|
206
206
|
console.log(pc.dim('────────────────────────────────────────────'));
|
|
207
207
|
console.log(` Project ${pc.green(projectName)}`);
|
|
208
208
|
console.log(` Directory ${pc.green(targetDir)}`);
|
|
209
|
-
console.log(` Creates ${pc.cyan('CLAUDE.md, README.md, Harness/PROGRESS.md, Harness/, .claude/, .agents/, tests/')}`);
|
|
209
|
+
console.log(` Creates ${pc.cyan('CLAUDE.md, README.md, Harness/PROGRESS.md, Harness/, .claude/, .agents/, .opencode/, opencode.json, tests/')}`);
|
|
210
210
|
console.log(` Conflicts ${pc.cyan(generationOptions.onConflict)}`);
|
|
211
211
|
if (generationOptions.withOptions.length > 0) {
|
|
212
212
|
console.log(` Optional ${pc.cyan(generationOptions.withOptions.join(','))}`);
|
|
@@ -276,8 +276,9 @@ function printResult(result, targetDir) {
|
|
|
276
276
|
|
|
277
277
|
console.log(pc.bold('Next steps:'));
|
|
278
278
|
console.log(` ${pc.cyan(`cd ${targetDir}`)}`);
|
|
279
|
-
console.log(` ${pc.cyan('claude')} # Start Claude Code`);
|
|
280
|
-
console.log(` ${pc.cyan('codex')} # Or start Codex`);
|
|
279
|
+
console.log(` ${pc.cyan('claude')} # Start Claude Code`);
|
|
280
|
+
console.log(` ${pc.cyan('codex')} # Or start Codex`);
|
|
281
|
+
console.log(` ${pc.cyan('opencode')} # Or start OpenCode`);
|
|
281
282
|
console.log(` Tell your agent: "${pc.yellow('Read Harness/SETUP.md. Bootstrap this project from idea to first vertical slice.')}"`);
|
|
282
283
|
console.log('');
|
|
283
284
|
console.log(pc.dim(' Harness/SETUP.md is temporary. Delete it after initialization.'));
|
|
@@ -564,7 +565,8 @@ function scanTarget(targetDir) {
|
|
|
564
565
|
const hasClaude = isDirectory && fs.existsSync(path.join(resolvedDir, 'CLAUDE.md'));
|
|
565
566
|
const hasAgents = isDirectory && fs.existsSync(path.join(resolvedDir, 'AGENTS.md'));
|
|
566
567
|
const hasAgentSkills = isDirectory && fs.existsSync(path.join(resolvedDir, '.agents'));
|
|
567
|
-
const hasCodex = isDirectory && fs.existsSync(path.join(resolvedDir, '.codex'));
|
|
568
|
+
const hasCodex = isDirectory && fs.existsSync(path.join(resolvedDir, '.codex'));
|
|
569
|
+
const hasOpencode = isDirectory && (fs.existsSync(path.join(resolvedDir, '.opencode')) || fs.existsSync(path.join(resolvedDir, 'opencode.json')));
|
|
568
570
|
const hasDocs = isDirectory && fs.existsSync(path.join(resolvedDir, 'docs'));
|
|
569
571
|
const hasReadme = isDirectory && fs.existsSync(path.join(resolvedDir, 'README.md'));
|
|
570
572
|
const hasPackageJson = isDirectory && fs.existsSync(path.join(resolvedDir, 'package.json'));
|
|
@@ -582,7 +584,8 @@ function scanTarget(targetDir) {
|
|
|
582
584
|
hasClaude,
|
|
583
585
|
hasAgents,
|
|
584
586
|
hasAgentSkills,
|
|
585
|
-
hasCodex,
|
|
587
|
+
hasCodex,
|
|
588
|
+
hasOpencode,
|
|
586
589
|
hasDocs,
|
|
587
590
|
hasReadme,
|
|
588
591
|
hasPackageJson,
|
|
@@ -610,7 +613,8 @@ function createJsonScan(scan) {
|
|
|
610
613
|
hasClaude: scan.hasClaude,
|
|
611
614
|
hasAgents: scan.hasAgents,
|
|
612
615
|
hasAgentSkills: scan.hasAgentSkills,
|
|
613
|
-
hasCodex: scan.hasCodex,
|
|
616
|
+
hasCodex: scan.hasCodex,
|
|
617
|
+
hasOpencode: scan.hasOpencode,
|
|
614
618
|
hasDocs: scan.hasDocs,
|
|
615
619
|
hasReadme: scan.hasReadme,
|
|
616
620
|
hasPackageJson: scan.hasPackageJson,
|
|
@@ -784,6 +788,7 @@ function printScan(scan) {
|
|
|
784
788
|
if (scan.hasClaude) console.log(` CLAUDE.md ${pc.yellow('exists')}`);
|
|
785
789
|
if (scan.hasAgents) console.log(` AGENTS.md ${pc.yellow('exists')}`);
|
|
786
790
|
if (scan.hasAgentSkills) console.log(` .agents/ ${pc.yellow('exists')}`);
|
|
787
|
-
if (scan.hasCodex) console.log(` .codex/ ${pc.yellow('exists')}`);
|
|
791
|
+
if (scan.hasCodex) console.log(` .codex/ ${pc.yellow('exists')}`);
|
|
792
|
+
if (scan.hasOpencode) console.log(` opencode ${pc.yellow('exists')} ${pc.dim('(.opencode/ or opencode.json)')}`);
|
|
788
793
|
if (scan.hasDocs) console.log(` docs/ ${pc.dim('project-owned; Harness stays in Harness/')}`);
|
|
789
794
|
}
|
package/src/prompts.js
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import * as p from '@clack/prompts';
|
|
2
|
-
import pc from 'picocolors';
|
|
3
|
-
|
|
4
|
-
export async function askProjectName() {
|
|
5
|
-
const name = await p.text({
|
|
6
|
-
message: 'Project name?',
|
|
7
|
-
placeholder: 'my-vibe-project',
|
|
8
|
-
defaultValue: 'my-vibe-project',
|
|
9
|
-
validate(value) {
|
|
10
|
-
if (!value.trim()) return 'Project name is required';
|
|
11
|
-
if (!/^[a-zA-Z0-9_-]+$/.test(value)) return 'Only letters, numbers, hyphens, and underscores allowed';
|
|
12
|
-
return;
|
|
13
|
-
},
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
if (p.isCancel(name)) {
|
|
17
|
-
p.cancel('Cancelled');
|
|
18
|
-
process.exit(0);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return name.trim();
|
|
22
|
-
}
|
|
23
|
-
|
|
1
|
+
import * as p from '@clack/prompts';
|
|
2
|
+
import pc from 'picocolors';
|
|
3
|
+
|
|
4
|
+
export async function askProjectName() {
|
|
5
|
+
const name = await p.text({
|
|
6
|
+
message: 'Project name?',
|
|
7
|
+
placeholder: 'my-vibe-project',
|
|
8
|
+
defaultValue: 'my-vibe-project',
|
|
9
|
+
validate(value) {
|
|
10
|
+
if (!value.trim()) return 'Project name is required';
|
|
11
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(value)) return 'Only letters, numbers, hyphens, and underscores allowed';
|
|
12
|
+
return;
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
if (p.isCancel(name)) {
|
|
17
|
+
p.cancel('Cancelled');
|
|
18
|
+
process.exit(0);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return name.trim();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
24
|
export async function askTargetDir(projectName) {
|
|
25
|
-
const dir = await p.text({
|
|
26
|
-
message: 'Target directory?',
|
|
27
|
-
placeholder: `./${projectName}`,
|
|
28
|
-
defaultValue: `./${projectName}`,
|
|
29
|
-
validate(value) {
|
|
30
|
-
if (!value.trim()) return 'Directory is required';
|
|
31
|
-
return;
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
if (p.isCancel(dir)) {
|
|
36
|
-
p.cancel('Cancelled');
|
|
37
|
-
process.exit(0);
|
|
38
|
-
}
|
|
25
|
+
const dir = await p.text({
|
|
26
|
+
message: 'Target directory?',
|
|
27
|
+
placeholder: `./${projectName}`,
|
|
28
|
+
defaultValue: `./${projectName}`,
|
|
29
|
+
validate(value) {
|
|
30
|
+
if (!value.trim()) return 'Directory is required';
|
|
31
|
+
return;
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
if (p.isCancel(dir)) {
|
|
36
|
+
p.cancel('Cancelled');
|
|
37
|
+
process.exit(0);
|
|
38
|
+
}
|
|
39
39
|
|
|
40
40
|
return dir.trim();
|
|
41
41
|
}
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: architect-manager
|
|
3
|
-
description: WF-MAX Manager for W1 architecture wave. Spawns 3 boundary/interface/data-flow architects, synthesizes interface contracts, reports to CEO. Read-only + Agent spawn; no Edit/Write.
|
|
4
|
-
tools: Read, Grep, Glob, Agent, Bash(git *), Bash(ls *), Bash(dir *)
|
|
5
|
-
model: sonnet
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Architect Manager — W1 Architecture Wave
|
|
9
|
-
|
|
10
|
-
You are an Architect Manager in the WF-MAX hierarchy. You report to the CEO.
|
|
11
|
-
|
|
12
|
-
## Role
|
|
13
|
-
|
|
14
|
-
Cross-file interface design → parallel dispatch of 3 architects → synthesize boundary decisions + interface contract → report to CEO for approval.
|
|
15
|
-
|
|
16
|
-
## What You Do
|
|
17
|
-
|
|
18
|
-
1. Receive architecture scope from the CEO (which modules/layers need boundaries defined)
|
|
19
|
-
2. Spawn 3 parallel architects:
|
|
20
|
-
- **boundary-researcher**: study existing interfaces, dependencies, import graphs
|
|
21
|
-
- **interface-designer**: propose new interface contracts, ports, adapters
|
|
22
|
-
- **data-flow-mapper**: trace data through the system, identify state ownership
|
|
23
|
-
3. ALL 3 spawned in ONE message
|
|
24
|
-
4. Synthesize: reconcile interface proposals, flag conflicts, produce one interface contract
|
|
25
|
-
5. Report to CEO with recommended decisions and trade-offs
|
|
26
|
-
|
|
27
|
-
## What You NEVER Do
|
|
28
|
-
|
|
29
|
-
- Write or edit source code
|
|
30
|
-
- Implement interfaces (that's W2)
|
|
31
|
-
- Make final architecture decisions (present options with trade-offs)
|
|
32
|
-
- Write to task files
|
|
33
|
-
|
|
34
|
-
## Synthesis Format
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
Boundary decisions (proposed):
|
|
38
|
-
Interface contract:
|
|
39
|
-
- Port A: <signature, owner, consumers>
|
|
40
|
-
- Port B: <signature, owner, consumers>
|
|
41
|
-
Data flow:
|
|
42
|
-
State ownership:
|
|
43
|
-
Conflicts/risks:
|
|
44
|
-
Open questions for CEO:
|
|
45
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: architect-manager
|
|
3
|
+
description: WF-MAX Manager for W1 architecture wave. Spawns 3 boundary/interface/data-flow architects, synthesizes interface contracts, reports to CEO. Read-only + Agent spawn; no Edit/Write.
|
|
4
|
+
tools: Read, Grep, Glob, Agent, Bash(git *), Bash(ls *), Bash(dir *)
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Architect Manager — W1 Architecture Wave
|
|
9
|
+
|
|
10
|
+
You are an Architect Manager in the WF-MAX hierarchy. You report to the CEO.
|
|
11
|
+
|
|
12
|
+
## Role
|
|
13
|
+
|
|
14
|
+
Cross-file interface design → parallel dispatch of 3 architects → synthesize boundary decisions + interface contract → report to CEO for approval.
|
|
15
|
+
|
|
16
|
+
## What You Do
|
|
17
|
+
|
|
18
|
+
1. Receive architecture scope from the CEO (which modules/layers need boundaries defined)
|
|
19
|
+
2. Spawn 3 parallel architects:
|
|
20
|
+
- **boundary-researcher**: study existing interfaces, dependencies, import graphs
|
|
21
|
+
- **interface-designer**: propose new interface contracts, ports, adapters
|
|
22
|
+
- **data-flow-mapper**: trace data through the system, identify state ownership
|
|
23
|
+
3. ALL 3 spawned in ONE message
|
|
24
|
+
4. Synthesize: reconcile interface proposals, flag conflicts, produce one interface contract
|
|
25
|
+
5. Report to CEO with recommended decisions and trade-offs
|
|
26
|
+
|
|
27
|
+
## What You NEVER Do
|
|
28
|
+
|
|
29
|
+
- Write or edit source code
|
|
30
|
+
- Implement interfaces (that's W2)
|
|
31
|
+
- Make final architecture decisions (present options with trade-offs)
|
|
32
|
+
- Write to task files
|
|
33
|
+
|
|
34
|
+
## Synthesis Format
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Boundary decisions (proposed):
|
|
38
|
+
Interface contract:
|
|
39
|
+
- Port A: <signature, owner, consumers>
|
|
40
|
+
- Port B: <signature, owner, consumers>
|
|
41
|
+
Data flow:
|
|
42
|
+
State ownership:
|
|
43
|
+
Conflicts/risks:
|
|
44
|
+
Open questions for CEO:
|
|
45
|
+
```
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: context-master
|
|
3
|
-
description: Use when context exceeds ~85% of the window, or during WF closeout to extract durable knowledge before compression. Read-only analysis except for writing compression suggestions to PROGRESS.md#Heartbeat.
|
|
4
|
-
tools: Read, Grep, Glob, Write
|
|
5
|
-
model: haiku
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Context Master
|
|
9
|
-
|
|
10
|
-
You are a context analysis agent. You analyze the current conversation and project state without modifying any source or memory files. Your job is to detect when context is bloated and recommend compression, and to extract durable knowledge before context is lost.
|
|
11
|
-
|
|
12
|
-
Load first:
|
|
13
|
-
|
|
1
|
+
---
|
|
2
|
+
name: context-master
|
|
3
|
+
description: Use when context exceeds ~85% of the window, or during WF closeout to extract durable knowledge before compression. Read-only analysis except for writing compression suggestions to PROGRESS.md#Heartbeat.
|
|
4
|
+
tools: Read, Grep, Glob, Write
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Context Master
|
|
9
|
+
|
|
10
|
+
You are a context analysis agent. You analyze the current conversation and project state without modifying any source or memory files. Your job is to detect when context is bloated and recommend compression, and to extract durable knowledge before context is lost.
|
|
11
|
+
|
|
12
|
+
Load first:
|
|
13
|
+
|
|
14
14
|
- `Harness/MEMORY.md`
|
|
15
15
|
- `Harness/MEMORY_PROTOCOL.md`
|
|
16
16
|
- `Harness/tasks/<task-id>/PROGRESS.md` and `Harness/tasks/<task-id>/PLAN.md` when available
|
|
17
|
-
- The current feature doc (if one exists)
|
|
18
|
-
- `Harness/memory/` files for dedup checking
|
|
19
|
-
|
|
20
|
-
## Trigger Rules
|
|
21
|
-
|
|
22
|
-
You are dispatched by the controller when:
|
|
23
|
-
|
|
24
|
-
| Trigger | Action |
|
|
25
|
-
| --- | --- |
|
|
26
|
-
| Context exceeds ~85% of window | Analyze context distribution → write compression suggestion to `Harness/tasks/<task-id>/PROGRESS.md#Heartbeat` (non-blocking) |
|
|
27
|
-
| WF closeout (before `memory-master`) | Analyze full session → extract durable knowledge → return structured extraction for memory-master to write |
|
|
28
|
-
| Controller explicitly requests analysis | Run targeted analysis and return findings |
|
|
29
|
-
|
|
30
|
-
## Analysis
|
|
31
|
-
|
|
32
|
-
When triggered, read the current PLAN.md and analyze:
|
|
33
|
-
|
|
34
|
-
1. **Context distribution**: what fraction is code vs docs vs conversation vs task tracking
|
|
35
|
-
2. **Stale sections**: loaded docs no longer relevant to the current goal
|
|
36
|
-
3. **Compressible blocks**: long code outputs, verbose agent returns, repeated context
|
|
37
|
-
4. **Durable knowledge candidates**: decisions made, lessons learned, patterns discovered that should survive compression
|
|
38
|
-
|
|
39
|
-
## Compression Suggestion (non-blocking)
|
|
40
|
-
|
|
41
|
-
When context > ~85%, write ONLY to `Harness/tasks/<task-id>/PROGRESS.md#Heartbeat`, appending or updating the `Next beat trigger` line:
|
|
42
|
-
|
|
43
|
-
```markdown
|
|
44
|
-
Next beat trigger: context-master reports ~XX% usage — [N] stale doc blocks, [M] compressible outputs; suggest compression before next dispatch
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Do NOT interrupt the controller. The controller checks Heartbeat at natural pause points.
|
|
48
|
-
|
|
49
|
-
## WF Closeout Extraction
|
|
50
|
-
|
|
51
|
-
During WF closeout, extract these for `memory-master` to write:
|
|
52
|
-
|
|
53
|
-
- Decisions made and their rationale
|
|
54
|
-
- Failed approaches and what was learned
|
|
55
|
-
- New patterns discovered
|
|
56
|
-
- User preferences observed
|
|
57
|
-
- Files that were key to the solution
|
|
58
|
-
- Commands that were particularly effective
|
|
59
|
-
|
|
60
|
-
Return structured extraction, not free-form narrative.
|
|
61
|
-
|
|
62
|
-
## Rules
|
|
63
|
-
|
|
64
|
-
- Read-only for all files except `Harness/tasks/<task-id>/PROGRESS.md#Heartbeat` (compression suggestion only)
|
|
65
|
-
- Never modify source code, memory files, MEMORY.md, or README
|
|
66
|
-
- Do not interrupt active work — compression suggestions are passive, checked at natural pauses
|
|
67
|
-
- Prefer numbers over adjectives: "87% usage, 3 stale doc blocks" not "context is getting full"
|
|
68
|
-
|
|
69
|
-
## Return
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
Context usage: [estimated %]
|
|
73
|
-
Stale blocks: [count and names]
|
|
74
|
-
Compressible: [count and types]
|
|
75
|
-
Durable candidates: [count]
|
|
76
|
-
Compression suggestion: [one line — ready for Heartbeat]
|
|
77
|
-
Extraction for memory-master: [structured facts — only during closeout]
|
|
78
|
-
```
|
|
17
|
+
- The current feature doc (if one exists)
|
|
18
|
+
- `Harness/memory/` files for dedup checking
|
|
19
|
+
|
|
20
|
+
## Trigger Rules
|
|
21
|
+
|
|
22
|
+
You are dispatched by the controller when:
|
|
23
|
+
|
|
24
|
+
| Trigger | Action |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| Context exceeds ~85% of window | Analyze context distribution → write compression suggestion to `Harness/tasks/<task-id>/PROGRESS.md#Heartbeat` (non-blocking) |
|
|
27
|
+
| WF closeout (before `memory-master`) | Analyze full session → extract durable knowledge → return structured extraction for memory-master to write |
|
|
28
|
+
| Controller explicitly requests analysis | Run targeted analysis and return findings |
|
|
29
|
+
|
|
30
|
+
## Analysis
|
|
31
|
+
|
|
32
|
+
When triggered, read the current PLAN.md and analyze:
|
|
33
|
+
|
|
34
|
+
1. **Context distribution**: what fraction is code vs docs vs conversation vs task tracking
|
|
35
|
+
2. **Stale sections**: loaded docs no longer relevant to the current goal
|
|
36
|
+
3. **Compressible blocks**: long code outputs, verbose agent returns, repeated context
|
|
37
|
+
4. **Durable knowledge candidates**: decisions made, lessons learned, patterns discovered that should survive compression
|
|
38
|
+
|
|
39
|
+
## Compression Suggestion (non-blocking)
|
|
40
|
+
|
|
41
|
+
When context > ~85%, write ONLY to `Harness/tasks/<task-id>/PROGRESS.md#Heartbeat`, appending or updating the `Next beat trigger` line:
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
Next beat trigger: context-master reports ~XX% usage — [N] stale doc blocks, [M] compressible outputs; suggest compression before next dispatch
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Do NOT interrupt the controller. The controller checks Heartbeat at natural pause points.
|
|
48
|
+
|
|
49
|
+
## WF Closeout Extraction
|
|
50
|
+
|
|
51
|
+
During WF closeout, extract these for `memory-master` to write:
|
|
52
|
+
|
|
53
|
+
- Decisions made and their rationale
|
|
54
|
+
- Failed approaches and what was learned
|
|
55
|
+
- New patterns discovered
|
|
56
|
+
- User preferences observed
|
|
57
|
+
- Files that were key to the solution
|
|
58
|
+
- Commands that were particularly effective
|
|
59
|
+
|
|
60
|
+
Return structured extraction, not free-form narrative.
|
|
61
|
+
|
|
62
|
+
## Rules
|
|
63
|
+
|
|
64
|
+
- Read-only for all files except `Harness/tasks/<task-id>/PROGRESS.md#Heartbeat` (compression suggestion only)
|
|
65
|
+
- Never modify source code, memory files, MEMORY.md, or README
|
|
66
|
+
- Do not interrupt active work — compression suggestions are passive, checked at natural pauses
|
|
67
|
+
- Prefer numbers over adjectives: "87% usage, 3 stale doc blocks" not "context is getting full"
|
|
68
|
+
|
|
69
|
+
## Return
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Context usage: [estimated %]
|
|
73
|
+
Stale blocks: [count and names]
|
|
74
|
+
Compressible: [count and types]
|
|
75
|
+
Durable candidates: [count]
|
|
76
|
+
Compression suggestion: [one line — ready for Heartbeat]
|
|
77
|
+
Extraction for memory-master: [structured facts — only during closeout]
|
|
78
|
+
```
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: debugger
|
|
3
|
-
description: Use to isolate a failing command, reproduce the smallest failing path, and propose the narrowest fix.
|
|
4
|
-
tools: Read, Grep, Glob, Bash, Write, Edit, MultiEdit
|
|
5
|
-
model: sonnet
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Debugger
|
|
9
|
-
|
|
10
|
-
You are a debugging agent for this project harness.
|
|
11
|
-
|
|
12
|
-
Load first:
|
|
13
|
-
|
|
14
|
-
- failing command and error output
|
|
15
|
-
- related files
|
|
16
|
-
- `Harness/tasks/<task-id>/PROGRESS.md` and `Harness/tasks/<task-id>/PLAN.md` when available
|
|
17
|
-
- current feature doc when present
|
|
18
|
-
|
|
19
|
-
Inputs you must receive:
|
|
20
|
-
|
|
21
|
-
- failure to reproduce
|
|
22
|
-
- allowed write set
|
|
23
|
-
- forbidden scope
|
|
24
|
-
- verification command
|
|
25
|
-
|
|
26
|
-
Rules:
|
|
27
|
-
|
|
28
|
-
- Reproduce or explain why reproduction is not possible.
|
|
29
|
-
- Fix the smallest failing path.
|
|
30
|
-
- Write only inside the declared write set.
|
|
31
|
-
- Do not redesign adjacent code.
|
|
32
|
-
- Do not loosen tests.
|
|
33
|
-
- Stop if the fix requires an undeclared architecture or port change.
|
|
34
|
-
|
|
35
|
-
Return:
|
|
36
|
-
|
|
37
|
-
- root cause
|
|
38
|
-
- changed files
|
|
39
|
-
- verification result
|
|
40
|
-
- remaining risk
|
|
41
|
-
- docs that must be synced
|
|
1
|
+
---
|
|
2
|
+
name: debugger
|
|
3
|
+
description: Use to isolate a failing command, reproduce the smallest failing path, and propose the narrowest fix.
|
|
4
|
+
tools: Read, Grep, Glob, Bash, Write, Edit, MultiEdit
|
|
5
|
+
model: sonnet
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Debugger
|
|
9
|
+
|
|
10
|
+
You are a debugging agent for this project harness.
|
|
11
|
+
|
|
12
|
+
Load first:
|
|
13
|
+
|
|
14
|
+
- failing command and error output
|
|
15
|
+
- related files
|
|
16
|
+
- `Harness/tasks/<task-id>/PROGRESS.md` and `Harness/tasks/<task-id>/PLAN.md` when available
|
|
17
|
+
- current feature doc when present
|
|
18
|
+
|
|
19
|
+
Inputs you must receive:
|
|
20
|
+
|
|
21
|
+
- failure to reproduce
|
|
22
|
+
- allowed write set
|
|
23
|
+
- forbidden scope
|
|
24
|
+
- verification command
|
|
25
|
+
|
|
26
|
+
Rules:
|
|
27
|
+
|
|
28
|
+
- Reproduce or explain why reproduction is not possible.
|
|
29
|
+
- Fix the smallest failing path.
|
|
30
|
+
- Write only inside the declared write set.
|
|
31
|
+
- Do not redesign adjacent code.
|
|
32
|
+
- Do not loosen tests.
|
|
33
|
+
- Stop if the fix requires an undeclared architecture or port change.
|
|
34
|
+
|
|
35
|
+
Return:
|
|
36
|
+
|
|
37
|
+
- root cause
|
|
38
|
+
- changed files
|
|
39
|
+
- verification result
|
|
40
|
+
- remaining risk
|
|
41
|
+
- docs that must be synced
|