@tea-agent/loop-agent 0.13.0-beta.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/AGENTS.md +157 -155
  2. package/CHANGELOG.md +301 -322
  3. package/README.md +335 -345
  4. package/bin/agent-worker.js +22 -22
  5. package/bin/loop-agent.js +21 -21
  6. package/dist/commands/cursor-prompt.js +6 -6
  7. package/dist/commands/init.js +597 -528
  8. package/dist/commands/loop-benchmark.js +11 -11
  9. package/dist/commands/pi-reuse-benchmark.js +16 -16
  10. package/dist/executors/shell-executor.js +200 -21
  11. package/dist/infrastructure/evaluation/candidate-store.js +5 -1
  12. package/dist/sidecars/cursor-prompt/executor.js +1 -1
  13. package/dist/task/runtime.js +27 -27
  14. package/dist/worker/observe/static/api.js +46 -46
  15. package/dist/worker/observe/static/app.js +150 -150
  16. package/dist/worker/observe/static/constants.js +148 -148
  17. package/dist/worker/observe/static/copy.js +67 -67
  18. package/dist/worker/observe/static/dag-helpers.js +172 -172
  19. package/dist/worker/observe/static/dag-layout.d.ts +31 -31
  20. package/dist/worker/observe/static/dag-layout.js +83 -83
  21. package/dist/worker/observe/static/dag-model.js +72 -72
  22. package/dist/worker/observe/static/dom.js +212 -53
  23. package/dist/worker/observe/static/format-pool.js +67 -67
  24. package/dist/worker/observe/static/format.js +292 -292
  25. package/dist/worker/observe/static/index.html +308 -308
  26. package/dist/worker/observe/static/kpi.js +94 -94
  27. package/dist/worker/observe/static/relations.js +133 -133
  28. package/dist/worker/observe/static/router.js +93 -93
  29. package/dist/worker/observe/static/run-processing.js +148 -148
  30. package/dist/worker/observe/static/shell-chrome.js +68 -68
  31. package/dist/worker/observe/static/state.js +267 -253
  32. package/dist/worker/observe/static/styles.css +1902 -1902
  33. package/dist/worker/observe/static/views/batch.js +227 -227
  34. package/dist/worker/observe/static/views/dag-graph.js +172 -172
  35. package/dist/worker/observe/static/views/dag-inspector.js +627 -607
  36. package/dist/worker/observe/static/views/dag.js +371 -362
  37. package/dist/worker/observe/static/views/dashboard.js +509 -252
  38. package/dist/worker/observe/static/views/failures.js +143 -143
  39. package/dist/worker/observe/static/views/feature.js +492 -492
  40. package/dist/worker/observe/static/views/pool.js +350 -350
  41. package/dist/worker/observe/static/views/run.js +453 -453
  42. package/dist/worker/observe/static/views/session-timeline.js +219 -205
  43. package/dist/worker/observe/static/views/shell.js +7 -7
  44. package/dist/worker/observe/static/views/task.js +314 -314
  45. package/dist/worker/observe/static/views/timeline.js +163 -163
  46. package/dist/workflows/dag/backend-test-case-manifest.js +503 -0
  47. package/dist/workflows/dag/backend-test-execution-contract.js +353 -0
  48. package/dist/workflows/dag/backend-test-result-contract.js +568 -0
  49. package/dist/workflows/dag/canvas-observer.js +275 -275
  50. package/dist/workflows/dag/decision-envelope.js +57 -2
  51. package/dist/workflows/dag/frontend-implementation-contract.js +240 -0
  52. package/dist/workflows/dag/frontend-project-capability.js +309 -0
  53. package/dist/workflows/dag/frontend-repair.js +341 -0
  54. package/dist/workflows/dag/frontend-risk.js +161 -0
  55. package/dist/workflows/dag/frontend-verification-trace.js +190 -0
  56. package/dist/workflows/dag/init-hybrid.js +1020 -125
  57. package/dist/workflows/dag/repair-artifact.js +43 -3
  58. package/dist/workflows/dag/skill-instructions.js +4 -2
  59. package/dist/workflows/dag/types.js +29 -8
  60. package/docs/README.md +105 -104
  61. package/docs/agent-dag-recovery-playbook.md +195 -195
  62. package/docs/agent-dag-runner.md +67 -67
  63. package/docs/architecture/README.md +26 -26
  64. package/docs/architecture/dag-execution.md +140 -140
  65. package/docs/architecture/evolution.md +54 -54
  66. package/docs/architecture/facts-and-state.md +71 -71
  67. package/docs/architecture/runtime-boundaries.md +191 -191
  68. package/docs/architecture/system-overview.md +93 -93
  69. package/docs/architecture/worker-and-feature.md +85 -85
  70. package/docs/cursor-prompt-sidecar.md +36 -36
  71. package/docs/decisions/README.md +18 -18
  72. package/docs/design/README.md +167 -167
  73. package/docs/development-principles.md +73 -73
  74. package/docs/exec-plans/README.md +6 -6
  75. package/docs/exec-plans/active/README.md +1 -4
  76. package/docs/exec-plans/completed/README.md +106 -84
  77. package/docs/feature-workflow.md +414 -389
  78. package/docs/harness-methodology-debugging.md +153 -153
  79. package/docs/harness-methodology-tdd.md +130 -130
  80. package/docs/harness-methodology-verification.md +27 -27
  81. package/docs/init-surface.manifest.json +307 -289
  82. package/docs/loop-agent-harness.md +142 -142
  83. package/docs/production-readiness.md +96 -96
  84. package/docs/progress/README.md +76 -60
  85. package/docs/reports/README.md +150 -108
  86. package/docs/skills/README.md +7 -7
  87. package/docs/skills/vetted-skill-registry.md +29 -29
  88. package/docs/templates/adr.md +60 -60
  89. package/docs/templates/agent-dag-authority-surface-audit.prompt.md +94 -94
  90. package/docs/templates/agent-dag-decision-envelope.schema.json +213 -213
  91. package/docs/templates/agent-dag-decision-gate-dogfood-report.md +117 -117
  92. package/docs/templates/agent-dag-decision-gate.prompt.md +246 -246
  93. package/docs/templates/agent-dag-process-supervisor.prompt.md +98 -98
  94. package/docs/templates/agent-dag-report.schema.json +473 -473
  95. package/docs/templates/agent-dag-review-verdict.prompt.md +68 -68
  96. package/docs/templates/agent-dag.base.json +190 -190
  97. package/docs/templates/agent-dag.final-verification.json +185 -185
  98. package/docs/templates/agent-dag.schema.json +411 -411
  99. package/docs/templates/agent-dag.supervised-implementation.json +620 -501
  100. package/docs/templates/backend-test-analysis.schema.json +44 -44
  101. package/docs/templates/backend-test-case-manifest.schema.json +190 -0
  102. package/docs/templates/backend-test-dag.classify.prompt.md +75 -0
  103. package/docs/templates/backend-test-dag.generate-pytest.prompt.md +204 -202
  104. package/docs/templates/backend-test-dag.json +559 -311
  105. package/docs/templates/backend-test-dag.retrospect.prompt.md +139 -125
  106. package/docs/templates/backend-test-dag.review-cases.prompt.md +83 -81
  107. package/docs/templates/backend-test-execution.schema.json +133 -0
  108. package/docs/templates/backend-test-result.schema.json +99 -0
  109. package/docs/templates/branch-merge-report.md +93 -0
  110. package/docs/templates/exec-plan.md +64 -64
  111. package/docs/templates/feature-spec.md +53 -53
  112. package/docs/templates/frontend-design-contract.md +42 -42
  113. package/docs/templates/frontend-eval/fixtures/failures/01-type-build-error.md +17 -0
  114. package/docs/templates/frontend-eval/fixtures/failures/02-unit-component-test-fail.md +16 -0
  115. package/docs/templates/frontend-eval/fixtures/failures/03-fixture-schema-drift.md +16 -0
  116. package/docs/templates/frontend-eval/fixtures/failures/04-missing-loading-empty-error-state.md +16 -0
  117. package/docs/templates/frontend-eval/fixtures/failures/05-forbidden-write-writeset-expansion.md +16 -0
  118. package/docs/templates/frontend-eval/fixtures/failures/06-unapproved-dependency-add.md +16 -0
  119. package/docs/templates/frontend-eval/fixtures/failures/07-mock-production-on.md +21 -0
  120. package/docs/templates/frontend-eval/fixtures/functional/01-simple-component-style.md +29 -0
  121. package/docs/templates/frontend-eval/fixtures/functional/02-form-validation.md +28 -0
  122. package/docs/templates/frontend-eval/fixtures/functional/03-list-detail-page.md +28 -0
  123. package/docs/templates/frontend-eval/fixtures/functional/04-api-mock.md +29 -0
  124. package/docs/templates/frontend-eval/fixtures/functional/05-permission-auth-gated-ui.md +27 -0
  125. package/docs/templates/frontend-eval/fixtures/functional/06-ssr-server-client-boundary.md +28 -0
  126. package/docs/templates/frontend-eval/fixtures/functional/07-shared-public-component-api.md +28 -0
  127. package/docs/templates/frontend-eval/fixtures/functional/08-pure-local-no-remote.md +27 -0
  128. package/docs/templates/frontend-eval/metrics.md +138 -0
  129. package/docs/templates/frontend-eval/smoke-targets.md +53 -0
  130. package/docs/templates/frontend-implementation-contract.schema.json +27 -0
  131. package/docs/templates/frontend-task-constraints.md +35 -35
  132. package/docs/templates/frontend-task-requirement.md +70 -70
  133. package/docs/templates/frontend-test-dag.generate-cases.prompt.md +5 -5
  134. package/docs/templates/frontend-test-dag.json +23 -23
  135. package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +3 -3
  136. package/docs/templates/frontend-test-dag.retrospect.prompt.md +3 -3
  137. package/docs/templates/frontend-test-dag.review-cases.prompt.md +3 -3
  138. package/docs/templates/frontend-test-dag.review-execution.prompt.md +3 -3
  139. package/docs/templates/harness.schema.json +221 -221
  140. package/docs/templates/hybrid-dag.json +188 -188
  141. package/docs/templates/init-evolution-review.md +35 -35
  142. package/docs/templates/interactive-ui-round2-experiment.md +66 -66
  143. package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -118
  144. package/docs/templates/knowledge-sync-dag.json +178 -178
  145. package/docs/templates/knowledge-sync-draft.schema.json +71 -71
  146. package/docs/templates/product-line/AGENTS.md +8 -8
  147. package/docs/templates/product-line/README.md +9 -9
  148. package/docs/templates/product-line/acceptance.yaml +14 -14
  149. package/docs/templates/product-line/closeout.yaml +9 -9
  150. package/docs/templates/product-line/design.md +13 -13
  151. package/docs/templates/product-line/links.md +10 -10
  152. package/docs/templates/product-line/requirement.md +17 -17
  153. package/docs/templates/product-line/task-graph.yaml +15 -15
  154. package/docs/templates/product-line/task.yaml +64 -64
  155. package/docs/templates/product-line/test-plan.md +7 -7
  156. package/docs/templates/production-readiness-checklist.md +57 -57
  157. package/docs/templates/progress-log.md +17 -17
  158. package/docs/templates/project-start-checklist.md +9 -9
  159. package/docs/templates/qa-report.md +48 -48
  160. package/docs/templates/sprint-contract.md +29 -29
  161. package/docs/templates/worker-dogfood-evidence.md +80 -80
  162. package/docs/templates/worker-dogfood-setup.md +68 -68
  163. package/docs/verification-matrix.md +70 -70
  164. package/examples/decision-gate-agent-dag.json +177 -177
  165. package/examples/example-dag.json +46 -46
  166. package/examples/hybrid-loop-agent-dag.json +189 -189
  167. package/harness.json +66 -66
  168. package/package.json +52 -88
  169. package/scripts/check-product-line-docs.sh +29 -29
  170. package/scripts/check-task-pool-root.sh +32 -32
  171. package/scripts/kb-bootstrap-init-skeleton.sh +240 -240
  172. package/scripts/kb-graph-incremental-prepare.mjs +386 -386
  173. package/scripts/kb-graph-incremental-prepare.sh +5 -5
  174. package/scripts/kb-graph-materialize.mjs +105 -105
  175. package/scripts/kb-graph-materialize.sh +4 -4
  176. package/scripts/kb-graph-promote.mjs +164 -164
  177. package/scripts/kb-graph-promote.sh +4 -4
  178. package/scripts/kb-query.mjs +554 -554
  179. package/scripts/kb-query.sh +5 -5
  180. package/skills/agent-worker/SKILL.md +39 -39
  181. package/skills/agent-worker/references/agent-worker-operator.md +60 -60
  182. package/skills/ai-engineering-context/SKILL.md +48 -48
  183. package/skills/analyze-product-dependencies/SKILL.md +67 -67
  184. package/skills/analyze-product-dependencies/agents/openai.yaml +4 -4
  185. package/skills/analyze-product-dependencies/references/api-documentation-schema.md +30 -30
  186. package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +28 -28
  187. package/skills/analyze-product-dependencies/references/example.md +76 -76
  188. package/skills/analyze-product-dependencies/references/forward-test-cases.md +35 -35
  189. package/skills/analyze-product-dependencies/references/input-contract.md +11 -11
  190. package/skills/analyze-product-dependencies/references/scouting-rules.md +61 -61
  191. package/skills/analyze-product-dependencies/scripts/test-validators.mjs +267 -267
  192. package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +101 -101
  193. package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +142 -142
  194. package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +76 -76
  195. package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +146 -146
  196. package/skills/analyze-product-requirements/SKILL.md +90 -90
  197. package/skills/analyze-product-requirements/agents/openai.yaml +4 -4
  198. package/skills/analyze-product-requirements/references/acceptance-criteria.md +91 -91
  199. package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +56 -56
  200. package/skills/analyze-product-requirements/references/example.md +86 -86
  201. package/skills/analyze-product-requirements/references/forward-test-cases.md +66 -66
  202. package/skills/analyze-product-requirements/references/product-analysis-schema.md +32 -32
  203. package/skills/analyze-product-requirements/references/product-requirement-schema.md +33 -33
  204. package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +35 -35
  205. package/skills/analyze-product-requirements/scripts/test-validators.mjs +193 -193
  206. package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +69 -69
  207. package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +97 -97
  208. package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +98 -98
  209. package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +156 -156
  210. package/skills/browser-tools/SKILL.md +196 -0
  211. package/skills/browser-tools/browser-content.js +103 -0
  212. package/skills/browser-tools/browser-cookies.js +35 -0
  213. package/skills/browser-tools/browser-eval.js +53 -0
  214. package/skills/browser-tools/browser-hn-scraper.js +108 -0
  215. package/skills/browser-tools/browser-nav.js +44 -0
  216. package/skills/browser-tools/browser-pick.js +162 -0
  217. package/skills/browser-tools/browser-screenshot.js +34 -0
  218. package/skills/browser-tools/browser-start.js +86 -0
  219. package/skills/browser-tools/package-lock.json +2556 -0
  220. package/skills/browser-tools/package.json +19 -0
  221. package/skills/code-review-core/SKILL.md +20 -20
  222. package/skills/codebase-scout/SKILL.md +19 -19
  223. package/skills/frontend-design-review/SKILL.md +66 -66
  224. package/skills/frontend-design-review/references/review-checklist.md +58 -58
  225. package/skills/frontend-implementation/SKILL.md +49 -47
  226. package/skills/frontend-implementation/references/code-standards.md +32 -32
  227. package/skills/frontend-implementation/references/design-spec.md +46 -46
  228. package/skills/frontend-implementation/references/node-contracts.md +27 -76
  229. package/skills/frontend-review/SKILL.md +59 -59
  230. package/skills/frontend-review/references/review-findings.md +47 -47
  231. package/skills/frontend-verification/SKILL.md +53 -53
  232. package/skills/frontend-verification/references/verification-checklist.md +68 -68
  233. package/skills/grill-me/SKILL.md +10 -10
  234. package/skills/grill-with-docs/SKILL.md +88 -88
  235. package/skills/grill-with-docs/adr-format.md +47 -47
  236. package/skills/grill-with-docs/context-format.md +60 -60
  237. package/skills/init-capability-evolution/SKILL.md +70 -70
  238. package/skills/loop-agent/SKILL.md +151 -151
  239. package/skills/loop-agent/references/README.md +67 -67
  240. package/skills/loop-agent/references/command-reference.md +527 -505
  241. package/skills/loop-agent/references/docs-converge.md +126 -126
  242. package/skills/loop-agent/references/harness-policy.md +263 -263
  243. package/skills/loop-agent/references/hybrid-dag.md +243 -238
  244. package/skills/loop-agent/references/learned/README.md +21 -21
  245. package/skills/loop-agent/references/long-running-loop.md +57 -57
  246. package/skills/loop-agent/references/model-routing.md +36 -36
  247. package/skills/loop-agent/references/multi-worktree.md +54 -54
  248. package/skills/loop-agent/references/one-shot-runs.md +85 -85
  249. package/skills/loop-agent/references/orchestrator-and-interventions.md +169 -169
  250. package/skills/loop-agent/references/pi-prompt.md +23 -23
  251. package/skills/loop-agent/references/pi-subagent-assisted-mode.md +84 -84
  252. package/skills/loop-agent/references/post-implementation-and-patterns.md +44 -44
  253. package/skills/loop-agent/references/task-workflow.md +89 -89
  254. package/skills/loop-agent/references/verification-and-failure-handling.md +141 -139
  255. package/skills/playwright-cli/SKILL.md +420 -420
  256. package/skills/playwright-cli/references/element-attributes.md +23 -23
  257. package/skills/playwright-cli/references/playwright-tests.md +39 -39
  258. package/skills/playwright-cli/references/request-mocking.md +87 -87
  259. package/skills/playwright-cli/references/running-code.md +241 -241
  260. package/skills/playwright-cli/references/session-management.md +225 -225
  261. package/skills/playwright-cli/references/storage-state.md +275 -275
  262. package/skills/playwright-cli/references/test-generation.md +433 -433
  263. package/skills/playwright-cli/references/tracing.md +139 -139
  264. package/skills/playwright-cli/references/video-recording.md +143 -143
  265. package/skills/playwright-cli-case-generator/SKILL.md +74 -74
  266. package/skills/requesting-code-review/SKILL.md +101 -101
  267. package/skills/requesting-code-review/code-reviewer.md +168 -168
  268. package/skills/systematic-debugging/CREATION-LOG.md +119 -119
  269. package/skills/systematic-debugging/SKILL.md +296 -296
  270. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -158
  271. package/skills/systematic-debugging/condition-based-waiting.md +115 -115
  272. package/skills/systematic-debugging/defense-in-depth.md +122 -122
  273. package/skills/systematic-debugging/find-polluter.sh +63 -63
  274. package/skills/systematic-debugging/root-cause-tracing.md +169 -169
  275. package/skills/systematic-debugging/test-academic.md +14 -14
  276. package/skills/systematic-debugging/test-pressure-1.md +58 -58
  277. package/skills/systematic-debugging/test-pressure-2.md +68 -68
  278. package/skills/systematic-debugging/test-pressure-3.md +69 -69
  279. package/skills/test-driven-development/SKILL.md +20 -20
  280. package/skills/using-git-worktrees/SKILL.md +215 -215
  281. package/skills/verification-before-completion/SKILL.md +154 -154
  282. package/skills/webapp-testing/SKILL.md +19 -19
@@ -1,21 +1,21 @@
1
- # Learned loop-agent Patterns
2
-
3
- 本目录是 SePO-lite prompt evolution 的 human-gated target。
4
-
5
- Rules:
6
-
7
- - Files 仅为 Markdown guidance。
8
- - `retrospective` 可 propose `.harness/tasks/<task-id>/source/prompt-delta.md`;不得自动 merge 到此。
9
- - 不要添加 shell commands、credential handling、tool permission expansion 或 completion-authority bypass rules。
10
- - DAG implementer prompts 在 node 已 request `loop-agent` skill 时,可将 repo-specific 文件 `<repo>.md` 或 `default.md` 作为 bounded inline guidance 加载。
11
- - 保持条目 short 且 pattern-oriented:failure class、fix scope shape、invariant、verification evidence。
12
-
13
- Acceptance checklist before merging a prompt delta:
14
-
15
- - Proposal 仅为 Markdown-only process guidance。
16
- - 不含 shell/runtime command lines 或 fenced command blocks。
17
- - Credential material、tokens、passwords、secrets 与 API keys 保持不可触达。
18
- - Tool permissions、path allowlists、`allowedPaths`、`forbiddenPaths` 与 `writeSet` 保持既有边界。
19
- - Shell verification、tests、write guards、decision gates、human gates 与 completion evidence 均为保留门禁。
20
- - Completed DAG 与 one-shot run facts 保持只读。
21
- - Learned file 编辑后 `loop-agent docs audit` 须 pass。
1
+ # Learned loop-agent Patterns
2
+
3
+ 本目录是 SePO-lite prompt evolution 的 human-gated target。
4
+
5
+ Rules:
6
+
7
+ - Files 仅为 Markdown guidance。
8
+ - `retrospective` 可 propose `.harness/tasks/<task-id>/source/prompt-delta.md`;不得自动 merge 到此。
9
+ - 不要添加 shell commands、credential handling、tool permission expansion 或 completion-authority bypass rules。
10
+ - DAG implementer prompts 在 node 已 request `loop-agent` skill 时,可将 repo-specific 文件 `<repo>.md` 或 `default.md` 作为 bounded inline guidance 加载。
11
+ - 保持条目 short 且 pattern-oriented:failure class、fix scope shape、invariant、verification evidence。
12
+
13
+ Acceptance checklist before merging a prompt delta:
14
+
15
+ - Proposal 仅为 Markdown-only process guidance。
16
+ - 不含 shell/runtime command lines 或 fenced command blocks。
17
+ - Credential material、tokens、passwords、secrets 与 API keys 保持不可触达。
18
+ - Tool permissions、path allowlists、`allowedPaths`、`forbiddenPaths` 与 `writeSet` 保持既有边界。
19
+ - Shell verification、tests、write guards、decision gates、human gates 与 completion evidence 均为保留门禁。
20
+ - Completed DAG 与 one-shot run facts 保持只读。
21
+ - Learned file 编辑后 `loop-agent docs audit` 须 pass。
@@ -1,57 +1,57 @@
1
- # Long-Running Loop 详细规则
2
-
3
- 需要跨多轮记录目标、压缩记忆、round facts 引用,或使用 `loop init|status|run|record-round|add-signal|closeout` 时使用本文。`loop` 是 experimental outer workflow state:它不替代 Agent DAG,也不等同于已移除的顺序式 `run loop`。共享 policy 摘要见 `harness-policy.md` 的 "Long-running loop policy" 一节。
4
-
5
- ## 最小入口
6
-
7
- ```bash
8
- loop-agent loop init <task-id>
9
- loop-agent loop status <task-id>
10
- loop-agent loop run <task-id> --action shell-verify --command "bash scripts/check-repo.sh"
11
- loop-agent loop run <task-id> --action pi-review
12
- loop-agent loop run <task-id> --action dag
13
- loop-agent loop run <task-id> --action dag --execute
14
- loop-agent loop run <task-id> --auto --max-rounds 3
15
- loop-agent loop run <task-id> --auto --max-rounds 3
16
- loop-agent loop add-signal <task-id> --type human_followup --message "review this boundary before closeout"
17
- loop-agent loop closeout <task-id>
18
- loop-agent loop record-round <task-id> \
19
- --action manual \
20
- --result "summary" \
21
- --lesson "what to carry forward" \
22
- --next "next bounded action" \
23
- --decision continue \
24
- --ref ".harness/runs/completed/<run-id>/result.json"
25
- ```
26
-
27
- ## 状态源与记忆规则
28
-
29
- - `loop/objective.md` 与 `loop/context.md` 是运行态投影;exec plan / task source 仍是需求状态源。
30
- - `rounds.jsonl` 只引用 canonical facts,不复制完整 executor 日志。
31
- - `context.md` 每轮重写为压缩记忆,不无限 append。
32
- - `events.jsonl` 只用于 observability,覆盖 loop_start、round_start、action_start、action_finish、context_rewrite、decision、loop_finish;不要把 events 当状态源。
33
-
34
- ## Action 规则
35
-
36
- - `loop run --action shell-verify` 是 deterministic action;命令 exit code 决定 verification result,输出摘要写入 `loop/verification/round-N.json`。
37
- - `loop run --action pi-review` 必须保持 read-only;工具 allowlist 固定为 `read,grep,find,ls`,输出必须包含 `findingSummary`、`failureCategory`、`nextHypothesis`、`recommendedAction`、`fixScope`、`rootCause`,其中 `recommendedAction` 只能是 `implement_fix|replan|pause|done`。
38
- - 自动写入只能通过 `loop run --action dag --execute` / auto DAG execute;须读取 task `allowedPaths` / `forbiddenPaths` 并审查 writer writeSet。
39
- - `loop run --action dag` 默认是 review mode:调用 `dag run-task <task-id> --profile auto --strict-models` 生成 DAG,再用 `dag validate --strict-models --strict-governance` 校验,并记录 review packet。
40
- - `loop run --action dag --execute` 才会调用 `run-dag`,随后读取 `dag report --json` 作为 round result;paused DAG 会让 loop 进入 `paused`。
41
-
42
- ## Auto mode 与写入边界
43
-
44
- - `loop run --auto --max-rounds N` 使用 deterministic policy 选择下一轮 action;默认只会自动选择 shell-verify、pi-review、dag review 或 policy pause/block。
45
- - 自动 DAG execute 必须显式 opt-in:`task.json.loopAutoExecutionPolicy="enabled"`,或 `approval-required` 加 pending approval;旧 `loopAutoWritePolicy` fail-fast。
46
- - auto mode 遇到同类 failure streak 达阈值会 blocked,避免无限重试。
47
-
48
- ## Signals
49
-
50
- - `loop add-signal` 写入 durable `signals.jsonl`,支持 `human_followup|approval|scope_changed|review_feedback`;urgent/scope_changed 会 pause,review feedback / human follow-up 先走 read-only Pi review,approval 触发下一轮 DAG review packet。
51
- - Signals 不直接覆盖 `objective.md`;DAG decision envelope / approve / reject / resume 仍由 DAG action 机制管理,loop 只记录 refs。
52
-
53
- ## Closeout
54
-
55
- - `loop closeout` 从 loop state、objective/context、rounds 和 signals 派生 `loop/closeout.md` draft;draft 会标出 workflow path(`dag` / `explicit-fallback` / `missing-dag-evidence` / `micro-or-small`)与 fallback reason。
56
- - 非 complete 状态必须标 partial/paused/blocked,不能修改 completed facts;medium/large loop 若缺少 DAG round 且没有 `dagFallbackReason`,必须把缺失 DAG 证据列为 remaining risk。
57
- - 完成声明仍必须由 shell verification、review verdict 和 success criteria coverage 证明。
1
+ # Long-Running Loop 详细规则
2
+
3
+ 需要跨多轮记录目标、压缩记忆、round facts 引用,或使用 `loop init|status|run|record-round|add-signal|closeout` 时使用本文。`loop` 是 experimental outer workflow state:它不替代 Agent DAG,也不等同于已移除的顺序式 `run loop`。共享 policy 摘要见 `harness-policy.md` 的 "Long-running loop policy" 一节。
4
+
5
+ ## 最小入口
6
+
7
+ ```bash
8
+ loop-agent loop init <task-id>
9
+ loop-agent loop status <task-id>
10
+ loop-agent loop run <task-id> --action shell-verify --command "bash scripts/check-repo.sh"
11
+ loop-agent loop run <task-id> --action pi-review
12
+ loop-agent loop run <task-id> --action dag
13
+ loop-agent loop run <task-id> --action dag --execute
14
+ loop-agent loop run <task-id> --auto --max-rounds 3
15
+ loop-agent loop run <task-id> --auto --max-rounds 3
16
+ loop-agent loop add-signal <task-id> --type human_followup --message "review this boundary before closeout"
17
+ loop-agent loop closeout <task-id>
18
+ loop-agent loop record-round <task-id> \
19
+ --action manual \
20
+ --result "summary" \
21
+ --lesson "what to carry forward" \
22
+ --next "next bounded action" \
23
+ --decision continue \
24
+ --ref ".harness/runs/completed/<run-id>/result.json"
25
+ ```
26
+
27
+ ## 状态源与记忆规则
28
+
29
+ - `loop/objective.md` 与 `loop/context.md` 是运行态投影;exec plan / task source 仍是需求状态源。
30
+ - `rounds.jsonl` 只引用 canonical facts,不复制完整 executor 日志。
31
+ - `context.md` 每轮重写为压缩记忆,不无限 append。
32
+ - `events.jsonl` 只用于 observability,覆盖 loop_start、round_start、action_start、action_finish、context_rewrite、decision、loop_finish;不要把 events 当状态源。
33
+
34
+ ## Action 规则
35
+
36
+ - `loop run --action shell-verify` 是 deterministic action;命令 exit code 决定 verification result,输出摘要写入 `loop/verification/round-N.json`。
37
+ - `loop run --action pi-review` 必须保持 read-only;工具 allowlist 固定为 `read,grep,find,ls`,输出必须包含 `findingSummary`、`failureCategory`、`nextHypothesis`、`recommendedAction`、`fixScope`、`rootCause`,其中 `recommendedAction` 只能是 `implement_fix|replan|pause|done`。
38
+ - 自动写入只能通过 `loop run --action dag --execute` / auto DAG execute;须读取 task `allowedPaths` / `forbiddenPaths` 并审查 writer writeSet。
39
+ - `loop run --action dag` 默认是 review mode:调用 `dag run-task <task-id> --profile auto --strict-models` 生成 DAG,再用 `dag validate --strict-models --strict-governance` 校验,并记录 review packet。
40
+ - `loop run --action dag --execute` 才会调用 `run-dag`,随后读取 `dag report --json` 作为 round result;paused DAG 会让 loop 进入 `paused`。
41
+
42
+ ## Auto mode 与写入边界
43
+
44
+ - `loop run --auto --max-rounds N` 使用 deterministic policy 选择下一轮 action;默认只会自动选择 shell-verify、pi-review、dag review 或 policy pause/block。
45
+ - 自动 DAG execute 必须显式 opt-in:`task.json.loopAutoExecutionPolicy="enabled"`,或 `approval-required` 加 pending approval;旧 `loopAutoWritePolicy` fail-fast。
46
+ - auto mode 遇到同类 failure streak 达阈值会 blocked,避免无限重试。
47
+
48
+ ## Signals
49
+
50
+ - `loop add-signal` 写入 durable `signals.jsonl`,支持 `human_followup|approval|scope_changed|review_feedback`;urgent/scope_changed 会 pause,review feedback / human follow-up 先走 read-only Pi review,approval 触发下一轮 DAG review packet。
51
+ - Signals 不直接覆盖 `objective.md`;DAG decision envelope / approve / reject / resume 仍由 DAG action 机制管理,loop 只记录 refs。
52
+
53
+ ## Closeout
54
+
55
+ - `loop closeout` 从 loop state、objective/context、rounds 和 signals 派生 `loop/closeout.md` draft;draft 会标出 workflow path(`dag` / `explicit-fallback` / `missing-dag-evidence` / `micro-or-small`)与 fallback reason。
56
+ - 非 complete 状态必须标 partial/paused/blocked,不能修改 completed facts;medium/large loop 若缺少 DAG round 且没有 `dagFallbackReason`,必须把缺失 DAG 证据列为 remaining risk。
57
+ - 完成声明仍必须由 shell verification、review verdict 和 success criteria coverage 证明。
@@ -1,36 +1,36 @@
1
- # 模型配置与路由
2
-
3
- 查看或修改 loop-agent model 默认值、Agent DAG `executorModels` 或 Pi model/provider 设置时使用本文。
4
-
5
- ## 模型配置
6
-
7
- 模型设置来自 repo `harness.json`。历史 `models.<step>` 只作为旧 task metadata 兼容读取;新 DAG work 不从这里路由模型。
8
-
9
- 示例模型记录:
10
-
11
- ```json
12
- {
13
- "provider": "wizard-local",
14
- "model": "gpt-5.3-codex-spark"
15
- }
16
- ```
17
-
18
- Agent DAG node 的模型来自 DAG JSON 中的 `executorModels`,并由 `dag validate --strict-models` 检查 canonical matrix 漂移。若变更模型配置,须同步更新 `harness.json`、相关测试、repo docs 与本 skill。
19
-
20
- `pi-prompt` 是独立 one-shot helper,不使用 `harness.json.models` 或 DAG `executorModels`。当前默认是 `wizard-local/glm-5.2`;高复杂度 one-shot 显式传 `--model gpt-5.5`。Agent DAG `pi` executor 的 canonical matrix 保持;读写 profile 共用同一矩阵:
21
-
22
- ```json
23
- {
24
- "LOW": "gpt-5.3-codex-spark",
25
- "MED": "glm-5.2",
26
- "HIGH": "gpt-5.5"
27
- }
28
- ```
29
-
30
- 始终信任当前 repo config,而非硬编码示例:
31
- ```bash
32
- loop-agent inspect
33
- ```
34
- 并在输出中核对 `models` 与 Agent DAG 文档中的 `executorModels` 约定。
35
-
36
- Pi SDK runtime reuse 仍为 **default-off**(`CODE_AGENT_PI_REUSE_RUNTIME` 未设/`off`/未知)。opt-in 须显式 `auto-run`;`CODE_AGENT_PI_BACKEND=cli-only` 绕过 reuse。无 live call 的确定性 M2/M3 decision 摘要用 `pi-reuse-benchmark`(见 `command-reference.md`)。
1
+ # 模型配置与路由
2
+
3
+ 查看或修改 loop-agent model 默认值、Agent DAG `executorModels` 或 Pi model/provider 设置时使用本文。
4
+
5
+ ## 模型配置
6
+
7
+ 模型设置来自 repo `harness.json`。历史 `models.<step>` 只作为旧 task metadata 兼容读取;新 DAG work 不从这里路由模型。
8
+
9
+ 示例模型记录:
10
+
11
+ ```json
12
+ {
13
+ "provider": "wizard-local",
14
+ "model": "gpt-5.3-codex-spark"
15
+ }
16
+ ```
17
+
18
+ Agent DAG node 的模型来自 DAG JSON 中的 `executorModels`,并由 `dag validate --strict-models` 检查 canonical matrix 漂移。若变更模型配置,须同步更新 `harness.json`、相关测试、repo docs 与本 skill。
19
+
20
+ `pi-prompt` 是独立 one-shot helper,不使用 `harness.json.models` 或 DAG `executorModels`。当前默认是 `wizard-local/glm-5.2`;高复杂度 one-shot 显式传 `--model gpt-5.5`。Agent DAG `pi` executor 的 canonical matrix 保持;读写 profile 共用同一矩阵:
21
+
22
+ ```json
23
+ {
24
+ "LOW": "gpt-5.3-codex-spark",
25
+ "MED": "glm-5.2",
26
+ "HIGH": "gpt-5.5"
27
+ }
28
+ ```
29
+
30
+ 始终信任当前 repo config,而非硬编码示例:
31
+ ```bash
32
+ loop-agent inspect
33
+ ```
34
+ 并在输出中核对 `models` 与 Agent DAG 文档中的 `executorModels` 约定。
35
+
36
+ Pi SDK runtime reuse 仍为 **default-off**(`CODE_AGENT_PI_REUSE_RUNTIME` 未设/`off`/未知)。opt-in 须显式 `auto-run`;`CODE_AGENT_PI_BACKEND=cli-only` 绕过 reuse。无 live call 的确定性 M2/M3 decision 摘要用 `pi-reuse-benchmark`(见 `command-reference.md`)。
@@ -1,54 +1,54 @@
1
- # Multi-Worktree 并行模式
2
-
3
- 同时驱动两个及以上独立 loop-agent task、委派到 isolated worktree、或 harvest 已完成工作时使用本文。
4
-
5
- ## Multi-Worktree 并行模式
6
-
7
- 需要**同时推进两个及以上独立 loop-agent task** 时,用 multi-worktree mode 隔离编辑与测试。
8
-
9
- > **Historical(已移除)**:`subagent list|start|attach|stop|wait|wakeup`、`dashboard` 与 `delegate --supervised` 已随 tmux 白盒 lifecycle 移除。并行观察请用各 task 的 `status`、worktree 内 `logs/`,或 Agent DAG `dag status` / `dag report`。
10
-
11
- ### 何时启用
12
-
13
- - 有 ≥ 2 个可独立推进的 task id,且希望在不同 worktree 中并发运行
14
- - 或希望主 repo 保持干净供审阅,而 leaf executor 在 worktree 内跑 `implement`/`verify`
15
- - 单一顺序 task 可跳过 — 直接 Agent DAG 或 main-session surgical patch 足够
16
-
17
- ### 核心命令
18
-
19
- ```bash
20
- loop-agent delegate <task-id> [--base <branch>] [--branch <name>] [--no-symlink] [--auto-run]
21
- loop-agent harvest <task-id> [--squash] [--no-archive] [--keep-worktree]
22
- loop-agent worktree list
23
- ```
24
-
25
- `delegate` 是一步原子操作:校验 `task.json` + `source/需求.md` + `source/执行约束.md` → 在 branch `task/<task-id>` 上创建 `git worktree .worktrees/<task-id>` → 同步 `source/` 与 `task.json` 到 worktree → 相对 symlink `./node_modules`。默认只准备 worktree;显式 `--auto-run` 才在其中生成、严格校验并执行 Pi-only DAG。
26
-
27
- `harvest` 是对称 closeout:仅当 `task.status === "completed"` 才运行,然后 merge(默认 `--no-ff`,或 `--squash`),将 `artifacts/`、`logs/`、`.workflow_state.json` 归档回主 repo,移除 worktree + branch。
28
-
29
- ### 主窗口职责(勿与 executor 重叠)
30
-
31
- 1. delegate 前与用户 refine `需求.md` / `执行约束.md`
32
- 2. `delegate` 返回后**不要**碰 `plan` 或 `implement` — 让 worktree 内 executor 跑
33
- 3. 用 `status <task-id>` 与 worktree 内 `logs/workflow.log`、`logs/executor.jsonl` 观察进度
34
- 4. task 报告 verify-passed 后,用 `git -C .worktrees/<task-id> log -p main..` 审 diff,再跑 `harvest`
35
- 5. task 失败则**不要** harvest — 进入 worktree 排障并重跑 verify
36
-
37
- ### 生命周期概览
38
-
39
- ```
40
- delegate --auto-run → Pi DAG 跑 contract/scout/plan/implement/verify → completed → harvest → archive + cleanup
41
- ↘ failed → worktree 内排障(不 harvest)
42
- ```
43
-
44
- ### 失败处理
45
-
46
- - `delegate` fail-fast:任何 source/conflict 错误在创建 worktree 前 abort
47
- - `harvest` 拒绝 failed/active task;merge conflict 时打印 conflict 文件(手动解决后重跑)
48
- - `worktree list` 只读;从任意窗口运行都不影响 in-flight delegate
49
-
50
- ### 与 Agent DAG 的关系
51
-
52
- Agent DAG 是默认 autonomous path;`delegate`/`harvest` 提供 worktree 隔离与收口,`--auto-run` 仍只运行 Pi-only DAG。需要人工 Cursor 介入时使用独立的 `cursor-prompt` sidecar,不进入 delegate 或 DAG runtime。多 task 并行时,每个 task 独立 `delegate`,完成后分别 `harvest`。
53
-
54
- 详见 `docs/cursor-prompt-sidecar.md` 与 `docs/loop-agent-harness.md`。
1
+ # Multi-Worktree 并行模式
2
+
3
+ 同时驱动两个及以上独立 loop-agent task、委派到 isolated worktree、或 harvest 已完成工作时使用本文。
4
+
5
+ ## Multi-Worktree 并行模式
6
+
7
+ 需要**同时推进两个及以上独立 loop-agent task** 时,用 multi-worktree mode 隔离编辑与测试。
8
+
9
+ > **Historical(已移除)**:`subagent list|start|attach|stop|wait|wakeup`、`dashboard` 与 `delegate --supervised` 已随 tmux 白盒 lifecycle 移除。并行观察请用各 task 的 `status`、worktree 内 `logs/`,或 Agent DAG `dag status` / `dag report`。
10
+
11
+ ### 何时启用
12
+
13
+ - 有 ≥ 2 个可独立推进的 task id,且希望在不同 worktree 中并发运行
14
+ - 或希望主 repo 保持干净供审阅,而 leaf executor 在 worktree 内跑 `implement`/`verify`
15
+ - 单一顺序 task 可跳过 — 直接 Agent DAG 或 main-session surgical patch 足够
16
+
17
+ ### 核心命令
18
+
19
+ ```bash
20
+ loop-agent delegate <task-id> [--base <branch>] [--branch <name>] [--no-symlink] [--auto-run]
21
+ loop-agent harvest <task-id> [--squash] [--no-archive] [--keep-worktree]
22
+ loop-agent worktree list
23
+ ```
24
+
25
+ `delegate` 是一步原子操作:校验 `task.json` + `source/需求.md` + `source/执行约束.md` → 在 branch `task/<task-id>` 上创建 `git worktree .worktrees/<task-id>` → 同步 `source/` 与 `task.json` 到 worktree → 相对 symlink `./node_modules`。默认只准备 worktree;显式 `--auto-run` 才在其中生成、严格校验并执行 Pi-only DAG。
26
+
27
+ `harvest` 是对称 closeout:仅当 `task.status === "completed"` 才运行,然后 merge(默认 `--no-ff`,或 `--squash`),将 `artifacts/`、`logs/`、`.workflow_state.json` 归档回主 repo,移除 worktree + branch。
28
+
29
+ ### 主窗口职责(勿与 executor 重叠)
30
+
31
+ 1. delegate 前与用户 refine `需求.md` / `执行约束.md`
32
+ 2. `delegate` 返回后**不要**碰 `plan` 或 `implement` — 让 worktree 内 executor 跑
33
+ 3. 用 `status <task-id>` 与 worktree 内 `logs/workflow.log`、`logs/executor.jsonl` 观察进度
34
+ 4. task 报告 verify-passed 后,用 `git -C .worktrees/<task-id> log -p main..` 审 diff,再跑 `harvest`
35
+ 5. task 失败则**不要** harvest — 进入 worktree 排障并重跑 verify
36
+
37
+ ### 生命周期概览
38
+
39
+ ```
40
+ delegate --auto-run → Pi DAG 跑 contract/scout/plan/implement/verify → completed → harvest → archive + cleanup
41
+ ↘ failed → worktree 内排障(不 harvest)
42
+ ```
43
+
44
+ ### 失败处理
45
+
46
+ - `delegate` fail-fast:任何 source/conflict 错误在创建 worktree 前 abort
47
+ - `harvest` 拒绝 failed/active task;merge conflict 时打印 conflict 文件(手动解决后重跑)
48
+ - `worktree list` 只读;从任意窗口运行都不影响 in-flight delegate
49
+
50
+ ### 与 Agent DAG 的关系
51
+
52
+ Agent DAG 是默认 autonomous path;`delegate`/`harvest` 提供 worktree 隔离与收口,`--auto-run` 仍只运行 Pi-only DAG。需要人工 Cursor 介入时使用独立的 `cursor-prompt` sidecar,不进入 delegate 或 DAG runtime。多 task 并行时,每个 task 独立 `delegate`,完成后分别 `harvest`。
53
+
54
+ 详见 `ai_workspace/loop-agent/cursor-prompt-sidecar.md` 与 `ai_workspace/loop-agent/loop-agent-harness.md`。
@@ -1,85 +1,85 @@
1
- # One-shot Run Evidence(`.harness/runs/`)
2
-
3
- 当你使用 `cursor-prompt`、Pi `cursor` tool、`promote-run`,或在治理检查中看到 `.harness/runs/active` warning 时,读本文。
4
-
5
- ## 目录职责
6
-
7
- `.harness/runs/` 保存一次性工具调用的运行证据。它不是 task 状态源,也不是 Agent DAG run 目录。
8
-
9
- ```text
10
- .harness/runs/active/<run-id>/ # 正在执行或异常残留的 one-shot tool run
11
- .harness/runs/completed/<run-id>/ # 成功完成的 one-shot run evidence
12
- .harness/runs/failed/<run-id>/ # 失败的 one-shot run evidence
13
- ```
14
-
15
- 每个 run directory 通常包含:
16
-
17
- ```text
18
- run.md
19
- meta.json
20
- artifacts/
21
- ```
22
-
23
- `run.md` 是人类可读摘要;`meta.json` 是机器可读 run metadata;`artifacts/` 是该次 one-shot 的交付物目录。
24
-
25
- ## 什么时候创建
26
-
27
- 会创建 `.harness/runs/` 的常见入口:
28
-
29
- - `loop-agent cursor-prompt ...`
30
- - Pi `cursor` tool / loop-agent cursor tool 的 one-shot Cursor 调用
31
- - 内部 two-phase one-shot logging:先 `createActiveCursorRun()`,再 `finalizeCursorRunLog()`
32
-
33
- 创建条件:
34
-
35
- - 调用的 `cwd` 必须是含 `.harness/` 的 harness repo。
36
- - `cursor-prompt` 会先创建 `.harness/runs/active/<run-id>/`,再把结果归档。
37
- - 成功时整个目录移动到 `.harness/runs/completed/<run-id>/`。
38
- - 失败、timeout 或 cancel 时整个目录移动到 `.harness/runs/failed/<run-id>/`。
39
-
40
- 当前 `pi-prompt` 不创建 `.harness/runs/`。它是 one-shot helper,但不维护 run evidence、task state、verification 或 handoff artifact。
41
-
42
- ## 与 task / DAG 的关系
43
-
44
- | 目录 | 含义 | 是否代表 task 完成 |
45
- |---|---|---|
46
- | `.harness/tasks/<task-id>/` | task 运行态状态源 | 是 task 状态源 |
47
- | `.harness/runs/<state>/<run-id>/` | one-shot tool run evidence | 否,只是一次执行证据 |
48
- | `.harness/dag-runs/<state>/<run-id>/` | Agent DAG run facts | 否,只是 DAG run facts |
49
-
50
- completed one-shot evidence 若要进入 task artifacts,使用:
51
-
52
- ```bash
53
- loop-agent promote-run <task-id> --run-id <run-id>
54
- loop-agent closeout task <task-id>
55
- ```
56
-
57
- `promote-run` 只读 `.harness/runs/completed/**`,生成或更新 task `artifacts/修改记录.md` / `artifacts/验证结果.md`,不修改 completed run facts。
58
-
59
- ## Active 目录清理
60
-
61
- `.harness/runs/active/` 只应存在 live one-shot run。治理检查发现 active 内容时会 warning:
62
-
63
- ```text
64
- [HARNESS RUNTIME WARNING] .harness/runs/active contains runtime entries
65
- ```
66
-
67
- 处理规则:
68
-
69
- - 如果确有 one-shot 正在执行,可以保留;必要时用 `HARNESS_ALLOW_ACTIVE_TOOL_RUNS=1` 跑治理检查。
70
- - 如果是已完成、失败或中断残留,应移动到 `completed/` / `failed/`,或在确认无价值后删除。
71
- - 如果是 `.DS_Store` 等系统垃圾文件,直接删除;它不是合法 run evidence。
72
- - 不要把 active 残留当作 task 完成证据。
73
-
74
- 严格检查可用:
75
-
76
- ```bash
77
- HARNESS_STRICT_ACTIVE_TOOL_RUNS=1 bash scripts/check-harness-runtime-clean.sh
78
- ```
79
-
80
- ## 不要做什么
81
-
82
- - 不要提交 `.harness/runs/**` 运行态内容。
83
- - 不要手动改写 `.harness/runs/completed/**` 或 `.harness/runs/failed/**` 事实。
84
- - 不要把 `.harness/runs/active/**` 当作长期记录。
85
- - 不要把 one-shot evidence 直接等同于 task artifacts;需要汇总时用 `promote-run`。
1
+ # One-shot Run Evidence(`.harness/runs/`)
2
+
3
+ 当你使用 `cursor-prompt`、Pi `cursor` tool、`promote-run`,或在治理检查中看到 `.harness/runs/active` warning 时,读本文。
4
+
5
+ ## 目录职责
6
+
7
+ `.harness/runs/` 保存一次性工具调用的运行证据。它不是 task 状态源,也不是 Agent DAG run 目录。
8
+
9
+ ```text
10
+ .harness/runs/active/<run-id>/ # 正在执行或异常残留的 one-shot tool run
11
+ .harness/runs/completed/<run-id>/ # 成功完成的 one-shot run evidence
12
+ .harness/runs/failed/<run-id>/ # 失败的 one-shot run evidence
13
+ ```
14
+
15
+ 每个 run directory 通常包含:
16
+
17
+ ```text
18
+ run.md
19
+ meta.json
20
+ artifacts/
21
+ ```
22
+
23
+ `run.md` 是人类可读摘要;`meta.json` 是机器可读 run metadata;`artifacts/` 是该次 one-shot 的交付物目录。
24
+
25
+ ## 什么时候创建
26
+
27
+ 会创建 `.harness/runs/` 的常见入口:
28
+
29
+ - `loop-agent cursor-prompt ...`
30
+ - Pi `cursor` tool / loop-agent cursor tool 的 one-shot Cursor 调用
31
+ - 内部 two-phase one-shot logging:先 `createActiveCursorRun()`,再 `finalizeCursorRunLog()`
32
+
33
+ 创建条件:
34
+
35
+ - 调用的 `cwd` 必须是含 `.harness/` 的 harness repo。
36
+ - `cursor-prompt` 会先创建 `.harness/runs/active/<run-id>/`,再把结果归档。
37
+ - 成功时整个目录移动到 `.harness/runs/completed/<run-id>/`。
38
+ - 失败、timeout 或 cancel 时整个目录移动到 `.harness/runs/failed/<run-id>/`。
39
+
40
+ 当前 `pi-prompt` 不创建 `.harness/runs/`。它是 one-shot helper,但不维护 run evidence、task state、verification 或 handoff artifact。
41
+
42
+ ## 与 task / DAG 的关系
43
+
44
+ | 目录 | 含义 | 是否代表 task 完成 |
45
+ |---|---|---|
46
+ | `.harness/tasks/<task-id>/` | task 运行态状态源 | 是 task 状态源 |
47
+ | `.harness/runs/<state>/<run-id>/` | one-shot tool run evidence | 否,只是一次执行证据 |
48
+ | `.harness/dag-runs/<state>/<run-id>/` | Agent DAG run facts | 否,只是 DAG run facts |
49
+
50
+ completed one-shot evidence 若要进入 task artifacts,使用:
51
+
52
+ ```bash
53
+ loop-agent promote-run <task-id> --run-id <run-id>
54
+ loop-agent closeout task <task-id>
55
+ ```
56
+
57
+ `promote-run` 只读 `.harness/runs/completed/**`,生成或更新 task `artifacts/修改记录.md` / `artifacts/验证结果.md`,不修改 completed run facts。
58
+
59
+ ## Active 目录清理
60
+
61
+ `.harness/runs/active/` 只应存在 live one-shot run。治理检查发现 active 内容时会 warning:
62
+
63
+ ```text
64
+ [HARNESS RUNTIME WARNING] .harness/runs/active contains runtime entries
65
+ ```
66
+
67
+ 处理规则:
68
+
69
+ - 如果确有 one-shot 正在执行,可以保留;必要时用 `HARNESS_ALLOW_ACTIVE_TOOL_RUNS=1` 跑治理检查。
70
+ - 如果是已完成、失败或中断残留,应移动到 `completed/` / `failed/`,或在确认无价值后删除。
71
+ - 如果是 `.DS_Store` 等系统垃圾文件,直接删除;它不是合法 run evidence。
72
+ - 不要把 active 残留当作 task 完成证据。
73
+
74
+ 严格检查可用:
75
+
76
+ ```bash
77
+ HARNESS_STRICT_ACTIVE_TOOL_RUNS=1 bash scripts/check-harness-runtime-clean.sh
78
+ ```
79
+
80
+ ## 不要做什么
81
+
82
+ - 不要提交 `.harness/runs/**` 运行态内容。
83
+ - 不要手动改写 `.harness/runs/completed/**` 或 `.harness/runs/failed/**` 事实。
84
+ - 不要把 `.harness/runs/active/**` 当作长期记录。
85
+ - 不要把 one-shot evidence 直接等同于 task artifacts;需要汇总时用 `promote-run`。