create-harness-vibe-coding 0.7.2 → 0.8.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/README-CN.md +91 -155
- package/README.md +200 -177
- package/bin/create-harness-vibe-coding.js +2 -2
- package/package.json +45 -43
- package/src/generator.js +115 -77
- package/src/index.js +159 -49
- package/src/prompts.js +95 -27
- package/templates/common/.claude/agents/architect-manager.md +45 -45
- package/templates/common/.claude/agents/context-master.md +77 -77
- 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 +66 -66
- 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/test-writer.md +38 -38
- package/templates/common/.claude/agents/verifier.md +32 -32
- package/templates/common/.claude/rules/ecc/common.md +45 -45
- package/templates/common/.claude/settings.json +68 -68
- package/templates/common/.claude/skills/subagent-orchestrator/SKILL.md +36 -31
- package/templates/common/.claude/skills/wf/SKILL.md +36 -0
- package/templates/common/.claude/skills/wf-learn/SKILL.md +13 -28
- package/templates/common/.claude/skills/wf-max/SKILL.md +24 -88
- package/templates/common/.claude/skills/wf-readme/SKILL.md +49 -49
- package/templates/common/.claude/skills/wf-remove/SKILL.md +17 -38
- package/templates/common/.claude/skills/wf-review/SKILL.md +19 -69
- package/templates/common/.claude/skills/wf-update/SKILL.md +19 -61
- package/templates/common/.codex/config.toml +2 -2
- package/templates/common/.codex/hooks.json +37 -37
- package/templates/common/.harness-version +53 -51
- package/templates/common/AGENTS.md +30 -30
- package/templates/common/CLAUDE.md +94 -94
- package/templates/common/{docs/harness → Harness}/PROGRESS.md +17 -17
- package/templates/common/{docs → Harness}/README.md +18 -17
- package/templates/common/{docs/harness → Harness}/WF-MAX.md +223 -223
- package/templates/common/Harness/WF.md +217 -0
- package/templates/common/{docs/harness → Harness}/architecture.md +126 -126
- package/templates/common/{docs/harness → Harness}/dispatch.md +99 -99
- package/templates/common/{docs → Harness}/research/research-results.md +66 -66
- package/templates/common/{docs/harness → Harness}/subagents.md +194 -194
- package/templates/common/{docs → Harness}/tasks/_template/ARTIFACTS.md +3 -3
- package/templates/common/{docs → Harness}/tasks/_template/NOTES.md +3 -3
- package/templates/common/{docs → Harness}/tasks/_template/PLAN.md +40 -40
- package/templates/common/{docs → Harness}/tasks/_template/PROGRESS.md +29 -29
- package/templates/common/MEMORY.md +68 -66
- package/templates/common/README.md +44 -37
- package/templates/common/SETUP.md +41 -34
- 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/scripts/scan-clean.mjs +450 -449
- package/templates/common/scripts/validate-harness.mjs +56 -34
- package/templates/common/scripts/wf-mode-hook.mjs +318 -318
- package/templates/common/scripts/wf-remove.mjs +400 -384
- package/templates/common/scripts/wf-statusline.ps1 +38 -38
- package/templates/common/scripts/wf-statusline.sh +48 -48
- package/templates/common/scripts/wf-update-check.mjs +389 -389
- package/templates/optional/catalog.json +63 -29
- package/templates/optional/skills/browser-e2e/.claude/skills/wf-browser/SKILL.md +194 -194
- package/templates/optional/skills/browser-e2e/{docs → Harness}/workflows/browser-e2e.md +75 -75
- package/templates/optional/skills/github-pr-review/{docs → Harness}/workflows/github-pr-review.md +28 -28
- package/templates/optional/skills/python-backend/{docs → Harness}/workflows/python-backend.md +34 -34
- package/templates/optional/skills/ts-react-frontend/{docs → Harness}/workflows/ts-react-frontend.md +35 -35
- package/templates/optional/skills/ui-ux-review/{docs → Harness}/workflows/ui-ux-review.md +26 -26
- package/templates/common/.claude/commands/wf-learn.md +0 -17
- package/templates/common/.claude/commands/wf-max.md +0 -49
- package/templates/common/.claude/commands/wf-remove.md +0 -23
- package/templates/common/.claude/commands/wf-review.md +0 -25
- package/templates/common/.claude/commands/wf-update.md +0 -17
- package/templates/common/.claude/commands/wf.md +0 -31
- package/templates/common/commands/wf-max.toml +0 -18
- package/templates/common/commands/wf-review.toml +0 -15
- package/templates/common/docs/harness/WF.md +0 -174
- package/templates/optional/skills/browser-e2e/.claude/commands/wf-browser.md +0 -25
- /package/templates/common/{docs/harness → Harness}/agent-workflow.md +0 -0
- /package/templates/common/{docs/harness → Harness}/context-loading.md +0 -0
- /package/templates/common/{docs/harness → Harness}/extension.md +0 -0
- /package/templates/common/{docs/harness → Harness}/lifecycle.md +0 -0
- /package/templates/common/{docs → Harness}/research/PRD.md +0 -0
- /package/templates/common/{docs → Harness}/research/README.md +0 -0
|
@@ -33,8 +33,9 @@ const commonAgents = [
|
|
|
33
33
|
'review-manager',
|
|
34
34
|
];
|
|
35
35
|
|
|
36
|
-
const commonSkills = [
|
|
37
|
-
'wf
|
|
36
|
+
const commonSkills = [
|
|
37
|
+
'wf',
|
|
38
|
+
'wf-update',
|
|
38
39
|
'wf-max',
|
|
39
40
|
'wf-review',
|
|
40
41
|
'wf-learn',
|
|
@@ -55,14 +56,15 @@ const required = [
|
|
|
55
56
|
'README.md',
|
|
56
57
|
'Harness/MEMORY.md',
|
|
57
58
|
'Harness/WF.md',
|
|
58
|
-
'Harness/WF-MAX.md',
|
|
59
|
-
...memoryFiles,
|
|
60
|
-
'.
|
|
61
|
-
'.
|
|
62
|
-
'.claude/
|
|
63
|
-
'.claude/rules/ecc/common.md',
|
|
64
|
-
...commonAgents.map(agent => `.claude/agents/${agent}.md`),
|
|
65
|
-
...commonSkills.map(skill => `.claude/skills/${skill}/SKILL.md`),
|
|
59
|
+
'Harness/WF-MAX.md',
|
|
60
|
+
...memoryFiles,
|
|
61
|
+
'.codex/config.toml',
|
|
62
|
+
'.codex/hooks.json',
|
|
63
|
+
'.claude/settings.json',
|
|
64
|
+
'.claude/rules/ecc/common.md',
|
|
65
|
+
...commonAgents.map(agent => `.claude/agents/${agent}.md`),
|
|
66
|
+
...commonSkills.map(skill => `.claude/skills/${skill}/SKILL.md`),
|
|
67
|
+
...commonSkills.map(skill => `.agents/skills/${skill}/SKILL.md`),
|
|
66
68
|
'Harness/README.md',
|
|
67
69
|
'Harness/PROGRESS.md',
|
|
68
70
|
'Harness/lifecycle.md',
|
|
@@ -75,14 +77,11 @@ const required = [
|
|
|
75
77
|
'Harness/research/README.md',
|
|
76
78
|
'Harness/research/research-results.md',
|
|
77
79
|
'Harness/research/PRD.md',
|
|
78
|
-
'
|
|
79
|
-
'
|
|
80
|
-
'Harness/scripts/
|
|
81
|
-
'Harness
|
|
82
|
-
|
|
83
|
-
'.claude/commands/wf-remove.md',
|
|
84
|
-
'Harness/.harness-version',
|
|
85
|
-
];
|
|
80
|
+
'Harness/scripts/wf-update-check.mjs',
|
|
81
|
+
'Harness/scripts/wf-remove.mjs',
|
|
82
|
+
'Harness/scripts/scan-clean.mjs',
|
|
83
|
+
'Harness/.harness-version',
|
|
84
|
+
];
|
|
86
85
|
|
|
87
86
|
const projectFacts = [
|
|
88
87
|
'Harness/PROGRESS.md',
|
|
@@ -162,7 +161,7 @@ function unresolvedTemplatePlaceholders(text) {
|
|
|
162
161
|
|
|
163
162
|
function registeredSkillFiles(...texts) {
|
|
164
163
|
const files = new Set();
|
|
165
|
-
const pattern = /(?:\.\.\/)?(
|
|
164
|
+
const pattern = /(?:\.\.\/)?((?:\.claude|\.agents)\/skills\/[a-z0-9-]+\/SKILL\.md)/g;
|
|
166
165
|
|
|
167
166
|
for (const text of texts) {
|
|
168
167
|
for (const match of text.matchAll(pattern)) {
|
|
@@ -350,15 +349,24 @@ function requireUiSelectorContract(rel) {
|
|
|
350
349
|
requireUiSelectorContract('Harness/workflows/browser-e2e.md');
|
|
351
350
|
requireUiSelectorContract('Harness/workflows/ts-react-frontend.md');
|
|
352
351
|
|
|
353
|
-
for (const skill of commonSkills) {
|
|
354
|
-
const rel = `.claude/skills/${skill}/SKILL.md`;
|
|
355
|
-
const text = read(rel);
|
|
356
|
-
if (!text) continue;
|
|
357
|
-
if (frontmatterField(text, 'name') !== skill) errors.push(`${rel} frontmatter name does not match directory`);
|
|
358
|
-
if (!frontmatterField(text, 'description')) errors.push(`${rel} missing frontmatter field: description`);
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
for (const skill of
|
|
352
|
+
for (const skill of commonSkills) {
|
|
353
|
+
const rel = `.claude/skills/${skill}/SKILL.md`;
|
|
354
|
+
const text = read(rel);
|
|
355
|
+
if (!text) continue;
|
|
356
|
+
if (frontmatterField(text, 'name') !== skill) errors.push(`${rel} frontmatter name does not match directory`);
|
|
357
|
+
if (!frontmatterField(text, 'description')) errors.push(`${rel} missing frontmatter field: description`);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
for (const skill of commonSkills) {
|
|
361
|
+
const claudeRel = `.claude/skills/${skill}/SKILL.md`;
|
|
362
|
+
const codexRel = `.agents/skills/${skill}/SKILL.md`;
|
|
363
|
+
const claudeText = read(claudeRel);
|
|
364
|
+
const codexText = read(codexRel);
|
|
365
|
+
if (!claudeText || !codexText) continue;
|
|
366
|
+
if (claudeText !== codexText) errors.push(`${codexRel} must mirror ${claudeRel}`);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
for (const skill of listDirectories('.claude/skills')) {
|
|
362
370
|
if (commonSkills.includes(skill)) continue;
|
|
363
371
|
|
|
364
372
|
const rel = `.claude/skills/${skill}/SKILL.md`;
|
|
@@ -366,8 +374,22 @@ for (const skill of listDirectories('.claude/skills')) {
|
|
|
366
374
|
if (!text) continue;
|
|
367
375
|
|
|
368
376
|
if (frontmatterField(text, 'name') !== skill) errors.push(`${rel} frontmatter name does not match directory`);
|
|
369
|
-
if (!frontmatterField(text, 'description')) errors.push(`${rel} missing frontmatter field: description`);
|
|
370
|
-
}
|
|
377
|
+
if (!frontmatterField(text, 'description')) errors.push(`${rel} missing frontmatter field: description`);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
for (const skill of listDirectories('.agents/skills')) {
|
|
381
|
+
const rel = `.agents/skills/${skill}/SKILL.md`;
|
|
382
|
+
const text = read(rel);
|
|
383
|
+
if (!text) continue;
|
|
384
|
+
|
|
385
|
+
if (frontmatterField(text, 'name') !== skill) errors.push(`${rel} frontmatter name does not match directory`);
|
|
386
|
+
if (!frontmatterField(text, 'description')) errors.push(`${rel} missing frontmatter field: description`);
|
|
387
|
+
|
|
388
|
+
const claudeMirror = `.claude/skills/${skill}/SKILL.md`;
|
|
389
|
+
if (fs.existsSync(path.join(root, claudeMirror)) && text !== read(claudeMirror)) {
|
|
390
|
+
errors.push(`${rel} must mirror ${claudeMirror}`);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
371
393
|
|
|
372
394
|
for (const agent of commonAgents) {
|
|
373
395
|
const rel = `.claude/agents/${agent}.md`;
|
|
@@ -398,17 +420,17 @@ requireText('Harness/research/README.md', 'research-results.md');
|
|
|
398
420
|
requireText('Harness/WF.md', 'Ralph-style harness loop', 'WF loop description');
|
|
399
421
|
requireText('Harness/WF.md', 'Heartbeat Protocol', 'heartbeat protocol');
|
|
400
422
|
requireText('Harness/WF.md', 'WF mode requires multi-subagent orchestration by default', 'WF multi-subagent default');
|
|
401
|
-
requireText('Harness/WF.md', 'Explicit `/wf`, `wf mode`, `workflow mode`, or `wk mode` MUST
|
|
423
|
+
requireText('Harness/WF.md', 'Explicit `/wf`, `$wf`, `wf mode`, `workflow mode`, or `wk mode` MUST use at least 3 distinct role passes', 'explicit WF/WK role-pass minimum');
|
|
402
424
|
requireText('Harness/WF.md', '.claude/agents/', 'WF built-in agent roster path');
|
|
403
425
|
requireText('Harness/WF.md', 'Collaboration decision tree', 'WF decision tree');
|
|
404
426
|
requireText('Harness/WF.md', 'Harness/tasks/', 'WF task directory reference');
|
|
405
427
|
requireText('Harness/README.md', '`wf mode`, `workflow mode`, or `wk mode`', 'WF/WK router aliases');
|
|
406
428
|
requireText('Harness/README.md', 'explicit WF/WK loads subagent docs immediately', 'explicit WF/WK router output');
|
|
407
|
-
|
|
408
|
-
|
|
429
|
+
requireText('.claude/skills/wf/SKILL.md', 'Harness/WF.md', 'wf skill loads core WF doc');
|
|
430
|
+
requireText('.agents/skills/wf/SKILL.md', 'Harness/WF.md', 'Codex wf skill loads core WF doc');
|
|
409
431
|
requireText('.claude/skills/subagent-orchestrator/SKILL.md', 'Harness/subagents.md', 'subagent-orchestrator loads subagents doc');
|
|
410
432
|
requireText('.claude/skills/subagent-orchestrator/SKILL.md', '.claude/agents/', 'subagent-orchestrator built-in agent roster path');
|
|
411
|
-
requireText('.claude/skills/subagent-orchestrator/SKILL.md', '`workflow mode`, `wk mode`', 'subagent-orchestrator WF/WK aliases');
|
|
433
|
+
requireText('.claude/skills/subagent-orchestrator/SKILL.md', '`workflow mode`, or `wk mode`', 'subagent-orchestrator WF/WK aliases');
|
|
412
434
|
requireText('.claude/skills/wf-readme/SKILL.md', 'README.md', 'wf-readme loads README');
|
|
413
435
|
requireText('.claude/skills/wf-readme/SKILL.md', 'Harness/architecture.md', 'wf-readme links architecture docs');
|
|
414
436
|
requireText('Harness/subagents.md', '## Source Attribution', 'subagent source attribution');
|