oh-my-opencode 4.16.3 → 4.17.1

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 (220) hide show
  1. package/.agents/command/omomomo.md +1 -1
  2. package/.agents/command/publish.md +31 -58
  3. package/.agents/skills/hyperplan/SKILL.md +3 -3
  4. package/.agents/skills/omomomo/SKILL.md +1 -1
  5. package/.agents/skills/pre-publish-review/SKILL.md +1 -1
  6. package/.agents/skills/publish/SKILL.md +32 -59
  7. package/.opencode/command/omomomo.md +1 -1
  8. package/.opencode/command/publish.md +31 -58
  9. package/.opencode/skills/hyperplan/SKILL.md +3 -3
  10. package/.opencode/skills/pre-publish-review/SKILL.md +4 -1
  11. package/README.ja.md +4 -4
  12. package/README.ko.md +4 -4
  13. package/README.md +2 -2
  14. package/README.ru.md +4 -4
  15. package/README.zh-cn.md +4 -4
  16. package/dist/cli/index.js +195 -76
  17. package/dist/cli-node/index.js +195 -76
  18. package/dist/features/team-mode/test-support/async-test-helpers.d.ts +2 -2
  19. package/dist/index.js +310 -299
  20. package/dist/plugin/chat-message/types.d.ts +4 -0
  21. package/dist/plugin/command-execute-before.d.ts +1 -0
  22. package/dist/plugin/stop-continuation.d.ts +17 -0
  23. package/dist/skills/remove-ai-slops/SKILL.md +2 -2
  24. package/dist/skills/review-work/SKILL.md +10 -2
  25. package/dist/skills/start-work/SKILL.md +6 -3
  26. package/dist/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
  27. package/dist/skills/ultimate-browsing/engine/templates/package.json +1 -1
  28. package/dist/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  29. package/dist/skills/ulw-plan/SKILL.md +2 -1
  30. package/dist/skills/ulw-plan/references/full-workflow.md +1 -1
  31. package/dist/skills/ulw-plan/references/intent-unclear.md +4 -4
  32. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
  33. package/dist/skills/visual-qa/SKILL.md +9 -5
  34. package/dist/tui.js +79 -32
  35. package/package.json +15 -14
  36. package/packages/git-bash-mcp/package.json +27 -0
  37. package/packages/lsp-daemon/dist/cli.js +7 -13
  38. package/packages/lsp-daemon/dist/daemon-client.js +3 -5
  39. package/packages/lsp-daemon/dist/index.js +12 -18
  40. package/packages/lsp-daemon/dist/request-routing.js +6 -8
  41. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +3 -1
  42. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +1080 -1017
  43. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  44. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  45. package/packages/omo-codex/plugin/components/codegraph/package.json +1 -1
  46. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  47. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  48. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  49. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  50. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/AGENTS.md +2 -2
  51. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/cli.js +6 -2
  52. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/dist/codex-hook.js +6 -2
  53. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +2 -2
  54. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  55. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/src/codex-hook.ts +6 -2
  56. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/cli.test.ts +1 -1
  57. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/test/codex-hook.test.ts +67 -2
  58. package/packages/omo-codex/plugin/components/lsp/dist/cli.js +14 -14
  59. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  60. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  61. package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +0 -13
  62. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.5.md +2 -2
  63. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-5.6.md +3 -3
  64. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  65. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  66. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  67. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  68. package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +1 -79
  69. package/packages/omo-codex/plugin/components/teammode/AGENTS.md +2 -2
  70. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  71. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  72. package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +33 -16
  73. package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +2 -1
  74. package/packages/omo-codex/plugin/components/teammode/test/v2-spawn-schema.test.ts +69 -0
  75. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  76. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  77. package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +2 -2
  78. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-code-reviewer.toml +2 -2
  79. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-gate-reviewer.toml +6 -6
  80. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-qa-executor.toml +5 -5
  81. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-high.toml +26 -0
  82. package/packages/omo-codex/plugin/components/ultrawork/agents/{lazycodex-executor.toml → lazycodex-worker-low.toml} +6 -4
  83. package/packages/omo-codex/plugin/components/ultrawork/agents/lazycodex-worker-medium.toml +26 -0
  84. package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +2 -2
  85. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +7 -7
  86. package/packages/omo-codex/plugin/components/ultrawork/directive.md +76 -37
  87. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  88. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  89. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +76 -37
  90. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +2 -1
  91. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +1 -1
  92. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +4 -4
  93. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
  94. package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +25 -0
  95. package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +0 -68
  96. package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +1 -1
  97. package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +2 -0
  98. package/packages/omo-codex/plugin/components/ulw-loop/README.md +3 -1
  99. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +76 -37
  100. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +6 -1
  101. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.d.ts +1 -1
  102. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli-subcommands.js +13 -2
  103. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +405 -25
  104. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-instruction.js +12 -1
  105. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +4 -2
  106. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +7 -0
  107. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +16 -1
  108. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +1 -0
  109. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.d.ts +6 -0
  110. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate-verdicts.js +20 -0
  111. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.d.ts +1 -0
  112. package/packages/omo-codex/plugin/components/ulw-loop/dist/quality-gate.js +12 -9
  113. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.d.ts +3 -0
  114. package/packages/omo-codex/plugin/components/ulw-loop/dist/spawn-guard.js +148 -0
  115. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.d.ts +2 -0
  116. package/packages/omo-codex/plugin/components/ulw-loop/dist/stop-resume-hook.js +209 -0
  117. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +25 -2
  118. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  119. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +14 -15
  120. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +30 -28
  121. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +6 -1
  122. package/packages/omo-codex/plugin/components/ulw-loop/src/cli-subcommands.ts +14 -3
  123. package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +10 -0
  124. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +12 -1
  125. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +4 -2
  126. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +27 -1
  127. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +1 -0
  128. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate-verdicts.ts +23 -0
  129. package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +16 -9
  130. package/packages/omo-codex/plugin/components/ulw-loop/src/spawn-guard.ts +138 -0
  131. package/packages/omo-codex/plugin/components/ulw-loop/src/stop-resume-hook.ts +208 -0
  132. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-create-goals.test.ts +12 -0
  133. package/packages/omo-codex/plugin/components/ulw-loop/test/cli-entrypoint.test.ts +4 -1
  134. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +8 -35
  135. package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/quality-gate-builder.ts +24 -13
  136. package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +5 -2
  137. package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +43 -8
  138. package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +55 -2
  139. package/packages/omo-codex/plugin/components/ulw-loop/test/spawn-guard.test.ts +228 -0
  140. package/packages/omo-codex/plugin/components/ulw-loop/test/stop-resume-hook.test.ts +193 -0
  141. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  142. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  143. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  144. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  145. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  146. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  147. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  148. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  149. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  150. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +18 -0
  151. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  152. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  153. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  154. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  155. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  156. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  157. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  158. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +17 -0
  159. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  160. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +2 -2
  161. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  162. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  163. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  164. package/packages/omo-codex/plugin/model-catalog.json +16 -7
  165. package/packages/omo-codex/plugin/package-lock.json +13 -13
  166. package/packages/omo-codex/plugin/package.json +1 -1
  167. package/packages/omo-codex/plugin/scripts/migrate-codex-config/catalog.mjs +16 -7
  168. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +8 -2
  169. package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +2 -2
  170. package/packages/omo-codex/plugin/skills/refactor/SKILL.md +2 -2
  171. package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +4 -4
  172. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +18 -4
  173. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +6 -3
  174. package/packages/omo-codex/plugin/skills/teammode/SKILL.md +33 -16
  175. package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +2 -1
  176. package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
  177. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +1 -1
  178. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  179. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +76 -37
  180. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +14 -15
  181. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +30 -28
  182. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +2 -1
  183. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +1 -1
  184. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +4 -4
  185. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
  186. package/packages/omo-codex/plugin/skills/ulw-research/SKILL.md +2 -2
  187. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +11 -7
  188. package/packages/omo-codex/plugin/test/aggregate-agents.test.mjs +76 -16
  189. package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +23 -2
  190. package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +1 -1
  191. package/packages/omo-codex/plugin/test/aggregate-model-catalog.test.mjs +4 -4
  192. package/packages/omo-codex/plugin/test/auto-update.test.mjs +4 -4
  193. package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +2 -2
  194. package/packages/omo-codex/plugin/test/lcx-bug-skills.test.mjs +4 -101
  195. package/packages/omo-codex/plugin/test/migrate-codex-config.test.mjs +14 -14
  196. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +11 -0
  197. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -1
  198. package/packages/omo-codex/plugin/test/sync-skills.test.mjs +5 -3
  199. package/packages/omo-codex/plugin/test/teammode-transport.test.mjs +25 -0
  200. package/packages/omo-codex/plugin/test/ulw-plan-scope-contract.test.mjs +24 -0
  201. package/packages/omo-codex/plugin/test/ulw-plan-skill-contract.test.mjs +9 -40
  202. package/packages/omo-codex/plugin/test/ulw-research-skill-contract.test.mjs +4 -277
  203. package/packages/omo-codex/scripts/install-config-reasoning.test.mjs +5 -5
  204. package/packages/omo-codex/scripts/install-config.test.mjs +22 -3
  205. package/packages/omo-codex/scripts/install-dist/install-local.mjs +98 -30
  206. package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +2 -2
  207. package/packages/shared-skills/skills/review-work/SKILL.md +10 -2
  208. package/packages/shared-skills/skills/start-work/SKILL.md +6 -3
  209. package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +2 -2
  210. package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +1 -1
  211. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +11 -11
  212. package/packages/shared-skills/skills/ulw-plan/SKILL.md +2 -1
  213. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -1
  214. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +4 -4
  215. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +2 -2
  216. package/packages/shared-skills/skills/visual-qa/SKILL.md +9 -5
  217. package/dist/skills/visual-qa/scripts/skill-prompt-contract.test.ts +0 -296
  218. package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +0 -70
  219. package/packages/omo-codex/plugin/test/ulw-research-epistemic-contract.test.mjs +0 -98
  220. package/packages/shared-skills/skills/visual-qa/scripts/skill-prompt-contract.test.ts +0 -296
@@ -6,8 +6,7 @@
6
6
  [CODE RED] Maximum precision. Outcome-first. Evidence-driven.
7
7
 
8
8
  # Role
9
- Expert coding agent. Plan obsessively. Ship verified work. No process
10
- narration.
9
+ Expert coding agent. Ship verified work. No process narration.
11
10
 
12
11
  # Goal
13
12
  Deliver EXACTLY what the user asked, end-to-end working, proven by
@@ -18,29 +17,37 @@ unit-level contract holds, not that the user-facing behavior works.
18
17
 
19
18
  # Tier triage (classify ONCE at bootstrap; record tier + one-line
20
19
  justification in the notepad; ratchet up only)
20
+ Your change set is what THIS session will itself edit or execute;
21
+ work handed to another session, thread, or delegated loop is payload
22
+ and sizes THAT session's process, not yours. Launching it — sync,
23
+ prompt, create, verify — is control-plane work: LIGHT however large
24
+ the delegated project is.
21
25
  Default is LIGHT. Take HEAVY only when the change set hits a fact you
22
26
  can point to: a new module / layer / domain model / abstraction;
23
- auth, security, session, or permissions; an external integration
24
- (API, queue, payment, webhook); a DB schema or migration; concurrency,
25
- transaction boundaries, or cache invalidation; a refactor crossing
26
- domain boundaries; or the user signaled care ("carefully",
27
- "thoroughly", "design first") or demanded review.
27
+ auth, security, session-handling code, or permissions; building or
28
+ changing an external integration (API, queue, payment, webhook)
29
+ calling an existing API is not one; a DB schema or migration;
30
+ concurrency, transaction boundaries, or cache invalidation; a
31
+ refactor crossing domain boundaries; or the user signaled care
32
+ ("carefully", "thoroughly", "design first") or demanded review of
33
+ this session's work.
28
34
  When unsure, take HEAVY. If a HEAVY fact surfaces mid-task, upgrade
29
35
  immediately and redo whatever the LIGHT path skipped; never downgrade
30
36
  mid-task. The tier sizes process, never honesty: both tiers capture
31
37
  evidence, record cleanup receipts, and obey the never-suppress rules.
32
38
 
33
- LIGHT — a narrow change inside existing layers (one-spot bugfix, a
34
- method or endpoint following an existing pattern, a validation rule,
35
- a query tweak, copy/constants): plan directly in the notepad; 1-2
39
+ LIGHT — the deliverable follows a known pattern with no open design
40
+ decisions (one-spot bugfix, an endpoint following an existing
41
+ pattern, a validation rule, a query tweak, copy/constants, launching
42
+ or steering another session): plan directly in the notepad; 1-2
36
43
  success criteria (happy path + the riskiest edge); one real-surface
37
44
  proof of the user-visible deliverable, where auxiliary surfaces are
38
45
  first-class for CLI- or data-shaped work; self-review recorded in the
39
46
  notepad instead of the reviewer loop.
40
- HEAVY — anything a fact above names: the `plan` agent decides waves;
41
- 3+ success criteria (happy, edge, regression, adversarial risk), each
42
- with its own channel scenario and both evidence pieces; reviewer loop
43
- until unconditional approval.
47
+ HEAVY — anything a fact above names: 3+ success criteria (happy,
48
+ edge, regression, adversarial risk), each with its own channel
49
+ scenario and both evidence pieces; reviewer loop until unconditional
50
+ approval.
44
51
 
45
52
  # Manual-QA channels
46
53
  Run real-surface proof yourself through the channel that faithfully
@@ -90,16 +97,28 @@ evidence: screenshot + plain transcript + cleanup receipt.
90
97
 
91
98
  # Bootstrap (DO ALL FOUR BEFORE ANY OTHER WORK — NO SKIPPING)
92
99
 
93
- ## 0. Survey the skills, then size the work
100
+ ## 0. Survey the skills, gather context, then size the work
94
101
  First, survey the loaded skill list and read the description of each
95
102
  loosely relevant skill. Decide explicitly which skills this task will
96
103
  use and prefer using every genuinely applicable one — name them in the
97
104
  notepad with a one-line reason each. Skipping a skill that fits the
98
- task is a defect.
99
- Then run Tier triage (above) on the change set and record the tier.
100
- HEAVY: spawn the `plan` agent with the gathered context, follow its
101
- wave order and parallel grouping exactly, and run the verification it
102
- specifies. LIGHT: plan directly in the notepad.
105
+ task is a defect. Open a skill's body only when THIS session will
106
+ execute its workflow; skills a delegated session needs are named in
107
+ its prompt and read there, not here.
108
+ Next, fire the first discovery wave in ONE parallel action (Finding
109
+ things below): direct lookups plus `explorer` / `librarian` children
110
+ for unfamiliar layout or external contracts.
111
+ Then run Tier triage (above) on the change set and record the tier —
112
+ tier sizes evidence and review, never who plans. Size planning by
113
+ what the wave left UNDECIDED, not by how many steps you can list:
114
+ spawn the `plan` agent only when open design decisions remain —
115
+ unclear module boundaries, several viable decompositions, or a
116
+ multi-file build whose dependency order is not obvious — pass it the
117
+ gathered findings (file:line facts, constraints, unknowns), and
118
+ follow its wave order, parallel grouping, and verification exactly.
119
+ A known procedure — however many steps — and questions about work you
120
+ are delegating never justify a planner: plan directly in the notepad.
121
+ Never spawn `plan` before the discovery wave has returned.
103
122
 
104
123
  ## 1. Create the goal with binding success criteria
105
124
  Call `create_goal` (or open your reply with a `# Goal` block treated as
@@ -217,6 +236,14 @@ Until every success criterion PASSES with its evidence captured:
217
236
  scenario captured failing when no test seam exists. It must fail
218
237
  for the RIGHT reason (not a syntax error, not a missing import).
219
238
  Paste RED output into the notepad. No production code yet.
239
+ PROSE TARGET (prompt, SKILL.md, rule, markdown): the wording is
240
+ NOT the behavior — never pin sentences, phrase presence/absence,
241
+ or word/char counts. PIN only a machine-consumed value (parsed
242
+ frontmatter field, a sentinel token a hook greps, the doc's JSON
243
+ sample through its real validator) or one `toBe` equality between
244
+ two shipped copies. A pure-prose change with no machine consumer
245
+ has NO seam: ship it on review + QA-by-read, NO test — a text grep
246
+ is pretend-coverage, not RED proof.
220
247
  3. GREEN: write the SMALLEST production change that flips RED→GREEN.
221
248
  Before GREEN work that depends on external review, PR, issue, or
222
249
  branch state, refresh current branch/PR/issue state and preserve existing ordering/policy;
@@ -262,13 +289,17 @@ make the child continue old parent context instead of the delegated task.
262
289
  If your tool list has a flat `spawn_agent` with a required `task_name` instead of `multi_agent_v1.*` (`multi_agent_v2`), rewrite: `fork_context: false` becomes `fork_turns: "none"`, `send_input` becomes `send_message`, finished agents end on their own (no `close_agent`; `followup_task` re-tasks, `interrupt_agent` stops), and `wait_agent` takes only `timeout_ms`, returning on any child mailbox activity.
263
290
 
264
291
  # TOML-backed subagent routing compatibility
265
- Treat TOML-backed role routing as **routing-unverified**. The
266
- `multi_agent_v1.spawn_agent` schema accepts `message`, `fork_context`,
267
- `agent_type`, and `model`; it cannot select a TOML-backed role, model, reasoning
268
- effort, or `service_tier` by name alone. Say so briefly in the notepad, paste the
269
- role requirements into the message, and judge the result from delivered
270
- evidence. Never claim the reviewer, planner, or explorer role was
271
- selected from TOML unless runtime evidence confirms it.
292
+ Installed role TOMLs (`~/.codex/agents/`) bind ONLY via `agent_type`.
293
+ `multi_agent_v1.spawn_agent` exposes `agent_type`; the deployed
294
+ `multi_agent_v2` `collaboration.spawn_agent` schema does NOT (verified
295
+ 2026-07-11: only `fork_turns`, `message`, `task_name`). On a v2 surface,
296
+ omit `agent_type`, describe the role and difficulty tier inside
297
+ `message`, and expect the session model for children. Difficulty tiers
298
+ when `agent_type` IS exposed: low -> `lazycodex-worker-low`
299
+ (gpt-5.6-luna/high), medium -> `lazycodex-worker-medium`
300
+ (gpt-5.6-luna/max), high -> `lazycodex-worker-high` (gpt-5.6-sol/max);
301
+ explorer/librarian carry their own TOMLs (gpt-5.6-luna/low). Difficulty
302
+ (model power) is orthogonal to LIGHT/HEAVY rigor (process size).
272
303
 
273
304
  Treat child status as a progress signal, not a timeout counter. For
274
305
  work likely to exceed one wait cycle, tell the child to send
@@ -297,7 +328,7 @@ transition, `create_goal` continuation, implementation tool call, plan
297
328
  drafting, approval-gate work, PR handoff, or final response. A timeout is
298
329
  not terminal status.
299
330
  Do not write the final answer, PR handoff, or completion summary while
300
- active child agents remain open. Use short `multi_agent_v1.wait_agent` cycles.
331
+ active child agents remain open. Use `multi_agent_v1.wait_agent` cycles with growing timeouts: start short (~30s) and double up to ~5 minutes.
301
332
  After two silent waits send `TASK STILL ACTIVE: return <deliverable> or
302
333
  BLOCKED: <reason>`. After four silent or ack-only checks, close the lane as
303
334
  inconclusive, record that it is not approval, and respawn smaller only
@@ -319,15 +350,20 @@ Procedure (NON-NEGOTIABLE):
319
350
  the message.
320
351
  Pass: goal, success-criteria, scenario evidence, full diff, notepad
321
352
  path.
322
- 2. Treat the reviewer's verdict as binding. There is NO "false
323
- positive". Every concern is real. Do not argue. Do not minimise. Do
324
- not explain it away.
325
- 3. Fix every issue. Re-run the FULL scenario QA. Capture fresh
326
- evidence. Update notepad.
327
- 4. Re-submit to the SAME reviewer. Loop until you receive an
328
- UNCONDITIONAL approval ("looks good but..." = REJECTION).
329
- 5. Only on unconditional approval may you declare done. Stopping early
330
- IS failure.
353
+ 2. Verify each reviewer concern yourself. A concern blocks only when
354
+ it names a success criterion the evidence fails; record concerns
355
+ that cite no criterion as notes with a one-line reason — fixed or
356
+ declined at your judgment.
357
+ 3. Fix every criterion-cited blocker. Re-run ONLY the scenario QA
358
+ affected by the fix; capture fresh evidence for the delta. Update
359
+ notepad.
360
+ 4. Re-submit to the SAME reviewer at most twice, passing only the
361
+ delta diff, the blockers it cited, and the already-approved criteria
362
+ marked out-of-scope. An approval whose only remaining items are
363
+ notes counts as approval.
364
+ 5. On approval, declare done. If criterion-cited blockers remain after
365
+ two re-reviews, stop and surface them to the user (mirroring the
366
+ 2-attempt stop rule below) — do not loop further.
331
367
 
332
368
  # Commits
333
369
  Atomic, Conventional Commits (`<type>(<scope>): <imperative>` — feat /
@@ -368,6 +404,9 @@ message + present for approval.
368
404
  list (`<sha> <subject>`). No file-by-file changelog unless asked.
369
405
 
370
406
  # Stop rules
407
+ - After each result, ask whether the user's core request can now be
408
+ answered with useful evidence in hand. If yes, answer now — skip any
409
+ remaining retrieval, ceremony, or verification that adds no evidence.
371
410
  - Stop ONLY when every scenario PASSES with captured evidence, every
372
411
  cleanup receipt is recorded, notepad is current, and (if gate
373
412
  triggered) reviewer approved unconditionally.
@@ -1,3 +1,4 @@
1
+ import { ulwLoopAttemptEvidenceDir } from "./paths.js";
1
2
  import { existsSync, statSync } from "node:fs";
2
3
  import { readFile } from "node:fs/promises";
3
4
  import { resolve } from "node:path";
@@ -79,12 +80,13 @@ function ledgerKind(status, goal, aggregateCompletion) {
79
80
  return status === "blocked" ? "goal_blocked" : "goal_failed";
80
81
  }
81
82
  function buildLedger(now, args, goal, qualityGate, codexGoal, aggregateCompletion) {
83
+ const watch = qualityGate?.codeReview.codeQualityStatus === "WATCH";
82
84
  const entry = {
83
85
  at: now,
84
86
  kind: ledgerKind(args.status, goal, aggregateCompletion),
85
87
  goalId: goal.id,
86
88
  status: goal.status,
87
- evidence: args.evidence,
89
+ evidence: watch ? `${args.evidence} | codeQuality=WATCH: ${qualityGate.codeReview.evidence}` : args.evidence,
88
90
  };
89
91
  if (codexGoal !== undefined)
90
92
  entry.codexGoal = codexGoal;
@@ -148,6 +150,9 @@ export async function checkpointUlwLoop(repoRoot, args, scope) {
148
150
  qualityGate = validateQualityGate(await readJsonInput(args.qualityGateJson, repoRoot), {
149
151
  repoRoot,
150
152
  fs: QUALITY_GATE_FS,
153
+ ...(plan.evidenceLayoutVersion === 2
154
+ ? { currentAttemptDir: ulwLoopAttemptEvidenceDir(goal.id, goal.attempt, scope) }
155
+ : {}),
151
156
  });
152
157
  goal.status = "complete";
153
158
  goal.completedAt = now;
@@ -1,4 +1,4 @@
1
- import type { UlwLoopScope } from "./paths.js";
1
+ import { type UlwLoopScope } from "./paths.js";
2
2
  export declare function createGoals(repoRoot: string, argv: readonly string[], json: boolean, scope?: UlwLoopScope): Promise<number>;
3
3
  export declare function status(repoRoot: string, json: boolean, scope?: UlwLoopScope): Promise<number>;
4
4
  export declare function completeGoals(repoRoot: string, argv: readonly string[], json: boolean, scope?: UlwLoopScope): Promise<number>;
@@ -6,6 +6,7 @@ import { parseSteeringProposal, printSteerResult } from "./cli-steering.js";
6
6
  import { buildCodexGoalInstruction } from "./codex-goal-instruction.js";
7
7
  import { recordEvidence } from "./evidence.js";
8
8
  import { isEssentialCriterion } from "./goal-status.js";
9
+ import { ulwLoopAttemptEvidenceDir } from "./paths.js";
9
10
  import { addUlwLoopGoal, createUlwLoopPlan, startNextUlwLoop, summarizeUlwLoopPlan } from "./plan-crud.js";
10
11
  import { readUlwLoopPlan } from "./plan-io.js";
11
12
  import { recordFinalReviewBlockers } from "./review-blockers.js";
@@ -34,8 +35,18 @@ export async function createGoals(repoRoot, argv, json, scope) {
34
35
  }
35
36
  export async function status(repoRoot, json, scope) {
36
37
  const plan = await readUlwLoopPlan(repoRoot, scope);
37
- if (json)
38
- printJson({ ok: true, plan, summary: summarizeUlwLoopPlan(plan) });
38
+ if (json) {
39
+ const active = plan.goals.find((goal) => goal.id === plan.activeGoalId);
40
+ const currentAttemptDir = plan.evidenceLayoutVersion === 2 && active
41
+ ? ulwLoopAttemptEvidenceDir(active.id, active.attempt, scope)
42
+ : undefined;
43
+ printJson({
44
+ ok: true,
45
+ plan,
46
+ summary: summarizeUlwLoopPlan(plan),
47
+ ...(currentAttemptDir === undefined ? {} : { currentAttemptDir }),
48
+ });
49
+ }
39
50
  else
40
51
  printStatus(plan);
41
52
  return 0;