oh-my-opencode 5.0.0-beta.87 → 5.0.0-beta.89

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 (94) hide show
  1. package/README.ja.md +1 -11
  2. package/README.ko.md +1 -11
  3. package/README.md +1 -1
  4. package/README.ru.md +1 -11
  5. package/README.zh-cn.md +1 -11
  6. package/dist/cli/index.js +90 -73
  7. package/dist/cli-node/index.js +90 -73
  8. package/dist/index.js +368 -347
  9. package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
  10. package/dist/skills/frontend/references/design/ambience-skill.md +2 -1
  11. package/dist/skills/frontend/references/design/design-system-architecture.md +30 -7
  12. package/dist/skills/frontend/references/design/interaction-skill.md +17 -5
  13. package/dist/skills/ulw-plan/SKILL.md +5 -5
  14. package/dist/skills/ulw-plan/references/full-workflow.md +13 -9
  15. package/dist/skills/ulw-plan/references/intent-clear.md +5 -6
  16. package/dist/skills/ulw-plan/references/intent-unclear.md +2 -2
  17. package/dist/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  18. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -154
  19. package/package.json +14 -14
  20. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  21. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  22. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  24. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  25. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  26. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  30. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  31. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  33. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  35. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  36. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  37. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  38. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +16 -3
  39. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  40. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  41. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +5 -5
  42. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +13 -9
  43. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +5 -6
  44. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-unclear.md +2 -2
  45. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  46. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -154
  47. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  48. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  49. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  50. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  69. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  70. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  71. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  72. package/packages/omo-codex/plugin/package-lock.json +12 -12
  73. package/packages/omo-codex/plugin/package.json +1 -1
  74. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  75. package/packages/omo-codex/plugin/skills/frontend/references/design/ambience-skill.md +2 -1
  76. package/packages/omo-codex/plugin/skills/frontend/references/design/design-system-architecture.md +30 -7
  77. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +17 -5
  78. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +5 -5
  79. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +13 -9
  80. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +5 -6
  81. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-unclear.md +2 -2
  82. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  83. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -154
  84. package/packages/omo-codex/scripts/install-dist/install-local.mjs +2 -2
  85. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  86. package/packages/shared-skills/skills/frontend/references/design/ambience-skill.md +2 -1
  87. package/packages/shared-skills/skills/frontend/references/design/design-system-architecture.md +30 -7
  88. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +17 -5
  89. package/packages/shared-skills/skills/ulw-plan/SKILL.md +5 -5
  90. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +13 -9
  91. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +5 -6
  92. package/packages/shared-skills/skills/ulw-plan/references/intent-unclear.md +2 -2
  93. package/packages/shared-skills/skills/ulw-plan/scripts/plan-templates.mjs +180 -0
  94. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +3 -154
@@ -23,26 +23,10 @@
23
23
  import { lstat, mkdir, writeFile, readFile, realpath } from "node:fs/promises";
24
24
  import { dirname, join, relative, resolve, isAbsolute } from "node:path";
25
25
  import { pathToFileURL } from "node:url";
26
+ import { FINAL_VERIFICATION_ITEMS, PLAN_SECTION_HEADERS, buildDraft, buildPlanSkeleton } from "./plan-templates.mjs";
26
27
 
27
- // The canonical AI-plan section headers, in order. references/full-workflow.md
28
- // documents this exact list; a build-time test asserts the two never drift.
29
- export const PLAN_SECTION_HEADERS = [
30
- "## TL;DR (For humans)",
31
- "## Scope",
32
- "## Verification strategy",
33
- "## Execution strategy",
34
- "## Todos",
35
- "## Final verification wave",
36
- "## Commit strategy",
37
- "## Success criteria",
38
- ];
39
-
40
- export const FINAL_VERIFICATION_ITEMS = [
41
- "F1. Plan compliance audit",
42
- "F2. Code quality review",
43
- "F3. Real manual QA",
44
- "F4. Scope fidelity",
45
- ];
28
+ // The emitted text lives in plan-templates.mjs; re-exported so importers keep one entry point.
29
+ export { FINAL_VERIFICATION_ITEMS, PLAN_SECTION_HEADERS, buildDraft, buildPlanSkeleton };
46
30
 
47
31
  const SLUG_PATTERN = /^[a-z0-9][a-z0-9-]{0,79}$/;
48
32
 
@@ -151,141 +135,6 @@ export function isUlwArtifact(content) {
151
135
  return isPlan || isDraft;
152
136
  }
153
137
 
154
- export function buildDraft(slug, intent, { reviewRequired = false } = {}) {
155
- const assumptionsNote =
156
- intent === "unclear"
157
- ? "Intent is UNCLEAR: research resolves ambiguity, defaults are adopted (not asked), and each is surfaced in the plan's human TL;DR for veto."
158
- : "Record any default you adopt instead of asking, so the user can veto it at the gate.";
159
- const reviewState = reviewRequired
160
- ? `review_required: true
161
- plan_path: .omo/plans/${slug}.md
162
- plan_sha256: null
163
- review_round_id: null
164
- pending-action: write and review .omo/plans/${slug}.md
165
- review:
166
- momus:
167
- status: pending
168
- workspace_root: null
169
- runtime_home: null
170
- target: .omo/plans/${slug}.md
171
- round_id: null
172
- plan_sha256: null
173
- launch_id: null
174
- session: null
175
- result: null
176
- independent:
177
- status: pending
178
- workspace_root: null
179
- runtime_home: null
180
- target: .omo/plans/${slug}.md
181
- round_id: null
182
- plan_sha256: null
183
- launch_id: null
184
- session: null
185
- result: null`
186
- : `review_required: false
187
- pending-action: write .omo/plans/${slug}.md`;
188
- return `---
189
- slug: ${slug}
190
- status: drafting
191
- intent: ${intent}
192
- ${reviewState}
193
- approach: <fill: the approach you intend to plan>
194
- ---
195
-
196
- # Draft: ${slug}
197
-
198
- ## Components (topology ledger)
199
- <!-- Lock the SHAPE before depth. One row per top-level component that can succeed or fail independently. -->
200
- <!-- id | outcome (one line) | status: active|deferred | evidence path -->
201
-
202
- ## Open assumptions (announced defaults)
203
- <!-- ${assumptionsNote} -->
204
- <!-- assumption | adopted default | rationale | reversible? -->
205
-
206
- ## Findings (cited - path:lines)
207
-
208
- ## Decisions (with rationale)
209
-
210
- ## Scope IN
211
-
212
- ## Scope OUT (Must NOT have)
213
-
214
- ## Open questions
215
-
216
- ## Approval gate
217
- status: drafting
218
- <!-- When exploration is exhausted and unknowns are answered, set status: awaiting-approval. -->
219
- <!-- That durable record is the loop guard: on a later turn read it and resume at the gate instead of re-running exploration. -->
220
- `;
221
- }
222
-
223
- export function buildPlanSkeleton(slug, intent) {
224
- const decisionsLine =
225
- intent === "unclear"
226
- ? "**Decisions I made for you:** <fill last - the best-practice defaults you adopted; the user vetoes any here>"
227
- : "**Decisions to sanity-check:** <fill last - the few choices worth a human glance>";
228
- return `# ${slug} - Work Plan
229
-
230
- ## TL;DR (For humans)
231
- <!-- Fill this LAST, after the detailed plan below is written, so it summarizes the REAL plan. -->
232
- <!-- Plain English for a non-engineer: NO file paths, NO todo numbers, NO wave/agent/tool names. -->
233
-
234
- **What you'll get:** <fill last - deliverables in human terms, 1-2 sentences>
235
-
236
- **Why this approach:** <fill last - the one or two load-bearing decisions and why>
237
-
238
- **What it will NOT do:** <fill last - 1-3 plain lines mirroring Must NOT have>
239
-
240
- **Effort:** <Quick | Short | Medium | Large | XL>
241
- <!-- Effort is exactly ONE band, never hours/days. Quick = single edit, minutes of agent work; Short = one focused change, a few files; Medium = multi-file feature in one session; Large = several waves, one long session; XL = multi-session or architectural work. A written duration is rewritten to a band. -->
242
- **Risk:** <Low | Medium | High> - <one-line driver>
243
- ${decisionsLine}
244
-
245
- Your next move: <fill - e.g. approve, or run a high-accuracy review>. Full execution detail follows below.
246
-
247
- ---
248
-
249
- > TL;DR (machine): <1 line - effort, risk, deliverables>
250
-
251
- ## Scope
252
- ### Must have
253
- ### Must NOT have (guardrails, anti-slop, scope boundaries)
254
-
255
- ## Verification strategy
256
- > Zero human intervention - all verification is agent-executed.
257
- - Test decision: <TDD | tests-after | none> + framework
258
- - Evidence: <attemptDir>/task-<N>-${slug}.<ext> (attemptDir = currentAttemptDir from the ulw-loop status operation - on Senpi the eval SDK import, const { agentToolkit } = await import(\`\${env("OMO_AGENT_TOOLKIT_SDK_ROOT")}/sdk.js\`) then agentToolkit.status(), on Codex the omo-agent-toolkit CLI, .omo/evidence/ulw/<session>/<goalId>/a<attempt>; outside ulw-loop use .omo/evidence/)
259
-
260
- ## Execution strategy
261
- ### Parallel execution waves
262
- > Target 5-8 todos per wave. Fewer than 3 (except the final) means you under-split.
263
-
264
- ### Dependency matrix
265
- | Todo | Depends on | Blocks | Can parallelize with |
266
- | --- | --- | --- | --- |
267
-
268
- ## Todos
269
- > Implementation + Test = ONE todo. Never separate.
270
- <!-- APPEND TASK BATCHES BELOW THIS LINE WITH edit/apply_patch - never rewrite the headers above. -->
271
- - [ ] 1. <title>
272
- What to do / Must NOT do: <...>
273
- Parallelization: Wave <N> | Blocked by: <...> | Blocks: <...>
274
- References (executor has NO interview context - be exhaustive): <src/path:lines>
275
- Acceptance criteria (agent-executable): <exact command or assertion>
276
- QA scenarios (name the exact tool + invocation): happy + failure, Evidence <attemptDir>/task-1-${slug}.<ext>
277
- Commit: <Y/N> | <type>(<scope>): <summary>
278
-
279
- ## Final verification wave
280
- > Runs in parallel after ALL todos. ALL must APPROVE. Surface results and wait for the user's explicit okay before declaring complete.
281
- ${FINAL_VERIFICATION_ITEMS.map((item) => `- [ ] ${item}`).join("\n")}
282
-
283
- ## Commit strategy
284
-
285
- ## Success criteria
286
- `;
287
- }
288
-
289
138
  // Resume-safe write: plain re-run on an existing ulw-plan artifact is a no-op
290
139
  // success; --reset overwrites but refuses to discard a hand-edited file unless
291
140
  // --force is also passed.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.89",
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",
@@ -183,7 +183,7 @@
183
183
  "zod": "^4.6.5"
184
184
  },
185
185
  "devDependencies": {
186
- "@code-yeongyu/senpi": "2026.9.23-4",
186
+ "@code-yeongyu/senpi": "2026.9.24",
187
187
  "@oh-my-opencode/agents-md-core": "workspace:*",
188
188
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
189
189
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -224,18 +224,18 @@
224
224
  "typescript": "^7.0.2"
225
225
  },
226
226
  "optionalDependencies": {
227
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.87",
228
- "oh-my-opencode-darwin-x64": "5.0.0-beta.87",
229
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.87",
230
- "oh-my-opencode-linux-arm64": "5.0.0-beta.87",
231
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.87",
232
- "oh-my-opencode-linux-x64": "5.0.0-beta.87",
233
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.87",
234
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.87",
235
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.87",
236
- "oh-my-opencode-windows-arm64": "5.0.0-beta.87",
237
- "oh-my-opencode-windows-x64": "5.0.0-beta.87",
238
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.87"
227
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.89",
228
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.89",
229
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.89",
230
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.89",
231
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.89",
232
+ "oh-my-opencode-linux-x64": "5.0.0-beta.89",
233
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.89",
234
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.89",
235
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.89",
236
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.89",
237
+ "oh-my-opencode-windows-x64": "5.0.0-beta.89",
238
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.89"
239
239
  },
240
240
  "overrides": {
241
241
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.89",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",
@@ -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.87) Checking Bootstrap Provisioning"
11
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87",
3
+ "version": "5.0.0-beta.89",
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.87) Checking Comments"
11
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87",
3
+ "version": "5.0.0-beta.89",
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.87) Recommending Git Bash MCP"
11
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87) Resetting Git Bash MCP Reminder"
23
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87",
3
+ "version": "5.0.0-beta.89",
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.87) Verifying LazyCodex Executor Evidence"
11
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87",
3
+ "version": "5.0.0-beta.89",
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.87",
4
- "inputDigest": "sha256:72acd620e3bb18d2b7ff2299536bc0c48b009811a865fa1504e934010d24ea98",
3
+ "version": "5.0.0-beta.89",
4
+ "inputDigest": "sha256:5bd77d1313eca86b5e1dee027c016557f30a207aba677b12b40bf1d48462ecfd",
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.87) Checking LSP Diagnostics"
11
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87) Resetting LSP Diagnostics Cache"
24
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87",
3
+ "version": "5.0.0-beta.89",
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",
@@ -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.87) Loading Project Rules"
10
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87) Loading Project Rules"
22
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87) Matching Project Rules"
35
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87) Resetting Project Rule Cache"
48
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87",
3
+ "version": "5.0.0-beta.89",
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.87) Checking Thread Title Hygiene"
11
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87",
3
+ "version": "5.0.0-beta.89",
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.87) Recording Session Telemetry"
10
+ "statusMessage": "(OmO 5.0.0-beta.89) 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.87",
3
+ "version": "5.0.0-beta.89",
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 @@ Role: strategic planning consultant. You produce a single, bulletproof, executab
11
11
  You ARE the planner. You ARE NOT an implementer. You read, search, run read-only analysis, and write exactly ONE plan file - never source code, never product builds, never the actual feature. When the caller says "do X / fix X / build X", interpret it as "create a work plan for X". If the caller explicitly demands implementation, REFUSE and answer: "I'm a planner. I produce the work plan. Spawn a worker agent or execute the plan yourself to implement."
12
12
 
13
13
  # Goal
14
- Deliver ONE executable plan that a downstream executor can follow with no further interview. Every task is atomic, with explicit references, agent-executable acceptance criteria, QA scenarios, and a commit instruction. I fit work whose design remains open after discovery: ambiguous scope, competing decompositions, unclear boundaries, or uncertain dependency ordering. I am the wrong tool for a known checklist however many steps it has, for work the caller is delegating to another session, for a single-file edit with an obvious pattern, or when the caller already has a plan and just wants execution - say so instead of planning.
14
+ Deliver ONE executable plan that reaches the ideal state for the affected user and that a downstream executor can follow with no further interview. Before drafting, name who the result touches (a customer, another programmer, a program or agent consuming it), how they use it today and after, the state in which nothing snags, regresses, or degrades for them (IS rows, each with a reason), and every gap from today (GAP rows, each with a reason); every task closes a GAP row and `## Success criteria` proves every IS row. "MVP" / "phase 1" subsets are never invented; when the ideal state exceeds the literal request, say so in one line and plan the ideal state. Every task is atomic, with explicit references, agent-executable acceptance criteria, QA scenarios, and a commit instruction. I fit work whose design remains open after discovery: ambiguous scope, competing decompositions, unclear boundaries, or uncertain dependency ordering. I am the wrong tool for a known checklist however many steps it has, for work the caller is delegating to another session, for a single-file edit with an obvious pattern, or when the caller already has a plan and just wants execution - say so instead of planning.
15
15
 
16
16
  # Phase 1 - Context gathering (MANDATORY - never plan blind)
17
17
  Fire parallel research BEFORE drafting:
@@ -31,11 +31,20 @@ Write ONE plan to `.omo/plans/<slug>.md` (create the directory if absent). No "P
31
31
 
32
32
  ## TL;DR
33
33
  > Summary: <1-2 sentences>
34
+ > For whom: <the affected user and what changes for them>
34
35
  > Deliverables: <bullet list>
35
36
  > Effort: <Quick | Short | Medium | Large | XL> (one band, never hours/days: Quick = single edit, minutes of agent work; Short = one focused change, a few files; Medium = multi-file feature in one session; Large = several waves, one long session; XL = multi-session or architectural work)
36
37
  > Risk: <Low | Medium | High> - <one-line driver>
37
38
 
38
39
  ## Scope
40
+ ### Affected user and ideal state
41
+ **Affected user:** <who, and how they use it today and after>
42
+
43
+ | Row | Statement | Reason |
44
+ |-----|-----------|--------|
45
+ | IS-1 | <what the user does, sees, or never has break> | <why this is the ideal for them> |
46
+ | GAP-1 | <how today differs from IS-1> | <why it matters to them> |
47
+
39
48
  ### Must have
40
49
  - ...
41
50
 
@@ -81,6 +90,7 @@ Critical path: Task 1 -> Task 2 -> Task 6
81
90
 
82
91
  What to do: <clear implementation steps>
83
92
  Must NOT do: <explicit exclusions>
93
+ Closes: GAP-<n>
84
94
 
85
95
  Parallelization: Can parallel: <YES|NO> | Wave <N> | Blocks: [<tasks>] | Blocked by: [<tasks>]
86
96
 
@@ -116,7 +126,7 @@ Critical path: Task 1 -> Task 2 -> Task 6
116
126
  - [ ] F1. Plan compliance audit - every task done, every acceptance criterion met
117
127
  - [ ] F2. Code quality review - diagnostics clean, idioms match, no dead code
118
128
  - [ ] F3. Real manual QA - every QA scenario executed with evidence captured
119
- - [ ] F4. Scope fidelity - nothing extra shipped beyond Must-Have, nothing Must-NOT-Have introduced
129
+ - [ ] F4. Ideal-state fidelity - delivered behavior checked against every IS row 1:1; a shortfall becomes new task rows, never a note; nothing Must-NOT-Have introduced
120
130
 
121
131
  ## Commit strategy
122
132
  - One logical change per commit. Conventional Commits (`<type>(<scope>): <subject>` body + footer).
@@ -125,7 +135,10 @@ Critical path: Task 1 -> Task 2 -> Task 6
125
135
  - Reference the plan file path in the final commit footer: `Plan: .omo/plans/<slug>.md`.
126
136
 
127
137
  ## Success criteria
128
- - All Must-Have shipped; all QA scenarios pass with captured evidence; F1-F4 approved; commit history clean.
138
+ | IS | Delivering task(s) | Proving QA scenario | Evidence |
139
+ |----|--------------------|---------------------|----------|
140
+ | IS-1 | <N> | <scenario name from task N> | <attemptDir>/task-<N>-<slug>.<ext> |
141
+ - Every IS row above has a delivering task and a proving scenario; all QA scenarios pass with captured evidence; F1-F4 approved; commit history clean.
129
142
  ```
130
143
 
131
144
  # Constraints
@@ -7,7 +7,7 @@
7
7
  "type": "command",
8
8
  "command": "node \"${PLUGIN_ROOT}/dist/cli.js\" hook user-prompt-submit",
9
9
  "timeout": 5,
10
- "statusMessage": "(OmO 5.0.0-beta.87) Checking Ultrawork Trigger"
10
+ "statusMessage": "(OmO 5.0.0-beta.89) Checking Ultrawork Trigger"
11
11
  }
12
12
  ]
13
13
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/codex-ultrawork",
3
- "version": "5.0.0-beta.87",
3
+ "version": "5.0.0-beta.89",
4
4
  "description": "Codex plugin that injects the ultrawork orchestration directive and ships LazyCodex planning, review, QA, and gate agent roles.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -24,13 +24,13 @@ If another active mode mandates its own first line (ultrawork does), print that
24
24
  Directly under the marker, before any exploration, state the working contract once, in your own words, carrying ALL of these commitments:
25
25
 
26
26
  1. **Persona + no-implementation pledge** - from now on you work as Prometheus, a planning consultant, and you will never start implementation - no product-code edits, no implementer subagents - until the user explicitly says okay; even then, approval authorizes writing the plan only, and execution starts in a separate worker session (e.g. `$ulw-execute`).
27
- 2. **Workflow preview** - the order of what happens next: parallel read-only exploration (plus outside research when the repo cannot answer) until the open unknowns are resolved; the intent verdict from INTENT ROUTING, announced; questions to the user ONLY when a genuine owner-decision survives exploration - or when exploration and research both come back empty on a fork the plan cannot proceed without; then the approval brief, and the plan is written only after the explicit okay.
27
+ 2. **Workflow preview** - the order of what happens next: parallel read-only exploration (plus outside research when the repo cannot answer) until the open unknowns are resolved; the affected user, the ideal state, and the gap list, announced; the intent verdict from INTENT ROUTING, announced; questions to the user ONLY when a genuine owner-decision survives exploration - or when exploration and research both come back empty on a fork the plan cannot proceed without; then the approval brief, and the plan is written only after the explicit okay.
28
28
 
29
29
  Example opening (adapt the wording, keep every commitment):
30
30
 
31
31
  > ULW-PLAN MODE ENABLED!
32
32
  > From now on I am working as Prometheus, a planning consultant. I will not start any implementation until you explicitly say okay - and approval authorizes writing the plan only; execution starts separately (e.g. `$ulw-execute`).
33
- > Next, in order: (1) parallel read-only exploration and research, (2) intent verdict announced (CLEAR or UNCLEAR, plus whether high-accuracy review is required), (3) questions only for the forks exploration cannot settle - or where research finds nothing on a blocking decision, (4) approval brief, then (5) the plan is written after your okay.
33
+ > Next, in order: (1) parallel read-only exploration and research, (2) the affected user, the ideal state for them, and every gap from today, announced, (3) intent verdict announced (CLEAR or UNCLEAR, plus whether high-accuracy review is required), (4) questions only for the forks the ideal state and exploration cannot settle - or where research finds nothing on a blocking decision, (5) approval brief, then (6) the plan is written after your okay.
34
34
 
35
35
  ## INTENT ROUTING - pick ONE intent reference
36
36
 
@@ -68,10 +68,10 @@ When producing the plan, encode every executable item as a column-zero Markdown
68
68
 
69
69
  ## Universal invariants (hold on every path)
70
70
 
71
- - **Decision-complete is the north star.** The executor has NO interview context - spell out exact paths, "every X in Y", and an explicit Must-NOT-Have. Leave the implementer ZERO judgment calls.
72
- - **Full scope is the default.** Plan the ENTIRE request; "MVP", "v1", "phase 1", or any reduced subset is never an option you invent or ask about - it exists only if the user introduces it. Scope OUT / Must-NOT-Have entries are guardrails against unrequested additions, never reductions of the request.
71
+ - **The ideal state for the affected user is the north star.** Before the brief, name who this output touches - a customer, another programmer, a program or agent consuming it, often more than one - and how each uses it today and will use it after; write the state in which nothing snags, feels odd, regresses, or degrades for them, one row per property with its reason, then every difference between that state and today, each with its reason. Record both in the draft; the plan exists to close every gap row. "MVP", "v1", "phase 1", or any reduced subset is never an option you invent or ask about; when the ideal state is larger than the literal request, say so in one line and plan the ideal state.
72
+ - **Decision-complete is how the plan gets there.** The executor has NO interview context - spell out exact paths, "every X in Y", and an explicit Must-NOT-Have (a guardrail against unrequested additions, never a reduction). Leave the implementer ZERO judgment calls.
73
73
  - **Explore before asking.** Discoverable facts (repo/system/docs truth) -> research and cite, never ask. Preferences/tradeoffs -> the only things you bring to the user. When unsure which, treat it as a user-decision.
74
- - **Two filters** on every candidate question, in order: (1) Could collected evidence answer it? -> explore instead. (2) Could the user's stated intent plus a defensible default answer it? -> adopt the default, record it, do not ask - UNLESS it is an owner-decision, which always survives as a question even when a default exists: anything irreversible / destructive / safety-critical, or a cross-cutting product choice the user lives with (public config surface, distribution / packaging, external dependency or pinned SHA, data / schema shape, real budget / paid-service spend, expected scale or capacity target, target-audience / compliance limits). Extrinsic constraints (budget, mandated stack, scale, audience) leave no repo evidence, so exploration can never surface them - sweep those axes explicitly once per plan and classify each as explored, defaulted (ledger), or asked. Default the reversible internals; surface the owner-decisions.
74
+ - **Two filters** on every candidate question, in order: (1) Could collected evidence answer it? -> explore instead. (2) Does the ideal state for the affected user settle it - or, failing that, the stated intent plus a defensible default? -> resolve to that, record it, do not ask - UNLESS it is an owner-decision, which always survives as a question even when a default exists: anything irreversible / destructive / safety-critical, or a cross-cutting product choice the user lives with (public config surface, distribution / packaging, external dependency or pinned SHA, data / schema shape, real budget / paid-service spend, expected scale or capacity target, target-audience / compliance limits). Extrinsic constraints (budget, mandated stack, scale, audience) leave no repo evidence, so exploration can never surface them - sweep those axes explicitly once per plan and classify each as explored, defaulted (ledger), or asked. Default the reversible internals; surface the owner-decisions.
75
75
  - **Explore to sufficiency, then STOP.** One research wave per open question; stop when the clearance check is answerable; never re-explore to double-check.
76
76
  - **Parallel-dispatch** independent research in ONE turn and keep working while it runs. Subagent outputs are CLAIMS until you independently verify them.
77
77
  - **Approval is not execution.** Approval authorizes writing the plan ONLY, never implementation. ONE request -> ONE plan, however large.