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.
Files changed (82) hide show
  1. package/README-CN.md +91 -155
  2. package/README.md +200 -177
  3. package/bin/create-harness-vibe-coding.js +2 -2
  4. package/package.json +45 -43
  5. package/src/generator.js +115 -77
  6. package/src/index.js +159 -49
  7. package/src/prompts.js +95 -27
  8. package/templates/common/.claude/agents/architect-manager.md +45 -45
  9. package/templates/common/.claude/agents/context-master.md +77 -77
  10. package/templates/common/.claude/agents/debugger.md +41 -41
  11. package/templates/common/.claude/agents/explore-manager.md +41 -41
  12. package/templates/common/.claude/agents/implement-manager.md +49 -49
  13. package/templates/common/.claude/agents/implementer.md +40 -40
  14. package/templates/common/.claude/agents/memory-master.md +66 -66
  15. package/templates/common/.claude/agents/planner.md +34 -34
  16. package/templates/common/.claude/agents/researcher.md +41 -41
  17. package/templates/common/.claude/agents/review-manager.md +56 -56
  18. package/templates/common/.claude/agents/test-writer.md +38 -38
  19. package/templates/common/.claude/agents/verifier.md +32 -32
  20. package/templates/common/.claude/rules/ecc/common.md +45 -45
  21. package/templates/common/.claude/settings.json +68 -68
  22. package/templates/common/.claude/skills/subagent-orchestrator/SKILL.md +36 -31
  23. package/templates/common/.claude/skills/wf/SKILL.md +36 -0
  24. package/templates/common/.claude/skills/wf-learn/SKILL.md +13 -28
  25. package/templates/common/.claude/skills/wf-max/SKILL.md +24 -88
  26. package/templates/common/.claude/skills/wf-readme/SKILL.md +49 -49
  27. package/templates/common/.claude/skills/wf-remove/SKILL.md +17 -38
  28. package/templates/common/.claude/skills/wf-review/SKILL.md +19 -69
  29. package/templates/common/.claude/skills/wf-update/SKILL.md +19 -61
  30. package/templates/common/.codex/config.toml +2 -2
  31. package/templates/common/.codex/hooks.json +37 -37
  32. package/templates/common/.harness-version +53 -51
  33. package/templates/common/AGENTS.md +30 -30
  34. package/templates/common/CLAUDE.md +94 -94
  35. package/templates/common/{docs/harness → Harness}/PROGRESS.md +17 -17
  36. package/templates/common/{docs → Harness}/README.md +18 -17
  37. package/templates/common/{docs/harness → Harness}/WF-MAX.md +223 -223
  38. package/templates/common/Harness/WF.md +217 -0
  39. package/templates/common/{docs/harness → Harness}/architecture.md +126 -126
  40. package/templates/common/{docs/harness → Harness}/dispatch.md +99 -99
  41. package/templates/common/{docs → Harness}/research/research-results.md +66 -66
  42. package/templates/common/{docs/harness → Harness}/subagents.md +194 -194
  43. package/templates/common/{docs → Harness}/tasks/_template/ARTIFACTS.md +3 -3
  44. package/templates/common/{docs → Harness}/tasks/_template/NOTES.md +3 -3
  45. package/templates/common/{docs → Harness}/tasks/_template/PLAN.md +40 -40
  46. package/templates/common/{docs → Harness}/tasks/_template/PROGRESS.md +29 -29
  47. package/templates/common/MEMORY.md +68 -66
  48. package/templates/common/README.md +44 -37
  49. package/templates/common/SETUP.md +41 -34
  50. package/templates/common/memory/agent-lessons-patterns.md +21 -21
  51. package/templates/common/memory/tool-usage-reflections.md +21 -21
  52. package/templates/common/memory/user-corrections-preferences.md +21 -21
  53. package/templates/common/scripts/scan-clean.mjs +450 -449
  54. package/templates/common/scripts/validate-harness.mjs +56 -34
  55. package/templates/common/scripts/wf-mode-hook.mjs +318 -318
  56. package/templates/common/scripts/wf-remove.mjs +400 -384
  57. package/templates/common/scripts/wf-statusline.ps1 +38 -38
  58. package/templates/common/scripts/wf-statusline.sh +48 -48
  59. package/templates/common/scripts/wf-update-check.mjs +389 -389
  60. package/templates/optional/catalog.json +63 -29
  61. package/templates/optional/skills/browser-e2e/.claude/skills/wf-browser/SKILL.md +194 -194
  62. package/templates/optional/skills/browser-e2e/{docs → Harness}/workflows/browser-e2e.md +75 -75
  63. package/templates/optional/skills/github-pr-review/{docs → Harness}/workflows/github-pr-review.md +28 -28
  64. package/templates/optional/skills/python-backend/{docs → Harness}/workflows/python-backend.md +34 -34
  65. package/templates/optional/skills/ts-react-frontend/{docs → Harness}/workflows/ts-react-frontend.md +35 -35
  66. package/templates/optional/skills/ui-ux-review/{docs → Harness}/workflows/ui-ux-review.md +26 -26
  67. package/templates/common/.claude/commands/wf-learn.md +0 -17
  68. package/templates/common/.claude/commands/wf-max.md +0 -49
  69. package/templates/common/.claude/commands/wf-remove.md +0 -23
  70. package/templates/common/.claude/commands/wf-review.md +0 -25
  71. package/templates/common/.claude/commands/wf-update.md +0 -17
  72. package/templates/common/.claude/commands/wf.md +0 -31
  73. package/templates/common/commands/wf-max.toml +0 -18
  74. package/templates/common/commands/wf-review.toml +0 -15
  75. package/templates/common/docs/harness/WF.md +0 -174
  76. package/templates/optional/skills/browser-e2e/.claude/commands/wf-browser.md +0 -25
  77. /package/templates/common/{docs/harness → Harness}/agent-workflow.md +0 -0
  78. /package/templates/common/{docs/harness → Harness}/context-loading.md +0 -0
  79. /package/templates/common/{docs/harness → Harness}/extension.md +0 -0
  80. /package/templates/common/{docs/harness → Harness}/lifecycle.md +0 -0
  81. /package/templates/common/{docs → Harness}/research/PRD.md +0 -0
  82. /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-update',
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
- '.claude/settings.json',
61
- '.claude/commands/wf.md',
62
- '.claude/commands/wf-max.md',
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
- '.claude/skills/wf-update/SKILL.md',
79
- '.claude/commands/wf-update.md',
80
- 'Harness/scripts/wf-update-check.mjs',
81
- 'Harness/scripts/wf-remove.mjs',
82
- 'Harness/scripts/scan-clean.mjs',
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 = /(?:\.\.\/)?(\.claude\/skills\/[a-z0-9-]+\/SKILL\.md)/g;
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 listDirectories('.claude/skills')) {
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 spawn at least 3 distinct subagents', 'explicit WF/WK subagent minimum');
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
- // harness-* wrapper skills removed routing table in README.md is the single source
408
- // wf-mode skill removed — WF rules now live directly in Harness/WF.md and .claude/commands/wf.md
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');