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.
- package/README-CN.md +163 -105
- package/README.md +179 -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/docs/images/harness-icon.png +0 -0
- package/package.json +47 -44
- package/src/generator.js +41 -5
- package/src/index.js +86 -13
- package/src/prompts.js +37 -37
- package/templates/common/.claude/agents/architect-manager.md +45 -45
- package/templates/common/.claude/agents/architect.md +31 -31
- package/templates/common/.claude/agents/codebase-explorer.md +45 -0
- package/templates/common/.claude/agents/context-master.md +75 -75
- package/templates/common/.claude/agents/debugger.md +41 -41
- package/templates/common/.claude/agents/docs-researcher.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 +82 -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/reviewer.md +34 -34
- package/templates/common/.claude/agents/task-scribe.md +70 -0
- package/templates/common/.claude/agents/verifier.md +29 -29
- package/templates/common/.claude/commands/wf-help.md +9 -5
- package/templates/common/.claude/commands/wf-update.md +24 -0
- package/templates/common/.claude/rules/ecc/common.md +57 -44
- package/templates/common/.claude/settings.json +13 -0
- package/templates/common/.claude/skills/subagent-orchestrator/SKILL.md +8 -4
- package/templates/common/.claude/skills/wf/SKILL.md +15 -8
- package/templates/common/.claude/skills/wf-auto/SKILL.md +10 -7
- package/templates/common/.claude/skills/wf-learn/SKILL.md +9 -2
- package/templates/common/.claude/skills/wf-max/SKILL.md +23 -5
- 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/.claude/skills/wf-update/SKILL.md +15 -2
- package/templates/common/.codex/hooks.json +17 -0
- package/templates/common/.harness-version +130 -45
- package/templates/common/.opencode/agents/architect-manager.md +52 -0
- package/templates/common/.opencode/agents/architect.md +35 -0
- package/templates/common/.opencode/agents/codebase-explorer.md +45 -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 +88 -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/task-scribe.md +70 -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-auto-spark.md +15 -0
- package/templates/common/.opencode/commands/wf-auto.md +15 -0
- package/templates/common/.opencode/commands/wf-help.md +27 -0
- package/templates/common/.opencode/commands/wf-learn.md +15 -0
- package/templates/common/.opencode/commands/wf-max.md +15 -0
- package/templates/common/.opencode/commands/wf-readme.md +15 -0
- package/templates/common/.opencode/commands/wf-remove.md +15 -0
- package/templates/common/.opencode/commands/wf-review.md +15 -0
- package/templates/common/.opencode/commands/wf-update.md +24 -0
- package/templates/common/.opencode/commands/wf.md +15 -0
- package/templates/common/.opencode/plugins/harness-wf-status.mjs +135 -0
- package/templates/common/AGENTS.md +2 -29
- package/templates/common/CLAUDE.md +114 -88
- package/templates/common/Harness/ACCEPTANCE_PROTOCOL.md +2 -2
- package/templates/common/{MEMORY.md → Harness/MEMORY.md} +17 -4
- package/templates/common/Harness/MEMORY_PROTOCOL.md +80 -30
- package/templates/common/Harness/PROGRESS.md +17 -17
- package/templates/common/Harness/README.md +58 -19
- package/templates/common/{SETUP.md → Harness/SETUP.md} +278 -276
- package/templates/common/Harness/TASK_ARCHIVE.md +56 -0
- package/templates/common/Harness/WF-AUTO-ANGLES.md +170 -0
- package/templates/common/Harness/WF-AUTO-SPARK.md +10 -19
- package/templates/common/Harness/WF-AUTO.md +93 -167
- package/templates/common/Harness/WF-KERNEL.md +189 -0
- package/templates/common/Harness/WF-MAX.md +60 -328
- package/templates/common/Harness/WF-STATE.md +83 -0
- package/templates/common/Harness/WF.md +117 -237
- package/templates/common/Harness/agent-workflow.md +2 -2
- package/templates/common/Harness/architecture.md +124 -124
- package/templates/common/Harness/context-loading.md +111 -111
- package/templates/common/Harness/dispatch.md +43 -35
- 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/scripts/archive-tasks.mjs +239 -0
- package/templates/common/{scripts → Harness/scripts}/scan-clean.mjs +443 -416
- package/templates/common/{scripts → Harness/scripts}/validate-harness.mjs +691 -452
- package/templates/common/Harness/scripts/wf-auto-update-prompt.mjs +258 -0
- package/templates/common/{scripts → Harness/scripts}/wf-remove.mjs +56 -39
- package/templates/common/{scripts → Harness/scripts}/wf-update-check.mjs +632 -599
- package/templates/common/Harness/subagents.md +215 -214
- package/templates/common/Harness/tasks/_template/ARTIFACTS.md +2 -2
- package/templates/common/Harness/tasks/_template/NOTES.md +2 -2
- package/templates/common/Harness/tasks/_template/PLAN.md +5 -0
- package/templates/common/Harness/tasks/_template/STATE.json +23 -0
- package/templates/common/README.md +37 -37
- package/templates/common/memory/agent-lessons-patterns.md +22 -21
- package/templates/common/memory/routes.md +43 -0
- package/templates/common/memory/startup-hints.md +32 -0
- package/templates/common/memory/tool-usage-reflections.md +22 -21
- package/templates/common/memory/user-corrections-preferences.md +23 -21
- package/templates/common/opencode.json +19 -0
- package/templates/optional/catalog.json +49 -33
- package/templates/optional/skills/browser-e2e/.claude/skills/browser-e2e/SKILL.md +42 -42
- package/templates/optional/skills/browser-e2e/.claude/skills/wf-browser/SKILL.md +193 -193
- package/templates/optional/skills/browser-e2e/.opencode/commands/wf-browser.md +15 -0
- package/templates/optional/skills/browser-e2e/Harness/workflows/browser-e2e.md +48 -48
- package/templates/optional/skills/github-pr-review/.claude/skills/github-pr-review/SKILL.md +40 -40
- package/templates/optional/skills/github-pr-review/Harness/workflows/github-pr-review.md +28 -28
- package/templates/optional/skills/python-backend/.claude/skills/python-backend/SKILL.md +40 -40
- package/templates/optional/skills/python-backend/Harness/workflows/python-backend.md +34 -34
- package/templates/optional/skills/ts-react-frontend/.claude/skills/ts-react-frontend/SKILL.md +43 -43
- package/templates/optional/skills/ts-react-frontend/Harness/workflows/ts-react-frontend.md +34 -34
- package/templates/optional/skills/ui-ux-review/.claude/skills/ui-ux-review/SKILL.md +40 -40
- 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="
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
8
|
+
<p align="center">
|
|
9
|
+
<img src="docs/images/harness-icon.png" alt="Harness icon" width="112">
|
|
10
|
+
</p>
|
|
125
11
|
|
|
126
|
-
|
|
127
|
-
|
|
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
|
-
|
|
130
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
43
|
+
## One-line install (recommended for existing repos)
|
|
170
44
|
|
|
171
|
-
|
|
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
|
-
|
|
47
|
+
> Please install the Harness framework by following https://github.com/zingspark/create-harness-vibe-coding/blob/main/README.md.
|
|
179
48
|
|
|
180
|
-
|
|
49
|
+
## Installation instructions (Agent instruction)
|
|
181
50
|
|
|
182
|
-
|
|
51
|
+
After reading this README, the agent selects the path that matches the project:
|
|
183
52
|
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
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
|
-
|
|
159
|
+
Ask your agent to add the capability you need:
|
|
191
160
|
|
|
192
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
#
|
|
184
|
+
# This package repository
|
|
219
185
|
npm test
|
|
220
186
|
|
|
221
|
-
#
|
|
187
|
+
# Generated project after safe merge
|
|
222
188
|
node Harness/scripts/validate-harness.mjs
|
|
223
189
|
|
|
224
|
-
#
|
|
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
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
| | |
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
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');
|
|
Binary file
|
|
@@ -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="<b>Harness</b> — 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; 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=""Here's the goal, constraints, tests —&#xa;now iterate until correct."&#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; 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=""Context engineering — the art of providing&#xa;all the context for the task."&#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; 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=""You should be designing loops&#xa;that prompt your agents."&#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>
|