create-harness-vibe-coding 0.8.17 → 0.8.19
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/CHANGELOG.md +22 -0
- package/README-CN.md +2 -0
- package/README.md +3 -0
- package/package.json +5 -2
- package/src/generator.js +613 -97
- package/src/index.js +556 -309
- package/src/prompts.js +18 -0
- package/src/ui/dist/assets/AgentsRoute-CuSKYmFu.js +17 -0
- package/src/ui/dist/assets/AgentsRoute-CuSKYmFu.js.map +1 -0
- package/src/ui/dist/assets/RolesRoute-DOzTYVRm.js +7 -0
- package/src/ui/dist/assets/RolesRoute-DOzTYVRm.js.map +1 -0
- package/src/ui/dist/assets/SettingsRoute-DPU7jSQm.js +12 -0
- package/src/ui/dist/assets/SettingsRoute-DPU7jSQm.js.map +1 -0
- package/src/ui/dist/assets/TaskList-BN4r8s1i.js +50 -0
- package/src/ui/dist/assets/TaskList-BN4r8s1i.js.map +1 -0
- package/src/ui/dist/assets/TerminalDrawer-6GBZ9nXN.css +32 -0
- package/src/ui/dist/assets/TerminalDrawer-Cej4PxsH.js +74 -0
- package/src/ui/dist/assets/TerminalDrawer-Cej4PxsH.js.map +1 -0
- package/src/ui/dist/assets/WorkflowRoute-BnuhLJ6X.css +1 -0
- package/src/ui/dist/assets/WorkflowRoute-C-clKe-j.js +39 -0
- package/src/ui/dist/assets/WorkflowRoute-C-clKe-j.js.map +1 -0
- package/src/ui/dist/assets/index-BOVYWntB.js +117 -0
- package/src/ui/dist/assets/index-BOVYWntB.js.map +1 -0
- package/src/ui/dist/assets/index-DaUObq0H.css +1 -0
- package/src/ui/dist/assets/maximize-2-LNrr_rKr.js +7 -0
- package/src/ui/dist/assets/maximize-2-LNrr_rKr.js.map +1 -0
- package/src/ui/dist/assets/plus-QuTJyoT3.js +7 -0
- package/src/ui/dist/assets/plus-QuTJyoT3.js.map +1 -0
- package/src/ui/dist/assets/proxy-D0vUbds5.js +2 -0
- package/src/ui/dist/assets/proxy-D0vUbds5.js.map +1 -0
- package/src/ui/dist/assets/refresh-cw-JNmExijd.js +7 -0
- package/src/ui/dist/assets/refresh-cw-JNmExijd.js.map +1 -0
- package/src/ui/dist/assets/terminal-BBQvnOAK.js +7 -0
- package/src/ui/dist/assets/terminal-BBQvnOAK.js.map +1 -0
- package/src/ui/dist/assets/useReducedMotion-BqmH0Tf7.js +7 -0
- package/src/ui/dist/assets/useReducedMotion-BqmH0Tf7.js.map +1 -0
- package/src/ui/dist/assets/x-DoIOGAJz.js +7 -0
- package/src/ui/dist/assets/x-DoIOGAJz.js.map +1 -0
- package/src/ui/dist/index.html +18 -0
- package/src/ui/index.html +17 -0
- package/src/ui/package.json +33 -0
- package/src/ui/pnpm-lock.yaml +1582 -0
- package/src/ui/pnpm-workspace.yaml +2 -0
- package/src/ui/src/App.tsx +86 -0
- package/src/ui/src/api.ts +93 -0
- package/src/ui/src/components/AgentsRoute.tsx +503 -0
- package/src/ui/src/components/Footer.tsx +69 -0
- package/src/ui/src/components/Header.tsx +175 -0
- package/src/ui/src/components/LoadingView.tsx +22 -0
- package/src/ui/src/components/RolesRoute.tsx +169 -0
- package/src/ui/src/components/SettingsRoute.tsx +166 -0
- package/src/ui/src/components/TaskList.tsx +388 -0
- package/src/ui/src/components/TerminalDrawer.tsx +611 -0
- package/src/ui/src/components/WorkflowRoute.tsx +670 -0
- package/src/ui/src/hooks/useReducedMotion.ts +17 -0
- package/src/ui/src/hooks/useServerConnection.ts +114 -0
- package/src/ui/src/index.css +281 -0
- package/src/ui/src/main.tsx +11 -0
- package/src/ui/src/types.ts +108 -0
- package/src/ui/tsconfig.json +21 -0
- package/src/ui/vite.config.ts +19 -0
- package/src/wf-ui-server/__tests__/a2a-store.test.mjs +79 -0
- package/src/wf-ui-server/__tests__/peer-capsule.test.mjs +268 -0
- package/src/wf-ui-server/__tests__/pty-adapter.test.mjs +70 -0
- package/src/wf-ui-server/__tests__/runtime-config.test.mjs +43 -0
- package/src/wf-ui-server/__tests__/runtime-detector.test.mjs +90 -0
- package/src/wf-ui-server/__tests__/security.test.mjs +59 -0
- package/src/wf-ui-server/__tests__/server.integration.test.mjs +150 -0
- package/src/wf-ui-server/__tests__/session-registry.test.mjs +238 -0
- package/src/wf-ui-server/__tests__/settings.test.mjs +135 -0
- package/src/wf-ui-server/__tests__/task-parser.test.mjs +200 -0
- package/src/wf-ui-server/__tests__/terminal-store.test.mjs +138 -0
- package/src/wf-ui-server/__tests__/token.test.mjs +48 -0
- package/src/wf-ui-server/__tests__/ws-events.integration.test.mjs +419 -0
- package/src/wf-ui-server/__tests__/ws-terminal.integration.test.mjs +383 -0
- package/src/wf-ui-server/a2a-store.mjs +296 -0
- package/src/wf-ui-server/peer-capsule.mjs +213 -0
- package/src/wf-ui-server/pty-adapter.mjs +155 -0
- package/src/wf-ui-server/runtime-config.mjs +153 -0
- package/src/wf-ui-server/runtime-detector.mjs +374 -0
- package/src/wf-ui-server/security.mjs +67 -0
- package/src/wf-ui-server/server.mjs +849 -0
- package/src/wf-ui-server/session-registry.mjs +204 -0
- package/src/wf-ui-server/settings.mjs +100 -0
- package/src/wf-ui-server/task-parser.mjs +133 -0
- package/src/wf-ui-server/terminal-store.mjs +225 -0
- package/src/wf-ui-server/token.mjs +41 -0
- package/src/wf-ui-server/ws-events.mjs +354 -0
- package/src/wf-ui-server/ws-terminal.mjs +473 -0
- package/templates/common/.claude/commands/wf-command-create.md +58 -0
- package/templates/common/.claude/commands/wf-help.md +5 -0
- package/templates/common/.claude/commands/wf-task-archive.md +26 -0
- package/templates/common/.claude/commands/wf-task-list.md +26 -0
- package/templates/common/.claude/commands/wf-task-record.md +24 -0
- package/templates/common/.claude/commands/wf-ui.md +26 -0
- package/templates/common/.claude/commands/wf-update.md +54 -9
- package/templates/common/.claude/rules/ecc/common.md +1 -1
- package/templates/common/.claude/skills/wf-agents-docs/SKILL.md +15 -30
- package/templates/common/.claude/skills/wf-auto/SKILL.md +3 -3
- package/templates/common/.claude/skills/wf-auto-spark/SKILL.md +2 -2
- package/templates/common/.claude/skills/wf-command-create/SKILL.md +37 -0
- package/templates/common/.claude/skills/wf-max/SKILL.md +1 -1
- package/templates/common/.claude/skills/wf-review/SKILL.md +29 -2
- package/templates/common/.claude/skills/wf-task-archive/SKILL.md +28 -0
- package/templates/common/.claude/skills/wf-task-list/SKILL.md +28 -0
- package/templates/common/.claude/skills/wf-task-record/SKILL.md +28 -0
- package/templates/common/.claude/skills/wf-ui/SKILL.md +78 -0
- package/templates/common/.claude/skills/wf-update/SKILL.md +55 -58
- package/templates/common/.harness-version +105 -47
- package/templates/common/.opencode/commands/wf-command-create.md +61 -0
- package/templates/common/.opencode/commands/wf-help.md +5 -0
- package/templates/common/.opencode/commands/wf-task-archive.md +29 -0
- package/templates/common/.opencode/commands/wf-task-list.md +29 -0
- package/templates/common/.opencode/commands/wf-task-record.md +27 -0
- package/templates/common/.opencode/commands/wf-ui.md +26 -0
- package/templates/common/.opencode/commands/wf-update.md +54 -9
- package/templates/common/CLAUDE.md +8 -6
- package/templates/common/Harness/MEMORY.md +11 -0
- package/templates/common/Harness/README.md +21 -38
- package/templates/common/Harness/a2a/role-graph.json +79 -0
- package/templates/common/Harness/a2a/runtime-registry.json +5 -0
- package/templates/common/Harness/a2a/skills/terminal-control.json +15 -0
- package/templates/common/Harness/ownership.manifest.json +142 -2
- package/templates/common/Harness/scripts/README.md +134 -0
- package/templates/common/Harness/scripts/a2a-terminal.mjs +191 -0
- package/templates/common/Harness/scripts/context-budget.mjs +1 -1
- package/templates/common/Harness/scripts/sync-host-global.mjs +278 -0
- package/templates/common/Harness/scripts/task-state.mjs +949 -26
- package/templates/common/Harness/scripts/validate-harness.mjs +637 -62
- package/templates/common/Harness/scripts/wf-remove.mjs +42 -5
- package/templates/common/Harness/scripts/wf-update-check.mjs +37 -9
- package/templates/common/Harness/scripts/wf-update-runner.mjs +325 -0
- package/templates/common/Harness/settings.json +35 -0
- package/templates/common/Harness/specs/guides/SETUP.md +8 -0
- package/templates/common/Harness/specs/protocols/MEMORY_PROTOCOL.md +15 -0
- package/templates/common/Harness/specs/protocols/TASK_ARCHIVE.md +16 -5
- package/templates/common/Harness/specs/runtime/command-surface.json +229 -0
- package/templates/common/Harness/specs/runtime/subagents.md +6 -0
- package/templates/common/Harness/specs/workflows/WF-AUTO-SPARK.md +8 -8
- package/templates/common/Harness/specs/workflows/WF-AUTO.md +12 -12
- package/templates/common/Harness/specs/workflows/WF-MAX.md +5 -0
- package/templates/common/Harness/specs/workflows/WF-STATE.md +66 -0
- package/templates/common/Harness/tasks/_template/NAMING.md +16 -16
- package/templates/common/Harness/tasks/_template/PLAN.md +17 -60
- package/templates/common/Harness/tasks/_template/PROBLEM.md +18 -0
- package/templates/common/Harness/tasks/_template/PROGRESS.md +9 -14
- package/templates/common/Harness/tasks/_template/REFERENCES.md +26 -0
- package/templates/common/Harness/tasks/_template/STATE.json +6 -0
- package/templates/common/Harness/tasks/_template/ARTIFACTS.md +0 -3
- package/templates/common/Harness/tasks/_template/NOTES.md +0 -3
|
@@ -22,7 +22,23 @@ targeted inspection.
|
|
|
22
22
|
|
|
23
23
|
## Flow
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Scope resolution is deterministic:
|
|
26
|
+
|
|
27
|
+
- Current project has `Harness/scripts/wf-update-check.mjs`: update the project
|
|
28
|
+
install from that script.
|
|
29
|
+
- A global runtime is discoverable from `Harness/.harness-version.globalDir`,
|
|
30
|
+
`HARNESS_GLOBAL_HOME`, or the default `~/.harness/create-harness-vibe-coding`:
|
|
31
|
+
update that runtime too, then sync its Claude/Codex/OpenCode host-global
|
|
32
|
+
copies.
|
|
33
|
+
- Current project has no Harness install: update only the global runtime and
|
|
34
|
+
host-global copies. Do not scaffold or modify the project unless the user
|
|
35
|
+
explicitly asks to install Harness there.
|
|
36
|
+
`Harness/scripts/wf-update-runner.mjs` implements this multi-scope routing.
|
|
37
|
+
Older installs that do not have the runner fall back to
|
|
38
|
+
`Harness/scripts/wf-update-check.mjs`.
|
|
39
|
+
|
|
40
|
+
1. Run `node Harness/scripts/wf-update-runner.mjs --json` first when present;
|
|
41
|
+
otherwise run `node Harness/scripts/wf-update-check.mjs --json`. Use the
|
|
26
42
|
`agent` block as the action plan. Preserve `agent.releaseHighlights` for the
|
|
27
43
|
user-facing update summary. Current updaters try npm
|
|
28
44
|
`create-harness-vibe-coding@latest` first, then the canonical GitHub source
|
|
@@ -33,9 +49,11 @@ targeted inspection.
|
|
|
33
49
|
starter files may be created, and checksum-matching legacy architecture can
|
|
34
50
|
move to `Harness/project/architecture.md`. Harness/README.md is merge-tier,
|
|
35
51
|
not PRESERVE.
|
|
36
|
-
3. If `agent.safeApplyCommand` is present, run
|
|
37
|
-
adopted metadata-only files
|
|
38
|
-
|
|
52
|
+
3. If `agent.safeApplyCommand` is present, run the runner apply path to apply
|
|
53
|
+
SAFE, NEW, and adopted metadata-only files across every discovered scope
|
|
54
|
+
before spending AI time on conflicts. Default multi-scope command:
|
|
55
|
+
`node Harness/scripts/wf-update-runner.mjs --apply-safe --json`. Single-scope
|
|
56
|
+
fallback command: `node Harness/scripts/wf-update-check.mjs --apply-safe`.
|
|
39
57
|
Framework-owned templates, commands, skills, agents, and scripts are
|
|
40
58
|
script-owned and should be overwritten by the updater after checksum
|
|
41
59
|
validation.
|
|
@@ -53,11 +71,38 @@ targeted inspection.
|
|
|
53
71
|
`--accept-local <file>`, `--accept-merged <file>`, or
|
|
54
72
|
`--accept-template <file>`; do not hand-edit `Harness/.harness-version`.
|
|
55
73
|
Ask the user only when the intent is ambiguous.
|
|
56
|
-
7. Run `node Harness/scripts/wf-update-
|
|
57
|
-
conflicts have script-recorded decisions.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
74
|
+
7. Run `node Harness/scripts/wf-update-runner.mjs --finalize --json` after all
|
|
75
|
+
conflicts have script-recorded decisions. Single-scope fallback:
|
|
76
|
+
`node Harness/scripts/wf-update-check.mjs --finalize`. Use strict `--apply` only when
|
|
77
|
+
the JSON plan has zero conflicts.
|
|
78
|
+
8. After update, sync and validate all machine surfaces:
|
|
79
|
+
```
|
|
80
|
+
node Harness/scripts/sync-host-global.mjs --json
|
|
81
|
+
node Harness/scripts/sync-host-global.mjs --apply --json
|
|
82
|
+
node Harness/scripts/validate-harness.mjs
|
|
83
|
+
node Harness/scripts/validate-harness.mjs --manifest-audit
|
|
84
|
+
node Harness/scripts/scan-clean.mjs --json
|
|
85
|
+
```
|
|
86
|
+
`sync-host-global.mjs` is a no-op for project-only installs. For global
|
|
87
|
+
installs it compares host-global files against the runtime sources listed in
|
|
88
|
+
`.harness-version.hostGlobal.targets`; missing or Harness-marked stale copies
|
|
89
|
+
are repaired by script, while user-looking files stay conflicts.
|
|
90
|
+
9. If the update reports "Already up to date" but files are missing (e.g.,
|
|
91
|
+
new commands not showing up on a platform), run:
|
|
92
|
+
```
|
|
93
|
+
node Harness/scripts/wf-update-runner.mjs --repair --json
|
|
94
|
+
node Harness/scripts/wf-update-runner.mjs --repair --apply-safe --json
|
|
95
|
+
node Harness/scripts/wf-update-runner.mjs --repair --finalize --json
|
|
96
|
+
node Harness/scripts/wf-update-check.mjs --repair --json
|
|
97
|
+
node Harness/scripts/wf-update-check.mjs --repair --apply-safe
|
|
98
|
+
node Harness/scripts/wf-update-check.mjs --repair --finalize
|
|
99
|
+
node Harness/scripts/sync-host-global.mjs --apply --json
|
|
100
|
+
node Harness/scripts/validate-harness.mjs --manifest-audit
|
|
101
|
+
```
|
|
102
|
+
`--repair` bypasses the version check and forces a full file diff against
|
|
103
|
+
the latest remote template. This catches files that were missed during a
|
|
104
|
+
previous partial update where the version was bumped but not all files
|
|
105
|
+
were written.
|
|
61
106
|
|
|
62
107
|
Codex users without a direct command surface: use `$wf-update` (skill path) or
|
|
63
108
|
`node Harness/scripts/wf-update-check.mjs`.
|
|
@@ -8,7 +8,7 @@ alwaysApply: true
|
|
|
8
8
|
## Context
|
|
9
9
|
|
|
10
10
|
- Start with `CLAUDE.md`. When `Harness/` exists, also read `Harness/memory/startup-hints.md` (L2 lightweight digest, not full router).
|
|
11
|
-
- When the user explicitly invokes a workflow command (`/wf-*`, `$wf-*`, or `/skills wf-*`), excluding `/wf-help`, `$wf-help`, `/skills wf-help`, `/wf-update`, `$wf-update`, and `/skills wf-
|
|
11
|
+
- When the user explicitly invokes a workflow command (`/wf-*`, `$wf-*`, or `/skills wf-*`), excluding `/wf-help`, `$wf-help`, `/skills wf-help`, `/wf-update`, `$wf-update`, `/skills wf-update`, `/wf-task-record`, `$wf-task-record`, `/skills wf-task-record`, `/wf-task-list`, `$wf-task-list`, `/skills wf-task-list`, `/wf-task-archive`, `$wf-task-archive`, `/skills wf-task-archive`, `/wf-command-create`, `$wf-command-create`, `/skills wf-command-create`, `/wf-ui`, `$wf-ui`, and `/skills wf-ui`, load `Harness/MEMORY.md` and `Harness/README.md`.
|
|
12
12
|
- For simple single-step tasks without `/wf-*`, operate in direct mode: skip the Harness router and execute directly.
|
|
13
13
|
- Do not bulk-read `Harness/`. Load by router trigger.
|
|
14
14
|
- Keep `Harness/tasks/<task-id>/PROGRESS.md` and `Harness/tasks/<task-id>/PLAN.md` current when work has multiple steps, files, or agents.
|
|
@@ -9,13 +9,10 @@ Use this skill before shelling out to `claude`, `codex`, or `opencode` from Harn
|
|
|
9
9
|
|
|
10
10
|
## Source Order
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
2. Check official docs for flags that affect cost, auth, JSON, resume, tools/MCP, or telemetry.
|
|
14
|
-
3. When adding automation, record command, source, stdout/stderr shape, and failed patterns.
|
|
12
|
+
Prefer installed help (`claude --help`, `codex exec --help`, `opencode run --help`), then official docs for cost/auth/JSON/resume/tools/telemetry; record command, source, stdout/stderr shape, and failures.
|
|
15
13
|
|
|
16
14
|
## Claude Code CLI
|
|
17
15
|
|
|
18
|
-
- Interactive: `claude`.
|
|
19
16
|
- Non-interactive JSON: pipe ASCII or UTF-8-safe stdin into `claude -p --output-format json`.
|
|
20
17
|
- Stream JSON requires verbose mode: `claude -p --output-format stream-json --verbose`.
|
|
21
18
|
- Continue/resume: `claude -c -p "..."` or `claude -p --resume <session-id> "..."`; for PowerShell automation, prefer stdin and validate non-empty JSON before parsing.
|
|
@@ -26,19 +23,15 @@ Use this skill before shelling out to `claude`, `codex`, or `opencode` from Harn
|
|
|
26
23
|
|
|
27
24
|
## Codex CLI
|
|
28
25
|
|
|
29
|
-
- Interactive: `codex`.
|
|
30
26
|
- Non-interactive: `codex exec "task"`.
|
|
31
|
-
-
|
|
32
|
-
- Prompt plus stdin context: `some-command | codex exec "summarize this output"`.
|
|
27
|
+
- Stdin modes: `cat prompt.txt | codex exec -`; `some-command | codex exec "summarize this output"`.
|
|
33
28
|
- Machine output: `codex exec --json "task"` emits JSONL events; parse `turn.completed.usage`, including `cached_input_tokens` when present.
|
|
34
29
|
- Resume: `codex exec resume --last "..."` or `codex exec resume <SESSION_ID> "..."`.
|
|
35
30
|
- Permissions: default is read-only; set `--sandbox workspace-write` only when edits are required. Use `--ignore-user-config` / `--ignore-rules` for controlled automation.
|
|
36
31
|
|
|
37
32
|
## OpenCode CLI
|
|
38
33
|
|
|
39
|
-
-
|
|
40
|
-
- Non-interactive: `opencode run [message..]`.
|
|
41
|
-
- JSON events: `opencode run --format json "task"`.
|
|
34
|
+
- Non-interactive: `opencode run [message..]`; JSON events: `opencode run --format json "task"`.
|
|
42
35
|
- Resume: `opencode run --continue "..."` or `opencode run --session <id> "..."`.
|
|
43
36
|
- Peer role: `opencode run --agent reviewer --dir . "review prompt"`.
|
|
44
37
|
- Reuse a server to avoid MCP cold boot: `opencode serve`, then `opencode run --attach http://localhost:4096 "task"`.
|
|
@@ -48,31 +41,27 @@ Use this skill before shelling out to `claude`, `codex`, or `opencode` from Harn
|
|
|
48
41
|
|
|
49
42
|
- Prefer stdin over trailing prompt args for `claude -p` in PowerShell.
|
|
50
43
|
- Use ASCII prompts or explicitly UTF-8-safe input for automated probes.
|
|
51
|
-
- Do not trust exit code alone. Fail on empty/non-JSON stdout
|
|
44
|
+
- Do not trust exit code alone. Fail on empty/non-JSON stdout, error/budget/fallback terminal fields, or missing final model text.
|
|
52
45
|
- Avoid naming function parameters `$Args`; PowerShell treats `$Args` specially.
|
|
53
46
|
- Store telemetry outside the repo, e.g. `$HOME/.claude/cache-telemetry/*.json`, so git status does not perturb prefixes.
|
|
54
47
|
|
|
55
48
|
## Evidence-Packet Review Pattern
|
|
56
49
|
|
|
57
|
-
For peer review, route smokes, cache analysis, and audits, gather evidence
|
|
58
|
-
first; the peer judges only the bounded packet.
|
|
50
|
+
For peer review, route smokes, cache analysis, and audits, gather evidence first; the peer judges only the bounded packet.
|
|
59
51
|
|
|
60
|
-
- Gather paths, line snippets, command names, exits, and invariants with `rg`,
|
|
61
|
-
|
|
62
|
-
-
|
|
63
|
-
and screenshots unless they are the evidence.
|
|
64
|
-
- Prefer no tools for judgment-only review; otherwise allow only read-only
|
|
65
|
-
tools and name the exact read set.
|
|
52
|
+
- Gather paths, line snippets, command names, exits, and invariants with `rg`, `node` scripts, validators, or small reads.
|
|
53
|
+
- Send only that packet. Exclude full docs, raw logs, timestamps, session IDs, and screenshots unless they are the evidence.
|
|
54
|
+
- Prefer no tools for judgment-only review; otherwise allow only read-only tools and name the exact read set.
|
|
66
55
|
- Controller accepts, rejects, or escalates findings. Peers do not own scope.
|
|
56
|
+
- Fail on empty/non-JSON stdout, explicit error events, budget errors, fallback warnings, or missing final model text.
|
|
57
|
+
- For `claude -p --output-format json`, check `is_error`, `subtype`, and `result` fields before treating output as review evidence.
|
|
58
|
+
- For `opencode run --format json`, extract `text` from JSONL events; the stream is not a single review result.
|
|
67
59
|
|
|
68
60
|
## No Scratch-File Rule
|
|
69
61
|
|
|
70
|
-
- Do not write CLI probe output under `%TEMP%`, `$env:TEMP`, `/tmp`, or other
|
|
71
|
-
system temp directories.
|
|
72
|
-
- Prefer stdout, JSON/JSONL streaming, or in-memory parsing.
|
|
62
|
+
- Do not write CLI probe output under `%TEMP%`, `$env:TEMP`, `/tmp`, or other system temp directories; prefer stdout, JSON/JSONL streaming, or in-memory parsing.
|
|
73
63
|
- Persistent repo evidence goes under `Harness/tasks/<task-id>/evidence/`.
|
|
74
|
-
- Cache telemetry may live under `$HOME/.claude/cache-telemetry/` to avoid repo
|
|
75
|
-
prompt-cache churn.
|
|
64
|
+
- Cache telemetry may live under `$HOME/.claude/cache-telemetry/` to avoid repo prompt-cache churn.
|
|
76
65
|
- Do not create prompt temp files. Use stdin.
|
|
77
66
|
|
|
78
67
|
## Subagent Output Contract
|
|
@@ -102,8 +91,7 @@ Follow `Harness/specs/runtime/context-loading.md#Cache-First Context Contract`:
|
|
|
102
91
|
## Batch-Test Pattern
|
|
103
92
|
|
|
104
93
|
1. Probe command availability with `Get-Command claude,codex,opencode -ErrorAction SilentlyContinue`.
|
|
105
|
-
2. Build a compact evidence packet before invoking peer agents; use the peer
|
|
106
|
-
only for judgment unless the test explicitly requires live agent discovery.
|
|
94
|
+
2. Build a compact evidence packet before invoking peer agents; use the peer only for judgment unless the test explicitly requires live agent discovery.
|
|
107
95
|
3. Run a cold turn and capture session id.
|
|
108
96
|
4. Resume that session for two warm turns.
|
|
109
97
|
5. For each turn record input, cache creation, cache read, ratio, cost, model/session id, and exact flags.
|
|
@@ -111,9 +99,6 @@ Follow `Harness/specs/runtime/context-loading.md#Cache-First Context Contract`:
|
|
|
111
99
|
|
|
112
100
|
## Official References
|
|
113
101
|
|
|
114
|
-
- Claude Code CLI
|
|
115
|
-
- Claude Code prompt caching: https://code.claude.com/docs/en/prompt-caching
|
|
116
|
-
- Claude Code status line schema: https://code.claude.com/docs/en/statusline
|
|
102
|
+
- Claude Code CLI/cache/statusline: https://code.claude.com/docs/en/cli-reference
|
|
117
103
|
- Codex CLI: https://developers.openai.com/codex/cli
|
|
118
|
-
- Codex non-interactive mode: https://learn.chatgpt.com/docs/non-interactive-mode
|
|
119
104
|
- OpenCode CLI: https://opencode.ai/docs/cli/
|
|
@@ -48,7 +48,7 @@ that auto scanning costs more than it helps.
|
|
|
48
48
|
obligations are covered, two different confirmation strategies are empty,
|
|
49
49
|
and unresolved uncertainty is recorded.
|
|
50
50
|
2. CEO never edits production source. CEO may write only
|
|
51
|
-
`Harness/tasks/
|
|
51
|
+
`Harness/tasks/continuous/PLAN.md` and `Harness/tasks/continuous/PROGRESS.md`.
|
|
52
52
|
3. Build a project profile each W0 cycle and dispatch only the selected probes;
|
|
53
53
|
invoke oracle and spark searchers when evidence justifies them.
|
|
54
54
|
4. One accepted finding per cycle: <=3 files and <=50 changed lines. Larger
|
|
@@ -61,8 +61,8 @@ that auto scanning costs more than it helps.
|
|
|
61
61
|
below 3.
|
|
62
62
|
8. Intent Checkpoint is adaptive: 2 -> 5 -> 10 cycles, exactly two questions.
|
|
63
63
|
9. Record compact evidence per cycle; do not paste full logs or transcripts.
|
|
64
|
-
10. A bounded test tick still creates or updates `Harness/tasks/
|
|
65
|
-
and `Harness/tasks/
|
|
64
|
+
10. A bounded test tick still creates or updates `Harness/tasks/continuous/PLAN.md`
|
|
65
|
+
and `Harness/tasks/continuous/PROGRESS.md`; missing auto capsule evidence is a
|
|
66
66
|
failed cycle record.
|
|
67
67
|
|
|
68
68
|
## Loop
|
|
@@ -44,5 +44,5 @@ replaying search transcripts.
|
|
|
44
44
|
6. Value reflection is required every cycle: source, why it matters, deviation,
|
|
45
45
|
evidence, and milestone progress.
|
|
46
46
|
|
|
47
|
-
Active roadmap: `Harness/tasks/
|
|
48
|
-
Per-cycle evidence: `Harness/tasks/
|
|
47
|
+
Active roadmap: `Harness/tasks/continuous/SPARK-ROADMAP.md`.
|
|
48
|
+
Per-cycle evidence: `Harness/tasks/continuous/PROGRESS.md`.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wf-command-create
|
|
3
|
+
description: Create or modify Harness wf-* commands atomically. Use for $wf-command-create or /skills wf-command-create in Codex, and for /wf-command-create in Claude Code/OpenCode. Direct/compat maintenance command; creates or resumes a task capsule but does not enter WF mode.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# WF Command Create Adapter
|
|
7
|
+
|
|
8
|
+
This skill is a Codex compatibility shim for the direct `/wf-command-create`
|
|
9
|
+
maintenance command. It does not start WF mode or load `Harness/MEMORY.md`.
|
|
10
|
+
|
|
11
|
+
## Invocation
|
|
12
|
+
|
|
13
|
+
- Codex: `$wf-command-create` or `/skills` then choose `wf-command-create`.
|
|
14
|
+
- Claude Code: `/wf-command-create` direct command from `.claude/commands/wf-command-create.md`.
|
|
15
|
+
- OpenCode: `/wf-command-create` direct command from `.opencode/commands/wf-command-create.md`.
|
|
16
|
+
|
|
17
|
+
## Load
|
|
18
|
+
|
|
19
|
+
- `.claude/commands/wf-command-create.md`
|
|
20
|
+
- `Harness/specs/runtime/command-surface.json`
|
|
21
|
+
|
|
22
|
+
## Rules
|
|
23
|
+
|
|
24
|
+
Execute the command instructions from `.claude/commands/wf-command-create.md`.
|
|
25
|
+
|
|
26
|
+
- Create or resume the task capsule first.
|
|
27
|
+
- Update `command-surface.json` before creating command files.
|
|
28
|
+
- Keep `.agents/skills/<id>/SKILL.md` byte-identical to `.claude/skills/<id>/SKILL.md`.
|
|
29
|
+
- Keep `.opencode/commands/<id>.md` body-identical to `.claude/commands/<id>.md`.
|
|
30
|
+
- Run the validation list from the command file or record why a check could not complete.
|
|
31
|
+
|
|
32
|
+
## Return
|
|
33
|
+
|
|
34
|
+
- Task capsule path
|
|
35
|
+
- Command classification
|
|
36
|
+
- Changed surface checklist
|
|
37
|
+
- Verification results
|
|
@@ -43,7 +43,7 @@ WF-MAX inherits the selected WF tier and the shared WF-KERNEL gates
|
|
|
43
43
|
default; WF-Max-Strict only on explicit strict request. Execution expands
|
|
44
44
|
through:
|
|
45
45
|
|
|
46
|
-
- New task state directories MUST use task ids matching
|
|
46
|
+
- New task capsules / state directories MUST use task ids matching
|
|
47
47
|
`task-<verb>-<noun>[-detail]` under `Harness/tasks/<task-id>/`; never
|
|
48
48
|
create bare `fix-*` task ids.
|
|
49
49
|
1. Global mode: `wf-max`
|
|
@@ -55,12 +55,39 @@ the review prompt.
|
|
|
55
55
|
|
|
56
56
|
OpenCode note: `opencode run [message..]` is the non-interactive CLI path and
|
|
57
57
|
`--agent reviewer` selects the installed `.opencode/agents/reviewer.md` role.
|
|
58
|
+
However, the installed agent is `mode: subagent`; OpenCode falls back to the
|
|
59
|
+
default agent. Prefer same-runtime reviewer subagent over `opencode run --agent reviewer`.
|
|
60
|
+
|
|
61
|
+
For `opencode run --format json`, parse JSONL events; the stream is not a single
|
|
62
|
+
review result.
|
|
63
|
+
|
|
64
|
+
## Evidence-Packet Peer Review Contract
|
|
65
|
+
|
|
66
|
+
When invoking a peer CLI, use stdin prompt transport for PowerShell automation.
|
|
67
|
+
Return the raw evidence packet to the controller for formal acceptance.
|
|
68
|
+
|
|
69
|
+
### JSON/JSONL Validation
|
|
70
|
+
|
|
71
|
+
For `claude -p` with `--output-format json`:
|
|
72
|
+
- Fail if stdout is empty, non-JSON, `is_error: true`, `subtype` starts with `error_`, or no final model `text`/`result` is present.
|
|
73
|
+
- Do NOT use tiny `--max-budget-usd` values in real reviews; if budget is set and exhausted, record BLOCKED rather than treating it as reviewer output.
|
|
74
|
+
|
|
75
|
+
For `opencode run --format json`:
|
|
76
|
+
- Parse JSONL events, extract final `text` parts.
|
|
77
|
+
- Do NOT treat the whole JSONL stream as the review result.
|
|
78
|
+
- Do NOT claim `opencode run --agent reviewer` used the reviewer role unless a probe confirms the agent is a primary runnable agent. Current evidence: `.opencode/agents/reviewer.md` is `mode: subagent` and OpenCode falls back to the default agent.
|
|
79
|
+
- Prefer native reviewer subagent fallback inside the current runtime when OpenCode cannot run reviewer as a primary CLI agent.
|
|
80
|
+
|
|
81
|
+
General parsing rules: parse JSON/JSONL and fail on empty output, non-JSON output, explicit error events, budget errors, fallback warnings, or missing final model text.
|
|
82
|
+
|
|
83
|
+
### Controller Adjudication
|
|
84
|
+
|
|
85
|
+
The controller accepts, rejects, or escalates each finding after parsing the evidence packet. Do not pass raw output through as accepted findings without controller review.
|
|
58
86
|
|
|
59
87
|
## Review Dimensions
|
|
60
88
|
|
|
61
89
|
Cover correctness, security, architecture, performance, and tests. Classify
|
|
62
|
-
findings as Critical, High, Medium, or Low.
|
|
63
|
-
first, then the controller's severity-classified synthesis.
|
|
90
|
+
findings as Critical, High, Medium, or Low.
|
|
64
91
|
|
|
65
92
|
## Reviewer Role Fallback
|
|
66
93
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wf-task-archive
|
|
3
|
+
description: Archive completed task capsules. Use for $wf-task-archive or /skills wf-task-archive in Codex. Direct/compat command wrapping task-state.mjs — does not enter WF mode.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# WF Task Archive Adapter
|
|
7
|
+
|
|
8
|
+
This skill is a Codex compatibility shim. It does not start WF mode, dispatch agents, or edit files directly.
|
|
9
|
+
|
|
10
|
+
## Invocation
|
|
11
|
+
|
|
12
|
+
- Codex: `$wf-task-archive` or `/skills` then choose `wf-task-archive`.
|
|
13
|
+
- Claude Code: `/wf-task-archive` direct command from `.claude/commands/wf-task-archive.md`.
|
|
14
|
+
- OpenCode: `/wf-task-archive` direct command from `.opencode/commands/wf-task-archive.md`.
|
|
15
|
+
|
|
16
|
+
## Load
|
|
17
|
+
|
|
18
|
+
- `.claude/commands/wf-task-archive.md`
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
Execute the command instructions from `.claude/commands/wf-task-archive.md` directly.
|
|
23
|
+
Do not load `Harness/MEMORY.md`, do not enter WF.
|
|
24
|
+
|
|
25
|
+
## Return
|
|
26
|
+
|
|
27
|
+
- Task archive result
|
|
28
|
+
- Note that Codex uses `$wf-task-archive` or `/skills wf-task-archive`
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wf-task-list
|
|
3
|
+
description: List task capsules. Use for $wf-task-list or /skills wf-task-list in Codex. Direct/compat command wrapping task-state.mjs — does not enter WF mode.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# WF Task List Adapter
|
|
7
|
+
|
|
8
|
+
This skill is a Codex compatibility shim. It does not start WF mode, dispatch agents, or edit files directly.
|
|
9
|
+
|
|
10
|
+
## Invocation
|
|
11
|
+
|
|
12
|
+
- Codex: `$wf-task-list` or `/skills` then choose `wf-task-list`.
|
|
13
|
+
- Claude Code: `/wf-task-list` direct command from `.claude/commands/wf-task-list.md`.
|
|
14
|
+
- OpenCode: `/wf-task-list` direct command from `.opencode/commands/wf-task-list.md`.
|
|
15
|
+
|
|
16
|
+
## Load
|
|
17
|
+
|
|
18
|
+
- `.claude/commands/wf-task-list.md`
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
Execute the command instructions from `.claude/commands/wf-task-list.md` directly.
|
|
23
|
+
Do not load `Harness/MEMORY.md`, do not enter WF.
|
|
24
|
+
|
|
25
|
+
## Return
|
|
26
|
+
|
|
27
|
+
- Task listing result
|
|
28
|
+
- Note that Codex uses `$wf-task-list` or `/skills wf-task-list`
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wf-task-record
|
|
3
|
+
description: Record user intent into a task capsule. Use for $wf-task-record or /skills wf-task-record in Codex. Direct/compat command wrapping task-state.mjs — does not enter WF mode.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# WF Task Record Adapter
|
|
7
|
+
|
|
8
|
+
This skill is a Codex compatibility shim. It does not start WF mode, dispatch agents, or edit files directly.
|
|
9
|
+
|
|
10
|
+
## Invocation
|
|
11
|
+
|
|
12
|
+
- Codex: `$wf-task-record` or `/skills` then choose `wf-task-record`.
|
|
13
|
+
- Claude Code: `/wf-task-record` direct command from `.claude/commands/wf-task-record.md`.
|
|
14
|
+
- OpenCode: `/wf-task-record` direct command from `.opencode/commands/wf-task-record.md`.
|
|
15
|
+
|
|
16
|
+
## Load
|
|
17
|
+
|
|
18
|
+
- `.claude/commands/wf-task-record.md`
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
Execute the command instructions from `.claude/commands/wf-task-record.md` directly.
|
|
23
|
+
Do not load `Harness/MEMORY.md`, do not enter WF.
|
|
24
|
+
|
|
25
|
+
## Return
|
|
26
|
+
|
|
27
|
+
- Task record result
|
|
28
|
+
- Note that Codex uses `$wf-task-record` or `/skills wf-task-record`
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wf-ui
|
|
3
|
+
description: Codex compatibility: use $wf-ui or /skills wf-ui in Codex. In Claude Code and OpenCode, /wf-ui is a direct command that starts the local Harness browser control panel.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# WF-UI Adapter
|
|
7
|
+
|
|
8
|
+
This skill is a Codex compatibility shim for opening the Harness control panel.
|
|
9
|
+
Claude Code and OpenCode handle `/wf-ui` as a direct command. Do not route this
|
|
10
|
+
through WF mode.
|
|
11
|
+
|
|
12
|
+
## Invocation
|
|
13
|
+
|
|
14
|
+
- Codex CLI or IDE: use `$wf-ui` or `/skills` then choose `wf-ui`.
|
|
15
|
+
- Claude Code: `/wf-ui` is a direct command from `.claude/commands/wf-ui.md`.
|
|
16
|
+
- OpenCode: `/wf-ui` is a direct command from `.opencode/commands/wf-ui.md`.
|
|
17
|
+
|
|
18
|
+
## Load
|
|
19
|
+
|
|
20
|
+
No router preload. Read only the local command file above when this runtime
|
|
21
|
+
needs the exact direct command text.
|
|
22
|
+
|
|
23
|
+
## Cache Discipline
|
|
24
|
+
|
|
25
|
+
Keep the context to the command, current project root, and returned local URL.
|
|
26
|
+
Do not paste full API responses, accessibility trees, or terminal transcripts.
|
|
27
|
+
|
|
28
|
+
## Startup
|
|
29
|
+
|
|
30
|
+
Run from the project root:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
create-harness-vibe-coding wf-ui --project . --host 127.0.0.1 --port 0 --open
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
If the global binary is not available, use:
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
npx create-harness-vibe-coding@0.8.19 wf-ui --project . --host 127.0.0.1 --port 0 --open
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Rules:
|
|
43
|
+
- Bind only to `127.0.0.1`; never `0.0.0.0`.
|
|
44
|
+
- Default port `0` for an OS-assigned free port.
|
|
45
|
+
- Generate a random one-time token.
|
|
46
|
+
- Open `http://127.0.0.1:<port>/?token=<token>`.
|
|
47
|
+
- Leave the server running until the user stops it.
|
|
48
|
+
|
|
49
|
+
## Architecture
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
Browser UI (React + TypeScript + Motion for React + Lucide)
|
|
53
|
+
|
|
|
54
|
+
| HTTP JSON APIs + WebSocket
|
|
55
|
+
v
|
|
56
|
+
Local Node server bound to 127.0.0.1 only
|
|
57
|
+
|
|
|
58
|
+
| fs + task-state.mjs + optional node-pty
|
|
59
|
+
v
|
|
60
|
+
Project-local Harness files (tasks/**, settings, version, command surfaces)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Communication Protocol
|
|
64
|
+
|
|
65
|
+
- HTTP snapshots are canonical state: `/api/tasks`, `/api/settings`, `/api/project`.
|
|
66
|
+
- WebSocket events are invalidation hints only. The UI refreshes HTTP snapshots
|
|
67
|
+
on reconnect or sequence gaps.
|
|
68
|
+
- Browser writes go through typed `POST` endpoints.
|
|
69
|
+
- `Harness/tasks/**` is the durable source of truth; UI state is derived.
|
|
70
|
+
|
|
71
|
+
## Security
|
|
72
|
+
|
|
73
|
+
- Loopback-only binding (`127.0.0.1`).
|
|
74
|
+
- One-time token auth on HTTP and WebSocket.
|
|
75
|
+
- Path traversal prevention on all task capsule reads.
|
|
76
|
+
- Command allowlist for PTY: `claude`, `codex`, `opencode`.
|
|
77
|
+
- Terminal default mode: watch/read-only; attach mode is explicit.
|
|
78
|
+
- `node-pty` is optional; missing means the terminal session reports blocked.
|
|
@@ -16,89 +16,86 @@ This skill is a Codex compatibility shim plus script-flow reference. Claude Code
|
|
|
16
16
|
## Load
|
|
17
17
|
|
|
18
18
|
- `Harness/.harness-version`
|
|
19
|
+
- `Harness/ownership.manifest.json`
|
|
19
20
|
- `Harness/scripts/wf-update-check.mjs`
|
|
21
|
+
- `Harness/scripts/wf-update-runner.mjs`
|
|
22
|
+
- `Harness/scripts/sync-host-global.mjs`
|
|
20
23
|
- `Harness/scripts/scan-clean.mjs`
|
|
21
24
|
- `Harness/scripts/validate-harness.mjs`
|
|
22
25
|
|
|
23
26
|
## Cache Discipline
|
|
24
27
|
|
|
25
|
-
Follow `Harness/specs/runtime/context-loading.md#Cache-First Context Contract`: keep updater
|
|
26
|
-
scripts and ownership docs stable, consume compact `--json` agent plans first,
|
|
27
|
-
and avoid pasting verbose diffs or full remote files unless a conflict requires
|
|
28
|
-
targeted inspection.
|
|
28
|
+
Follow `Harness/specs/runtime/context-loading.md#Cache-First Context Contract`: keep updater scripts and ownership docs stable, consume compact `--json` agent plans first, and avoid pasting verbose diffs or full remote files unless a conflict requires targeted inspection.
|
|
29
29
|
|
|
30
30
|
## Classification
|
|
31
31
|
|
|
32
|
-
MANIFEST-FIRST. The installer and updater read
|
|
33
|
-
`Harness/ownership.manifest.json`:
|
|
32
|
+
MANIFEST-FIRST. The installer and updater read `Harness/ownership.manifest.json`:
|
|
34
33
|
|
|
35
|
-
- `preserve[]`
|
|
36
|
-
|
|
37
|
-
- `
|
|
38
|
-
|
|
39
|
-
carry forward.
|
|
40
|
-
- `frameworkOwned[]` — safe overwrite-upgrade fast path (concurrent
|
|
41
|
-
fetch + hash + all-or-nothing write after checksum validation).
|
|
42
|
-
- `optionalOwned[]` — upgraded only when that option is installed.
|
|
34
|
+
- `preserve[]` - never touched when present as user data: tasks, memory, research, root README, package, architecture, and progress. `Harness/tasks/**` is always preserved.
|
|
35
|
+
- `merge[]` - CLAUDE.md, AGENTS.md, MEMORY.md, Harness/MEMORY.md, Harness/README.md, and Harness/settings.json require merge or accept-local; prior accepted decisions carry forward.
|
|
36
|
+
- `frameworkOwned[]` - safe overwrite-upgrade fast path after checksum validation. This must cover `.claude`, `.codex`, `.agents`, `.opencode`, and Harness template-owned scripts/specs.
|
|
37
|
+
- `optionalOwned[]` - upgraded only when that option is installed.
|
|
43
38
|
|
|
44
|
-
Content markers (`harness: wf-agent`, `project harness`, `Harness/...`)
|
|
45
|
-
are the FALLBACK when no manifest exists (old installs) and the
|
|
46
|
-
instance-ownership signal that protects a user's same-name file at a
|
|
47
|
-
Harness path. A same-name user file with no marker and no manifest
|
|
48
|
-
declaration → conflict/skip + warning, never overwritten.
|
|
39
|
+
Content markers (`harness: wf-agent`, `project harness`, `Harness/...`) are the fallback when no manifest exists and the instance-ownership signal that protects a user's same-name file at a Harness path. A same-name user file with no marker and no manifest declaration becomes conflict/skip plus warning, never overwrite.
|
|
49
40
|
|
|
50
41
|
## Flow
|
|
51
42
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
43
|
+
Scope resolution is deterministic:
|
|
44
|
+
|
|
45
|
+
- Current project has `Harness/scripts/wf-update-check.mjs`: update the project install from that script.
|
|
46
|
+
- A global runtime is discoverable from `Harness/.harness-version.globalDir`, `HARNESS_GLOBAL_HOME`, or the default `~/.harness/create-harness-vibe-coding`: update that runtime too, then sync its Claude/Codex/OpenCode host-global copies.
|
|
47
|
+
- Current project has no Harness install: update only the global runtime and host-global copies. Do not scaffold or modify the project unless the user explicitly asks to install Harness there.
|
|
48
|
+
`Harness/scripts/wf-update-runner.mjs` implements this multi-scope routing. Older installs that do not have the runner fall back to `Harness/scripts/wf-update-check.mjs`.
|
|
49
|
+
|
|
50
|
+
1. Run `node Harness/scripts/wf-update-runner.mjs --json` first when present; otherwise run `node Harness/scripts/wf-update-check.mjs --json` and use the `agent` block as the action plan. Current updaters try npm `create-harness-vibe-coding@latest` first, then canonical GitHub `LiWeny16/create-harness-vibe-coding`, then legacy mirror `zingspark/create-harness-vibe-coding`.
|
|
51
|
+
2. Preserve all PRESERVE files. Never overwrite user task, memory, research, root README.md, package, progress, or architecture files. Harness/README.md is merge-tier, not PRESERVE.
|
|
52
|
+
3. If `agent.safeApplyCommand` is present, run the runner apply path to apply SAFE, NEW, moved, and adopted metadata-only files across every discovered scope before spending AI time on conflicts. Default multi-scope command: `node Harness/scripts/wf-update-runner.mjs --apply-safe --json`. Single-scope fallback command: `node Harness/scripts/wf-update-check.mjs --apply-safe`.
|
|
53
|
+
4. Previously accepted decisions for merge-tier files are carried forward automatically when both the local hash and remote template hash are unchanged.
|
|
54
|
+
5. If a new agent/command/skill path collides with an existing file, do not decide by filename alone. Treat it as Harness-owned only when the file content has Harness/WF markers such as `harness: wf-agent`, `project harness`, or `Harness/...`; otherwise leave it as a real conflict.
|
|
55
|
+
6. For every remaining `agent.aiMergeRequired` entry, compare the local file with `templateHint` or `remoteUrl`, then choose merge, keep-local, or overwrite-from-template. Record the decision through the script with `--accept-local <file>`, `--accept-merged <file>`, or `--accept-template <file>`; do not hand-edit `Harness/.harness-version`.
|
|
56
|
+
7. Run `node Harness/scripts/wf-update-runner.mjs --finalize --json` after all conflicts have script-recorded decisions. Single-scope fallback: `node Harness/scripts/wf-update-check.mjs --finalize`. Use strict `--apply` only when the JSON plan has zero conflicts.
|
|
57
|
+
8. After apply/finalize, run all post-update checks:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
node Harness/scripts/sync-host-global.mjs --json
|
|
61
|
+
node Harness/scripts/sync-host-global.mjs --apply --json
|
|
62
|
+
node Harness/scripts/validate-harness.mjs
|
|
63
|
+
node Harness/scripts/validate-harness.mjs --manifest-audit
|
|
64
|
+
node Harness/scripts/scan-clean.mjs --json
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
9. If the update reports "Already up to date" but framework files are missing or stale, run repair mode:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
node Harness/scripts/wf-update-runner.mjs --repair --json
|
|
71
|
+
node Harness/scripts/wf-update-runner.mjs --repair --apply-safe --json
|
|
72
|
+
node Harness/scripts/wf-update-runner.mjs --repair --finalize --json
|
|
73
|
+
node Harness/scripts/wf-update-check.mjs --repair --json
|
|
74
|
+
node Harness/scripts/wf-update-check.mjs --repair --apply-safe
|
|
75
|
+
node Harness/scripts/wf-update-check.mjs --repair --finalize
|
|
76
|
+
node Harness/scripts/sync-host-global.mjs --apply --json
|
|
77
|
+
node Harness/scripts/validate-harness.mjs --manifest-audit
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`--repair` bypasses the version check and forces a full file diff against the latest remote template. This catches partial updates where the version advanced but files such as `/wf-task-list`, `/wf-help`, Codex `.agents` skill mirrors, OpenCode commands, `.codex` config, or Harness scripts were not written.
|
|
81
|
+
`sync-host-global.mjs` is a no-op for project-only installs. For global installs it repairs missing or Harness-marked stale host-global copies by script and reports user-looking files as conflicts.
|
|
82
82
|
|
|
83
83
|
## Recovery
|
|
84
84
|
|
|
85
|
-
If `Harness/scripts/wf-update-check.mjs` is missing
|
|
85
|
+
If `Harness/scripts/wf-update-check.mjs` is missing, or `Harness/.harness-version` is missing or corrupted, do not reinstall from scratch. Recover by regenerating missing infrastructure:
|
|
86
86
|
|
|
87
|
-
```
|
|
87
|
+
```bash
|
|
88
88
|
npx create-harness-vibe-coding@latest <project-name> . -y --on-conflict skip
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
The `--on-conflict skip` policy preserves all existing user files
|
|
91
|
+
The `--on-conflict skip` policy preserves all existing user files and only creates missing Harness infrastructure files. After recovery, run the update check and manifest audit.
|
|
92
92
|
|
|
93
|
-
If an old updater reports only `0.8.10`, run the latest installer command above
|
|
94
|
-
or re-run the checker with:
|
|
93
|
+
If an old updater reports only `0.8.10`, run the latest installer command above or re-run the checker with:
|
|
95
94
|
|
|
96
|
-
```
|
|
95
|
+
```bash
|
|
97
96
|
node Harness/scripts/wf-update-check.mjs --json --source-base https://raw.githubusercontent.com/LiWeny16/create-harness-vibe-coding/main/templates/common/
|
|
98
97
|
```
|
|
99
98
|
|
|
100
99
|
## Return
|
|
101
100
|
|
|
102
|
-
Report version, SAFE/NEW updates, conflicts and decisions, preserved files,
|
|
103
|
-
partialUpdate status if any, validation output, scan-clean result, and
|
|
104
|
-
remaining risks.
|
|
101
|
+
Report version, SAFE/NEW updates, conflicts and decisions, preserved files, partialUpdate status if any, validation output, manifest-audit output, scan-clean result, and remaining risks. Also report the core release highlights from `agent.releaseHighlights` or `releaseNotes.highlights`.
|