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.
Files changed (150) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README-CN.md +2 -0
  3. package/README.md +3 -0
  4. package/package.json +5 -2
  5. package/src/generator.js +613 -97
  6. package/src/index.js +556 -309
  7. package/src/prompts.js +18 -0
  8. package/src/ui/dist/assets/AgentsRoute-CuSKYmFu.js +17 -0
  9. package/src/ui/dist/assets/AgentsRoute-CuSKYmFu.js.map +1 -0
  10. package/src/ui/dist/assets/RolesRoute-DOzTYVRm.js +7 -0
  11. package/src/ui/dist/assets/RolesRoute-DOzTYVRm.js.map +1 -0
  12. package/src/ui/dist/assets/SettingsRoute-DPU7jSQm.js +12 -0
  13. package/src/ui/dist/assets/SettingsRoute-DPU7jSQm.js.map +1 -0
  14. package/src/ui/dist/assets/TaskList-BN4r8s1i.js +50 -0
  15. package/src/ui/dist/assets/TaskList-BN4r8s1i.js.map +1 -0
  16. package/src/ui/dist/assets/TerminalDrawer-6GBZ9nXN.css +32 -0
  17. package/src/ui/dist/assets/TerminalDrawer-Cej4PxsH.js +74 -0
  18. package/src/ui/dist/assets/TerminalDrawer-Cej4PxsH.js.map +1 -0
  19. package/src/ui/dist/assets/WorkflowRoute-BnuhLJ6X.css +1 -0
  20. package/src/ui/dist/assets/WorkflowRoute-C-clKe-j.js +39 -0
  21. package/src/ui/dist/assets/WorkflowRoute-C-clKe-j.js.map +1 -0
  22. package/src/ui/dist/assets/index-BOVYWntB.js +117 -0
  23. package/src/ui/dist/assets/index-BOVYWntB.js.map +1 -0
  24. package/src/ui/dist/assets/index-DaUObq0H.css +1 -0
  25. package/src/ui/dist/assets/maximize-2-LNrr_rKr.js +7 -0
  26. package/src/ui/dist/assets/maximize-2-LNrr_rKr.js.map +1 -0
  27. package/src/ui/dist/assets/plus-QuTJyoT3.js +7 -0
  28. package/src/ui/dist/assets/plus-QuTJyoT3.js.map +1 -0
  29. package/src/ui/dist/assets/proxy-D0vUbds5.js +2 -0
  30. package/src/ui/dist/assets/proxy-D0vUbds5.js.map +1 -0
  31. package/src/ui/dist/assets/refresh-cw-JNmExijd.js +7 -0
  32. package/src/ui/dist/assets/refresh-cw-JNmExijd.js.map +1 -0
  33. package/src/ui/dist/assets/terminal-BBQvnOAK.js +7 -0
  34. package/src/ui/dist/assets/terminal-BBQvnOAK.js.map +1 -0
  35. package/src/ui/dist/assets/useReducedMotion-BqmH0Tf7.js +7 -0
  36. package/src/ui/dist/assets/useReducedMotion-BqmH0Tf7.js.map +1 -0
  37. package/src/ui/dist/assets/x-DoIOGAJz.js +7 -0
  38. package/src/ui/dist/assets/x-DoIOGAJz.js.map +1 -0
  39. package/src/ui/dist/index.html +18 -0
  40. package/src/ui/index.html +17 -0
  41. package/src/ui/package.json +33 -0
  42. package/src/ui/pnpm-lock.yaml +1582 -0
  43. package/src/ui/pnpm-workspace.yaml +2 -0
  44. package/src/ui/src/App.tsx +86 -0
  45. package/src/ui/src/api.ts +93 -0
  46. package/src/ui/src/components/AgentsRoute.tsx +503 -0
  47. package/src/ui/src/components/Footer.tsx +69 -0
  48. package/src/ui/src/components/Header.tsx +175 -0
  49. package/src/ui/src/components/LoadingView.tsx +22 -0
  50. package/src/ui/src/components/RolesRoute.tsx +169 -0
  51. package/src/ui/src/components/SettingsRoute.tsx +166 -0
  52. package/src/ui/src/components/TaskList.tsx +388 -0
  53. package/src/ui/src/components/TerminalDrawer.tsx +611 -0
  54. package/src/ui/src/components/WorkflowRoute.tsx +670 -0
  55. package/src/ui/src/hooks/useReducedMotion.ts +17 -0
  56. package/src/ui/src/hooks/useServerConnection.ts +114 -0
  57. package/src/ui/src/index.css +281 -0
  58. package/src/ui/src/main.tsx +11 -0
  59. package/src/ui/src/types.ts +108 -0
  60. package/src/ui/tsconfig.json +21 -0
  61. package/src/ui/vite.config.ts +19 -0
  62. package/src/wf-ui-server/__tests__/a2a-store.test.mjs +79 -0
  63. package/src/wf-ui-server/__tests__/peer-capsule.test.mjs +268 -0
  64. package/src/wf-ui-server/__tests__/pty-adapter.test.mjs +70 -0
  65. package/src/wf-ui-server/__tests__/runtime-config.test.mjs +43 -0
  66. package/src/wf-ui-server/__tests__/runtime-detector.test.mjs +90 -0
  67. package/src/wf-ui-server/__tests__/security.test.mjs +59 -0
  68. package/src/wf-ui-server/__tests__/server.integration.test.mjs +150 -0
  69. package/src/wf-ui-server/__tests__/session-registry.test.mjs +238 -0
  70. package/src/wf-ui-server/__tests__/settings.test.mjs +135 -0
  71. package/src/wf-ui-server/__tests__/task-parser.test.mjs +200 -0
  72. package/src/wf-ui-server/__tests__/terminal-store.test.mjs +138 -0
  73. package/src/wf-ui-server/__tests__/token.test.mjs +48 -0
  74. package/src/wf-ui-server/__tests__/ws-events.integration.test.mjs +419 -0
  75. package/src/wf-ui-server/__tests__/ws-terminal.integration.test.mjs +383 -0
  76. package/src/wf-ui-server/a2a-store.mjs +296 -0
  77. package/src/wf-ui-server/peer-capsule.mjs +213 -0
  78. package/src/wf-ui-server/pty-adapter.mjs +155 -0
  79. package/src/wf-ui-server/runtime-config.mjs +153 -0
  80. package/src/wf-ui-server/runtime-detector.mjs +374 -0
  81. package/src/wf-ui-server/security.mjs +67 -0
  82. package/src/wf-ui-server/server.mjs +849 -0
  83. package/src/wf-ui-server/session-registry.mjs +204 -0
  84. package/src/wf-ui-server/settings.mjs +100 -0
  85. package/src/wf-ui-server/task-parser.mjs +133 -0
  86. package/src/wf-ui-server/terminal-store.mjs +225 -0
  87. package/src/wf-ui-server/token.mjs +41 -0
  88. package/src/wf-ui-server/ws-events.mjs +354 -0
  89. package/src/wf-ui-server/ws-terminal.mjs +473 -0
  90. package/templates/common/.claude/commands/wf-command-create.md +58 -0
  91. package/templates/common/.claude/commands/wf-help.md +5 -0
  92. package/templates/common/.claude/commands/wf-task-archive.md +26 -0
  93. package/templates/common/.claude/commands/wf-task-list.md +26 -0
  94. package/templates/common/.claude/commands/wf-task-record.md +24 -0
  95. package/templates/common/.claude/commands/wf-ui.md +26 -0
  96. package/templates/common/.claude/commands/wf-update.md +54 -9
  97. package/templates/common/.claude/rules/ecc/common.md +1 -1
  98. package/templates/common/.claude/skills/wf-agents-docs/SKILL.md +15 -30
  99. package/templates/common/.claude/skills/wf-auto/SKILL.md +3 -3
  100. package/templates/common/.claude/skills/wf-auto-spark/SKILL.md +2 -2
  101. package/templates/common/.claude/skills/wf-command-create/SKILL.md +37 -0
  102. package/templates/common/.claude/skills/wf-max/SKILL.md +1 -1
  103. package/templates/common/.claude/skills/wf-review/SKILL.md +29 -2
  104. package/templates/common/.claude/skills/wf-task-archive/SKILL.md +28 -0
  105. package/templates/common/.claude/skills/wf-task-list/SKILL.md +28 -0
  106. package/templates/common/.claude/skills/wf-task-record/SKILL.md +28 -0
  107. package/templates/common/.claude/skills/wf-ui/SKILL.md +78 -0
  108. package/templates/common/.claude/skills/wf-update/SKILL.md +55 -58
  109. package/templates/common/.harness-version +105 -47
  110. package/templates/common/.opencode/commands/wf-command-create.md +61 -0
  111. package/templates/common/.opencode/commands/wf-help.md +5 -0
  112. package/templates/common/.opencode/commands/wf-task-archive.md +29 -0
  113. package/templates/common/.opencode/commands/wf-task-list.md +29 -0
  114. package/templates/common/.opencode/commands/wf-task-record.md +27 -0
  115. package/templates/common/.opencode/commands/wf-ui.md +26 -0
  116. package/templates/common/.opencode/commands/wf-update.md +54 -9
  117. package/templates/common/CLAUDE.md +8 -6
  118. package/templates/common/Harness/MEMORY.md +11 -0
  119. package/templates/common/Harness/README.md +21 -38
  120. package/templates/common/Harness/a2a/role-graph.json +79 -0
  121. package/templates/common/Harness/a2a/runtime-registry.json +5 -0
  122. package/templates/common/Harness/a2a/skills/terminal-control.json +15 -0
  123. package/templates/common/Harness/ownership.manifest.json +142 -2
  124. package/templates/common/Harness/scripts/README.md +134 -0
  125. package/templates/common/Harness/scripts/a2a-terminal.mjs +191 -0
  126. package/templates/common/Harness/scripts/context-budget.mjs +1 -1
  127. package/templates/common/Harness/scripts/sync-host-global.mjs +278 -0
  128. package/templates/common/Harness/scripts/task-state.mjs +949 -26
  129. package/templates/common/Harness/scripts/validate-harness.mjs +637 -62
  130. package/templates/common/Harness/scripts/wf-remove.mjs +42 -5
  131. package/templates/common/Harness/scripts/wf-update-check.mjs +37 -9
  132. package/templates/common/Harness/scripts/wf-update-runner.mjs +325 -0
  133. package/templates/common/Harness/settings.json +35 -0
  134. package/templates/common/Harness/specs/guides/SETUP.md +8 -0
  135. package/templates/common/Harness/specs/protocols/MEMORY_PROTOCOL.md +15 -0
  136. package/templates/common/Harness/specs/protocols/TASK_ARCHIVE.md +16 -5
  137. package/templates/common/Harness/specs/runtime/command-surface.json +229 -0
  138. package/templates/common/Harness/specs/runtime/subagents.md +6 -0
  139. package/templates/common/Harness/specs/workflows/WF-AUTO-SPARK.md +8 -8
  140. package/templates/common/Harness/specs/workflows/WF-AUTO.md +12 -12
  141. package/templates/common/Harness/specs/workflows/WF-MAX.md +5 -0
  142. package/templates/common/Harness/specs/workflows/WF-STATE.md +66 -0
  143. package/templates/common/Harness/tasks/_template/NAMING.md +16 -16
  144. package/templates/common/Harness/tasks/_template/PLAN.md +17 -60
  145. package/templates/common/Harness/tasks/_template/PROBLEM.md +18 -0
  146. package/templates/common/Harness/tasks/_template/PROGRESS.md +9 -14
  147. package/templates/common/Harness/tasks/_template/REFERENCES.md +26 -0
  148. package/templates/common/Harness/tasks/_template/STATE.json +6 -0
  149. package/templates/common/Harness/tasks/_template/ARTIFACTS.md +0 -3
  150. package/templates/common/Harness/tasks/_template/NOTES.md +0 -3
@@ -14,7 +14,7 @@ In direct mode, do not load the full Harness router. Inspect only the files need
14
14
 
15
15
  Complex work may use direct planning, task capsules, tests, and subagents without entering WF. WF execution modes are explicit only: the user must type `/wf`, `$wf`, `/skills wf`, `/wf-max`, `$wf-max`, `/skills wf-max`, `/wf-auto`, `$wf-auto`, `/skills wf-auto`, `/wf-auto-spark`, `$wf-auto-spark`, or `/skills wf-auto-spark` to enter the WF kernel. No other phrasing, complexity heuristic, or inferred intent triggers WF.
16
16
 
17
- `/wf-help`, `$wf-help`, `/skills wf-help`, `/wf-update`, `$wf-update`, and `/skills wf-update` are **direct/compat commands** — do NOT load `Harness/MEMORY.md`, do NOT enter WF. Claude Code and OpenCode execute the direct command files; Codex may invoke the matching compatibility skill shim, which returns the static help/update instructions without entering WF.
17
+ `/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` are **direct/compat commands** — do NOT load `Harness/MEMORY.md`, do NOT enter WF. Claude Code and OpenCode execute the direct command files; Codex may invoke the matching compatibility skill shim.
18
18
 
19
19
  For non-direct workflow commands (`/wf`, `/wf-max`, `/wf-auto`, `/wf-review`, `/wf-learn`, `/wf-readme`, `/wf-remove`, `/wf-browser`, `/wf-auto-spark`, and matching `$wf-*` or `/skills wf-*` forms except the direct/compat commands above), load `Harness/MEMORY.md` first, then `Harness/README.md`.
20
20
 
@@ -24,11 +24,13 @@ If the user says "continue", "resume", "last task", "current task", "status", "w
24
24
 
25
25
  1. Read `Harness/PROGRESS.md` → find Active Task.
26
26
  2. If Active Task exists, read `Harness/tasks/<active-task>/STATE.json` first.
27
- 3. Read `Harness/tasks/<active-task>/PROGRESS.md`.
28
- 4. Read `Harness/tasks/<active-task>/PLAN.md` only if decisions or scope need review.
29
- 5. From STATE.json, recover: phase, gate, tier, ready/running/blocked/done queues, activeQuestion, nextAction.
30
- 6. Do NOT bulk-read `Harness/tasks/` to find context. Use the active pointer.
31
- 7. Direct simple tasks may skip STATE/PLAN/PROGRESS unless the user says "continue"/"resume".
27
+ 3. From STATE.json, check `links.dependsOn` — if non-empty, check whether any dependency tasks are still open (STATE.json status is non-archived) and report blocked dependencies.
28
+ 4. From STATE.json, check `workItems[]` if non-empty, inspect items with status `running` or `ready` for parallel dispatch candidates.
29
+ 5. Read `Harness/tasks/<active-task>/PROGRESS.md`.
30
+ 6. Read `Harness/tasks/<active-task>/PLAN.md` only if decisions or scope need review.
31
+ 7. From STATE.json, recover: phase, gate, tier, ready/running/blocked/done queues, activeQuestion, nextAction.
32
+ 8. Do NOT bulk-read `Harness/tasks/` to find context. Use the active pointer.
33
+ 9. Direct simple tasks may skip STATE/PLAN/PROGRESS unless the user says "continue"/"resume". The `continue` keyword resolves deterministically from the active pointer plus STATE.json — it always recovers the same state.
32
34
 
33
35
  See `Harness/specs/workflows/WF-STATE.md` for the full state machine contract. Completed/abandoned tasks are archived to `Harness/tasks/_archive/` per `Harness/specs/protocols/TASK_ARCHIVE.md`.
34
36
 
@@ -42,8 +42,13 @@ Stack-specific agents can be added after the product shape is known.
42
42
  - [wf-auto](../.claude/skills/wf-auto/SKILL.md) - perpetual adaptive auto-optimization: evidence-selected probes, dynamic obligations, intent checkpoints, evidence ledger.
43
43
  - [wf-auto-spark](../.claude/skills/wf-auto-spark/SKILL.md) - perpetual inspiration mode: external spark search, long-term roadmap with staged milestones, <=50% deviation guard.
44
44
  - [wf-browser](../.claude/skills/wf-browser/SKILL.md) - built-in browser automation/E2E workflow with controllable UI contracts, Browser Use, Playwright, CDP/network evidence, screenshots, traces, and validation matrix.
45
+ - [wf-ui](../.claude/skills/wf-ui/SKILL.md) - Codex compatibility shim for `$wf-ui` / `/skills wf-ui`; direct command starts the local browser control panel without entering WF.
45
46
  - [tdd](../.claude/skills/tdd/SKILL.md) - acceptance-driven TDD: AC-linked RED tests, real UI clicks for browser-visible behavior, Playwright/CDP evidence, and configured coverage gate.
46
47
  - [wf-remove](../.claude/skills/wf-remove/SKILL.md) - safely remove Harness framework files (SAFE/MODIFIED/USER classes), auto-prune empty directories, backup option.
48
+ - [wf-task-record](../.claude/skills/wf-task-record/SKILL.md) - Codex compatibility: use $wf-task-record or /skills wf-task-record to wrap task-state.mjs record.
49
+ - [wf-task-list](../.claude/skills/wf-task-list/SKILL.md) - Codex compatibility: use $wf-task-list or /skills wf-task-list to wrap task-state.mjs list.
50
+ - [wf-task-archive](../.claude/skills/wf-task-archive/SKILL.md) - Codex compatibility: use $wf-task-archive or /skills wf-task-archive to wrap task-state.mjs archive.
51
+ - [wf-command-create](../.claude/skills/wf-command-create/SKILL.md) - Codex compatibility: use $wf-command-create or /skills wf-command-create to update command surfaces from `command-surface.json`.
47
52
 
48
53
  Codex repo-skill mirrors live under `../.agents/skills/` with the same skill names.
49
54
 
@@ -51,6 +56,11 @@ Codex repo-skill mirrors live under `../.agents/skills/` with the same skill nam
51
56
 
52
57
  - [wf-help](../.claude/commands/wf-help.md) - direct `/wf-help` command that returns a WF command table; Codex mirror skill supports `$wf-help` without entering WF.
53
58
  - [wf-update](../.claude/commands/wf-update.md) - direct `/wf-update` command for script-driven update checks, safe apply, conflict handling, and release highlights.
59
+ - [wf-task-record](../.claude/commands/wf-task-record.md) - direct `/wf-task-record` command that wraps `node Harness/scripts/task-state.mjs record`.
60
+ - [wf-task-list](../.claude/commands/wf-task-list.md) - direct `/wf-task-list` command that wraps `node Harness/scripts/task-state.mjs list`.
61
+ - [wf-task-archive](../.claude/commands/wf-task-archive.md) - direct `/wf-task-archive` command that wraps `node Harness/scripts/task-state.mjs archive`.
62
+ - [wf-command-create](../.claude/commands/wf-command-create.md) - direct `/wf-command-create` command for task-backed wf-* command surface changes.
63
+ - [wf-ui](../.claude/commands/wf-ui.md) - direct `/wf-ui` command that starts the local Harness backend and browser control panel.
54
64
 
55
65
  Stack-specific skills can be added after the product shape is known.
56
66
 
@@ -79,6 +89,7 @@ Located under `.claude/rules/ecc/`, auto-loaded by the CC engine:
79
89
  - [Context loading protocol](specs/runtime/context-loading.md)
80
90
  - [Dispatch protocol](specs/runtime/dispatch.md)
81
91
  - [Subagent orchestration](specs/runtime/subagents.md)
92
+ - [Command surface registry](specs/runtime/command-surface.json)
82
93
  - [Extension contract](specs/guides/extension.md)
83
94
  - [Architecture docs](project/architecture.md)
84
95
  - [Agent workflow](specs/runtime/agent-workflow.md)
@@ -4,7 +4,7 @@ Purpose: route humans and agents to the smallest useful context. `CLAUDE.md` is
4
4
 
5
5
  Default load: `CLAUDE.md`. For workflow commands (`/wf`, `/wf-max`, `/wf-auto`, `/wf-review`, `/wf-learn`, `/wf-readme`, `/wf-remove`, `/wf-browser`, `/wf-auto-spark`), also load `Harness/MEMORY.md` (index only per Memory Preflight), this file, and `Harness/PROGRESS.md` when work is active.
6
6
 
7
- `/wf-help`, `$wf-help`, `/skills wf-help`, `/wf-update`, `$wf-update`, and `/skills wf-update` are **direct/compat commands**: skip the router, do NOT load `Harness/MEMORY.md`, do NOT enter WF. Claude Code and OpenCode execute direct command files; Codex uses the matching compatibility skill shim.
7
+ `/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` `/skills wf-ui` are **direct/compat commands**: skip router, skip `Harness/MEMORY.md`, never enter WF. Claude/OpenCode use command files; Codex uses shims.
8
8
 
9
9
  Do not read the whole `Harness/` tree.
10
10
 
@@ -23,9 +23,12 @@ On session start (new window, reopen, resume):
23
23
  - blocked — what's blocking?
24
24
  - nextAction — what to do next
25
25
  4. Do NOT discover context by reading all task directories. Use the active pointer.
26
- 5. Direct simple tasks may skip STATE/PLAN/PROGRESS unless the user says "continue"/"resume".
26
+ 5. Check `links.dependsOn` and `links.blocks` in STATE.json for cross-task
27
+ dependency resolution — read only the listed tasks' STATE.json, not all
28
+ task capsules.
29
+ 6. Direct simple tasks may skip STATE/PLAN/PROGRESS unless the user says "continue"/"resume".
27
30
 
28
- See `Harness/specs/workflows/WF-STATE.md` for the full state machine contract and enums.
31
+ See `Harness/specs/workflows/WF-STATE.md` for the full state machine contract and enums. `/wf-task-list` exposes dependencies and open tasks.
29
32
 
30
33
  ## Direct Mode (Degradation Path)
31
34
 
@@ -35,9 +38,9 @@ Complex work may use direct planning, task capsules, tests, and subagents withou
35
38
 
36
39
  Escalate to the router (next section) only when:
37
40
  - User explicitly invokes `/wf`, `/wf-max`, `$wf`, `$wf-max`, `/skills wf`, `/skills wf-max`, or says `wf` / `wf-max`
38
- - User invokes another workflow `/wf-*`, `$wf-*`, or `/skills wf-*` command, excluding `/wf-help`, `$wf-help`, `/skills wf-help`, `/wf-update`, `$wf-update`, and `/skills wf-update`
41
+ - User invokes another workflow `/wf-*`, `$wf-*`, or `/skills wf-*` command, excluding direct/compat commands listed in `Harness/specs/runtime/command-surface.json`
39
42
 
40
- `/wf-help`, `$wf-help`, `/skills wf-help`, `/wf-update`, `$wf-update`, and `/skills wf-update` are direct/compat commands executed immediately without router load.
43
+ Direct/compat commands are executed immediately without router load.
41
44
 
42
45
  ## 0-1 Flow
43
46
 
@@ -52,8 +55,8 @@ For the full phase contract, load [lifecycle.md](specs/guides/lifecycle.md).
52
55
  - This file is a router, not a full spec.
53
56
  - If the task does not clearly match a row below, search by keywords before loading more docs.
54
57
  - project files are the only durable communication channel; chat/subagent transcript state is non-authoritative.
55
- - Important assumptions, decisions, blockers, evidence, and handoffs must be written to the current task's `tasks/<id>/PROGRESS.md` and `tasks/<id>/PLAN.md`, the current feature doc, `Harness/MEMORY.md`, or `Harness/memory/*` as appropriate.
56
- - Task records are compact by default: PLAN holds goal, decisions, scope, risks; PROGRESS holds status/next, changes, verification. Do not paste command logs, full transcripts, or broad PRDs when a link or one-line evidence entry is enough.
58
+ - Write assumptions, decisions, blockers, evidence, and handoffs to the current task docs, feature doc, `Harness/MEMORY.md`, or `Harness/memory/*`.
59
+ - Task records are compact by default: PLAN holds goal, decisions, scope, risks; PROGRESS holds status/next, changes, verification. Link logs/transcripts instead of pasting them.
57
60
  - Build commands, git conventions, and release notes belong in root `README.md`, not `CLAUDE.md`.
58
61
  - README rewrites are optional project-doc work. Use `wf-readme` and preserve existing public docs unless the user approves a broader restructure.
59
62
  - Code architecture belongs in [architecture.md](project/architecture.md) or the current feature doc, not `CLAUDE.md`.
@@ -104,6 +107,7 @@ Routing priority: **direct mode is the default** when no explicit WF token is pr
104
107
  | Need perpetual auto-optimization | /wf-auto, $wf-auto, /skills wf-auto (explicit user token only) | [WF-AUTO.md](specs/workflows/WF-AUTO.md), [WF-AUTO-ANGLES.md](specs/workflows/WF-AUTO-ANGLES.md), [subagents.md](specs/runtime/subagents.md), [dispatch.md](specs/runtime/dispatch.md) | perpetual loop, adaptive probe selection, dynamic risk obligations, spark search, intent checkpoint, evidence ledger; CEO never writes code |
105
108
  | Need perpetual inspiration mode | /wf-auto-spark, $wf-auto-spark, /skills wf-auto-spark (explicit user token only) | [WF-AUTO-SPARK.md](specs/workflows/WF-AUTO-SPARK.md), [WF-AUTO.md](specs/workflows/WF-AUTO.md), [subagents.md](specs/runtime/subagents.md), [dispatch.md](specs/runtime/dispatch.md) | roadmap-anchored: North Star + milestones; external spark search; <=50% deviation guard; never auto-stops |
106
109
  | Need WF-MAX mode (explicit only) | /wf-max, $wf-max, /skills wf-max (explicit user token only) | [WF-MAX.md](specs/workflows/WF-MAX.md), [WF-KERNEL.md](specs/workflows/WF-KERNEL.md), [subagents.md](specs/runtime/subagents.md), [dispatch.md](specs/runtime/dispatch.md) | /wf kernel + max safe fan-out (WF-Max-Useful default, WF-Max-Strict override) |
110
+ | Need Harness control panel | /wf-ui, $wf-ui, /skills wf-ui (direct command) | `.claude/commands/wf-ui.md`, `.opencode/commands/wf-ui.md`; Codex shim: `.claude/skills/wf-ui/SKILL.md` | start local backend + browser UI directly; no WF/router load |
107
111
  | Need peer review | /wf-review, $wf-review, peer review, second opinion, cross-check, stuck | `.claude/skills/wf-review/SKILL.md`, `.agents/skills/wf-review/SKILL.md`, `Harness/README.md`, `.opencode/commands/wf-review.md` | peer CLI when available; otherwise installed `reviewer` role subagent; controller decides |
108
112
  | Adding harness to existing project | existing project, onboarding, migrate, bootstrap, preserve, conflict | [extension.md](specs/guides/extension.md), [PROGRESS.md](PROGRESS.md), root `README.md` and package/CI files | discovered project facts, preserved config, manual registration plan |
109
113
  | README optimization | README, docs, quickstart, install docs, architecture diagram, command table, documentation polish | root `README.md`, `.claude/skills/wf-readme/SKILL.md`, [PROGRESS.md](PROGRESS.md), [architecture.md](project/architecture.md) as needed | approved README mode, preserved sections, proposed diff plan |
@@ -119,6 +123,10 @@ Routing priority: **direct mode is the default** when no explicit WF token is pr
119
123
  | Harness readiness check | validate, readiness, placeholder, missing file, release gate | `Harness/scripts/validate-harness.mjs`, `Harness/scripts/validate-harness.mjs --strict` | structural install check; strict bootstrap/release placeholder check |
120
124
  | Need harness update | /wf-update, $wf-update, update, check for updates, harness version | `.claude/commands/wf-update.md`, `.opencode/commands/wf-update.md`, `Harness/.harness-version`, `Harness/scripts/wf-update-check.mjs`; Codex fallback: `.claude/skills/wf-update/SKILL.md` | script-driven comparison, SAFE/CONFLICT/PRESERVE classification, changelog release highlights, user decides conflicts |
121
125
  | Need harness removal | /wf-remove, $wf-remove, wf remove, remove harness, uninstall harness | `.claude/skills/wf-remove/SKILL.md`, `.agents/skills/wf-remove/SKILL.md`, `Harness/scripts/wf-remove.mjs` | safe removal plan: auto-remove SAFE, confirm MODIFIED, never touch USER DATA |
126
+ | Need task record | /wf-task-record, $wf-task-record, /skills wf-task-record, task record, record work, log progress | `tasks/<id>/PROGRESS.md`, `tasks/<id>/PLAN.md` | progress record, decision log, evidence pointer; direct/compat — do NOT load Harness/MEMORY.md |
127
+ | Need task list | /wf-task-list, $wf-task-list, /skills wf-task-list, list tasks, show tasks, task table, dependency view | `Harness/PROGRESS.md`, `Harness/specs/workflows/WF-STATE.md` | task index, dependency graph, open tasks list; direct/compat — do NOT load Harness/MEMORY.md |
128
+ | Need task archive | /wf-task-archive, $wf-task-archive, /skills wf-task-archive, archive task, cleanup tasks | `Harness/scripts/task-state.mjs`, `Harness/specs/protocols/TASK_ARCHIVE.md` | archive execution plan; direct/compat — do NOT load Harness/MEMORY.md |
129
+ | Need command surface change | /wf-command-create, $wf-command-create, /skills wf-command-create, add command, command surface | `.claude/commands/wf-command-create.md`, `Harness/specs/runtime/command-surface.json` | task-backed command creation checklist; direct/compat — do NOT load Harness/MEMORY.md |
122
130
 
123
131
  ## Gates
124
132
 
@@ -145,43 +153,18 @@ Routing priority: **direct mode is the default** when no explicit WF token is pr
145
153
  - Run `node Harness/scripts/validate-harness.mjs` for install-complete scaffold structure; run `node Harness/scripts/validate-harness.mjs --strict` only after bootstrap resolves project-fact placeholders and before release.
146
154
  - If a doc still has `{{...}}`, treat that section as a template, not project fact.
147
155
 
148
- ## Doc Map
149
-
150
- | Category | Files |
151
- |----------|-------|
152
- | **Router + Index** | `README.md`, `MEMORY.md`, `PROGRESS.md` |
153
- | **Task Capsule** | `tasks/<id>/PROGRESS.md`, `tasks/<id>/PLAN.md`, `tasks/<id>/STATE.json`, `tasks/_template/` |
154
- | **Workflows** | `specs/workflows/WF.md`, `specs/workflows/WF-KERNEL.md`, `specs/workflows/WF-STATE.md`, `specs/workflows/WF-MAX.md`, `specs/workflows/WF-AUTO.md`, `specs/workflows/WF-AUTO-SPARK.md` |
155
- | **Protocols** | `specs/protocols/ACCEPTANCE_PROTOCOL.md`, `specs/protocols/AGENT_ISOLATION.md`, `specs/protocols/HARNESS_BRIDGE.md`, `specs/protocols/DEBUG_PROTOCOL.md`, `specs/protocols/MEMORY_PROTOCOL.md` |
156
- | **Guides** | `specs/guides/ECC-GUIDE.md`, `specs/guides/lifecycle.md`, `specs/guides/extension.md`, `project/architecture.md`, `specs/protocols/TDD-GUIDE.md`, `specs/protocols/TASK_ARCHIVE.md` |
157
- | **Orchestration** | `specs/runtime/subagents.md`, `specs/runtime/context-loading.md`, `specs/runtime/dispatch.md`, `specs/runtime/agent-workflow.md`, `specs/workflows/WF-STATE.md` |
158
- | **Research** | `research/README.md`, `research/PRD.md`, `research/research-results.md` |
159
- | **Acceptance Templates** | `templates/PRD.template.md`, `templates/ACCEPTANCE.template.md`, `templates/UI_CONTRACT.template.md`, `templates/API_CONTRACT.template.md`, `templates/TEST_PLAN.template.md`, `templates/PLAYWRIGHT_SPEC.template.ts`, `templates/VALIDATION_REPORT.template.md` |
160
- | **Memory** | `memory/tool-usage-reflections.md`, `memory/user-corrections-preferences.md`, `memory/agent-lessons-patterns.md` |
161
- | **Scripts** | `scripts/validate-harness.mjs`, `scripts/context-budget.mjs`, `scripts/l2-cache-telemetry.mjs`, `scripts/wf-update-check.mjs`, `scripts/wf-remove.mjs`, `scripts/task-state.mjs`, `scripts/archive-tasks.mjs` |
162
- | **Runtime + Config** | `.harness-version`, `ownership.manifest.json`, `settings.json` |
163
- | **Agents + Skills** | `.claude/agents/*`, `.claude/skills/*`, `.agents/skills/*` |
164
- | **Direct Commands** | `.claude/commands/wf-help.md`, `.claude/commands/wf-update.md`, `.opencode/commands/wf-help.md`, `.opencode/commands/wf-update.md` |
165
- | **Workflow Command Wrappers** | `.claude/commands/wf*.md`, `.opencode/commands/wf*.md` |
166
-
167
156
  ## Direct Commands
168
157
 
169
158
  | Command | Purpose |
170
159
  |---|---|
171
160
  | `/wf-help`, `$wf-help` | Returns a table of all Harness WF commands, usage, and purpose. Claude Code/OpenCode use direct command files; Codex uses the minimal `wf-help` skill shim. It never starts WF. |
172
161
  | `/wf-update`, `$wf-update` | Script-driven harness update: fetch + compare + apply + report release highlights. Direct command for Claude Code and OpenCode; skill path available for Codex compatibility. |
162
+ | `/wf-task-record`, `$wf-task-record` | Record progress, decisions, and evidence to the active task capsule. Direct/compat — no Harness/MEMORY.md load. |
163
+ | `/wf-task-list`, `$wf-task-list` | List tasks with dependency view, open tasks filter, and archive summary. Direct/compat — no Harness/MEMORY.md load. |
164
+ | `/wf-task-archive`, `$wf-task-archive` | Archive completed/verified task capsules. Direct/compat — no Harness/MEMORY.md load. |
165
+ | `/wf-command-create`, `$wf-command-create` | Create or modify wf-* command surfaces from `command-surface.json`. Direct/compat — creates/resumes a task capsule, no Harness/MEMORY.md load. |
166
+ | `/wf-ui`, `$wf-ui` | Start the local Harness backend and browser control panel. Direct/compat — no Harness/MEMORY.md load. |
173
167
 
174
168
  ## Skill Commands
175
169
 
176
- | Claude Code | Codex | Purpose |
177
- |---|---|---|
178
- | `/wf <task>` | `$wf <task>` | Tiered WF: WF-Light (low-risk, planner/test/verifier), WF-Standard (multi-file, compact ACs), WF-Full (high-risk/cross-layer, full role chain) |
179
- | `/wf-max [task]` | `$wf-max [task]` | WF-Max-Useful default (fan-out only where independent), WF-Max-Strict override (unconditional fan-out) |
180
- | `/wf-auto` | `$wf-auto` | Perpetual adaptive auto-optimization: dynamic probes, risk obligations, evidence-based exhaustion |
181
- | `/wf-auto-spark` | `$wf-auto-spark` | Perpetual inspiration: spark search, roadmap-anchored, <=50% deviation guard, never auto-stops |
182
- | `/wf-review [focus]` | `$wf-review [focus]` | Peer CLI review via Claude/Codex/OpenCode, or installed reviewer subagent fallback |
183
- | `/wf-learn` | `$wf-learn` | Force learning cycle: context-master -> memory-master |
184
- | `/wf-browser [task]` | `$wf-browser [task]` | Built-in AI-driven browser automation for E2E testing |
185
- | `/wf-readme [task]` | `$wf-readme [task]` | README preservation, merge, and documentation improvement workflow |
186
- | `/wf-update` | `$wf-update` | Script-driven harness update: fetch + compare + apply + report release highlights |
187
- | `/wf-remove` | `$wf-remove` | Safe harness removal: auto-delete SAFE, confirm MODIFIED, preserve USER DATA |
170
+ Workflow commands: `/wf`, `/wf-max`, `/wf-auto`, `/wf-auto-spark`, `/wf-review`, `/wf-learn`, `/wf-browser`, `/wf-readme`, `/wf-remove` with matching Codex `$...` and `/skills ...` forms. They load `Harness/MEMORY.md` and follow the registered task capsule policy. `/wf-update` and `/wf-ui` remain direct.
@@ -0,0 +1,79 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "rootAgentId": "ceo",
4
+ "agents": [
5
+ {
6
+ "agentId": "ceo",
7
+ "role": "CEO Leader",
8
+ "level": 0,
9
+ "kind": "controller",
10
+ "skills": ["wf", "subagent-orchestrator", "terminal-control"],
11
+ "permissions": ["plan", "dispatch", "read-terminals", "send-terminal-input"]
12
+ },
13
+ {
14
+ "agentId": "product-manager",
15
+ "role": "Product Manager",
16
+ "level": 1,
17
+ "kind": "planner",
18
+ "skills": ["product-shape", "acceptance"],
19
+ "permissions": ["read-state", "define-ac"]
20
+ },
21
+ {
22
+ "agentId": "architect",
23
+ "role": "Architect",
24
+ "level": 1,
25
+ "kind": "architecture",
26
+ "skills": ["architecture", "contracts"],
27
+ "permissions": ["read-code", "define-contracts"]
28
+ },
29
+ {
30
+ "agentId": "backend-expert",
31
+ "role": "Backend Expert",
32
+ "level": 1,
33
+ "kind": "implementer",
34
+ "skills": ["runtime-detection", "terminal-control", "a2a-files"],
35
+ "permissions": ["read-code", "write-backend", "terminal-io"]
36
+ },
37
+ {
38
+ "agentId": "frontend-expert",
39
+ "role": "Frontend Expert",
40
+ "level": 1,
41
+ "kind": "implementer",
42
+ "skills": ["ui-control-plane"],
43
+ "permissions": ["read-code", "write-ui"]
44
+ },
45
+ {
46
+ "agentId": "reviewer",
47
+ "role": "Reviewer",
48
+ "level": 1,
49
+ "kind": "review",
50
+ "skills": ["wf-review"],
51
+ "permissions": ["read-code", "read-evidence"]
52
+ },
53
+ {
54
+ "agentId": "verifier",
55
+ "role": "Verifier",
56
+ "level": 1,
57
+ "kind": "validation",
58
+ "skills": ["wf-browser", "test-runner"],
59
+ "permissions": ["run-tests", "read-evidence"]
60
+ },
61
+ {
62
+ "agentId": "terminal-controller",
63
+ "role": "Terminal Controller",
64
+ "level": 1,
65
+ "kind": "runtime",
66
+ "skills": ["terminal-control"],
67
+ "permissions": ["read-terminals", "send-terminal-input"]
68
+ }
69
+ ],
70
+ "edges": [
71
+ { "from": "ceo", "to": "product-manager", "relation": "defines" },
72
+ { "from": "ceo", "to": "architect", "relation": "routes" },
73
+ { "from": "ceo", "to": "backend-expert", "relation": "dispatches" },
74
+ { "from": "ceo", "to": "frontend-expert", "relation": "dispatches" },
75
+ { "from": "ceo", "to": "reviewer", "relation": "requests-review" },
76
+ { "from": "ceo", "to": "verifier", "relation": "requests-evidence" },
77
+ { "from": "ceo", "to": "terminal-controller", "relation": "controls" }
78
+ ]
79
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "source": "backend-runtime-detector",
4
+ "runtimes": ["claude", "cc", "codex", "opencode", "openclaw", "pi"]
5
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "skillId": "terminal-control",
4
+ "name": "Terminal Control",
5
+ "source": "Harness/a2a/skills/terminal-control.json",
6
+ "description": "Bounded A2A tools for listing terminal sessions, reading output ranges, globbing terminal events, and attach-gated input forwarding.",
7
+ "tools": [
8
+ { "name": "list-sessions", "reads": ["Harness/tasks/**/sessions/**/STATE.json"] },
9
+ { "name": "read-range", "reads": ["Harness/tasks/**/sessions/**/terminal.jsonl"], "args": ["session", "from", "to", "tail"] },
10
+ { "name": "glob-events", "reads": ["Harness/tasks/**/sessions/**/events.jsonl"], "args": ["pattern", "since", "limit"] },
11
+ { "name": "send-input", "writes": ["Harness/tasks/**/sessions/**/input-requests.jsonl"], "args": ["session", "text"] }
12
+ ],
13
+ "defaultMode": "watch",
14
+ "inputPolicy": "attach-mode-required"
15
+ }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generator": "0.8.17",
3
+ "generator": "0.8.19",
4
4
  "source": "https://raw.githubusercontent.com/LiWeny16/create-harness-vibe-coding/main/templates/common/",
5
- "generated": "2026-07-26T09:26:35.146Z",
5
+ "generated": "2026-07-30T14:31:29.365Z",
6
6
  "preserve": [
7
7
  "Harness/PROGRESS.md",
8
8
  "Harness/tasks/**",
@@ -196,6 +196,11 @@
196
196
  "kind": "skill",
197
197
  "overwrite": "safe"
198
198
  },
199
+ {
200
+ "path": ".agents/skills/wf-command-create/SKILL.md",
201
+ "kind": "skill",
202
+ "overwrite": "safe"
203
+ },
199
204
  {
200
205
  "path": ".agents/skills/wf-help/SKILL.md",
201
206
  "kind": "skill",
@@ -226,6 +231,26 @@
226
231
  "kind": "skill",
227
232
  "overwrite": "safe"
228
233
  },
234
+ {
235
+ "path": ".agents/skills/wf-task-archive/SKILL.md",
236
+ "kind": "skill",
237
+ "overwrite": "safe"
238
+ },
239
+ {
240
+ "path": ".agents/skills/wf-task-list/SKILL.md",
241
+ "kind": "skill",
242
+ "overwrite": "safe"
243
+ },
244
+ {
245
+ "path": ".agents/skills/wf-task-record/SKILL.md",
246
+ "kind": "skill",
247
+ "overwrite": "safe"
248
+ },
249
+ {
250
+ "path": ".agents/skills/wf-ui/SKILL.md",
251
+ "kind": "skill",
252
+ "overwrite": "safe"
253
+ },
229
254
  {
230
255
  "path": ".agents/skills/wf-update/SKILL.md",
231
256
  "kind": "skill",
@@ -346,6 +371,11 @@
346
371
  "kind": "command",
347
372
  "overwrite": "safe"
348
373
  },
374
+ {
375
+ "path": ".claude/commands/wf-command-create.md",
376
+ "kind": "command",
377
+ "overwrite": "safe"
378
+ },
349
379
  {
350
380
  "path": ".claude/commands/wf-help.md",
351
381
  "kind": "command",
@@ -376,6 +406,26 @@
376
406
  "kind": "command",
377
407
  "overwrite": "safe"
378
408
  },
409
+ {
410
+ "path": ".claude/commands/wf-task-archive.md",
411
+ "kind": "command",
412
+ "overwrite": "safe"
413
+ },
414
+ {
415
+ "path": ".claude/commands/wf-task-list.md",
416
+ "kind": "command",
417
+ "overwrite": "safe"
418
+ },
419
+ {
420
+ "path": ".claude/commands/wf-task-record.md",
421
+ "kind": "command",
422
+ "overwrite": "safe"
423
+ },
424
+ {
425
+ "path": ".claude/commands/wf-ui.md",
426
+ "kind": "command",
427
+ "overwrite": "safe"
428
+ },
379
429
  {
380
430
  "path": ".claude/commands/wf-update.md",
381
431
  "kind": "command",
@@ -426,6 +476,11 @@
426
476
  "kind": "skill",
427
477
  "overwrite": "safe"
428
478
  },
479
+ {
480
+ "path": ".claude/skills/wf-command-create/SKILL.md",
481
+ "kind": "skill",
482
+ "overwrite": "safe"
483
+ },
429
484
  {
430
485
  "path": ".claude/skills/wf-help/SKILL.md",
431
486
  "kind": "skill",
@@ -456,6 +511,26 @@
456
511
  "kind": "skill",
457
512
  "overwrite": "safe"
458
513
  },
514
+ {
515
+ "path": ".claude/skills/wf-task-archive/SKILL.md",
516
+ "kind": "skill",
517
+ "overwrite": "safe"
518
+ },
519
+ {
520
+ "path": ".claude/skills/wf-task-list/SKILL.md",
521
+ "kind": "skill",
522
+ "overwrite": "safe"
523
+ },
524
+ {
525
+ "path": ".claude/skills/wf-task-record/SKILL.md",
526
+ "kind": "skill",
527
+ "overwrite": "safe"
528
+ },
529
+ {
530
+ "path": ".claude/skills/wf-ui/SKILL.md",
531
+ "kind": "skill",
532
+ "overwrite": "safe"
533
+ },
459
534
  {
460
535
  "path": ".claude/skills/wf-update/SKILL.md",
461
536
  "kind": "skill",
@@ -586,6 +661,11 @@
586
661
  "kind": "command",
587
662
  "overwrite": "safe"
588
663
  },
664
+ {
665
+ "path": ".opencode/commands/wf-command-create.md",
666
+ "kind": "command",
667
+ "overwrite": "safe"
668
+ },
589
669
  {
590
670
  "path": ".opencode/commands/wf-help.md",
591
671
  "kind": "command",
@@ -616,6 +696,26 @@
616
696
  "kind": "command",
617
697
  "overwrite": "safe"
618
698
  },
699
+ {
700
+ "path": ".opencode/commands/wf-task-archive.md",
701
+ "kind": "command",
702
+ "overwrite": "safe"
703
+ },
704
+ {
705
+ "path": ".opencode/commands/wf-task-list.md",
706
+ "kind": "command",
707
+ "overwrite": "safe"
708
+ },
709
+ {
710
+ "path": ".opencode/commands/wf-task-record.md",
711
+ "kind": "command",
712
+ "overwrite": "safe"
713
+ },
714
+ {
715
+ "path": ".opencode/commands/wf-ui.md",
716
+ "kind": "command",
717
+ "overwrite": "safe"
718
+ },
619
719
  {
620
720
  "path": ".opencode/commands/wf-update.md",
621
721
  "kind": "command",
@@ -631,6 +731,21 @@
631
731
  "kind": "config",
632
732
  "overwrite": "safe"
633
733
  },
734
+ {
735
+ "path": "Harness/a2a/role-graph.json",
736
+ "kind": "config",
737
+ "overwrite": "safe"
738
+ },
739
+ {
740
+ "path": "Harness/a2a/runtime-registry.json",
741
+ "kind": "config",
742
+ "overwrite": "safe"
743
+ },
744
+ {
745
+ "path": "Harness/a2a/skills/terminal-control.json",
746
+ "kind": "config",
747
+ "overwrite": "safe"
748
+ },
634
749
  {
635
750
  "path": "Harness/ownership.manifest.json",
636
751
  "kind": "config",
@@ -641,6 +756,16 @@
641
756
  "kind": "config",
642
757
  "overwrite": "safe"
643
758
  },
759
+ {
760
+ "path": "Harness/scripts/README.md",
761
+ "kind": "script",
762
+ "overwrite": "safe"
763
+ },
764
+ {
765
+ "path": "Harness/scripts/a2a-terminal.mjs",
766
+ "kind": "script",
767
+ "overwrite": "safe"
768
+ },
644
769
  {
645
770
  "path": "Harness/scripts/archive-tasks.mjs",
646
771
  "kind": "script",
@@ -661,6 +786,11 @@
661
786
  "kind": "script",
662
787
  "overwrite": "safe"
663
788
  },
789
+ {
790
+ "path": "Harness/scripts/sync-host-global.mjs",
791
+ "kind": "script",
792
+ "overwrite": "safe"
793
+ },
664
794
  {
665
795
  "path": "Harness/scripts/task-state.mjs",
666
796
  "kind": "script",
@@ -686,6 +816,11 @@
686
816
  "kind": "script",
687
817
  "overwrite": "safe"
688
818
  },
819
+ {
820
+ "path": "Harness/scripts/wf-update-runner.mjs",
821
+ "kind": "script",
822
+ "overwrite": "safe"
823
+ },
689
824
  {
690
825
  "path": "Harness/specs/guides/ECC-GUIDE.md",
691
826
  "kind": "doc",
@@ -746,6 +881,11 @@
746
881
  "kind": "doc",
747
882
  "overwrite": "safe"
748
883
  },
884
+ {
885
+ "path": "Harness/specs/runtime/command-surface.json",
886
+ "kind": "config",
887
+ "overwrite": "safe"
888
+ },
749
889
  {
750
890
  "path": "Harness/specs/runtime/context-loading.md",
751
891
  "kind": "doc",