lazycodex-ai 5.0.0-beta.86 → 5.0.0-beta.87

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 (175) hide show
  1. package/dist/cli/index.js +27 -21
  2. package/dist/cli-node/index.js +27 -21
  3. package/package.json +1 -1
  4. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  5. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +2 -0
  6. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  7. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  8. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  9. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  10. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  11. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  12. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  13. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  14. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  15. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  16. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  17. package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus/gpt-6.md +1 -1
  18. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  19. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  21. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  23. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/ultrawork/README.md +1 -1
  25. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +2 -2
  26. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +63 -89
  27. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
  30. package/packages/omo-codex/plugin/components/ulw-execute-continuation/directive.md +2 -2
  31. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  32. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  33. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +63 -89
  34. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  35. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/define-goal.md +2 -3
  37. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +2 -2
  38. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  39. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  40. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  41. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  42. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  43. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  44. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  45. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  46. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  47. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  48. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  59. package/packages/omo-codex/plugin/package-lock.json +12 -12
  60. package/packages/omo-codex/plugin/package.json +1 -1
  61. package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +8 -2
  62. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +2 -2
  63. package/packages/omo-codex/plugin/skills/browser/ATTRIBUTION.md +26 -14
  64. package/packages/omo-codex/plugin/skills/browser/SKILL.md +65 -52
  65. package/packages/omo-codex/plugin/skills/browser/references/commands.md +81 -66
  66. package/packages/omo-codex/plugin/skills/browser/references/install.md +31 -34
  67. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/README.md +41 -21
  68. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  69. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/ladder.md +24 -22
  70. package/packages/omo-codex/plugin/skills/browser/references/owned-engine/network.md +35 -15
  71. package/packages/omo-codex/plugin/skills/browser/references/recipes/1password.md +13 -11
  72. package/packages/omo-codex/plugin/skills/browser/references/remote.md +5 -4
  73. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/index.js +1534 -0
  74. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +9 -0
  75. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  76. package/packages/omo-codex/plugin/skills/browser/scripts/browser-doctor.mjs +37 -32
  77. package/packages/omo-codex/plugin/skills/browser/scripts/browser-install.mjs +31 -44
  78. package/packages/omo-codex/plugin/skills/browser/scripts/omowright.mjs +25 -0
  79. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +2 -2
  80. package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +3 -3
  81. package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +1 -1
  82. package/packages/omo-codex/plugin/skills/debugging/references/tools/browser-qa.md +104 -0
  83. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +1 -1
  84. package/packages/omo-codex/plugin/skills/frontend/references/design/clone-from-url.md +1 -1
  85. package/packages/omo-codex/plugin/skills/programming/SKILL.md +12 -18
  86. package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +43 -15
  87. package/packages/omo-codex/plugin/skills/programming/references/rust/api-design.md +81 -0
  88. package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +60 -28
  89. package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +1 -13
  90. package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +44 -8
  91. package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +8 -3
  92. package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +66 -52
  93. package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +35 -25
  94. package/packages/omo-codex/plugin/skills/programming/references/rust/macros.md +63 -0
  95. package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +5 -3
  96. package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +8 -0
  97. package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +50 -12
  98. package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +34 -6
  99. package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +62 -52
  100. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  101. package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  102. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  103. package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +31 -28
  104. package/packages/omo-codex/plugin/skills/review-work/SKILL.md +1 -1
  105. package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +27 -20
  106. package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  107. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  108. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  109. package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  110. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +63 -89
  111. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +4 -4
  112. package/packages/omo-codex/plugin/skills/ulw-loop/references/define-goal.md +2 -3
  113. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +2 -2
  114. package/packages/omo-codex/plugin/skills/visual-qa/SKILL.md +1 -1
  115. package/packages/omo-codex/plugin/skills/visual-qa/references/browser-setup.md +46 -46
  116. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +2 -2
  117. package/packages/omo-codex/scripts/install-dist/install-local.mjs +4 -2
  118. package/packages/prompts-core/prompts/ultrawork/codex.md +63 -89
  119. package/packages/shared-skills/skills/browser/ATTRIBUTION.md +26 -14
  120. package/packages/shared-skills/skills/browser/SKILL.md +65 -52
  121. package/packages/shared-skills/skills/browser/references/commands.md +81 -66
  122. package/packages/shared-skills/skills/browser/references/install.md +31 -34
  123. package/packages/shared-skills/skills/browser/references/owned-engine/README.md +41 -21
  124. package/packages/shared-skills/skills/browser/references/owned-engine/frames-and-humans.md +33 -20
  125. package/packages/shared-skills/skills/browser/references/owned-engine/ladder.md +24 -22
  126. package/packages/shared-skills/skills/browser/references/owned-engine/network.md +35 -15
  127. package/packages/shared-skills/skills/browser/references/recipes/1password.md +13 -11
  128. package/packages/shared-skills/skills/browser/references/remote.md +5 -4
  129. package/packages/shared-skills/skills/browser/runtime/omowright/index.js +1534 -0
  130. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +9 -0
  131. package/packages/shared-skills/skills/browser/runtime/omowright/page-bundle.js +1395 -0
  132. package/packages/shared-skills/skills/browser/scripts/browser-doctor.mjs +37 -32
  133. package/packages/shared-skills/skills/browser/scripts/browser-install.mjs +31 -44
  134. package/packages/shared-skills/skills/browser/scripts/omowright.mjs +25 -0
  135. package/packages/shared-skills/skills/debugging/SKILL.md +2 -2
  136. package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +3 -3
  137. package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +1 -1
  138. package/packages/shared-skills/skills/debugging/references/tools/browser-qa.md +104 -0
  139. package/packages/shared-skills/skills/frontend/SKILL.md +1 -1
  140. package/packages/shared-skills/skills/frontend/references/design/clone-from-url.md +1 -1
  141. package/packages/shared-skills/skills/programming/SKILL.md +12 -18
  142. package/packages/shared-skills/skills/programming/references/rust/README.md +43 -15
  143. package/packages/shared-skills/skills/programming/references/rust/api-design.md +81 -0
  144. package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +60 -28
  145. package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +1 -13
  146. package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +44 -8
  147. package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +8 -3
  148. package/packages/shared-skills/skills/programming/references/rust/concurrency.md +66 -52
  149. package/packages/shared-skills/skills/programming/references/rust/libraries.md +35 -25
  150. package/packages/shared-skills/skills/programming/references/rust/macros.md +63 -0
  151. package/packages/shared-skills/skills/programming/references/rust/one-liners.md +5 -3
  152. package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +8 -0
  153. package/packages/shared-skills/skills/programming/references/rust/type-state.md +50 -12
  154. package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +34 -6
  155. package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +62 -52
  156. package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +1 -1
  157. package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +6 -3
  158. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +86 -75
  159. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.test.ts +83 -0
  160. package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +31 -28
  161. package/packages/shared-skills/skills/review-work/SKILL.md +1 -1
  162. package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +27 -20
  163. package/packages/shared-skills/skills/ultimate-browsing/engine/AGENTS.md +1 -1
  164. package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +32 -100
  165. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +5 -11
  166. package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +20 -37
  167. package/packages/shared-skills/skills/ulw-execute/SKILL.md +4 -4
  168. package/packages/shared-skills/skills/visual-qa/SKILL.md +1 -1
  169. package/packages/shared-skills/skills/visual-qa/references/browser-setup.md +46 -46
  170. package/packages/omo-codex/plugin/skills/browser/scripts/browser-env.mjs +0 -41
  171. package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +0 -112
  172. package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
  173. package/packages/shared-skills/skills/browser/scripts/browser-env.mjs +0 -41
  174. package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +0 -112
  175. package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +0 -296
package/dist/cli/index.js CHANGED
@@ -64,7 +64,7 @@ var package_default;
64
64
  var init_package = __esm(() => {
65
65
  package_default = {
66
66
  name: "oh-my-opencode",
67
- version: "5.0.0-beta.86",
67
+ version: "5.0.0-beta.87",
68
68
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
69
69
  main: "./dist/index.js",
70
70
  types: "dist/index.d.ts",
@@ -247,7 +247,7 @@ var init_package = __esm(() => {
247
247
  zod: "^4.6.5"
248
248
  },
249
249
  devDependencies: {
250
- "@code-yeongyu/senpi": "2026.9.23-2",
250
+ "@code-yeongyu/senpi": "2026.9.23-4",
251
251
  "@oh-my-opencode/agents-md-core": "workspace:*",
252
252
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
253
253
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -283,22 +283,23 @@ var init_package = __esm(() => {
283
283
  "@xterm/xterm": "^6.0.0",
284
284
  "bun-types": "1.4.2",
285
285
  "node-pty": "^1.1.0",
286
+ omowright: "github:code-yeongyu/omowright#25781c8ac04f9aae358b06551520b792ac45c6ed",
286
287
  "puppeteer-core": "^25.11.0",
287
288
  typescript: "^7.0.2"
288
289
  },
289
290
  optionalDependencies: {
290
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.86",
291
- "oh-my-opencode-darwin-x64": "5.0.0-beta.86",
292
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.86",
293
- "oh-my-opencode-linux-arm64": "5.0.0-beta.86",
294
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.86",
295
- "oh-my-opencode-linux-x64": "5.0.0-beta.86",
296
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.86",
297
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.86",
298
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.86",
299
- "oh-my-opencode-windows-arm64": "5.0.0-beta.86",
300
- "oh-my-opencode-windows-x64": "5.0.0-beta.86",
301
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.86"
291
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.87",
292
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.87",
293
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.87",
294
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.87",
295
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.87",
296
+ "oh-my-opencode-linux-x64": "5.0.0-beta.87",
297
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.87",
298
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.87",
299
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.87",
300
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.87",
301
+ "oh-my-opencode-windows-x64": "5.0.0-beta.87",
302
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.87"
302
303
  },
303
304
  overrides: {
304
305
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -7419,7 +7420,7 @@ var init_category_model_requirements = __esm(() => {
7419
7420
  },
7420
7421
  quick: {
7421
7422
  fallbackChain: [
7422
- { providers: ["chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
7423
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
7423
7424
  { providers: ["deepseek"], model: "deepseek-flash", variant: "off" },
7424
7425
  {
7425
7426
  providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan"],
@@ -7464,7 +7465,7 @@ var init_category_model_requirements = __esm(() => {
7464
7465
  {
7465
7466
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7466
7467
  model: "claude-opus-5-5",
7467
- variant: "max"
7468
+ variant: "medium"
7468
7469
  },
7469
7470
  { providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.3", variant: "max" },
7470
7471
  {
@@ -7475,6 +7476,7 @@ var init_category_model_requirements = __esm(() => {
7475
7476
  ]
7476
7477
  },
7477
7478
  writing: {
7479
+ requiresAnyModel: true,
7478
7480
  fallbackChain: [
7479
7481
  {
7480
7482
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
@@ -9460,7 +9462,7 @@ var init_openai_categories = __esm(() => {
9460
9462
  },
9461
9463
  {
9462
9464
  name: "unspecified-high",
9463
- config: { model: "anthropic/claude-opus-5-5", variant: "max" },
9465
+ config: { model: "anthropic/claude-opus-5-5", variant: "medium" },
9464
9466
  description: "Tasks that don't fit other categories, high effort required",
9465
9467
  callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
9466
9468
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
@@ -74482,6 +74484,8 @@ var init_model_profile = __esm(() => {
74482
74484
  init_fallback_models();
74483
74485
  OmoModelProfileInputSchema = object({
74484
74486
  display_name: string2().optional(),
74487
+ family: _enum(["daily", "geeky"]).optional(),
74488
+ tier: _enum(["normal", "heavy"]).optional(),
74485
74489
  models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
74486
74490
  }).strict();
74487
74491
  OmoModelProfileSchema = preprocess((value) => isRecord8(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileInputSchema);
@@ -77075,8 +77079,7 @@ var init_openai_only_model_catalog = __esm(() => {
77075
77079
  OPENAI_ONLY_CATEGORY_OVERRIDES = {
77076
77080
  artistry: { model: "openai/gpt-5.6-sol", variant: "xhigh" },
77077
77081
  quick: { model: "openai/gpt-6-luna-fast" },
77078
- "visual-engineering": { model: "openai/gpt-5.6-sol", variant: "high" },
77079
- writing: { model: "openai/gpt-5.6-sol", variant: "medium" }
77082
+ "visual-engineering": { model: "openai/gpt-5.6-sol", variant: "high" }
77080
77083
  };
77081
77084
  });
77082
77085
 
@@ -77267,7 +77270,7 @@ function generateModelConfig(config) {
77267
77270
  return {
77268
77271
  $schema: SCHEMA_URL,
77269
77272
  agents: Object.fromEntries(Object.entries(CLI_AGENT_MODEL_REQUIREMENTS).filter(([role, req]) => !(role === "sisyphus" && req.requiresAnyModel)).map(([role]) => [role, { model: ULTIMATE_FALLBACK }])),
77270
- categories: Object.fromEntries(Object.keys(CLI_CATEGORY_MODEL_REQUIREMENTS).map((cat) => [cat, { model: ULTIMATE_FALLBACK }]))
77273
+ categories: Object.fromEntries(Object.entries(CLI_CATEGORY_MODEL_REQUIREMENTS).filter(([, req]) => !req.requiresAnyModel).map(([cat]) => [cat, { model: ULTIMATE_FALLBACK }]))
77271
77274
  };
77272
77275
  }
77273
77276
  const agents = {};
@@ -77335,6 +77338,9 @@ function generateModelConfig(config) {
77335
77338
  }
77336
77339
  for (const [cat, req] of Object.entries(CLI_CATEGORY_MODEL_REQUIREMENTS)) {
77337
77340
  const fallbackChain = cat === "unspecified-high" && !avail.isMaxPlan ? CLI_CATEGORY_MODEL_REQUIREMENTS["unspecified-low"].fallbackChain : req.fallbackChain;
77341
+ if (req.requiresAnyModel && !isAnyFallbackEntryAvailable(fallbackChain, avail)) {
77342
+ continue;
77343
+ }
77338
77344
  if (req.requiresModel && !isRequiredModelAvailable(req.requiresModel, req.fallbackChain, avail)) {
77339
77345
  continue;
77340
77346
  }
@@ -88753,7 +88759,7 @@ var package_default2;
88753
88759
  var init_package2 = __esm(() => {
88754
88760
  package_default2 = {
88755
88761
  name: "@oh-my-opencode/omo-codex",
88756
- version: "5.0.0-beta.86",
88762
+ version: "5.0.0-beta.87",
88757
88763
  type: "module",
88758
88764
  private: true,
88759
88765
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -65,7 +65,7 @@ var package_default;
65
65
  var init_package = __esm(() => {
66
66
  package_default = {
67
67
  name: "oh-my-opencode",
68
- version: "5.0.0-beta.86",
68
+ version: "5.0.0-beta.87",
69
69
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
70
70
  main: "./dist/index.js",
71
71
  types: "dist/index.d.ts",
@@ -248,7 +248,7 @@ var init_package = __esm(() => {
248
248
  zod: "^4.6.5"
249
249
  },
250
250
  devDependencies: {
251
- "@code-yeongyu/senpi": "2026.9.23-2",
251
+ "@code-yeongyu/senpi": "2026.9.23-4",
252
252
  "@oh-my-opencode/agents-md-core": "workspace:*",
253
253
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
254
254
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -284,22 +284,23 @@ var init_package = __esm(() => {
284
284
  "@xterm/xterm": "^6.0.0",
285
285
  "bun-types": "1.4.2",
286
286
  "node-pty": "^1.1.0",
287
+ omowright: "github:code-yeongyu/omowright#25781c8ac04f9aae358b06551520b792ac45c6ed",
287
288
  "puppeteer-core": "^25.11.0",
288
289
  typescript: "^7.0.2"
289
290
  },
290
291
  optionalDependencies: {
291
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.86",
292
- "oh-my-opencode-darwin-x64": "5.0.0-beta.86",
293
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.86",
294
- "oh-my-opencode-linux-arm64": "5.0.0-beta.86",
295
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.86",
296
- "oh-my-opencode-linux-x64": "5.0.0-beta.86",
297
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.86",
298
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.86",
299
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.86",
300
- "oh-my-opencode-windows-arm64": "5.0.0-beta.86",
301
- "oh-my-opencode-windows-x64": "5.0.0-beta.86",
302
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.86"
292
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.87",
293
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.87",
294
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.87",
295
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.87",
296
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.87",
297
+ "oh-my-opencode-linux-x64": "5.0.0-beta.87",
298
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.87",
299
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.87",
300
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.87",
301
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.87",
302
+ "oh-my-opencode-windows-x64": "5.0.0-beta.87",
303
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.87"
303
304
  },
304
305
  overrides: {
305
306
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -7420,7 +7421,7 @@ var init_category_model_requirements = __esm(() => {
7420
7421
  },
7421
7422
  quick: {
7422
7423
  fallbackChain: [
7423
- { providers: ["chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
7424
+ { providers: ["openai", "chatgpt-subscription"], model: "gpt-6-luna-fast", variant: "low" },
7424
7425
  { providers: ["deepseek"], model: "deepseek-flash", variant: "off" },
7425
7426
  {
7426
7427
  providers: ["qwen-token-plan", "alibaba-token-plan", "bailian-coding-plan"],
@@ -7465,7 +7466,7 @@ var init_category_model_requirements = __esm(() => {
7465
7466
  {
7466
7467
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
7467
7468
  model: "claude-opus-5-5",
7468
- variant: "max"
7469
+ variant: "medium"
7469
7470
  },
7470
7471
  { providers: ["zai-coding-plan", "opencode-go"], model: "glm-5.3", variant: "max" },
7471
7472
  {
@@ -7476,6 +7477,7 @@ var init_category_model_requirements = __esm(() => {
7476
7477
  ]
7477
7478
  },
7478
7479
  writing: {
7480
+ requiresAnyModel: true,
7479
7481
  fallbackChain: [
7480
7482
  {
7481
7483
  providers: ["anthropic", "anthropic-api", "github-copilot", "opencode"],
@@ -9461,7 +9463,7 @@ var init_openai_categories = __esm(() => {
9461
9463
  },
9462
9464
  {
9463
9465
  name: "unspecified-high",
9464
- config: { model: "anthropic/claude-opus-5-5", variant: "max" },
9466
+ config: { model: "anthropic/claude-opus-5-5", variant: "medium" },
9465
9467
  description: "Tasks that don't fit other categories, high effort required",
9466
9468
  callerGuidance: UNSPECIFIED_HIGH_CATEGORY_CALLER_GUIDANCE,
9467
9469
  promptAppend: UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND,
@@ -74561,6 +74563,8 @@ var init_model_profile = __esm(() => {
74561
74563
  init_fallback_models();
74562
74564
  OmoModelProfileInputSchema = object({
74563
74565
  display_name: string2().optional(),
74566
+ family: _enum(["daily", "geeky"]).optional(),
74567
+ tier: _enum(["normal", "heavy"]).optional(),
74564
74568
  models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
74565
74569
  }).strict();
74566
74570
  OmoModelProfileSchema = preprocess((value) => isRecord8(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileInputSchema);
@@ -77154,8 +77158,7 @@ var init_openai_only_model_catalog = __esm(() => {
77154
77158
  OPENAI_ONLY_CATEGORY_OVERRIDES = {
77155
77159
  artistry: { model: "openai/gpt-5.6-sol", variant: "xhigh" },
77156
77160
  quick: { model: "openai/gpt-6-luna-fast" },
77157
- "visual-engineering": { model: "openai/gpt-5.6-sol", variant: "high" },
77158
- writing: { model: "openai/gpt-5.6-sol", variant: "medium" }
77161
+ "visual-engineering": { model: "openai/gpt-5.6-sol", variant: "high" }
77159
77162
  };
77160
77163
  });
77161
77164
 
@@ -77346,7 +77349,7 @@ function generateModelConfig(config) {
77346
77349
  return {
77347
77350
  $schema: SCHEMA_URL,
77348
77351
  agents: Object.fromEntries(Object.entries(CLI_AGENT_MODEL_REQUIREMENTS).filter(([role, req]) => !(role === "sisyphus" && req.requiresAnyModel)).map(([role]) => [role, { model: ULTIMATE_FALLBACK }])),
77349
- categories: Object.fromEntries(Object.keys(CLI_CATEGORY_MODEL_REQUIREMENTS).map((cat) => [cat, { model: ULTIMATE_FALLBACK }]))
77352
+ categories: Object.fromEntries(Object.entries(CLI_CATEGORY_MODEL_REQUIREMENTS).filter(([, req]) => !req.requiresAnyModel).map(([cat]) => [cat, { model: ULTIMATE_FALLBACK }]))
77350
77353
  };
77351
77354
  }
77352
77355
  const agents = {};
@@ -77414,6 +77417,9 @@ function generateModelConfig(config) {
77414
77417
  }
77415
77418
  for (const [cat, req] of Object.entries(CLI_CATEGORY_MODEL_REQUIREMENTS)) {
77416
77419
  const fallbackChain = cat === "unspecified-high" && !avail.isMaxPlan ? CLI_CATEGORY_MODEL_REQUIREMENTS["unspecified-low"].fallbackChain : req.fallbackChain;
77420
+ if (req.requiresAnyModel && !isAnyFallbackEntryAvailable(fallbackChain, avail)) {
77421
+ continue;
77422
+ }
77417
77423
  if (req.requiresModel && !isRequiredModelAvailable(req.requiresModel, req.fallbackChain, avail)) {
77418
77424
  continue;
77419
77425
  }
@@ -88832,7 +88838,7 @@ var package_default2;
88832
88838
  var init_package2 = __esm(() => {
88833
88839
  package_default2 = {
88834
88840
  name: "@oh-my-opencode/omo-codex",
88835
- version: "5.0.0-beta.86",
88841
+ version: "5.0.0-beta.87",
88836
88842
  type: "module",
88837
88843
  private: true,
88838
88844
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lazycodex-ai",
3
- "version": "5.0.0-beta.86",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.86",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -7292,6 +7292,8 @@ function isRecord6(value) {
7292
7292
  }
7293
7293
  var OmoModelProfileInputSchema = object({
7294
7294
  display_name: string2().optional(),
7295
+ family: _enum(["daily", "geeky"]).optional(),
7296
+ tier: _enum(["normal", "heavy"]).optional(),
7295
7297
  models: array(union([string2(), OmoFallbackModelObjectSchema])).optional()
7296
7298
  }).strict();
7297
7299
  var OmoModelProfileSchema = preprocess((value) => isRecord6(value) ? normalizeLegacyModelFields(value) : value, OmoModelProfileInputSchema);
@@ -8,7 +8,7 @@
8
8
  "command": "node \"${PLUGIN_ROOT}/components/bootstrap/dist/cli.js\" hook session-start",
9
9
  "commandWindows": "powershell -NoProfile -ExecutionPolicy Bypass -File \"${PLUGIN_ROOT}\\components\\bootstrap\\scripts\\bootstrap.ps1\"",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.86) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Checking Bootstrap Provisioning"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-bootstrap",
3
- "version": "5.0.0-beta.86",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex SessionStart bootstrap component that provisions LazyCodex runtime dependencies from a detached worker.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 30,
11
- "statusMessage": "(OmO 5.0.0-beta.86) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Checking Comments"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-comment-checker",
3
- "version": "5.0.0-beta.86",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex plugin that runs comment-checker after edit-like PostToolUse hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook pre-tool-use",
10
10
  "timeout": 5,
11
- "statusMessage": "(OmO 5.0.0-beta.86) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Recommending Git Bash MCP"
12
12
  }
13
13
  ]
14
14
  }
@@ -20,7 +20,7 @@
20
20
  "type": "command",
21
21
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
22
22
  "timeout": 5,
23
- "statusMessage": "(OmO 5.0.0-beta.86) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.87) Resetting Git Bash MCP Reminder"
24
24
  }
25
25
  ]
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-git-bash-hook",
3
- "version": "5.0.0-beta.86",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex hook component that reminds Windows sessions to prefer the OMO git_bash MCP.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/components/lazycodex-executor-verify/dist/cli.js\" hook subagent-stop",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.86) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Verifying LazyCodex Executor Evidence"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
3
- "version": "5.0.0-beta.86",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex SubagentStop evidence verifier for LazyCodex executor completions.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "5.0.0-beta.86",
4
- "inputDigest": "sha256:5529e0ca0e2604cde58c8d77af425b3d0a06feed87148856d577aa0bbc0c9a18",
3
+ "version": "5.0.0-beta.87",
4
+ "inputDigest": "sha256:72acd620e3bb18d2b7ff2299536bc0c48b009811a865fa1504e934010d24ea98",
5
5
  "outputs": [
6
6
  {
7
7
  "path": "cli.d.ts",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 60,
11
- "statusMessage": "(OmO 5.0.0-beta.86) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Checking LSP Diagnostics"
12
12
  }
13
13
  ]
14
14
  }
@@ -21,7 +21,7 @@
21
21
  "type": "command",
22
22
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
23
23
  "timeout": 5,
24
- "statusMessage": "(OmO 5.0.0-beta.86) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.87) Resetting LSP Diagnostics Cache"
25
25
  }
26
26
  ]
27
27
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-lsp",
3
- "version": "5.0.0-beta.86",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex plugin that exposes Language Server Protocol tools and post-edit diagnostics.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -53,7 +53,7 @@ Arm an available completion or state-change subscription when starting a build,
53
53
 
54
54
  Scale the scope of checks to the change and keep the rigor. A non-behavioral single-file edit needs diagnostics on that file. A single-domain behavior change adds related tests and one run of the affected entry point. Multi-file or cross-cutting work adds the build and user-visible behavior exercised through its real surface. omo-codex injects LSP diagnostics after edits; reported errors are blocking until resolved. Broaden or repeat checks only when a new change, failure, or open concern justifies it; otherwise keep moving toward completion.
55
55
 
56
- A behavior change starts with one failing test at its seam, observed failing for the right reason, then the smallest change that passes it. Formatting, comments, renames, dependency bumps, and visual-only work get review and a real-surface check instead. Leave out tests that mirror the implementation or cannot fail for the regression they name.
56
+ Read existing tests first - the behavior of record: update those your change makes stale; one wrong before your change is a finding, not a test to edit green. Reproduce a bug before fixing it. The run proves the change: add a test only where the repository keeps tests for this behavior and a regression would otherwise pass unnoticed - sized like its neighbors, never restating the change.
57
57
 
58
58
  ### Test Discipline
59
59
 
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 10,
10
- "statusMessage": "(OmO 5.0.0-beta.86) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.87) Loading Project Rules"
11
11
  }
12
12
  ]
13
13
  }
@@ -19,7 +19,7 @@
19
19
  "type": "command",
20
20
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
21
21
  "timeout": 10,
22
- "statusMessage": "(OmO 5.0.0-beta.86) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.87) Loading Project Rules"
23
23
  }
24
24
  ]
25
25
  }
@@ -32,7 +32,7 @@
32
32
  "type": "command",
33
33
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
34
34
  "timeout": 10,
35
- "statusMessage": "(OmO 5.0.0-beta.86) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.87) Matching Project Rules"
36
36
  }
37
37
  ]
38
38
  }
@@ -45,7 +45,7 @@
45
45
  "type": "command",
46
46
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-compact",
47
47
  "timeout": 10,
48
- "statusMessage": "(OmO 5.0.0-beta.86) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.87) Resetting Project Rule Cache"
49
49
  }
50
50
  ]
51
51
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-rules",
3
- "version": "5.0.0-beta.86",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex plugin that injects project rule files into model context through lifecycle hooks.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -8,7 +8,7 @@
8
8
  "type": "command",
9
9
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook post-tool-use",
10
10
  "timeout": 10,
11
- "statusMessage": "(OmO 5.0.0-beta.86) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.87) Checking Thread Title Hygiene"
12
12
  }
13
13
  ]
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/codex-teammode",
3
- "version": "5.0.0-beta.86",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex team-mode hook component that keeps background thread titles descriptive after create_thread.",
5
5
  "type": "module",
6
6
  "private": true,
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook session-start",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.86) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.87) Recording Session Telemetry"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-telemetry",
3
- "version": "5.0.0-beta.86",
3
+ "version": "5.0.0-beta.87",
4
4
  "description": "Codex plugin component that emits omo-codex anonymous daily-active telemetry on SessionStart.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -11,7 +11,7 @@ All 12 bundled agent TOMLs set `model = "gpt-6-astra"`; each role keeps its own
11
11
  | Mandate | Behavior |
12
12
  |---|---|
13
13
  | Goal + binding success criteria | Call `create_goal` (or open with a `# Goal` block) listing the deliverable + **3+ realistic QA scenarios** (happy path, edge cases, adjacent-surface regression). Each scenario MUST name which **Manual-QA channel** it will use. "Tests pass" is supporting signal, NEVER completion proof. |
14
- | Manual-QA channels (TESTS ALONE NEVER PROVE DONE) | A dedicated top-level section enumerates the **four** channels you can use to verify a criterion in reality: **(1) HTTP call** (`curl -i` / Playwright APIRequestContext), **(2) tmux** (`tmux new-session` + `send-keys` + `capture-pane`), **(3) Browser use** (in Codex, `browser:control-in-app-browser` first when no authenticated/persistent browser profile is needed; otherwise Playwright / puppeteer / Chromium driving the real page), **(4) Computer use** (OS-level GUI automation against the running app). Every criterion picks one channel, builds a real-usage scenario, runs it, and captures the artifact — every time. Aux surfaces (CLI stdout / DB diff / parsed config) only count for genuinely CLI- or data-shaped criteria. |
14
+ | Manual-QA channels (TESTS ALONE NEVER PROVE DONE) | A dedicated top-level section enumerates the **four** channels you can use to verify a criterion in reality: **(1) HTTP call** (`curl -i` / an HTTP client from js eval), **(2) tmux** (`tmux new-session` + `send-keys` + `capture-pane`), **(3) Browser use** (in Codex, `browser:control-in-app-browser` first when no authenticated/persistent browser profile is needed; otherwise omowright driving the real page — the owned engine for a browser you launch, the attached engine for the user's signed-in browser), **(4) Computer use** (OS-level GUI automation against the running app). Every criterion picks one channel, builds a real-usage scenario, runs it, and captures the artifact — every time. Aux surfaces (CLI stdout / DB diff / parsed config) only count for genuinely CLI- or data-shaped criteria. |
15
15
  | Surface + paired cleanup | Execution loop step 4 (**SURFACE-AS-SCENARIO**) runs the chosen channel scenario end-to-end. Step 5 (**CLEANUP, PAIRED**) tears down every QA-spawned process / tmux session / browser context / container / port / temp dir, with a one-line receipt appended to the notepad. Leftover state → NOT done. |
16
16
  | Durable /tmp notepad | `mktemp -t ulw-$(date +%Y%m%d-%H%M%S).XXXXXX.md` with sections `Plan`, `Success criteria + QA scenarios`, `Now`, `Todo`, `Findings`, `Learnings`. **Append**, never rewrite. |
17
17
  | Obsessive atomic todos | Every action — even one-line edits, `ls`, single test runs — becomes a todo. Format: `path: <action> for <criterion> — verify by <check>`. One in_progress at a time, mark completed immediately. |
@@ -94,10 +94,10 @@ Critical path: Task 1 -> Task 2 -> Task 6
94
94
  - [ ] <verifiable condition with the exact command or assertion>
95
95
 
96
96
  QA scenarios (MANDATORY - task incomplete without these):
97
- > Name the exact tool AND its exact invocation - not "verify it works". Browser use: in Codex, prefer `browser:control-in-app-browser`; otherwise, or for Chrome semantics, stealth, trace, or auth, write and run a `playwright-core` script from js eval against local Chrome (`channel: "chrome"`; persistent context on a CLONED profile, never the live one). Computer use: OS-level GUI automation for a non-browser desktop app.
97
+ > Name the exact tool AND its exact invocation - not "verify it works". Browser use: in Codex, prefer `browser:control-in-app-browser`; otherwise omowright from js eval (staged in the `browser` skill) — `connectPipe`/`connectCloakProfile` for a browser you own, `connectBrowserSkill()` for the user's signed-in browser; never a clone of the live profile. Computer use: OS-level GUI automation for a non-browser desktop app.
98
98
  ```
99
99
  Scenario: <happy path>
100
- Tool: <bash | curl | tmux | browser:control-in-app-browser | playwright-core(js eval, local Chrome) | computer-use>
100
+ Tool: <bash | curl | tmux | browser:control-in-app-browser | omowright(js eval; owned or attached engine) | computer-use>
101
101
  Steps: <exact command / API call / page action with concrete inputs - URL, payload, keystrokes, selectors>
102
102
  Expected: <concrete, binary pass/fail observable>
103
103
  Evidence: <attemptDir>/task-<N>-<slug>.<ext> (attemptDir = currentAttemptDir from `omo-agent-toolkit ulw-loop status --json`, .omo/evidence/ulw/<session>/<goalId>/a<attempt>)