create-harness-vibe-coding 0.8.7 → 0.8.9

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 (126) hide show
  1. package/README-CN.md +163 -105
  2. package/README.md +179 -244
  3. package/bin/create-harness-vibe-coding.js +2 -2
  4. package/docs/images/harness-architecture-light.png +0 -0
  5. package/docs/images/harness-architecture.drawio +164 -0
  6. package/docs/images/harness-icon.png +0 -0
  7. package/package.json +47 -44
  8. package/src/generator.js +41 -5
  9. package/src/index.js +86 -13
  10. package/src/prompts.js +37 -37
  11. package/templates/common/.claude/agents/architect-manager.md +45 -45
  12. package/templates/common/.claude/agents/architect.md +31 -31
  13. package/templates/common/.claude/agents/codebase-explorer.md +45 -0
  14. package/templates/common/.claude/agents/context-master.md +75 -75
  15. package/templates/common/.claude/agents/debugger.md +41 -41
  16. package/templates/common/.claude/agents/docs-researcher.md +41 -41
  17. package/templates/common/.claude/agents/explore-manager.md +41 -41
  18. package/templates/common/.claude/agents/implement-manager.md +49 -49
  19. package/templates/common/.claude/agents/implementer.md +40 -40
  20. package/templates/common/.claude/agents/memory-master.md +82 -64
  21. package/templates/common/.claude/agents/planner.md +34 -34
  22. package/templates/common/.claude/agents/researcher.md +41 -41
  23. package/templates/common/.claude/agents/review-manager.md +56 -56
  24. package/templates/common/.claude/agents/reviewer.md +34 -34
  25. package/templates/common/.claude/agents/task-scribe.md +70 -0
  26. package/templates/common/.claude/agents/verifier.md +29 -29
  27. package/templates/common/.claude/commands/wf-help.md +9 -5
  28. package/templates/common/.claude/commands/wf-update.md +24 -0
  29. package/templates/common/.claude/rules/ecc/common.md +57 -44
  30. package/templates/common/.claude/settings.json +13 -0
  31. package/templates/common/.claude/skills/subagent-orchestrator/SKILL.md +8 -4
  32. package/templates/common/.claude/skills/wf/SKILL.md +15 -8
  33. package/templates/common/.claude/skills/wf-auto/SKILL.md +10 -7
  34. package/templates/common/.claude/skills/wf-learn/SKILL.md +9 -2
  35. package/templates/common/.claude/skills/wf-max/SKILL.md +23 -5
  36. package/templates/common/.claude/skills/wf-readme/SKILL.md +49 -49
  37. package/templates/common/.claude/skills/wf-remove/SKILL.md +7 -7
  38. package/templates/common/.claude/skills/wf-update/SKILL.md +15 -2
  39. package/templates/common/.codex/hooks.json +17 -0
  40. package/templates/common/.harness-version +130 -45
  41. package/templates/common/.opencode/agents/architect-manager.md +52 -0
  42. package/templates/common/.opencode/agents/architect.md +35 -0
  43. package/templates/common/.opencode/agents/codebase-explorer.md +45 -0
  44. package/templates/common/.opencode/agents/context-master.md +81 -0
  45. package/templates/common/.opencode/agents/debugger.md +43 -0
  46. package/templates/common/.opencode/agents/docs-researcher.md +42 -0
  47. package/templates/common/.opencode/agents/explore-manager.md +49 -0
  48. package/templates/common/.opencode/agents/implement-manager.md +56 -0
  49. package/templates/common/.opencode/agents/implementer.md +42 -0
  50. package/templates/common/.opencode/agents/memory-master.md +88 -0
  51. package/templates/common/.opencode/agents/planner.md +38 -0
  52. package/templates/common/.opencode/agents/reflector.md +39 -0
  53. package/templates/common/.opencode/agents/researcher.md +42 -0
  54. package/templates/common/.opencode/agents/review-manager.md +63 -0
  55. package/templates/common/.opencode/agents/reviewer.md +37 -0
  56. package/templates/common/.opencode/agents/task-scribe.md +70 -0
  57. package/templates/common/.opencode/agents/tdd-guide.md +83 -0
  58. package/templates/common/.opencode/agents/test-writer.md +54 -0
  59. package/templates/common/.opencode/agents/verifier.md +37 -0
  60. package/templates/common/.opencode/commands/wf-auto-spark.md +15 -0
  61. package/templates/common/.opencode/commands/wf-auto.md +15 -0
  62. package/templates/common/.opencode/commands/wf-help.md +27 -0
  63. package/templates/common/.opencode/commands/wf-learn.md +15 -0
  64. package/templates/common/.opencode/commands/wf-max.md +15 -0
  65. package/templates/common/.opencode/commands/wf-readme.md +15 -0
  66. package/templates/common/.opencode/commands/wf-remove.md +15 -0
  67. package/templates/common/.opencode/commands/wf-review.md +15 -0
  68. package/templates/common/.opencode/commands/wf-update.md +24 -0
  69. package/templates/common/.opencode/commands/wf.md +15 -0
  70. package/templates/common/.opencode/plugins/harness-wf-status.mjs +135 -0
  71. package/templates/common/AGENTS.md +2 -29
  72. package/templates/common/CLAUDE.md +114 -88
  73. package/templates/common/Harness/ACCEPTANCE_PROTOCOL.md +2 -2
  74. package/templates/common/{MEMORY.md → Harness/MEMORY.md} +17 -4
  75. package/templates/common/Harness/MEMORY_PROTOCOL.md +80 -30
  76. package/templates/common/Harness/PROGRESS.md +17 -17
  77. package/templates/common/Harness/README.md +58 -19
  78. package/templates/common/{SETUP.md → Harness/SETUP.md} +278 -276
  79. package/templates/common/Harness/TASK_ARCHIVE.md +56 -0
  80. package/templates/common/Harness/WF-AUTO-ANGLES.md +170 -0
  81. package/templates/common/Harness/WF-AUTO-SPARK.md +10 -19
  82. package/templates/common/Harness/WF-AUTO.md +93 -167
  83. package/templates/common/Harness/WF-KERNEL.md +189 -0
  84. package/templates/common/Harness/WF-MAX.md +60 -328
  85. package/templates/common/Harness/WF-STATE.md +83 -0
  86. package/templates/common/Harness/WF.md +117 -237
  87. package/templates/common/Harness/agent-workflow.md +2 -2
  88. package/templates/common/Harness/architecture.md +124 -124
  89. package/templates/common/Harness/context-loading.md +111 -111
  90. package/templates/common/Harness/dispatch.md +43 -35
  91. package/templates/common/Harness/extension.md +66 -66
  92. package/templates/common/Harness/lifecycle.md +20 -20
  93. package/templates/common/Harness/research/PRD.md +56 -56
  94. package/templates/common/Harness/research/README.md +169 -169
  95. package/templates/common/Harness/research/research-results.md +66 -66
  96. package/templates/common/Harness/scripts/archive-tasks.mjs +239 -0
  97. package/templates/common/{scripts → Harness/scripts}/scan-clean.mjs +443 -416
  98. package/templates/common/{scripts → Harness/scripts}/validate-harness.mjs +691 -452
  99. package/templates/common/Harness/scripts/wf-auto-update-prompt.mjs +258 -0
  100. package/templates/common/{scripts → Harness/scripts}/wf-remove.mjs +56 -39
  101. package/templates/common/{scripts → Harness/scripts}/wf-update-check.mjs +632 -599
  102. package/templates/common/Harness/subagents.md +215 -214
  103. package/templates/common/Harness/tasks/_template/ARTIFACTS.md +2 -2
  104. package/templates/common/Harness/tasks/_template/NOTES.md +2 -2
  105. package/templates/common/Harness/tasks/_template/PLAN.md +5 -0
  106. package/templates/common/Harness/tasks/_template/STATE.json +23 -0
  107. package/templates/common/README.md +37 -37
  108. package/templates/common/memory/agent-lessons-patterns.md +22 -21
  109. package/templates/common/memory/routes.md +43 -0
  110. package/templates/common/memory/startup-hints.md +32 -0
  111. package/templates/common/memory/tool-usage-reflections.md +22 -21
  112. package/templates/common/memory/user-corrections-preferences.md +23 -21
  113. package/templates/common/opencode.json +19 -0
  114. package/templates/optional/catalog.json +49 -33
  115. package/templates/optional/skills/browser-e2e/.claude/skills/browser-e2e/SKILL.md +42 -42
  116. package/templates/optional/skills/browser-e2e/.claude/skills/wf-browser/SKILL.md +193 -193
  117. package/templates/optional/skills/browser-e2e/.opencode/commands/wf-browser.md +15 -0
  118. package/templates/optional/skills/browser-e2e/Harness/workflows/browser-e2e.md +48 -48
  119. package/templates/optional/skills/github-pr-review/.claude/skills/github-pr-review/SKILL.md +40 -40
  120. package/templates/optional/skills/github-pr-review/Harness/workflows/github-pr-review.md +28 -28
  121. package/templates/optional/skills/python-backend/.claude/skills/python-backend/SKILL.md +40 -40
  122. package/templates/optional/skills/python-backend/Harness/workflows/python-backend.md +34 -34
  123. package/templates/optional/skills/ts-react-frontend/.claude/skills/ts-react-frontend/SKILL.md +43 -43
  124. package/templates/optional/skills/ts-react-frontend/Harness/workflows/ts-react-frontend.md +34 -34
  125. package/templates/optional/skills/ui-ux-review/.claude/skills/ui-ux-review/SKILL.md +40 -40
  126. package/templates/optional/skills/ui-ux-review/Harness/workflows/ui-ux-review.md +26 -26
package/README.md CHANGED
@@ -1,272 +1,207 @@
1
- <p align="center">
2
- <img src="https://img.shields.io/npm/v/create-harness-vibe-coding?color=blue" alt="npm">
3
- <img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen" alt="node">
4
- <img src="https://img.shields.io/npm/l/create-harness-vibe-coding" alt="license">
5
- <img src="https://img.shields.io/github/stars/zingspark/create-harness-vibe-coding?style=social" alt="stars">
6
- </p>
7
-
8
- <h1 align="center">create-harness-vibe-coding</h1>
9
- <p align="center">
10
- <b>A harness for your AI agent. One scaffold. Zero drift.</b><br>
11
- </p>
12
-
13
- ## One Command. Done.
14
-
15
- ```bash
16
- npx create-harness-vibe-coding@latest my-project
17
- ```
18
-
19
- ## Your Agent Knows What to Do
20
-
21
- Already have a project? Paste this sentence. Your agent should use the script-first fast path: dry-run JSON first, read only files named in `agent.aiMergeRequired`, then run the structural validator.
22
-
23
- ```text
24
- Read and follow https://github.com/zingspark/create-harness-vibe-coding exactly to configure this project with create-harness-vibe-coding.
25
- ```
26
-
27
- That's it. Two paths into the harness — you type `npx`, or your agent reads the sentence.
28
-
29
- Chinese README: [README-CN.md](README-CN.md)
30
-
31
- ---
32
-
33
- ## What You Get
34
-
35
- | You get | So your agent |
36
- |---------|---------------|
37
- | `CLAUDE.md` + `Harness/README.md` | Starts with a router, not a novel |
38
- | `Harness/tasks/` + `Harness/PROGRESS.md` | Tracks work across sessions |
39
- | `/wf` / `$wf` workflow + heartbeat | Finishes long tasks without getting lost |
40
- | `/wf-update` / `$wf-update` | Pulls scaffold fixes from GitHub |
41
- | `subagent-orchestrator` | Runs parallel agents without collision |
42
- | `memory-master` + `context-master` | Learns from failures, compresses when full |
43
- | PRD + Research templates | Asks "what" and "why" before coding |
44
- | 16 built-in agents | Research, plan, architecture, TDD, build, review, debug, verify, memory/context, WF-MAX managers |
45
- | Architecture docs | Knows where boundaries live |
46
- | Context-loading protocol | Loads only the docs each agent needs |
47
- | `.claude/` + `.agents/skills/` | Claude Code and Codex skill adapters over the same Harness docs |
48
-
49
- ---
50
-
51
- ## Why This Exists
52
-
53
- Most AI coding projects fail before anyone writes a line of bad code. The agent jumps straight to implementation, drifts from intent, forgets yesterday's decisions, and bloats its context with the whole repo.
54
-
55
- | Without harness | With harness |
56
- |-----------------|--------------|
57
- | Idea → code. Hope. | Idea → Research → PRD → Architecture → Build → Verify |
58
- | Agent reads everything | Router loads the one doc it needs |
59
- | Subagent gets a vague "fix it" | Context pack: role, boundary, return format |
60
- | Drift invisible until demo | Validator flags missing pieces |
61
- | Long task stalls, context explodes | `/wf` heartbeat + recovery loop |
62
- | Scaffold rots | `/wf-update` or `$wf-update` pulls latest from GitHub |
63
-
64
- ---
65
-
66
- ## How It Works
67
-
68
- ```text
69
- npx create-harness-vibe-coding@latest my-project
70
-
71
- Agent reads Harness/SETUP.md
72
-
73
- Router loads only what the task needs
74
-
75
- PRD → Research → Architecture → first task capsule
76
-
77
- Build → Test → Review → Verify → Feedback
78
-
79
- /wf-update or $wf-update keeps the harness current
80
- ```
81
-
82
- ```mermaid
83
- graph TD
84
- A[ /wf Enter ] --> B[ Explore: 3+ parallel agents ]
85
- B --> C[ Second Plan ]
86
- C --> D[ Build: test → implement ]
87
- D --> E[ Dual-Gate Review ]
88
- E --> F{ Pass? }
89
- F -->| No | G[ Debug → Fix → Loop ]
90
- G --> E
91
- F -->| Yes | H[ Closeout: memory + context ]
92
- H --> I[ /wf-update or $wf-update ]
93
- ```
94
-
95
- ---
96
-
97
- ## Usage
98
-
99
- ### New project
100
-
101
- ```bash
102
- npx create-harness-vibe-coding@latest my-project
103
- cd my-project
104
- # Your agent reads Harness/SETUP.md. Done.
105
- ```
106
-
107
- ### Install or Upgrade Path
108
-
109
- Before writing, the agent must identify which path applies:
110
-
111
- | Project state | Required action |
112
- |---------------|-----------------|
113
- | Empty or new project | Run the scaffold, then follow `Harness/SETUP.md` for 0-1 bootstrap |
114
- | Existing project, no `Harness/` | Scan project facts first, run `--dry-run`, preserve existing files, merge only missing Harness guidance |
115
- | Legacy architecture or older project docs | Treat existing code/docs as source of truth, dry-run first, then use `Harness/SETUP.md` to fill facts from observed project reality |
116
- | Existing `Harness/` | Do not use `npx` as an updater; ask whether to run `/wf-update`, `$wf-update`, `node Harness/scripts/wf-update-check.mjs`, keep untouched, or remove/reinstall after approval |
117
-
118
- Root scan must include top-level files, `CLAUDE.md`, `AGENTS.md`, `.claude/`, `.agents/`, `.codex/`, `Harness/`, package files, CI files, app entry points, test/build commands, existing docs, and already-installed skills/plugins/rules. Use that scan before recommending optional capabilities so you do not suggest duplicates.
119
-
120
- ### Existing project — safe merge
1
+ <p align="center">
2
+ <img src="https://img.shields.io/npm/v/create-harness-vibe-coding?color=blue" alt="npm version">
3
+ <img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen" alt="Node.js >= 18">
4
+ <img src="https://img.shields.io/npm/l/create-harness-vibe-coding" alt="MIT license">
5
+ <img src="https://img.shields.io/github/stars/zingspark/create-harness-vibe-coding?style=social" alt="GitHub stars">
6
+ </p>
121
7
 
122
- ```bash
123
- # Machine-readable preview first. Always.
124
- npx create-harness-vibe-coding@latest my-app . -y --dry-run --json
8
+ <p align="center">
9
+ <img src="docs/images/harness-icon.png" alt="Harness icon" width="112">
10
+ </p>
125
11
 
126
- # Add only what's missing. Never overwrite.
127
- npx create-harness-vibe-coding@latest my-app . -y --on-conflict skip --json
12
+ <h1 align="center">create-harness-vibe-coding</h1>
13
+ <p align="center">
14
+ <b>An operating contract for reliable AI coding agents.</b><br>
15
+ <sub>Goals. Context. Loops. Evidence.</sub>
16
+ </p>
128
17
 
129
- # Install-complete structural gate.
130
- node Harness/scripts/validate-harness.mjs
18
+ <p align="center">
19
+ <a href="README-CN.md">Chinese</a> ·
20
+ <a href="https://github.com/zingspark/create-harness-vibe-coding">GitHub</a> ·
21
+ <a href="https://www.npmjs.com/package/create-harness-vibe-coding">npm</a>
22
+ </p>
23
+
24
+ `create-harness-vibe-coding` is a Node.js CLI that scaffolds a repo-local harness for AI-assisted software development: research, PRD, architecture, task decomposition, implementation, testing, review, recovery, and durable memory.
25
+
26
+ It is not a prompt pack and it does not generate business code. It gives Claude Code, Codex, and compatible agents a shared operating system for long-running work.
27
+
28
+ ## The short version
29
+
30
+ Without a framework:
31
+
32
+ ```text
33
+ Idea → prompt → patch → demo → rediscover context → repair drift
131
34
  ```
132
35
 
133
- The JSON output is the agent's install report: `scan` replaces hand-written root probes, `plan.create` is script-owned, and `agent.aiMergeRequired` is the only list that needs semantic AI review. Do not read package source or templates unless `agent.aiMergeRequired` names a conflicting file.
134
-
135
- For existing projects, a passing non-strict validator is the install-complete gate. `--strict` is the bootstrap/release gate and may fail until PRD, research, and architecture placeholders have been resolved from real project facts.
136
-
137
- `npx` is an install and safe-merge entry, not an update engine for an already installed Harness. Once `Harness/` exists, use `/wf-update` in Claude Code, `$wf-update` in Codex, or `node Harness/scripts/wf-update-check.mjs`; root entry conflicts such as `CLAUDE.md`, `AGENTS.md`, `.claude/`, `.agents/`, `.codex/`, and local Harness docs need agent-mediated merge decisions.
138
-
139
- | Flag | Does |
140
- |------|------|
141
- | `-y` | Skip prompts |
142
- | `--dry-run` | Preview — no writes |
143
- | `--on-conflict skip` | Keep your files, add only new ones |
144
- | `--on-conflict backup` | Rename existing → write new |
145
- | `--on-conflict overwrite` | Replace (destructive) |
146
- | `--list-options` | Show optional workflows |
147
- | `--with <ids>` | Add workflow by id |
148
- | `--recommend <ids>` | Record recommendation-only external capabilities |
149
- | `--preset <name>` | Add `web-app` or `fullstack` preset |
150
-
151
- Without `-y`, interactive mode offers checkbox selection for optional workflows and external recommendations.
152
-
153
- ### Optional workflows
154
-
155
- ```bash
156
- npx create-harness-vibe-coding@latest my-app -y --with browser-e2e
157
- npx create-harness-vibe-coding@latest my-app -y --preset web-app
158
- npx create-harness-vibe-coding@latest my-app -y --recommend superpowers,codegraph
36
+ With Harness:
37
+
38
+ ```text
39
+ Idea → Research → PRD → Architecture → Acceptance Criteria
40
+ Build Test Review Verify Learn Update
159
41
  ```
160
-
161
- | Workflow | For |
162
- |----------|-----|
163
- | `browser-e2e` | Screenshots, traces, smoke tests |
164
- | `ui-ux-review` | Responsive, a11y, polish |
165
- | `ts-react-frontend` | TypeScript + React + Vite |
166
- | `python-backend` | FastAPI, pytest |
167
- | `github-pr-review` | PR diff review + CI evidence |
168
42
 
169
- External recommendations are recorded in `Harness/SETUP.md` but not installed automatically:
43
+ ## One-line install (recommended for existing repos)
170
44
 
171
- | Recommendation | For | Source |
172
- |----------------|-----|--------|
173
- | `superpowers` | Community skill registry and agent workflows | <https://github.com/obra/Superpowers> |
174
- | `caveman` | Terse, low-token agent behavior and memory compression | <https://github.com/JuliusBrussee/caveman> |
175
- | `agent-research` | Research-agent skills for literature, product, dependency, and ecosystem investigation | <https://github.com/lingzhi227/agent-research-skills> |
176
- | `codegraph` | Code graph or repository-map tooling | <https://github.com/colbymchenry/codegraph> |
45
+ Paste this into your agent:
177
46
 
178
- These are links for the user's agent to evaluate. The scaffold does not maintain third-party install steps; it only records selected recommendations after checking what is already installed.
47
+ > Please install the Harness framework by following https://github.com/zingspark/create-harness-vibe-coding/blob/main/README.md.
179
48
 
180
- ### Agent-link intake
49
+ ## Installation instructions (Agent instruction)
181
50
 
182
- When your agent reads the one-sentence prompt above, it should get the machine-readable install report before asking broad questions:
51
+ After reading this README, the agent selects the path that matches the project:
183
52
 
184
- ```bash
185
- npx create-harness-vibe-coding@latest my-app . -y --dry-run --json
53
+ | Project state | Agent action |
54
+ |---|---|
55
+ | New project | `npx create-harness-vibe-coding@latest my-project -y` |
56
+ | Existing project | `npx create-harness-vibe-coding@latest my-project . -y --on-conflict skip --json` |
57
+ | Existing `Harness/` with `Harness/scripts/wf-update-check.mjs` | `node Harness/scripts/wf-update-check.mjs --json`; update, do not reinstall |
58
+ | Existing `Harness/` but missing `Harness/scripts/wf-update-check.mjs` | `npx create-harness-vibe-coding@latest my-project . -y --on-conflict skip --json`. Then run `node Harness/scripts/wf-update-check.mjs --json` |
59
+ | After install or update | `node Harness/scripts/validate-harness.mjs --strict` |
60
+
61
+ After installation, read `CLAUDE.md`, `AGENTS.md`, `Harness/SETUP.md`, and `Harness/README.md`; preserve project boundaries; research and plan before editing; run tests, validation, and review before claiming completion.
62
+
63
+ The user does not need to run commands manually. The agent handles installation, conflict handling, validation, and the handoff.
64
+
65
+ ## Which WF command should you use?
66
+
67
+ When in doubt, use `/wf-help`. It returns the full command table. Use `/wf` for complex work and `/wf-max` when the work can be safely parallelized.
68
+
69
+ | Command | Use it when | What it does | Example |
70
+ |---|---|---|---|
71
+ | `/wf <task>` | Multi-file, architectural, risky, migration, or repeatedly failing work | Research → plan → implement → test → review → verify → reflect | `/wf refactor the payment module and add tests` |
72
+ | `/wf-max <task>` | The task splits into independent work and needs maximum parallelism | Adds CEO → Manager → Worker roles and parallel waves to the full WF chain | `/wf-max upgrade frontend, backend, and docs in parallel` |
73
+ | `/wf-auto` | You want continuous self-directed optimization with adaptive probe selection | Runs repeated optimization cycles with plans, evidence, and feedback | `/wf-auto improve this project's stability` |
74
+ | `/wf-auto-spark` | You need external inspiration, competitive direction, or a long-term roadmap | Searches for sparks, anchors work to a North Star and milestones, and guards scope drift | `/wf-auto-spark explore product growth directions` |
75
+ | `/wf-review [focus]` | You need a second opinion, cross-model review, or a pre-release check | Runs an independent review and classifies findings by severity | `/wf-review focus on security and data loss` |
76
+ | `/wf-learn` | The same mistakes keep recurring or a completed task needs to become reusable knowledge | Consolidates context, memory, and project lessons | `/wf-learn summarize why this task needed rework` |
77
+ | `/wf-browser <task>` | Browser smoke tests, E2E, screenshots, forms, or UI verification | Uses a real browser and returns screenshots, traces, and evidence | `/wf-browser verify login and checkout` |
78
+ | `/wf-readme <task>` | README, install docs, architecture diagrams, or project docs need work | Preserves facts while improving structure, setup, and usage guidance | `/wf-readme improve the Chinese README` |
79
+ | `/wf-update` | Harness is already installed and needs an update | Compares versions, applies safe changes, and leaves semantic conflicts to the agent | `/wf-update` |
80
+ | `/wf-remove` | You need to uninstall Harness | Removes safe files, preserves user data, and asks before touching conflicts | `/wf-remove` |
81
+ | `/wf-help` | You do not know which command to use | Returns command usage without starting a workflow | `/wf-help` |
82
+
83
+ Claude Code uses `/wf-*`; Codex uses the matching `$wf-*`; OpenCode uses the registered command or Agent instruction. `/wf-auto` and `/wf-auto-spark` are continuous modes, so give the agent a clear goal, scope, and acceptance criteria before starting.
84
+
85
+ Common starting points: Web/API work starts with correctness, security, reliability, and verification; CLI/SDK work starts with contracts, compatibility, error UX, and docs; AI-agent work starts with context quality, tool safety, evaluation, and recovery; data jobs start with idempotency, failure recovery, and observability. See the full [WF-AUTO-ANGLES.md](Harness/WF-AUTO-ANGLES.md) selection protocol.
86
+
87
+ Chinese README: [README-CN.md](README-CN.md)
88
+
89
+ ## Why this matters: the measurable difference
90
+
91
+ Better prompts can improve one turn. A harness improves the conditions around every turn: what the agent may read, what it may change, how success is checked, and how the next session recovers.
92
+
93
+ | Dimension | Prompt-only / no Harness | With Harness | What to measure |
94
+ |---|---|---|---|
95
+ | Verified completion | “It looks finished” after a demo | Acceptance criteria, tests, validators, and review are part of the task boundary | Verified completion rate |
96
+ | Stability and safety | File ownership and conflict handling are ad hoc | Script-first plans classify create/skip/backup/overwrite/conflict before writes | Safety incidents and unauthorized overwrites |
97
+ | Rework rate | Drift is discovered late, so correction work is hidden in follow-up prompts | Task capsules, explicit boundaries, and closed-loop verification expose and reduce avoidable rework | `follow-up corrective runs ÷ completed tasks` |
98
+ | Human correction | People repeatedly restate context and rescue the agent | Humans focus on semantic conflicts and decisions; deterministic work stays in scripts | `humanInterventions` per task |
99
+ | Recovery after interruption | Rediscover the repository and decisions from scratch | `Harness/PROGRESS.md`, task capsules, and durable memory preserve the handoff | Recovery time and duplicated discovery |
100
+ | Cost | Lower setup cost, unpredictable downstream cost | More upfront structure, with token/time overhead recorded against the baseline | Duration, tokens, and cost overhead |
101
+
102
+ The honest status: this repository defines the comparison protocol, but it does not publish fabricated “50% fewer bugs” numbers. Run the same model, repo, prompt, budget, and verification in three modes—`bare-agent`, `harness-wf`, and `harness-wf-max`—before making a quantitative claim. See the [HarnessBench v0.1 scoring design](Harness/tasks/task-framework-metrics-and-entry-contract/PLAN.md#5-metrics-and-scoring).
103
+
104
+ ## Three human motivations, used ethically
105
+
106
+ README structure should meet people where decisions actually happen. Harness uses the three motivations below to make the trade-off explicit—not to manufacture urgency or hide uncertainty.
107
+
108
+ | Motivation | The reader is thinking | Harness answers with |
109
+ |---|---|---|
110
+ | **Loss aversion** | “I cannot afford lost files, silent drift, or another repair cycle.” | Safe-merge conflict policies, scoped write sets, validators, and review evidence |
111
+ | **Leverage** | “I want the same agent to finish more work with less repeated explanation.” | Router-based context loading, task capsules, parallel role dispatch, and durable memory |
112
+ | **Blind spot** | “A better prompt should be enough.” | A visible process: goal → constraints → tests → feedback, plus a benchmarkable baseline |
113
+
114
+ ## Architecture
115
+
116
+ <p align="center">
117
+ <a href="docs/images/harness-architecture-light.png">
118
+ <img src="docs/images/harness-architecture-light.png" alt="Light architecture diagram showing a developer request flowing through Goals and Constraints, Quality Context, and Decomposition and Feedback into an Execute, Verify, Learn, Update loop" width="100%">
119
+ </a>
120
+ <br>
121
+ <sub>
122
+ Light infographic · <a href="docs/images/harness-architecture.drawio">editable Drawio source</a>
123
+ </sub>
124
+ </p>
125
+
126
+ The architecture has three pillars:
127
+
128
+ 1. **Goals & Constraints** — PRD → research → architecture → acceptance criteria.
129
+ 2. **Quality Context** — a router, context-loading protocol, and durable memory keep attention on the right evidence.
130
+ 3. **Decomposition & Feedback** — `/wf` and `/wf-max` assign bounded work, then review, verify, learn, and update the next task.
131
+
132
+ ## What gets scaffolded
133
+
134
+ | Layer | Purpose |
135
+ |---|---|
136
+ | `CLAUDE.md`, `AGENTS.md` | Agent entry contract and registry |
137
+ | `Harness/README.md`, `Harness/MEMORY.md` | Task-based routing and resource index |
138
+ | `Harness/tasks/`, `Harness/PROGRESS.md` | Resumable task state across sessions |
139
+ | `.claude/`, `.agents/`, `.codex/`, `.opencode/` | Tool-specific discovery and configuration |
140
+ | `templates/common/`, `templates/optional/` | Declarative scaffold source and optional workflows |
141
+ | `Harness/scripts/validate-harness.mjs` | Structural and strict readiness checks |
142
+
143
+ The generated project starts with no business stack or generated application code. You choose the stack after bootstrap.
144
+
145
+ ## Existing project: safe merge first
146
+
147
+ Paste this to your agent:
148
+
149
+ ```text
150
+ Read and follow https://github.com/zingspark/create-harness-vibe-coding exactly to configure this project with create-harness-vibe-coding.
186
151
  ```
187
152
 
188
- Use `scan.markers` instead of manual top-level probes. Ask **at most 3 blocking questions** before touching files. Files in `plan.create` are handled by the script; only files in `agent.aiMergeRequired` need AI comparison and user-supervised merge decisions.
153
+ The agent-first path previews the target before writing and preserves project-owned files. If you need the detailed CLI contract, the agent can read `Harness/SETUP.md` after setup.
154
+
155
+ If `Harness/` already exists, first check whether `Harness/scripts/wf-update-check.mjs` exists. If it does, use `/wf-update`, `$wf-update`, or `node Harness/scripts/wf-update-check.mjs --json` instead of reinstalling blindly. If it is missing, run the safe CLI recovery command from the installation table first, then run the updater.
156
+
157
+ ## Optional workflows
189
158
 
190
- Fast path for an existing project with no installed `Harness/`:
159
+ Ask your agent to add the capability you need:
191
160
 
192
- 1. Run the dry-run JSON command.
193
- 2. Run the JSON `agent.safeMergeCommand` to create only missing files.
194
- 3. Patch only files listed in `agent.aiMergeRequired`; preserve project-owned content.
195
- 4. Run `node Harness/scripts/validate-harness.mjs`.
196
- 5. Stop and report install status. Defer `--strict` until bootstrap fills project-fact placeholders.
161
+ > Add `browser-e2e` and `ui-ux-review` to this Harness project, preserve existing files, run the strict validator, and report exactly what changed.
197
162
 
198
- Ask these only when they affect writes:
163
+ | Workflow | Use it for |
164
+ |---|---|
165
+ | `browser-e2e` | Screenshots, traces, and smoke tests |
166
+ | `ui-ux-review` | Responsive, accessibility, and polish review |
167
+ | `ts-react-frontend` | TypeScript, React, and Vite projects |
168
+ | `python-backend` | FastAPI and pytest projects |
169
+ | `github-pr-review` | PR diff review and CI evidence |
199
170
 
200
- - If `CLAUDE.md` or `AGENTS.md` already exists, should missing Harness guidance be merged, kept separate, or skipped?
201
- - If `Harness/` already exists, should the agent run update/dry-run, merge missing files, keep it untouched, or remove/reinstall after approval?
202
- - Which optional capabilities should be enabled, after excluding capabilities already installed: local workflows (`browser-e2e`, `ui-ux-review`, `ts-react-frontend`, `python-backend`, `github-pr-review`) and recommendation-only external links (`Superpowers`, `Caveman`, `agent research`, `code graph`)?
171
+ External recommendations are recorded in `Harness/SETUP.md`; they are not auto-installed.
203
172
 
204
- Harness docs always live in root `Harness/`; do not route Harness files through `docs/`. If a file already exists, the agent asks first. The default is always **preserve**.
205
-
206
- ### After scaffolding
207
-
208
- ```text
209
- "Read Harness/SETUP.md. Bootstrap this project."
210
- "Use /wf for this migration." # Claude Code
211
- "Use $wf for this migration." # Codex
212
- "/wf-update" or "$wf-update" # pull latest harness improvements
213
- ```
214
-
215
- ### Verify
173
+ | Recommendation | Use it for | Source |
174
+ |---|---|---|
175
+ | `superpowers` | Community agent skills and coding workflows | [Superpowers](https://github.com/obra/Superpowers) |
176
+ | `caveman` | Terse, low-token agent behavior | [Caveman](https://github.com/JuliusBrussee/caveman) |
177
+ | `agent-research` | Literature, product, dependency, and ecosystem research | [agent-research-skills](https://github.com/lingzhi227/agent-research-skills) |
178
+ | `codegraph` | Repository graph and architecture mapping | [CodeGraph](https://github.com/colbymchenry/codegraph) |
179
+ | `grill-me` | Relentless plan/design interview before implementation | [Grill Me](https://github.com/mattpocock/skills/tree/main/skills/productivity/grill-me) |
180
+
181
+ ## Verify
216
182
 
217
183
  ```bash
218
- # In this package repo
184
+ # This package repository
219
185
  npm test
220
186
 
221
- # In an existing project immediately after safe-merge install
187
+ # Generated project after safe merge
222
188
  node Harness/scripts/validate-harness.mjs
223
189
 
224
- # In a generated project after bootstrap, or before release
190
+ # Generated project after bootstrap or before release
225
191
  node Harness/scripts/validate-harness.mjs --strict
226
192
  ```
227
-
228
- ---
229
-
230
- ## Inside
231
-
232
- ```
233
- my-project/
234
- ├── CLAUDE.md ← Agent entry
235
- ├── AGENTS.md ← Agent registry
236
- ├── .gitignore
237
- ├── Harness/
238
- │ ├── README.md ← Doc router
239
- │ ├── SETUP.md ← Bootstrap guide (delete after init)
240
- │ ├── MEMORY.md ← Resource index
241
- │ ├── PROGRESS.md ← Task tracker
242
- │ ├── WF.md / WF-MAX.md ← Workflow modes
243
- │ ├── tasks/ ← Per-task capsules
244
- │ ├── research/ ← PRD + research templates
245
- │ ├── memory/ ← Durable self-learning
246
- │ └── scripts/ ← Validator
247
- ├── .claude/
248
- │ ├── agents/ ← 16 built-in agents
249
- │ ├── skills/ ← Claude Code skill commands
250
- │ └── rules/ ← Universal coding rules
251
- ├── .agents/
252
- │ └── skills/ ← Codex repo skills
253
- ├── .codex/ ← Codex config
254
- └── tests/
255
- ```
256
193
 
257
- `Harness/` holds all harness docs. Tool-discovery folders stay at root: `.claude/` for Claude Code, `.agents/skills/` for Codex repo skills, and `.codex/` for Codex config. Runtime hooks are absent by default; only `/wf-auto` may opt into a bounded tick hook.
258
-
259
- ---
260
-
261
- ## Footprint
262
-
263
- | | |
264
- |---|---|
265
- | Runtime | None |
266
- | Dependencies | 2 (`@clack/prompts`, `picocolors`) |
267
- | Node | ≥ 18 |
268
- | Generated code | None until you pick a stack |
269
-
270
- ---
271
-
272
- MIT © [zingspark](https://github.com/zingspark)
194
+ ## Footprint
195
+
196
+ | | |
197
+ |---|---|
198
+ | Runtime | None |
199
+ | Dependencies | 2 (`@clack/prompts`, `picocolors`) |
200
+ | Node.js | ≥ 18 |
201
+ | Generated application code | None until you choose a stack |
202
+
203
+ ## Keywords and related concepts
204
+
205
+ AI coding agent framework · agentic workflow · context engineering · long-running coding tasks · task orchestration · durable memory · safe merge · conflict handling · acceptance criteria · Claude Code · Codex · OpenCode · Node.js CLI · developer productivity
206
+
207
+ MIT © [zingspark](https://github.com/zingspark)
@@ -1,2 +1,2 @@
1
- #!/usr/bin/env node
2
- import('../src/index.js');
1
+ #!/usr/bin/env node
2
+ import('../src/index.js');
@@ -0,0 +1,164 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <mxfile host="draw.io" version="26.0.0">
3
+ <diagram name="Harness Architecture" id="h-arch">
4
+ <mxGraphModel dx="1300" dy="960" grid="1" gridSize="10" guides="1" tooltips="1"
5
+ connect="1" arrows="1" fold="1" page="1" pageScale="1"
6
+ pageWidth="1300" pageHeight="960">
7
+ <root>
8
+ <mxCell id="0" />
9
+ <mxCell id="1" parent="0" />
10
+ <mxCell id="2" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8f9fc;strokeColor=none;" vertex="1" parent="0" >
11
+ <mxGeometry x="0" y="0" width="1300" height="960" as="geometry" />
12
+ </mxCell>
13
+ <mxCell id="3" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#4f46e5;strokeColor=none;" vertex="1" parent="1" >
14
+ <mxGeometry x="0" y="0" width="1300" height="4" as="geometry" />
15
+ </mxCell>
16
+ <mxCell id="4" value="&lt;b&gt;Harness&lt;/b&gt; — The Agent Success Infrastructure" style="text;html=1;align=center;verticalAlign=middle;fontSize=22;fontStyle=1;fontColor=#1e1b4b;" vertex="1" parent="1" >
17
+ <mxGeometry x="200" y="18" width="900" height="38" as="geometry" />
18
+ </mxCell>
19
+ <mxCell id="5" value="Clear goals · Quality information · Closed-loop feedback = Agent success" style="text;html=1;align=center;verticalAlign=middle;fontSize=13;fontStyle=0;fontColor=#6b7280;" vertex="1" parent="1" >
20
+ <mxGeometry x="250" y="56" width="800" height="24" as="geometry" />
21
+ </mxCell>
22
+ <mxCell id="6" value="▾ Three Pillars ▾" style="text;html=1;align=center;verticalAlign=middle;fontSize=13;fontStyle=1;fontColor=#374151;" vertex="1" parent="1" >
23
+ <mxGeometry x="450" y="92" width="400" height="24" as="geometry" />
24
+ </mxCell>
25
+ <mxCell id="10" value="I. Goal &amp;amp; Constraints" style="swimlane;startSize=38;fillColor=#eef2ff;strokeColor=#6366f1;fontSize=14;fontStyle=1;whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
26
+ <mxGeometry x="40" y="130" width="390" height="440" as="geometry" />
27
+ </mxCell>
28
+ <mxCell id="11" value="&quot;Here's the goal, constraints, tests —&amp;#xa;now iterate until correct.&quot;&amp;#xa;— Andrej Karpathy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#818cf8;fontSize=9;fontStyle=2;fontColor=#6b7280;verticalAlign=middle;align=center;" vertex="1" parent="10">
29
+ <mxGeometry x="15" y="48" width="360" height="42" as="geometry" />
30
+ </mxCell>
31
+ <mxCell id="12" value="PRD → Research → Architecture workflow" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0e7ff;strokeColor=#818cf8;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="10">
32
+ <mxGeometry x="15" y="105" width="360" height="52" as="geometry" />
33
+ </mxCell>
34
+ <mxCell id="13" value="Task capsules — big goals into bounded units" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0e7ff;strokeColor=#818cf8;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="10">
35
+ <mxGeometry x="15" y="170" width="360" height="52" as="geometry" />
36
+ </mxCell>
37
+ <mxCell id="14" value="16 role-bound agents — explicit writeSet each" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0e7ff;strokeColor=#818cf8;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="10">
38
+ <mxGeometry x="15" y="235" width="360" height="52" as="geometry" />
39
+ </mxCell>
40
+ <mxCell id="15" value="Acceptance criteria — quantifiable boundaries" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0e7ff;strokeColor=#818cf8;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="10">
41
+ <mxGeometry x="15" y="300" width="360" height="52" as="geometry" />
42
+ </mxCell>
43
+ <mxCell id="16" value="/wf-max: CEO → Manager → Worker dispatch" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e0e7ff;strokeColor=#818cf8;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="10">
44
+ <mxGeometry x="15" y="365" width="360" height="52" as="geometry" />
45
+ </mxCell>
46
+ <mxCell id="20" value="II. Context &amp;amp; Information" style="swimlane;startSize=38;fillColor=#ecfdf5;strokeColor=#10b981;fontSize=14;fontStyle=1;whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
47
+ <mxGeometry x="450" y="130" width="390" height="440" as="geometry" />
48
+ </mxCell>
49
+ <mxCell id="21" value="&quot;Context engineering — the art of providing&amp;#xa;all the context for the task.&quot;&amp;#xa;— Andrej Karpathy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#34d399;fontSize=9;fontStyle=2;fontColor=#6b7280;verticalAlign=middle;align=center;" vertex="1" parent="20">
50
+ <mxGeometry x="15" y="48" width="360" height="42" as="geometry" />
51
+ </mxCell>
52
+ <mxCell id="22" value="Router — loads only what the task needs" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d1fae5;strokeColor=#34d399;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="20">
53
+ <mxGeometry x="15" y="105" width="360" height="52" as="geometry" />
54
+ </mxCell>
55
+ <mxCell id="23" value="Context-loading protocol — docs tailored per role" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d1fae5;strokeColor=#34d399;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="20">
56
+ <mxGeometry x="15" y="170" width="360" height="52" as="geometry" />
57
+ </mxCell>
58
+ <mxCell id="24" value="Memory Master — durable cross-session learning" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d1fae5;strokeColor=#34d399;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="20">
59
+ <mxGeometry x="15" y="235" width="360" height="52" as="geometry" />
60
+ </mxCell>
61
+ <mxCell id="25" value="Context Master — compress when context fills" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d1fae5;strokeColor=#34d399;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="20">
62
+ <mxGeometry x="15" y="300" width="360" height="52" as="geometry" />
63
+ </mxCell>
64
+ <mxCell id="26" value="16 agents load only their slice — on-demand" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d1fae5;strokeColor=#34d399;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="20">
65
+ <mxGeometry x="15" y="365" width="360" height="52" as="geometry" />
66
+ </mxCell>
67
+ <mxCell id="30" value="III. Decomposition &amp;amp; Feedback" style="swimlane;startSize=38;fillColor=#fffbeb;strokeColor=#f59e0b;fontSize=14;fontStyle=1;whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
68
+ <mxGeometry x="860" y="130" width="390" height="440" as="geometry" />
69
+ </mxCell>
70
+ <mxCell id="31" value="&quot;You should be designing loops&amp;#xa;that prompt your agents.&quot;&amp;#xa;— Peter Steinberger" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#fbbf24;fontSize=9;fontStyle=2;fontColor=#6b7280;verticalAlign=middle;align=center;" vertex="1" parent="30">
71
+ <mxGeometry x="15" y="48" width="360" height="42" as="geometry" />
72
+ </mxCell>
73
+ <mxCell id="32" value="/wf heartbeat + recovery — never lost mid-task" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef3c7;strokeColor=#fbbf24;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="30">
74
+ <mxGeometry x="15" y="105" width="360" height="52" as="geometry" />
75
+ </mxCell>
76
+ <mxCell id="33" value="/wf-max parallel — CEO/Manager/Worker" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef3c7;strokeColor=#fbbf24;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="30">
77
+ <mxGeometry x="15" y="170" width="360" height="52" as="geometry" />
78
+ </mxCell>
79
+ <mxCell id="34" value="/wf-auto — perpetual adaptive optimization" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef3c7;strokeColor=#fbbf24;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="30">
80
+ <mxGeometry x="15" y="235" width="360" height="52" as="geometry" />
81
+ </mxCell>
82
+ <mxCell id="35" value="verify gate — AC-linked evidence before accept" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef3c7;strokeColor=#fbbf24;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="30">
83
+ <mxGeometry x="15" y="300" width="360" height="52" as="geometry" />
84
+ </mxCell>
85
+ <mxCell id="36" value="/wf-update — scaffold refresh from upstream" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fef3c7;strokeColor=#fbbf24;fontSize=11;verticalAlign=middle;align=center;" vertex="1" parent="30">
86
+ <mxGeometry x="15" y="365" width="360" height="52" as="geometry" />
87
+ </mxCell>
88
+ <mxCell id="40" value="▾ Execution Cycle ▾" style="text;html=1;align=center;verticalAlign=middle;fontSize=13;fontStyle=1;fontColor=#374151;" vertex="1" parent="1" >
89
+ <mxGeometry x="450" y="588" width="400" height="24" as="geometry" />
90
+ </mxCell>
91
+ <mxCell id="50" value="Execute" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef2ff;strokeColor=#6366f1;fontSize=14;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1" >
92
+ <mxGeometry x="68" y="625" width="220" height="72" as="geometry" />
93
+ </mxCell>
94
+ <mxCell id="51" value="Verify" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fffbeb;strokeColor=#f59e0b;fontSize=14;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1" >
95
+ <mxGeometry x="356" y="625" width="220" height="72" as="geometry" />
96
+ </mxCell>
97
+ <mxCell id="52" value="Learn" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ecfdf5;strokeColor=#10b981;fontSize=14;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1" >
98
+ <mxGeometry x="644" y="625" width="220" height="72" as="geometry" />
99
+ </mxCell>
100
+ <mxCell id="53" value="Update" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f3ff;strokeColor=#8b5cf6;fontSize=14;fontStyle=1;verticalAlign=middle;align=center;" vertex="1" parent="1" >
101
+ <mxGeometry x="932" y="625" width="220" height="72" as="geometry" />
102
+ </mxCell>
103
+ <mxCell id="74" value="feedback loop · /wf-update" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontStyle=0;fontColor=#8b5cf6;" vertex="1" parent="1" >
104
+ <mxGeometry x="860" y="609" width="200" height="18" as="geometry" />
105
+ </mxCell>
106
+ <mxCell id="80" value="One command. Zero drift. Agent success, life success." style="text;html=1;align=center;verticalAlign=middle;fontSize=12;fontStyle=0;fontColor=#374151;" vertex="1" parent="1" >
107
+ <mxGeometry x="350" y="880" width="600" height="24" as="geometry" />
108
+ </mxCell>
109
+ <mxCell id="81" value="MIT © zingspark · github.com/zingspark/create-harness-vibe-coding" style="text;html=1;align=center;verticalAlign=middle;fontSize=10;fontStyle=0;fontColor=#9ca3af;" vertex="1" parent="1" >
110
+ <mxGeometry x="400" y="910" width="500" height="18" as="geometry" />
111
+ </mxCell>
112
+ <mxCell id="82" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#4f46e5;strokeColor=none;opacity=30;" vertex="1" parent="1" >
113
+ <mxGeometry x="40" y="870" width="1220" height="2" as="geometry" />
114
+ </mxCell>
115
+ <mxCell id="60" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=1.5;" edge="1" parent="1" source="10" target="50">
116
+ <mxGeometry relative="1" as="geometry">
117
+ <Array as="points">
118
+ <mxPoint x="235" y="595" />
119
+ <mxPoint x="178" y="595" />
120
+ </Array>
121
+ </mxGeometry>
122
+ </mxCell>
123
+ <mxCell id="61" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=1.5;" edge="1" parent="1" source="20" target="51">
124
+ <mxGeometry relative="1" as="geometry">
125
+ <Array as="points">
126
+ <mxPoint x="645" y="595" />
127
+ <mxPoint x="466" y="595" />
128
+ </Array>
129
+ </mxGeometry>
130
+ </mxCell>
131
+ <mxCell id="62" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=1.5;" edge="1" parent="1" source="30" target="52">
132
+ <mxGeometry relative="1" as="geometry">
133
+ <Array as="points">
134
+ <mxPoint x="1055" y="595" />
135
+ <mxPoint x="754" y="595" />
136
+ </Array>
137
+ </mxGeometry>
138
+ </mxCell>
139
+ <mxCell id="70" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=1.5;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="50" target="51">
140
+ <mxGeometry relative="1" as="geometry">
141
+ </mxGeometry>
142
+ </mxCell>
143
+ <mxCell id="71" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=1.5;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="51" target="52">
144
+ <mxGeometry relative="1" as="geometry">
145
+ </mxGeometry>
146
+ </mxCell>
147
+ <mxCell id="72" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=1.5;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="52" target="53">
148
+ <mxGeometry relative="1" as="geometry">
149
+ </mxGeometry>
150
+ </mxCell>
151
+ <mxCell id="73" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=1.5;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="53" target="10">
152
+ <mxGeometry relative="1" as="geometry">
153
+ <Array as="points">
154
+ <mxPoint x="1042" y="605" />
155
+ <mxPoint x="45" y="605" />
156
+ <mxPoint x="45" y="85" />
157
+ <mxPoint x="235" y="85" />
158
+ </Array>
159
+ </mxGeometry>
160
+ </mxCell>
161
+ </root>
162
+ </mxGraphModel>
163
+ </diagram>
164
+ </mxfile>