oh-my-opencode 5.1.30 → 5.1.32

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 (83) hide show
  1. package/dist/cli/index.js +25 -19
  2. package/dist/cli/service-auth/commands.d.ts +11 -0
  3. package/dist/cli-node/index.js +25 -19
  4. package/dist/features/background-agent/task-poller.d.ts +3 -0
  5. package/dist/features/team-mode/tools/lifecycle-inline-spec.d.ts +1 -0
  6. package/dist/hooks/keyword-detector/constants.d.ts +1 -0
  7. package/dist/index.js +172 -60
  8. package/dist/skills/browser/runtime/omowright/manifest.json +1 -1
  9. package/dist/skills/ulw-execute/SKILL.md +2 -2
  10. package/dist/tools/delegate-task/executor-types.d.ts +1 -0
  11. package/dist/tools/delegate-task/sync-session-creator.d.ts +1 -0
  12. package/dist/tools/delegate-task/types.d.ts +2 -0
  13. package/dist/tools/session-manager/session-error.d.ts +7 -0
  14. package/dist/tui.js +18 -16
  15. package/package.json +14 -14
  16. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  17. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +4 -2
  18. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  19. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  21. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  22. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  23. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  24. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  25. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  26. package/packages/omo-codex/plugin/components/lcx/skills/lcx-contribute-bug-fix/SKILL.md +7 -4
  27. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  28. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  29. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  30. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  31. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  33. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  34. package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +3 -3
  35. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  36. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  37. package/packages/omo-codex/plugin/components/ultrawork/dist/cli.js +18 -15
  38. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  39. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  40. package/packages/omo-codex/plugin/components/ultrawork/src/directive-content.ts +1 -1
  41. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  42. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  43. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +18 -15
  44. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  45. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  46. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +2 -2
  47. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +2 -2
  48. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  49. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  50. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  51. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  52. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  53. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  54. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  55. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  56. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  57. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  58. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  59. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  60. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  61. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  62. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  63. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  64. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  65. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  66. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  67. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  68. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  69. package/packages/omo-codex/plugin/package-lock.json +12 -12
  70. package/packages/omo-codex/plugin/package.json +1 -1
  71. package/packages/omo-codex/plugin/scripts/sync-skills.mjs +2 -2
  72. package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
  73. package/packages/omo-codex/plugin/skills/lcx-contribute-bug-fix/SKILL.md +7 -4
  74. package/packages/omo-codex/plugin/skills/teammode/SKILL.md +3 -3
  75. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +18 -15
  76. package/packages/omo-codex/plugin/skills/ulw-execute/SKILL.md +2 -2
  77. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +2 -2
  78. package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +2 -2
  79. package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +2 -2
  80. package/packages/omo-codex/scripts/install-dist/install-local.mjs +6 -4
  81. package/packages/prompts-core/prompts/ultrawork/codex.md +18 -15
  82. package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
  83. package/packages/shared-skills/skills/ulw-execute/SKILL.md +2 -2
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "5.1.30",
3
+ "version": "5.1.32",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@sisyphuslabs/omo-codex-plugin",
9
- "version": "5.1.30",
9
+ "version": "5.1.32",
10
10
  "workspaces": [
11
11
  "components/comment-checker",
12
12
  "components/git-bash",
@@ -95,7 +95,7 @@
95
95
  },
96
96
  "components/comment-checker": {
97
97
  "name": "@code-yeongyu/codex-comment-checker",
98
- "version": "5.1.30",
98
+ "version": "5.1.32",
99
99
  "license": "MIT",
100
100
  "bin": {
101
101
  "omo-comment-checker": "dist/cli.js"
@@ -117,7 +117,7 @@
117
117
  },
118
118
  "components/git-bash": {
119
119
  "name": "@sisyphuslabs/codex-git-bash-hook",
120
- "version": "5.1.30",
120
+ "version": "5.1.32",
121
121
  "bin": {
122
122
  "omo-git-bash-hook": "dist/cli.js"
123
123
  },
@@ -131,7 +131,7 @@
131
131
  },
132
132
  "components/lazycodex-executor-verify": {
133
133
  "name": "@code-yeongyu/codex-lazycodex-executor-verify",
134
- "version": "5.1.30",
134
+ "version": "5.1.32",
135
135
  "license": "MIT",
136
136
  "bin": {
137
137
  "lazycodex-executor-verify": "dist/cli.js"
@@ -149,7 +149,7 @@
149
149
  },
150
150
  "components/lsp": {
151
151
  "name": "@code-yeongyu/codex-lsp",
152
- "version": "5.1.30",
152
+ "version": "5.1.32",
153
153
  "license": "MIT",
154
154
  "dependencies": {
155
155
  "@code-yeongyu/lsp-daemon": "file:../../../../lsp-daemon",
@@ -171,7 +171,7 @@
171
171
  },
172
172
  "components/rules": {
173
173
  "name": "@code-yeongyu/codex-rules",
174
- "version": "5.1.30",
174
+ "version": "5.1.32",
175
175
  "license": "MIT",
176
176
  "dependencies": {
177
177
  "picomatch": "^4.0.7"
@@ -194,7 +194,7 @@
194
194
  },
195
195
  "components/teammode": {
196
196
  "name": "@sisyphuslabs/codex-teammode",
197
- "version": "5.1.30",
197
+ "version": "5.1.32",
198
198
  "devDependencies": {
199
199
  "@types/node": "^26.6.2",
200
200
  "@vitest/coverage-v8": "5.0.1",
@@ -208,7 +208,7 @@
208
208
  },
209
209
  "components/telemetry": {
210
210
  "name": "@code-yeongyu/codex-telemetry",
211
- "version": "5.1.30",
211
+ "version": "5.1.32",
212
212
  "license": "MIT",
213
213
  "bin": {
214
214
  "omo-telemetry": "dist/cli.js"
@@ -227,7 +227,7 @@
227
227
  },
228
228
  "components/ultrawork": {
229
229
  "name": "@code-yeongyu/codex-ultrawork",
230
- "version": "5.1.30",
230
+ "version": "5.1.32",
231
231
  "license": "MIT",
232
232
  "bin": {
233
233
  "omo-ultrawork": "dist/cli.js"
@@ -246,7 +246,7 @@
246
246
  },
247
247
  "components/ulw-execute-continuation": {
248
248
  "name": "@code-yeongyu/codex-ulw-execute-continuation",
249
- "version": "5.1.30",
249
+ "version": "5.1.32",
250
250
  "license": "MIT",
251
251
  "bin": {
252
252
  "omo-ulw-execute-continuation": "dist/cli.js"
@@ -264,7 +264,7 @@
264
264
  },
265
265
  "components/ulw-loop": {
266
266
  "name": "@code-yeongyu/codex-ulw-loop",
267
- "version": "5.1.30",
267
+ "version": "5.1.32",
268
268
  "license": "MIT",
269
269
  "bin": {
270
270
  "omo-ulw-loop": "dist/cli.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sisyphuslabs/omo-codex-plugin",
3
- "version": "5.1.30",
3
+ "version": "5.1.32",
4
4
  "description": "Aggregate Codex plugin root for OMO components.",
5
5
  "type": "module",
6
6
  "packageManager": "npm@11.12.1",
@@ -178,7 +178,7 @@ export const ulwExecuteOriginalCompletion = [
178
178
  "When all top-level checkboxes in `## TODOs` and `## Final Verification Wave` are complete:",
179
179
  "",
180
180
  "1. Run the plan's final verification commands.",
181
- "2. For PR/branch work, finish the lifecycle from the last phase's worktree: sync `.omo/` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.",
181
+ "2. For PR/branch work, finish the lifecycle from the last phase's worktree: sync `.omo/` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff. Finish directory teardown per Task resources and record its receipts.",
182
182
  "3. Remove or mark the Boulder work as completed.",
183
183
  "4. Print an `ORCHESTRATION COMPLETE` block with the plan path, verification commands, artifacts, and cleanup receipts.",
184
184
  ].join("\n");
@@ -198,7 +198,7 @@ const ulwExecuteCodexCompletion = [
198
198
  "1. Run the plan's final verification commands.",
199
199
  "2. Record a self-review in the notepad: re-read the diff, run diagnostics, and capture evidence for every acceptance criterion. Run your own manual QA on the real surface.",
200
200
  "3. Only when the user demanded strict, rigorous, or high-accuracy review, spawn ONE `lazycodex-gate-reviewer`; otherwise your self-review is the final verification.",
201
- "4. Finish the PR/branch lifecycle from its task-owned worktree: sync `.omo/` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.",
201
+ "4. Finish the PR/branch lifecycle from its task-owned worktree: sync `.omo/` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff. Finish directory teardown per Task resources and record its receipts.",
202
202
  "5. Remove or mark the Boulder work as completed.",
203
203
  "6. Print an `ORCHESTRATION COMPLETE` block with the plan path, verification commands, artifacts, and cleanup receipts.",
204
204
  ].join("\n");
@@ -5,5 +5,5 @@
5
5
  "index.js": "b6b064fab277031c6c51f5a58b84b31040f9960bf767bf646adc0540c1d25c1b",
6
6
  "page-bundle.js": "bfd51e8383cf47200d57387bbbed258bce5a3a3d00c38fc108034d2888e23f0c"
7
7
  },
8
- "stagedAtUtc": "2026-10-11T14:43:14.044Z"
8
+ "stagedAtUtc": "2026-10-13T00:11:59.877Z"
9
9
  }
@@ -37,11 +37,12 @@ For `code-yeongyu/lazycodex`, create an issue (never a PR) that includes:
37
37
 
38
38
  ## Required Workflow
39
39
 
40
- 1. Read the user's bug report and identify the affected surface.
40
+ 1. Read the user's bug report and identify the affected surface. Before commands, apply the bundled ultrawork directive’s Task resources and todo rules; read those sections if absent from context.
41
41
  2. Invoke `$omo:debugging` for the investigation. If only unqualified skill names are exposed, invoke `$debugging` and state that it is the OMO debugging skill.
42
42
  3. Materialize the latest sources under `LAZYCODEX_SOURCE_ROOT="${LAZYCODEX_SOURCE_ROOT:-${TMPDIR:-/tmp}/lazycodex-sources}"`, then decide the target repository. Sync both checkouts on every run and compare them before choosing. Validate cached checkouts before reuse so an incomplete `.git` directory cannot route the fix to the wrong repo:
43
43
 
44
44
  ```bash
45
+ # The default checkout cache is per-task under TMPDIR=$RUN_TMP.
45
46
  LAZYCODEX_SOURCE_ROOT="${LAZYCODEX_SOURCE_ROOT:-${TMPDIR:-/tmp}/lazycodex-sources}"
46
47
  mkdir -p "$LAZYCODEX_SOURCE_ROOT"
47
48
 
@@ -86,11 +87,11 @@ sync_latest_source() {
86
87
  sync_latest_source code-yeongyu/lazycodex "$LAZYCODEX_SOURCE_ROOT/lazycodex-source"
87
88
  sync_latest_source openai/codex "$LAZYCODEX_SOURCE_ROOT/chatgpt-subscription-source"
88
89
  ```
89
- 4. Create a fresh temporary clone and branch under `${TMPDIR:-/tmp}`. Do not modify the user's current repository for the target fix unless the current repository is itself the requested target and the user explicitly asked for local edits.
90
+ 4. Create a fresh temporary clone and branch under `${TMPDIR:-/tmp}`. Do not modify the user's current repository for the target fix unless the current repository is itself the requested target and the user explicitly asked for local edits. Apply those resource rules at clone/worktree creation.
90
91
 
91
92
  ```bash
92
93
  TARGET_REPO="code-yeongyu/lazycodex" # or openai/codex
93
- WORK_ROOT="$(mktemp -d "${TMPDIR:-/tmp}/lazycodex-fix-XXXXXX")"
94
+ WORK_ROOT="${RUN_TMP:?apply ultrawork Task resources first}"
94
95
  gh repo clone "$TARGET_REPO" "$WORK_ROOT/repo" -- --depth=1
95
96
  cd "$WORK_ROOT/repo"
96
97
  BASE_BRANCH="$(git remote show origin | sed -n '/HEAD branch/s/.*: //p')"
@@ -152,13 +153,15 @@ git push -u fork "$BRANCH_NAME"
152
153
  gh pr create --repo openai/codex --base "$BASE_BRANCH" --head "$GH_USER:$BRANCH_NAME" --title "<short fix title>" "${LABEL_ARGS[@]}" --body-file "$PR_BODY"
153
154
  ```
154
155
 
155
- 13. Clean up:
156
+ 13. Finish cleanup per Task resources. Run this only when that rule permits removing the worktree and run root; otherwise retain them and report the outstanding cleanup todo:
156
157
 
157
158
  ```bash
158
159
  cd /
159
160
  git -C "$WORK_ROOT/repo" worktree remove "$WORK_ROOT/worktree"
161
+ unset TMPDIR NODE_COMPILE_CACHE BUN_RUNTIME_TRANSPILER_CACHE_PATH
160
162
  find "$WORK_ROOT" -mindepth 1 -maxdepth 1 -exec rm -r -- {} +
161
163
  rmdir "$WORK_ROOT"
164
+ test ! -e "$WORK_ROOT" && printf 'cleanup: worktree and caches REMOVED\n'
162
165
  ```
163
166
 
164
167
  Return the PR or issue URL, the reproduction command, the verification command, and the cleanup receipt.
@@ -229,9 +229,9 @@ cannot clobber each other. Decide this whenever you see the collision - at team
229
229
  not only up front. For each colliding member run `worktree-add --team <id> --id <member>`: it creates
230
230
  the worktree off the base branch on a derived branch, flips the team into worktree mode, records it in
231
231
  `team.json`, and prints the `cd` path to hand that member. The member works and commits only inside
232
- its own worktree. To land the work, `integrate --team <id>` merges every member branch into your
232
+ its own worktree. Use the bundled ultrawork directive’s Task resources and todo rules at member/worktree creation; read those sections if absent from context. To land the work, `integrate --team <id>` merges every member branch into your
233
233
  current branch with a merge commit (never a squash or rebase); resolve any conflict it reports, then
234
- `worktree-remove` each worktree at cleanup.
234
+ finish owned directory teardown per Task resources.
235
235
 
236
236
  Delivering the path differs by transport: on MultiAgentV2, create the worktree BEFORE spawning
237
237
  so the bootstrap carries it, or send it to an already-running member as a `followup_task`; on
@@ -280,7 +280,7 @@ is never disbanded is a leak.
280
280
  - `delete` removes `.omo/teams/{session_id}` and refuses while the team is unarchived or any member
281
281
  is still active unless `--force`.
282
282
  - When the work wraps up, land it the way the user asked: `integrate --team <id>` for a direct merge
283
- commit, or push each member branch and open a PR. Then `worktree-remove` each worktree, archive, and
283
+ commit, or push each member branch and open a PR. Then finish worktree cleanup per Task resources, archive, and
284
284
  delete. Cleanup is real work; respect the user's instruction on how to land it.
285
285
 
286
286
  ## Stop rules
@@ -112,7 +112,11 @@ degrades color and wide-glyph width. In this repo:
112
112
  stream). Outside this repo, capture equivalent browser-rendered terminal
113
113
  evidence: screenshot + plain transcript + cleanup receipt.
114
114
 
115
- # Bootstrap (DO ALL FOUR BEFORE ANY OTHER WORK — NO SKIPPING)
115
+ # Bootstrap (COMPLETE EVERY SECTION BEFORE ANY OTHER WORK — NO SKIPPING)
116
+
117
+ ## Task resources
118
+ Before the first task command, create one `RUN_TMP=$(mktemp -d)` per task, tracking its paths under section 3 immediately. Export `TMPDIR="$RUN_TMP" NODE_COMPILE_CACHE="$RUN_TMP/node-compile-cache" BUN_RUNTIME_TRANSPILER_CACHE_PATH="$RUN_TMP/bun-transpiler"` for every command; pass the same environment explicitly to children that do not inherit it. Give independent child tasks their own run roots.
119
+ At task end, after owned processes exit, remove only owned directories, including runtime caches. Never wipe shared caches; retain worktrees still needed by open PRs and any parent directory containing them.
116
120
 
117
121
  ## 0. Survey the skills, gather context, then size the work
118
122
  First, survey the loaded skill list and read the description of each
@@ -206,7 +210,7 @@ steps.
206
210
 
207
211
  ## 3. Register obsessive todos via `update_plan`
208
212
  The todo tool is Codex `update_plan` — your live, user-visible
209
- checklist. Translate every action from the plan into one `update_plan`
213
+ checklist. Keep resource-cleanup todos registered earlier. Translate every action from the plan into one `update_plan`
210
214
  step — one step per atomic work unit: an edit plus its verification, a
211
215
  QA scenario run, a teardown. Keep each step small enough to finish
212
216
  within a few tool calls.
@@ -218,6 +222,9 @@ behind reality. Add newly discovered steps the moment they surface
218
222
  instead of waiting for the next pass. Step text encodes WHERE / WHY
219
223
  (which criterion it advances) / HOW / VERIFY:
220
224
  `path: <action> for <criterion> — verify by <check>`.
225
+ ALWAYS add a cleanup todo AT CREATION for each worktree, cache directory (including
226
+ the run root), and QA resource (PID, tmux session, browser context, port, container,
227
+ script or temp path); complete it only after a read-back teardown receipt.
221
228
 
222
229
  GOOD pair (ordered):
223
230
  `test/foo.test.ts: read the validateEmail cases for criterion 2 — verify by noting intent / coverage / pass in the notepad`
@@ -280,19 +287,15 @@ Until every success criterion PASSES with its evidence captured:
280
287
  above; auxiliary surface for CLI- or data-shaped criteria), end to
281
288
  end, yourself, plus the step-2 tests; a reproduction now passes.
282
289
  Paste the artifact path into the notepad.
283
- 5. CLEANUP (PAIRED — NEVER SKIP): the moment a QA scenario spawns any
284
- resource, register its teardown as its own todo (e.g.
285
- `cleanup: kill server pid for criterion 2 — verify kill -0 fails`).
286
- Every runtime artifact the QA spawned in step 4 MUST be torn down
287
- before this step completes:
288
- server PIDs (`kill <pid>`; verify `kill -0` fails), `tmux` sessions
289
- (`tmux kill-session -t ulw-qa-<criterion>`; verify with `tmux ls`),
290
- browsers / sessions (`browser.close()` / `session.stop()`), containers
291
- (`docker rm -f`), bound ports (`lsof -i :<port>` empty), temp
292
- sockets / files / dirs (`rm -rf` the `mktemp` paths), QA-only env
293
- vars. Append a one-line cleanup receipt to the notepad next to the
294
- artifact, e.g. `cleanup: killed 12345; tmux kill-session ulw-qa-foo;
295
- rm -rf /tmp/ulw.aB12cD`. No receipt → criterion stays in_progress.
290
+ 5. CLEANUP (PAIRED — NEVER SKIP):
291
+ Before recording QA, tear down owned server PIDs (`kill <pid>`; verify
292
+ `kill -0` fails), tmux sessions (`tmux kill-session -t ulw-qa-<criterion>`; confirm `tmux ls`),
293
+ browsers / sessions (`browser.close()` / `session.stop()`), containers (`docker rm -f`), ports
294
+ (`lsof -i :<port>` empty), QA scripts, temp paths and QA-only env vars.
295
+ Remove QA temp paths inside `$RUN_TMP` per criterion; remove the run root
296
+ and eligible worktrees at task end under Task resources.
297
+ Append the read-back receipt beside the artifact in the notepad.
298
+ No receipt → criterion stays in_progress.
296
299
  6. Verify: LSP diagnostics clean on changed files; no test skipped or
297
300
  xfail-ed this turn.
298
301
  7. Mark completed. Append non-obvious findings / learnings.
@@ -105,7 +105,7 @@ Write `.omo/boulder.json` before implementation starts. Prefix session ids with
105
105
  }
106
106
  ```
107
107
 
108
- Every phase (plan wave) runs in its own task-owned worktree with its own goal: before the wave's first dispatch, record the wave's goal — its checkboxes and their acceptance criteria — as a ledger entry, then `git worktree add <repo>-wt/<plan>-<wave> <branch off the integration base>` (or verify a `--worktree` path with `git worktree list --porcelain`), store the absolute path as `worktree_path`, run every edit, command, test, and evidence capture inside it; the wave lands on the integration base once its checkboxes are verified (direct merge, or the PR under `--make-pr`/`--ship`), and the next wave branches from that landed base.
108
+ Every phase (plan wave) runs in its own task-owned worktree with its own goal: before the wave's first dispatch, record the wave's goal — its checkboxes and their acceptance criteria — as a ledger entry, then `git worktree add <repo>-wt/<plan>-<wave> <branch off the integration base>` (or verify a `--worktree` path with `git worktree list --porcelain`), store the absolute path as `worktree_path`, run every edit, command, test, and evidence capture inside it; the wave lands on the integration base once its checkboxes are verified (direct merge, or the PR under `--make-pr`/`--ship`), and the next wave branches from that landed base. Use the bundled ultrawork directive’s Task resources and todo rules at wave/worktree creation; read those sections if absent from context.
109
109
 
110
110
  ## Parallel delivery lanes (teams and worktrees)
111
111
 
@@ -238,7 +238,7 @@ When all top-level checkboxes in `## TODOs` and `## Final Verification Wave` are
238
238
  1. Run the plan's final verification commands.
239
239
  2. Record a self-review in the notepad: re-read the diff, run diagnostics, and capture evidence for every acceptance criterion. Run your own manual QA on the real surface.
240
240
  3. Only when the user demanded strict, rigorous, or high-accuracy review, spawn ONE `lazycodex-gate-reviewer`; otherwise your self-review is the final verification.
241
- 4. Finish the PR/branch lifecycle from its task-owned worktree: sync `.omo/` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.
241
+ 4. Finish the PR/branch lifecycle from its task-owned worktree: sync `.omo/` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff. Finish directory teardown per Task resources and record its receipts.
242
242
  5. Remove or mark the Boulder work as completed.
243
243
  6. Print an `ORCHESTRATION COMPLETE` block with the plan path, verification commands, artifacts, and cleanup receipts.
244
244
 
@@ -45,7 +45,7 @@ This skill is intentionally compact. The full workflow lives in `references/full
45
45
  ## Non-Negotiables
46
46
 
47
47
  - Use the ulw-loop CLI state under `.omo/ulw-loop`; do not hand-edit goal state.
48
- - Register goals up front, shaped by `references/define-goal.md` (`omo-agent-toolkit ulw-loop create-goals`, then `create_goal` from the printed handoff), and mirror every atomic step into the live `update_plan` checklist: one ultra-granular step per action, exactly one in_progress, transitions marked the instant they happen.
48
+ - Register goals up front, shaped by `references/define-goal.md` (`omo-agent-toolkit ulw-loop create-goals`, then `create_goal` from the printed handoff), and mirror every atomic step into the live `update_plan` checklist: one ultra-granular step per action, exactly one in_progress, transitions marked the instant they happen. Use the ultrawork directive’s Task resources and todo rules; read those sections of the bundled `ultrawork` skill if absent from context.
49
49
  - After any compaction or context loss, re-read brief + goals + ledger FIRST plus `omo-agent-toolkit ulw-loop status --json`, then resume; never re-plan from scratch.
50
50
  - Every ulw-loop command needs the session scope: pass `--session-id <id>` (the printed handoff and resume directive carry it; `CODEX_THREAD_ID` in the environment also resolves it). The CLI refuses unscoped state (`ULW_LOOP_SESSION_SCOPE_REQUIRED`) instead of touching the shared `.omo/ulw-loop` root.
51
51
  - If `omo-agent-toolkit ulw-loop create-goals` says this session's aggregate is already complete, start unrelated new work with a fresh `--session-id <new-id>` (passed on every later call) instead of steering or forcing the completed state. Use `--force` only to intentionally overwrite completed evidence.
@@ -73,7 +73,7 @@ When the units are genuinely independent — separate files, no shared contract
73
73
 
74
74
  Under team mode, isolate and land per unit:
75
75
 
76
- - **One git worktree per member**, never a shared checkout — concurrent members editing one working tree corrupt each other's diffs and evidence. Give each member its own branch off the base and its own worktree path.
76
+ - **One git worktree per member**, never a shared checkout — concurrent members editing one working tree corrupt each other's diffs and evidence. Give each member its own branch off the base and its own worktree path. Apply the same resource rules when creating member worktrees.
77
77
  - **Merge per work unit, as each unit is verified.** A member's unit lands when its own evidence is captured and its gates are green; it does not wait for the slowest sibling. Integrate each merged unit back into the base the others branch from, so overlapping members rebase onto real merged work rather than guessing at it.
78
78
  - **Conflicts are the lead's job.** When two members' units touch the same lines, the lead decides the order they land and tells the later member what changed; members never resolve a sibling's conflict blind.
79
79
 
@@ -70,7 +70,7 @@ Codex subagent reliability:
70
70
  - Never invent state outside `.omo/ulw-loop` artifacts or `omo-agent-toolkit ulw-loop status --json`.
71
71
 
72
72
  ## Bootstrap
73
- Do all three steps before execution. No edits, goal tools, or checkpointing before bootstrap completes.
73
+ Do all three steps before execution; no edits, goal tools or checkpointing until bootstrap completes. Follow the parent skill’s resource-rule pointer before execution.
74
74
 
75
75
  ### 1. Create goals from the brief
76
76
  Resolve the CLI before the first command. If `omo` is absent from PATH or lacks `ulw-loop`, use the stable local installer bin or cached Codex component CLI — same CLI, so PATH absence is not a blocker. If PATH is empty, the fallback uses shell builtins and absolute Node locations before reporting guidance, recording the failure in `.omo/ulw-loop/bootstrap-notepad.md`.
@@ -165,7 +165,7 @@ Loop per goal. Cap at 5 cycles per goal. Cap identical same-criterion failures a
165
165
  4. INTEGRATE + CRITICAL SELF-QA + GIT CHECKPOINT (EVERY WORKER RETURN): do NOT trust the worker's report. Read the diff yourself, re-run its tests, and run LSP diagnostics on the changed files. Treat "done" as a claim to disprove. If the diff drifts, the test is hollow, or evidence is missing, RESPAWN the worker with the specific failure context. Once the work unit is verified, use `git-master` before staging: inspect recent repository commits and touched-path history to infer commit language, Conventional Commit scope, message shape, and unit size. Stage only that unit's files and commit in the observed style; do not carry verified work forward into a later omnibus commit. If no git-tracked files changed or committing is unsafe, record the no-commit reason as evidence. Forward every finding/learning to subsequent workers.
166
166
  5. EXECUTE-AS-SCENARIO: ACTUALLY run the Manual-QA scenario the criterion named (channel table above). Run it yourself for the orchestrator check; for heavier flows dispatch a dedicated QA execution worker (`lazycodex-worker-medium` by default; `lazycodex-worker-high` when the QA flow itself is hard) whose ONLY job is to drive the channel and write the artifact to the named evidence path. If the scenario FAILS, respawn the implementing worker with the captured failure — do not hand-patch around it.
167
167
  6. CAPTURE: collect the observable artifact path: transcript, stdout, screenshot, assertion, status+body, diff, or parsed dump. No artifact written at the evidence path — not done; record BLOCKED and respawn QA.
168
- 7. CLEAN (PAIRED, NEVER SKIP): tear down every runtime artifact step 5 spawned BEFORE recording — server PIDs (`kill`, verify `kill -0` fails), `tmux` sessions (`tmux kill-session -t ulw-qa-<criterion>`; confirm `tmux ls`), browser / Playwright contexts (`.close()`), containers (`docker rm -f`), bound ports (`lsof -i :<port>` empty), temp sockets / files / dirs (`rm -rf` the `mktemp` paths), QA-only env vars, AND close every finished worker (v1 `close_agent`; on V2 finished workers end on their own — `interrupt_agent` any still running). Register each teardown as its own todo the moment the QA spawns the resource (scripts, tmux assets, browser contexts, PIDs, ports) so none is forgotten. Embed a one-line cleanup receipt in the evidence string, e.g. `cleanup: killed 12345; tmux kill-session ulw-qa-foo; rm -rf /tmp/ulw.aB12cD; interrupt_agent w-3`. Missing receipt → record BLOCKED, not PASS.
168
+ 7. CLEAN (PAIRED, NEVER SKIP): execute the teardown todos before recording QA: owned PIDs (`kill`; verify `kill -0` fails), tmux sessions (`tmux kill-session -t ulw-qa-<criterion>`; confirm `tmux ls`), browser contexts (`.close()`), containers (`docker rm -f`), ports (`lsof -i :<port>` empty), QA scripts, temp paths and QA-only env vars. Close finished v1 workers with `close_agent`; V2 workers end normally, so `interrupt_agent` any still running. Apply the ultrawork Task resources rule at task end, not after each criterion. Embed read-back receipts in the evidence and complete the cleanup todos. Missing receipt → record BLOCKED, not PASS.
169
169
  8. RECORD one result immediately from the artifact you just wrote — never from memory or a later turn — stamping the capture tree `$(git rev-parse --short "HEAD^{tree}")` into the evidence:
170
170
  - PASS: `omo-agent-toolkit ulw-loop record-evidence --goal-id <id> --criterion-id <id> --status pass --evidence "<observable> @tree:<short-tree> | <cleanup receipt>" --json`
171
171
  - FAIL: `omo-agent-toolkit ulw-loop record-evidence --goal-id <id> --criterion-id <id> --status fail --evidence "<observable> @tree:<short-tree> | <cleanup receipt>" --notes "<diagnosis>" --json`
@@ -85,7 +85,7 @@ export function removeCodexCompatibilityGuidance(content) {
85
85
  const ulwExecuteOriginalCompletion = `When all top-level checkboxes in \`## TODOs\` and \`## Final Verification Wave\` are complete:
86
86
 
87
87
  1. Run the plan's final verification commands.
88
- 2. For PR/branch work, finish the lifecycle from the last phase's worktree: sync \`.omo/\` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.
88
+ 2. For PR/branch work, finish the lifecycle from the last phase's worktree: sync \`.omo/\` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff. Finish directory teardown per Task resources and record its receipts.
89
89
  3. Remove or mark the Boulder work as completed.
90
90
  4. Print an \`ORCHESTRATION COMPLETE\` block with the plan path, verification commands, artifacts, and cleanup receipts.`;
91
91
 
@@ -94,7 +94,7 @@ const ulwExecuteCodexCompletion = `When all top-level checkboxes in \`## TODOs\`
94
94
  1. Run the plan's final verification commands.
95
95
  2. Record a self-review in the notepad: re-read the diff, run diagnostics, and capture evidence for every acceptance criterion. Run your own manual QA on the real surface.
96
96
  3. Only when the user demanded strict, rigorous, or high-accuracy review, spawn ONE \`lazycodex-gate-reviewer\`; otherwise your self-review is the final verification.
97
- 4. Finish the PR/branch lifecycle from its task-owned worktree: sync \`.omo/\` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.
97
+ 4. Finish the PR/branch lifecycle from its task-owned worktree: sync \`.omo/\` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff. Finish directory teardown per Task resources and record its receipts.
98
98
  5. Remove or mark the Boulder work as completed.
99
99
  6. Print an \`ORCHESTRATION COMPLETE\` block with the plan path, verification commands, artifacts, and cleanup receipts.`;
100
100
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // omo-codex-install:c0434c323119abd4c8f9dbe2770f25c161f77afbc2510028fd56c1cf8686c9f0:e05728c791992ba8b6cd306a4648b585ac26e82c604e589ee39a47768c95fb09
2
+ // omo-codex-install:643bf27c152edbd2cb2348ec12962f6fa9c214781d3435eac8f5f2bba2e2a8e5:d4eeade8402959d812046ab47a22010046503bc95f9fa850a38fd68254b0b542
3
3
  var __esm = (fn, res, err) => () => {
4
4
  if (fn)
5
5
  try {
@@ -9984,7 +9984,7 @@ var package_default;
9984
9984
  var init_package = __esm(() => {
9985
9985
  package_default = {
9986
9986
  name: "@oh-my-opencode/omo-codex",
9987
- version: "5.1.30",
9987
+ version: "5.1.32",
9988
9988
  type: "module",
9989
9989
  private: true,
9990
9990
  description: "Codex harness adapter for oh-my-openagent. Vendored Codex plugin namespace (omo) + TypeScript installer + telemetry.",
@@ -19469,7 +19469,8 @@ var OmoMemoryNudgeSchema = object({
19469
19469
  }).strict();
19470
19470
  var OmoMemoryFactsSchema = object({
19471
19471
  enabled: boolean2().default(true),
19472
- debounce_settles: number2().int().min(1).default(4)
19472
+ debounce_settles: number2().int().min(1).default(4),
19473
+ model: string2().min(1).optional()
19473
19474
  }).strict();
19474
19475
  var OmoMemoryDreamSchema = object({
19475
19476
  enabled: boolean2().default(true),
@@ -19531,7 +19532,8 @@ var OmoMemoryNudgeLayerSchema = object({
19531
19532
  }).strict();
19532
19533
  var OmoMemoryFactsLayerSchema = object({
19533
19534
  enabled: boolean2().optional(),
19534
- debounce_settles: number2().int().min(1).optional()
19535
+ debounce_settles: number2().int().min(1).optional(),
19536
+ model: string2().min(1).optional()
19535
19537
  }).strict();
19536
19538
  var OmoMemoryDreamLayerSchema = object({
19537
19539
  enabled: boolean2().optional(),
@@ -105,7 +105,11 @@ degrades color and wide-glyph width. In this repo:
105
105
  stream). Outside this repo, capture equivalent browser-rendered terminal
106
106
  evidence: screenshot + plain transcript + cleanup receipt.
107
107
 
108
- # Bootstrap (DO ALL FOUR BEFORE ANY OTHER WORK — NO SKIPPING)
108
+ # Bootstrap (COMPLETE EVERY SECTION BEFORE ANY OTHER WORK — NO SKIPPING)
109
+
110
+ ## Task resources
111
+ Before the first task command, create one `RUN_TMP=$(mktemp -d)` per task, tracking its paths under section 3 immediately. Export `TMPDIR="$RUN_TMP" NODE_COMPILE_CACHE="$RUN_TMP/node-compile-cache" BUN_RUNTIME_TRANSPILER_CACHE_PATH="$RUN_TMP/bun-transpiler"` for every command; pass the same environment explicitly to children that do not inherit it. Give independent child tasks their own run roots.
112
+ At task end, after owned processes exit, remove only owned directories, including runtime caches. Never wipe shared caches; retain worktrees still needed by open PRs and any parent directory containing them.
109
113
 
110
114
  ## 0. Survey the skills, gather context, then size the work
111
115
  First, survey the loaded skill list and read the description of each
@@ -199,7 +203,7 @@ steps.
199
203
 
200
204
  ## 3. Register obsessive todos via `update_plan`
201
205
  The todo tool is Codex `update_plan` — your live, user-visible
202
- checklist. Translate every action from the plan into one `update_plan`
206
+ checklist. Keep resource-cleanup todos registered earlier. Translate every action from the plan into one `update_plan`
203
207
  step — one step per atomic work unit: an edit plus its verification, a
204
208
  QA scenario run, a teardown. Keep each step small enough to finish
205
209
  within a few tool calls.
@@ -211,6 +215,9 @@ behind reality. Add newly discovered steps the moment they surface
211
215
  instead of waiting for the next pass. Step text encodes WHERE / WHY
212
216
  (which criterion it advances) / HOW / VERIFY:
213
217
  `path: <action> for <criterion> — verify by <check>`.
218
+ ALWAYS add a cleanup todo AT CREATION for each worktree, cache directory (including
219
+ the run root), and QA resource (PID, tmux session, browser context, port, container,
220
+ script or temp path); complete it only after a read-back teardown receipt.
214
221
 
215
222
  GOOD pair (ordered):
216
223
  `test/foo.test.ts: read the validateEmail cases for criterion 2 — verify by noting intent / coverage / pass in the notepad`
@@ -273,19 +280,15 @@ Until every success criterion PASSES with its evidence captured:
273
280
  above; auxiliary surface for CLI- or data-shaped criteria), end to
274
281
  end, yourself, plus the step-2 tests; a reproduction now passes.
275
282
  Paste the artifact path into the notepad.
276
- 5. CLEANUP (PAIRED — NEVER SKIP): the moment a QA scenario spawns any
277
- resource, register its teardown as its own todo (e.g.
278
- `cleanup: kill server pid for criterion 2 — verify kill -0 fails`).
279
- Every runtime artifact the QA spawned in step 4 MUST be torn down
280
- before this step completes:
281
- server PIDs (`kill <pid>`; verify `kill -0` fails), `tmux` sessions
282
- (`tmux kill-session -t ulw-qa-<criterion>`; verify with `tmux ls`),
283
- browsers / sessions (`browser.close()` / `session.stop()`), containers
284
- (`docker rm -f`), bound ports (`lsof -i :<port>` empty), temp
285
- sockets / files / dirs (`rm -rf` the `mktemp` paths), QA-only env
286
- vars. Append a one-line cleanup receipt to the notepad next to the
287
- artifact, e.g. `cleanup: killed 12345; tmux kill-session ulw-qa-foo;
288
- rm -rf /tmp/ulw.aB12cD`. No receipt → criterion stays in_progress.
283
+ 5. CLEANUP (PAIRED — NEVER SKIP):
284
+ Before recording QA, tear down owned server PIDs (`kill <pid>`; verify
285
+ `kill -0` fails), tmux sessions (`tmux kill-session -t ulw-qa-<criterion>`; confirm `tmux ls`),
286
+ browsers / sessions (`browser.close()` / `session.stop()`), containers (`docker rm -f`), ports
287
+ (`lsof -i :<port>` empty), QA scripts, temp paths and QA-only env vars.
288
+ Remove QA temp paths inside `$RUN_TMP` per criterion; remove the run root
289
+ and eligible worktrees at task end under Task resources.
290
+ Append the read-back receipt beside the artifact in the notepad.
291
+ No receipt → criterion stays in_progress.
289
292
  6. Verify: LSP diagnostics clean on changed files; no test skipped or
290
293
  xfail-ed this turn.
291
294
  7. Mark completed. Append non-obvious findings / learnings.
@@ -5,5 +5,5 @@
5
5
  "index.js": "b6b064fab277031c6c51f5a58b84b31040f9960bf767bf646adc0540c1d25c1b",
6
6
  "page-bundle.js": "bfd51e8383cf47200d57387bbbed258bce5a3a3d00c38fc108034d2888e23f0c"
7
7
  },
8
- "stagedAtUtc": "2026-10-11T14:43:14.044Z"
8
+ "stagedAtUtc": "2026-10-13T00:11:59.877Z"
9
9
  }
@@ -96,7 +96,7 @@ Write `.omo/boulder.json` before implementation starts. Prefix session ids with
96
96
  }
97
97
  ```
98
98
 
99
- Every phase (plan wave) runs in its own task-owned worktree with its own goal: before the wave's first dispatch, record the wave's goal — its checkboxes and their acceptance criteria — as a ledger entry, then `git worktree add <repo>-wt/<plan>-<wave> <branch off the integration base>` (or verify a `--worktree` path with `git worktree list --porcelain`), store the absolute path as `worktree_path`, run every edit, command, test, and evidence capture inside it; the wave lands on the integration base once its checkboxes are verified (direct merge, or the PR under `--make-pr`/`--ship`), and the next wave branches from that landed base.
99
+ Every phase (plan wave) runs in its own task-owned worktree with its own goal: before the wave's first dispatch, record the wave's goal — its checkboxes and their acceptance criteria — as a ledger entry, then `git worktree add <repo>-wt/<plan>-<wave> <branch off the integration base>` (or verify a `--worktree` path with `git worktree list --porcelain`), store the absolute path as `worktree_path`, run every edit, command, test, and evidence capture inside it; the wave lands on the integration base once its checkboxes are verified (direct merge, or the PR under `--make-pr`/`--ship`), and the next wave branches from that landed base. Use the bundled ultrawork directive’s Task resources and todo rules at wave/worktree creation; read those sections if absent from context.
100
100
 
101
101
  ## Parallel delivery lanes (teams and worktrees)
102
102
 
@@ -227,7 +227,7 @@ Only after verification passes:
227
227
  When all top-level checkboxes in `## TODOs` and `## Final Verification Wave` are complete:
228
228
 
229
229
  1. Run the plan's final verification commands.
230
- 2. For PR/branch work, finish the lifecycle from the last phase's worktree: sync `.omo/` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff.
230
+ 2. For PR/branch work, finish the lifecycle from the last phase's worktree: sync `.omo/` state back to the main repo, create or update the PR, wait for review/verification gates, merge by default unless explicitly opted out, and remove the worktree only after successful merge or explicit handoff. Finish directory teardown per Task resources and record its receipts.
231
231
  3. Remove or mark the Boulder work as completed.
232
232
  4. Print an `ORCHESTRATION COMPLETE` block with the plan path, verification commands, artifacts, and cleanup receipts.
233
233