oh-my-codex 0.14.4 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (614) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/Cargo.lock +6 -6
  3. package/Cargo.toml +2 -1
  4. package/README.md +40 -7
  5. package/crates/omx-explore/Cargo.toml +1 -0
  6. package/crates/omx-explore/src/main.rs +246 -24
  7. package/crates/omx-mux/Cargo.toml +1 -0
  8. package/crates/omx-runtime/Cargo.toml +1 -0
  9. package/crates/omx-runtime-core/Cargo.toml +1 -0
  10. package/crates/omx-runtime-core/src/dispatch.rs +2 -1
  11. package/crates/omx-runtime-core/src/engine.rs +2 -2
  12. package/crates/omx-runtime-core/src/mailbox.rs +2 -1
  13. package/crates/omx-sparkshell/Cargo.toml +1 -0
  14. package/crates/omx-sparkshell/src/codex_bridge.rs +1 -0
  15. package/crates/omx-sparkshell/src/prompt.rs +1 -0
  16. package/crates/omx-sparkshell/src/threshold.rs +1 -0
  17. package/dist/agents/__tests__/native-config.test.js +98 -4
  18. package/dist/agents/__tests__/native-config.test.js.map +1 -1
  19. package/dist/agents/native-config.d.ts +4 -0
  20. package/dist/agents/native-config.d.ts.map +1 -1
  21. package/dist/agents/native-config.js +19 -3
  22. package/dist/agents/native-config.js.map +1 -1
  23. package/dist/agents/policy.d.ts +10 -0
  24. package/dist/agents/policy.d.ts.map +1 -0
  25. package/dist/agents/policy.js +61 -0
  26. package/dist/agents/policy.js.map +1 -0
  27. package/dist/catalog/__tests__/generator.test.js +2 -0
  28. package/dist/catalog/__tests__/generator.test.js.map +1 -1
  29. package/dist/catalog/__tests__/plugin-bundle-ssot.test.d.ts +2 -0
  30. package/dist/catalog/__tests__/plugin-bundle-ssot.test.d.ts.map +1 -0
  31. package/dist/catalog/__tests__/plugin-bundle-ssot.test.js +72 -0
  32. package/dist/catalog/__tests__/plugin-bundle-ssot.test.js.map +1 -0
  33. package/dist/catalog/installable.d.ts +5 -0
  34. package/dist/catalog/installable.d.ts.map +1 -0
  35. package/dist/catalog/installable.js +13 -0
  36. package/dist/catalog/installable.js.map +1 -0
  37. package/dist/catalog/skill-mirror.d.ts +20 -0
  38. package/dist/catalog/skill-mirror.d.ts.map +1 -0
  39. package/dist/catalog/skill-mirror.js +104 -0
  40. package/dist/catalog/skill-mirror.js.map +1 -0
  41. package/dist/cli/__tests__/ask.test.js +4 -1
  42. package/dist/cli/__tests__/ask.test.js.map +1 -1
  43. package/dist/cli/__tests__/codex-plugin-layout.test.d.ts +2 -0
  44. package/dist/cli/__tests__/codex-plugin-layout.test.d.ts.map +1 -0
  45. package/dist/cli/__tests__/codex-plugin-layout.test.js +210 -0
  46. package/dist/cli/__tests__/codex-plugin-layout.test.js.map +1 -0
  47. package/dist/cli/__tests__/doctor-team.test.js +46 -1
  48. package/dist/cli/__tests__/doctor-team.test.js.map +1 -1
  49. package/dist/cli/__tests__/doctor-warning-copy.test.js +225 -111
  50. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -1
  51. package/dist/cli/__tests__/exec.test.js +96 -1
  52. package/dist/cli/__tests__/exec.test.js.map +1 -1
  53. package/dist/cli/__tests__/explore.test.js +26 -9
  54. package/dist/cli/__tests__/explore.test.js.map +1 -1
  55. package/dist/cli/__tests__/index.test.js +301 -7
  56. package/dist/cli/__tests__/index.test.js.map +1 -1
  57. package/dist/cli/__tests__/launch-fallback.test.js +358 -4
  58. package/dist/cli/__tests__/launch-fallback.test.js.map +1 -1
  59. package/dist/cli/__tests__/list.test.d.ts +2 -0
  60. package/dist/cli/__tests__/list.test.d.ts.map +1 -0
  61. package/dist/cli/__tests__/list.test.js +38 -0
  62. package/dist/cli/__tests__/list.test.js.map +1 -0
  63. package/dist/cli/__tests__/mcp-parity.test.js +86 -0
  64. package/dist/cli/__tests__/mcp-parity.test.js.map +1 -1
  65. package/dist/cli/__tests__/mcp-serve.test.d.ts +2 -0
  66. package/dist/cli/__tests__/mcp-serve.test.d.ts.map +1 -0
  67. package/dist/cli/__tests__/mcp-serve.test.js +38 -0
  68. package/dist/cli/__tests__/mcp-serve.test.js.map +1 -0
  69. package/dist/cli/__tests__/nested-help-routing.test.js +1 -0
  70. package/dist/cli/__tests__/nested-help-routing.test.js.map +1 -1
  71. package/dist/cli/__tests__/package-bin-contract.test.js +58 -3
  72. package/dist/cli/__tests__/package-bin-contract.test.js.map +1 -1
  73. package/dist/cli/__tests__/question.test.js +209 -5
  74. package/dist/cli/__tests__/question.test.js.map +1 -1
  75. package/dist/cli/__tests__/setup-agents-overwrite.test.js +146 -3
  76. package/dist/cli/__tests__/setup-agents-overwrite.test.js.map +1 -1
  77. package/dist/cli/__tests__/setup-install-mode.test.d.ts +2 -0
  78. package/dist/cli/__tests__/setup-install-mode.test.d.ts.map +1 -0
  79. package/dist/cli/__tests__/setup-install-mode.test.js +873 -0
  80. package/dist/cli/__tests__/setup-install-mode.test.js.map +1 -0
  81. package/dist/cli/__tests__/setup-prompts-overwrite.test.js +83 -22
  82. package/dist/cli/__tests__/setup-prompts-overwrite.test.js.map +1 -1
  83. package/dist/cli/__tests__/setup-refresh.test.js +120 -2
  84. package/dist/cli/__tests__/setup-refresh.test.js.map +1 -1
  85. package/dist/cli/__tests__/setup-skills-overwrite.test.js +32 -13
  86. package/dist/cli/__tests__/setup-skills-overwrite.test.js.map +1 -1
  87. package/dist/cli/__tests__/sidecar.test.d.ts +2 -0
  88. package/dist/cli/__tests__/sidecar.test.d.ts.map +1 -0
  89. package/dist/cli/__tests__/sidecar.test.js +24 -0
  90. package/dist/cli/__tests__/sidecar.test.js.map +1 -0
  91. package/dist/cli/__tests__/team.test.js +90 -42
  92. package/dist/cli/__tests__/team.test.js.map +1 -1
  93. package/dist/cli/__tests__/version-sync-contract.test.js +11 -0
  94. package/dist/cli/__tests__/version-sync-contract.test.js.map +1 -1
  95. package/dist/cli/codex-home.d.ts +4 -5
  96. package/dist/cli/codex-home.d.ts.map +1 -1
  97. package/dist/cli/codex-home.js +9 -37
  98. package/dist/cli/codex-home.js.map +1 -1
  99. package/dist/cli/doctor.d.ts +1 -1
  100. package/dist/cli/doctor.d.ts.map +1 -1
  101. package/dist/cli/doctor.js +509 -278
  102. package/dist/cli/doctor.js.map +1 -1
  103. package/dist/cli/index.d.ts +13 -5
  104. package/dist/cli/index.d.ts.map +1 -1
  105. package/dist/cli/index.js +351 -60
  106. package/dist/cli/index.js.map +1 -1
  107. package/dist/cli/list.d.ts +2 -0
  108. package/dist/cli/list.d.ts.map +1 -0
  109. package/dist/cli/list.js +40 -0
  110. package/dist/cli/list.js.map +1 -0
  111. package/dist/cli/mcp-serve.d.ts +12 -0
  112. package/dist/cli/mcp-serve.d.ts.map +1 -0
  113. package/dist/cli/mcp-serve.js +63 -0
  114. package/dist/cli/mcp-serve.js.map +1 -0
  115. package/dist/cli/plugin-marketplace.d.ts +13 -0
  116. package/dist/cli/plugin-marketplace.d.ts.map +1 -0
  117. package/dist/cli/plugin-marketplace.js +77 -0
  118. package/dist/cli/plugin-marketplace.js.map +1 -0
  119. package/dist/cli/question.d.ts.map +1 -1
  120. package/dist/cli/question.js +27 -2
  121. package/dist/cli/question.js.map +1 -1
  122. package/dist/cli/setup-preferences.d.ts +20 -0
  123. package/dist/cli/setup-preferences.d.ts.map +1 -0
  124. package/dist/cli/setup-preferences.js +71 -0
  125. package/dist/cli/setup-preferences.js.map +1 -0
  126. package/dist/cli/setup.d.ts +12 -3
  127. package/dist/cli/setup.d.ts.map +1 -1
  128. package/dist/cli/setup.js +1080 -254
  129. package/dist/cli/setup.js.map +1 -1
  130. package/dist/cli/team.d.ts +1 -0
  131. package/dist/cli/team.d.ts.map +1 -1
  132. package/dist/cli/team.js +22 -3
  133. package/dist/cli/team.js.map +1 -1
  134. package/dist/cli/uninstall.d.ts.map +1 -1
  135. package/dist/cli/uninstall.js +2 -8
  136. package/dist/cli/uninstall.js.map +1 -1
  137. package/dist/config/__tests__/generator-idempotent.test.js +100 -3
  138. package/dist/config/__tests__/generator-idempotent.test.js.map +1 -1
  139. package/dist/config/__tests__/generator-notify.test.js +6 -5
  140. package/dist/config/__tests__/generator-notify.test.js.map +1 -1
  141. package/dist/config/__tests__/generator-status-line-presets.test.d.ts +2 -0
  142. package/dist/config/__tests__/generator-status-line-presets.test.d.ts.map +1 -0
  143. package/dist/config/__tests__/generator-status-line-presets.test.js +203 -0
  144. package/dist/config/__tests__/generator-status-line-presets.test.js.map +1 -0
  145. package/dist/config/__tests__/models.test.js +35 -2
  146. package/dist/config/__tests__/models.test.js.map +1 -1
  147. package/dist/config/codex-hooks.d.ts.map +1 -1
  148. package/dist/config/codex-hooks.js +2 -7
  149. package/dist/config/codex-hooks.js.map +1 -1
  150. package/dist/config/generator.d.ts +10 -0
  151. package/dist/config/generator.d.ts.map +1 -1
  152. package/dist/config/generator.js +259 -76
  153. package/dist/config/generator.js.map +1 -1
  154. package/dist/config/models.d.ts +13 -3
  155. package/dist/config/models.d.ts.map +1 -1
  156. package/dist/config/models.js +25 -5
  157. package/dist/config/models.js.map +1 -1
  158. package/dist/config/omx-first-party-mcp.d.ts +18 -0
  159. package/dist/config/omx-first-party-mcp.d.ts.map +1 -0
  160. package/dist/config/omx-first-party-mcp.js +76 -0
  161. package/dist/config/omx-first-party-mcp.js.map +1 -0
  162. package/dist/document-refresh/__tests__/enforcer.test.d.ts +2 -0
  163. package/dist/document-refresh/__tests__/enforcer.test.d.ts.map +1 -0
  164. package/dist/document-refresh/__tests__/enforcer.test.js +128 -0
  165. package/dist/document-refresh/__tests__/enforcer.test.js.map +1 -0
  166. package/dist/document-refresh/config.d.ts +9 -0
  167. package/dist/document-refresh/config.d.ts.map +1 -0
  168. package/dist/document-refresh/config.js +70 -0
  169. package/dist/document-refresh/config.js.map +1 -0
  170. package/dist/document-refresh/enforcer.d.ts +43 -0
  171. package/dist/document-refresh/enforcer.d.ts.map +1 -0
  172. package/dist/document-refresh/enforcer.js +329 -0
  173. package/dist/document-refresh/enforcer.js.map +1 -0
  174. package/dist/exec/followup.d.ts +44 -0
  175. package/dist/exec/followup.d.ts.map +1 -0
  176. package/dist/exec/followup.js +349 -0
  177. package/dist/exec/followup.js.map +1 -0
  178. package/dist/hooks/__tests__/codebase-map.test.js +63 -1
  179. package/dist/hooks/__tests__/codebase-map.test.js.map +1 -1
  180. package/dist/hooks/__tests__/deep-interview-contract.test.js +10 -7
  181. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -1
  182. package/dist/hooks/__tests__/keyword-detector.test.js +89 -0
  183. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  184. package/dist/hooks/__tests__/notify-fallback-watcher.test.js +84 -1
  185. package/dist/hooks/__tests__/notify-fallback-watcher.test.js.map +1 -1
  186. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +23 -2
  187. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
  188. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js +43 -0
  189. package/dist/hooks/__tests__/notify-hook-auto-nudge.test.js.map +1 -1
  190. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +17 -0
  191. package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -1
  192. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js +53 -0
  193. package/dist/hooks/__tests__/notify-hook-managed-tmux.test.js.map +1 -1
  194. package/dist/hooks/__tests__/notify-hook-regression-205.test.js +4 -4
  195. package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -1
  196. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +103 -0
  197. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  198. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js +27 -13
  199. package/dist/hooks/__tests__/notify-hook-team-tmux-guard.test.js.map +1 -1
  200. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts +2 -0
  201. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.d.ts.map +1 -0
  202. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js +35 -0
  203. package/dist/hooks/__tests__/notify-hook-team-worker-fail-closed.test.js.map +1 -0
  204. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +70 -3
  205. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
  206. package/dist/hooks/__tests__/pre-context-gate-skills.test.js +5 -0
  207. package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -1
  208. package/dist/hooks/__tests__/prompt-guidance-fragments.test.js +3 -2
  209. package/dist/hooks/__tests__/prompt-guidance-fragments.test.js.map +1 -1
  210. package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts +2 -0
  211. package/dist/hooks/__tests__/prompt-refactor-contract.test.d.ts.map +1 -0
  212. package/dist/hooks/__tests__/prompt-refactor-contract.test.js +22 -0
  213. package/dist/hooks/__tests__/prompt-refactor-contract.test.js.map +1 -0
  214. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.d.ts +2 -0
  215. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.d.ts.map +1 -0
  216. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.js +28 -0
  217. package/dist/hooks/__tests__/team-runtime-gating-docs-contract.test.js.map +1 -0
  218. package/dist/hooks/__tests__/triage-heuristic.test.js +59 -4
  219. package/dist/hooks/__tests__/triage-heuristic.test.js.map +1 -1
  220. package/dist/hooks/__tests__/visual-ralph-skill.test.d.ts +2 -0
  221. package/dist/hooks/__tests__/visual-ralph-skill.test.d.ts.map +1 -0
  222. package/dist/hooks/__tests__/visual-ralph-skill.test.js +44 -0
  223. package/dist/hooks/__tests__/visual-ralph-skill.test.js.map +1 -0
  224. package/dist/hooks/codebase-map.d.ts.map +1 -1
  225. package/dist/hooks/codebase-map.js +83 -6
  226. package/dist/hooks/codebase-map.js.map +1 -1
  227. package/dist/hooks/keyword-detector.d.ts.map +1 -1
  228. package/dist/hooks/keyword-detector.js +19 -14
  229. package/dist/hooks/keyword-detector.js.map +1 -1
  230. package/dist/hooks/prompt-guidance-contract.d.ts +6 -0
  231. package/dist/hooks/prompt-guidance-contract.d.ts.map +1 -1
  232. package/dist/hooks/prompt-guidance-contract.js +89 -0
  233. package/dist/hooks/prompt-guidance-contract.js.map +1 -1
  234. package/dist/hooks/session.d.ts +2 -0
  235. package/dist/hooks/session.d.ts.map +1 -1
  236. package/dist/hooks/session.js +6 -0
  237. package/dist/hooks/session.js.map +1 -1
  238. package/dist/hooks/triage-heuristic.d.ts +2 -2
  239. package/dist/hooks/triage-heuristic.d.ts.map +1 -1
  240. package/dist/hooks/triage-heuristic.js +97 -20
  241. package/dist/hooks/triage-heuristic.js.map +1 -1
  242. package/dist/hooks/triage-state.d.ts +1 -1
  243. package/dist/hooks/triage-state.d.ts.map +1 -1
  244. package/dist/hooks/triage-state.js +2 -1
  245. package/dist/hooks/triage-state.js.map +1 -1
  246. package/dist/hud/__tests__/index.test.js +4 -4
  247. package/dist/hud/__tests__/index.test.js.map +1 -1
  248. package/dist/hud/__tests__/state.test.js +4 -0
  249. package/dist/hud/__tests__/state.test.js.map +1 -1
  250. package/dist/hud/__tests__/types.test.js +27 -0
  251. package/dist/hud/__tests__/types.test.js.map +1 -1
  252. package/dist/hud/state.d.ts.map +1 -1
  253. package/dist/hud/state.js +8 -0
  254. package/dist/hud/state.js.map +1 -1
  255. package/dist/hud/types.d.ts +9 -0
  256. package/dist/hud/types.d.ts.map +1 -1
  257. package/dist/hud/types.js +3 -0
  258. package/dist/hud/types.js.map +1 -1
  259. package/dist/mcp/__tests__/bootstrap.test.js +45 -5
  260. package/dist/mcp/__tests__/bootstrap.test.js.map +1 -1
  261. package/dist/mcp/__tests__/server-lifecycle.test.js +50 -7
  262. package/dist/mcp/__tests__/server-lifecycle.test.js.map +1 -1
  263. package/dist/mcp/__tests__/state-server.test.js +67 -9
  264. package/dist/mcp/__tests__/state-server.test.js.map +1 -1
  265. package/dist/mcp/bootstrap.d.ts +12 -1
  266. package/dist/mcp/bootstrap.d.ts.map +1 -1
  267. package/dist/mcp/bootstrap.js +87 -29
  268. package/dist/mcp/bootstrap.js.map +1 -1
  269. package/dist/mcp/state-server.d.ts +5 -11
  270. package/dist/mcp/state-server.d.ts.map +1 -1
  271. package/dist/mcp/state-server.js +16 -432
  272. package/dist/mcp/state-server.js.map +1 -1
  273. package/dist/planning/__tests__/artifacts.test.js +152 -1
  274. package/dist/planning/__tests__/artifacts.test.js.map +1 -1
  275. package/dist/planning/artifacts.d.ts +9 -0
  276. package/dist/planning/artifacts.d.ts.map +1 -1
  277. package/dist/planning/artifacts.js +60 -1
  278. package/dist/planning/artifacts.js.map +1 -1
  279. package/dist/question/__tests__/deep-interview.test.js +1 -1
  280. package/dist/question/__tests__/deep-interview.test.js.map +1 -1
  281. package/dist/question/__tests__/renderer.test.js +70 -0
  282. package/dist/question/__tests__/renderer.test.js.map +1 -1
  283. package/dist/question/__tests__/ui.test.js +49 -0
  284. package/dist/question/__tests__/ui.test.js.map +1 -1
  285. package/dist/question/renderer.d.ts +14 -1
  286. package/dist/question/renderer.d.ts.map +1 -1
  287. package/dist/question/renderer.js +109 -10
  288. package/dist/question/renderer.js.map +1 -1
  289. package/dist/question/state.d.ts +2 -0
  290. package/dist/question/state.d.ts.map +1 -1
  291. package/dist/question/state.js +4 -0
  292. package/dist/question/state.js.map +1 -1
  293. package/dist/question/types.d.ts +2 -1
  294. package/dist/question/types.d.ts.map +1 -1
  295. package/dist/question/types.js.map +1 -1
  296. package/dist/question/ui.d.ts.map +1 -1
  297. package/dist/question/ui.js +28 -8
  298. package/dist/question/ui.js.map +1 -1
  299. package/dist/runtime/__tests__/bridge.test.js +143 -1
  300. package/dist/runtime/__tests__/bridge.test.js.map +1 -1
  301. package/dist/runtime/bridge.d.ts +21 -0
  302. package/dist/runtime/bridge.d.ts.map +1 -1
  303. package/dist/runtime/bridge.js +54 -4
  304. package/dist/runtime/bridge.js.map +1 -1
  305. package/dist/scripts/__tests__/codex-native-hook.test.js +1904 -230
  306. package/dist/scripts/__tests__/codex-native-hook.test.js.map +1 -1
  307. package/dist/scripts/__tests__/generate-release-body.test.js +90 -1
  308. package/dist/scripts/__tests__/generate-release-body.test.js.map +1 -1
  309. package/dist/scripts/__tests__/hook-derived-watcher.test.js +110 -2
  310. package/dist/scripts/__tests__/hook-derived-watcher.test.js.map +1 -1
  311. package/dist/scripts/__tests__/postinstall.test.js +7 -93
  312. package/dist/scripts/__tests__/postinstall.test.js.map +1 -1
  313. package/dist/scripts/__tests__/prompt-inventory.test.d.ts +2 -0
  314. package/dist/scripts/__tests__/prompt-inventory.test.d.ts.map +1 -0
  315. package/dist/scripts/__tests__/prompt-inventory.test.js +56 -0
  316. package/dist/scripts/__tests__/prompt-inventory.test.js.map +1 -0
  317. package/dist/scripts/__tests__/run-test-files.test.d.ts +2 -0
  318. package/dist/scripts/__tests__/run-test-files.test.d.ts.map +1 -0
  319. package/dist/scripts/__tests__/run-test-files.test.js +62 -0
  320. package/dist/scripts/__tests__/run-test-files.test.js.map +1 -0
  321. package/dist/scripts/__tests__/smoke-packed-install.test.js +13 -1
  322. package/dist/scripts/__tests__/smoke-packed-install.test.js.map +1 -1
  323. package/dist/scripts/__tests__/verify-native-agents.test.d.ts +2 -0
  324. package/dist/scripts/__tests__/verify-native-agents.test.d.ts.map +1 -0
  325. package/dist/scripts/__tests__/verify-native-agents.test.js +166 -0
  326. package/dist/scripts/__tests__/verify-native-agents.test.js.map +1 -0
  327. package/dist/scripts/codex-execution-surface.d.ts +16 -0
  328. package/dist/scripts/codex-execution-surface.d.ts.map +1 -0
  329. package/dist/scripts/codex-execution-surface.js +42 -0
  330. package/dist/scripts/codex-execution-surface.js.map +1 -0
  331. package/dist/scripts/codex-native-hook.d.ts.map +1 -1
  332. package/dist/scripts/codex-native-hook.js +418 -76
  333. package/dist/scripts/codex-native-hook.js.map +1 -1
  334. package/dist/scripts/codex-native-pre-post.d.ts +8 -0
  335. package/dist/scripts/codex-native-pre-post.d.ts.map +1 -1
  336. package/dist/scripts/codex-native-pre-post.js +133 -19
  337. package/dist/scripts/codex-native-pre-post.js.map +1 -1
  338. package/dist/scripts/generate-release-body.d.ts +1 -0
  339. package/dist/scripts/generate-release-body.d.ts.map +1 -1
  340. package/dist/scripts/generate-release-body.js +32 -3
  341. package/dist/scripts/generate-release-body.js.map +1 -1
  342. package/dist/scripts/hook-derived-watcher.js +46 -7
  343. package/dist/scripts/hook-derived-watcher.js.map +1 -1
  344. package/dist/scripts/notify-fallback-watcher.js +59 -9
  345. package/dist/scripts/notify-fallback-watcher.js.map +1 -1
  346. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts +2 -0
  347. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.d.ts.map +1 -0
  348. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js +153 -0
  349. package/dist/scripts/notify-hook/__tests__/team-worker-posttooluse.test.js.map +1 -0
  350. package/dist/scripts/notify-hook/managed-tmux.d.ts.map +1 -1
  351. package/dist/scripts/notify-hook/managed-tmux.js +18 -1
  352. package/dist/scripts/notify-hook/managed-tmux.js.map +1 -1
  353. package/dist/scripts/notify-hook/process-runner.d.ts.map +1 -1
  354. package/dist/scripts/notify-hook/process-runner.js +7 -3
  355. package/dist/scripts/notify-hook/process-runner.js.map +1 -1
  356. package/dist/scripts/notify-hook/team-dispatch.d.ts.map +1 -1
  357. package/dist/scripts/notify-hook/team-dispatch.js +96 -11
  358. package/dist/scripts/notify-hook/team-dispatch.js.map +1 -1
  359. package/dist/scripts/notify-hook/team-tmux-guard.js +3 -3
  360. package/dist/scripts/notify-hook/team-worker-posttooluse.d.ts +34 -0
  361. package/dist/scripts/notify-hook/team-worker-posttooluse.d.ts.map +1 -0
  362. package/dist/scripts/notify-hook/team-worker-posttooluse.js +434 -0
  363. package/dist/scripts/notify-hook/team-worker-posttooluse.js.map +1 -0
  364. package/dist/scripts/notify-hook/team-worker.d.ts +1 -1
  365. package/dist/scripts/notify-hook/team-worker.d.ts.map +1 -1
  366. package/dist/scripts/notify-hook/team-worker.js +3 -43
  367. package/dist/scripts/notify-hook/team-worker.js.map +1 -1
  368. package/dist/scripts/notify-hook.js +36 -5
  369. package/dist/scripts/notify-hook.js.map +1 -1
  370. package/dist/scripts/postinstall.d.ts +1 -5
  371. package/dist/scripts/postinstall.d.ts.map +1 -1
  372. package/dist/scripts/postinstall.js +3 -42
  373. package/dist/scripts/postinstall.js.map +1 -1
  374. package/dist/scripts/prompt-inventory.d.ts +29 -0
  375. package/dist/scripts/prompt-inventory.d.ts.map +1 -0
  376. package/dist/scripts/prompt-inventory.js +178 -0
  377. package/dist/scripts/prompt-inventory.js.map +1 -0
  378. package/dist/scripts/run-test-files.js +32 -2
  379. package/dist/scripts/run-test-files.js.map +1 -1
  380. package/dist/scripts/smoke-packed-install.d.ts +3 -0
  381. package/dist/scripts/smoke-packed-install.d.ts.map +1 -1
  382. package/dist/scripts/smoke-packed-install.js +9 -1
  383. package/dist/scripts/smoke-packed-install.js.map +1 -1
  384. package/dist/scripts/sync-plugin-mirror.d.ts +13 -0
  385. package/dist/scripts/sync-plugin-mirror.d.ts.map +1 -0
  386. package/dist/scripts/sync-plugin-mirror.js +242 -0
  387. package/dist/scripts/sync-plugin-mirror.js.map +1 -0
  388. package/dist/scripts/verify-native-agents.d.ts +16 -0
  389. package/dist/scripts/verify-native-agents.d.ts.map +1 -0
  390. package/dist/scripts/verify-native-agents.js +188 -0
  391. package/dist/scripts/verify-native-agents.js.map +1 -0
  392. package/dist/session-history/search.d.ts.map +1 -1
  393. package/dist/session-history/search.js +7 -2
  394. package/dist/session-history/search.js.map +1 -1
  395. package/dist/sidecar/__tests__/boundary.test.d.ts +2 -0
  396. package/dist/sidecar/__tests__/boundary.test.d.ts.map +1 -0
  397. package/dist/sidecar/__tests__/boundary.test.js +48 -0
  398. package/dist/sidecar/__tests__/boundary.test.js.map +1 -0
  399. package/dist/sidecar/__tests__/collector.test.d.ts +2 -0
  400. package/dist/sidecar/__tests__/collector.test.d.ts.map +1 -0
  401. package/dist/sidecar/__tests__/collector.test.js +162 -0
  402. package/dist/sidecar/__tests__/collector.test.js.map +1 -0
  403. package/dist/sidecar/__tests__/render.test.d.ts +2 -0
  404. package/dist/sidecar/__tests__/render.test.d.ts.map +1 -0
  405. package/dist/sidecar/__tests__/render.test.js +67 -0
  406. package/dist/sidecar/__tests__/render.test.js.map +1 -0
  407. package/dist/sidecar/__tests__/tmux.test.d.ts +2 -0
  408. package/dist/sidecar/__tests__/tmux.test.d.ts.map +1 -0
  409. package/dist/sidecar/__tests__/tmux.test.js +30 -0
  410. package/dist/sidecar/__tests__/tmux.test.js.map +1 -0
  411. package/dist/sidecar/__tests__/watch.test.d.ts +2 -0
  412. package/dist/sidecar/__tests__/watch.test.d.ts.map +1 -0
  413. package/dist/sidecar/__tests__/watch.test.js +42 -0
  414. package/dist/sidecar/__tests__/watch.test.js.map +1 -0
  415. package/dist/sidecar/collector.d.ts +4 -0
  416. package/dist/sidecar/collector.d.ts.map +1 -0
  417. package/dist/sidecar/collector.js +377 -0
  418. package/dist/sidecar/collector.js.map +1 -0
  419. package/dist/sidecar/index.d.ts +25 -0
  420. package/dist/sidecar/index.d.ts.map +1 -0
  421. package/dist/sidecar/index.js +165 -0
  422. package/dist/sidecar/index.js.map +1 -0
  423. package/dist/sidecar/render.d.ts +3 -0
  424. package/dist/sidecar/render.d.ts.map +1 -0
  425. package/dist/sidecar/render.js +72 -0
  426. package/dist/sidecar/render.js.map +1 -0
  427. package/dist/sidecar/tmux.d.ts +13 -0
  428. package/dist/sidecar/tmux.d.ts.map +1 -0
  429. package/dist/sidecar/tmux.js +44 -0
  430. package/dist/sidecar/tmux.js.map +1 -0
  431. package/dist/sidecar/types.d.ts +125 -0
  432. package/dist/sidecar/types.d.ts.map +1 -0
  433. package/dist/sidecar/types.js +2 -0
  434. package/dist/sidecar/types.js.map +1 -0
  435. package/dist/state/__tests__/operations.test.js +50 -22
  436. package/dist/state/__tests__/operations.test.js.map +1 -1
  437. package/dist/state/operations.d.ts +1 -1
  438. package/dist/state/operations.d.ts.map +1 -1
  439. package/dist/state/operations.js +19 -7
  440. package/dist/state/operations.js.map +1 -1
  441. package/dist/team/__tests__/commit-hygiene.test.d.ts +2 -0
  442. package/dist/team/__tests__/commit-hygiene.test.d.ts.map +1 -0
  443. package/dist/team/__tests__/commit-hygiene.test.js +93 -0
  444. package/dist/team/__tests__/commit-hygiene.test.js.map +1 -0
  445. package/dist/team/__tests__/delegation-policy.test.d.ts +2 -0
  446. package/dist/team/__tests__/delegation-policy.test.d.ts.map +1 -0
  447. package/dist/team/__tests__/delegation-policy.test.js +69 -0
  448. package/dist/team/__tests__/delegation-policy.test.js.map +1 -0
  449. package/dist/team/__tests__/events.test.js +54 -4
  450. package/dist/team/__tests__/events.test.js.map +1 -1
  451. package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts +2 -0
  452. package/dist/team/__tests__/hook-primary-e2e-contract.test.d.ts.map +1 -0
  453. package/dist/team/__tests__/hook-primary-e2e-contract.test.js +78 -0
  454. package/dist/team/__tests__/hook-primary-e2e-contract.test.js.map +1 -0
  455. package/dist/team/__tests__/model-contract.test.js +18 -2
  456. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  457. package/dist/team/__tests__/repo-aware-decomposition.test.d.ts +2 -0
  458. package/dist/team/__tests__/repo-aware-decomposition.test.d.ts.map +1 -0
  459. package/dist/team/__tests__/repo-aware-decomposition.test.js +95 -0
  460. package/dist/team/__tests__/repo-aware-decomposition.test.js.map +1 -0
  461. package/dist/team/__tests__/runtime.test.js +677 -17
  462. package/dist/team/__tests__/runtime.test.js.map +1 -1
  463. package/dist/team/__tests__/state-root.test.js +177 -1
  464. package/dist/team/__tests__/state-root.test.js.map +1 -1
  465. package/dist/team/__tests__/state.test.js +110 -0
  466. package/dist/team/__tests__/state.test.js.map +1 -1
  467. package/dist/team/__tests__/tmux-session.test.js +301 -2
  468. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  469. package/dist/team/__tests__/worker-bootstrap.test.js +94 -0
  470. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  471. package/dist/team/commit-hygiene.d.ts +22 -3
  472. package/dist/team/commit-hygiene.d.ts.map +1 -1
  473. package/dist/team/commit-hygiene.js +134 -2
  474. package/dist/team/commit-hygiene.js.map +1 -1
  475. package/dist/team/contracts.d.ts +1 -1
  476. package/dist/team/contracts.d.ts.map +1 -1
  477. package/dist/team/contracts.js +2 -0
  478. package/dist/team/contracts.js.map +1 -1
  479. package/dist/team/dag-schema.d.ts +38 -0
  480. package/dist/team/dag-schema.d.ts.map +1 -0
  481. package/dist/team/dag-schema.js +221 -0
  482. package/dist/team/dag-schema.js.map +1 -0
  483. package/dist/team/delegation-policy.d.ts +3 -0
  484. package/dist/team/delegation-policy.d.ts.map +1 -0
  485. package/dist/team/delegation-policy.js +82 -0
  486. package/dist/team/delegation-policy.js.map +1 -0
  487. package/dist/team/model-contract.d.ts +3 -1
  488. package/dist/team/model-contract.d.ts.map +1 -1
  489. package/dist/team/model-contract.js +44 -5
  490. package/dist/team/model-contract.js.map +1 -1
  491. package/dist/team/repo-aware-decomposition.d.ts +60 -0
  492. package/dist/team/repo-aware-decomposition.d.ts.map +1 -0
  493. package/dist/team/repo-aware-decomposition.js +229 -0
  494. package/dist/team/repo-aware-decomposition.js.map +1 -0
  495. package/dist/team/runtime.d.ts +34 -0
  496. package/dist/team/runtime.d.ts.map +1 -1
  497. package/dist/team/runtime.js +191 -50
  498. package/dist/team/runtime.js.map +1 -1
  499. package/dist/team/state/tasks.d.ts.map +1 -1
  500. package/dist/team/state/tasks.js +33 -0
  501. package/dist/team/state/tasks.js.map +1 -1
  502. package/dist/team/state/types.d.ts +23 -1
  503. package/dist/team/state/types.d.ts.map +1 -1
  504. package/dist/team/state/types.js.map +1 -1
  505. package/dist/team/state-root.d.ts +35 -0
  506. package/dist/team/state-root.d.ts.map +1 -1
  507. package/dist/team/state-root.js +281 -1
  508. package/dist/team/state-root.js.map +1 -1
  509. package/dist/team/state.d.ts +27 -1
  510. package/dist/team/state.d.ts.map +1 -1
  511. package/dist/team/state.js +6 -0
  512. package/dist/team/state.js.map +1 -1
  513. package/dist/team/tmux-session.d.ts +1 -0
  514. package/dist/team/tmux-session.d.ts.map +1 -1
  515. package/dist/team/tmux-session.js +83 -6
  516. package/dist/team/tmux-session.js.map +1 -1
  517. package/dist/team/worker-bootstrap.d.ts +3 -0
  518. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  519. package/dist/team/worker-bootstrap.js +77 -4
  520. package/dist/team/worker-bootstrap.js.map +1 -1
  521. package/dist/utils/__tests__/agents-model-table.test.js +8 -0
  522. package/dist/utils/__tests__/agents-model-table.test.js.map +1 -1
  523. package/dist/utils/__tests__/paths.test.js +42 -9
  524. package/dist/utils/__tests__/paths.test.js.map +1 -1
  525. package/dist/utils/agents-md.d.ts +3 -0
  526. package/dist/utils/agents-md.d.ts.map +1 -1
  527. package/dist/utils/agents-md.js +25 -0
  528. package/dist/utils/agents-md.js.map +1 -1
  529. package/dist/utils/agents-model-table.d.ts.map +1 -1
  530. package/dist/utils/agents-model-table.js +2 -3
  531. package/dist/utils/agents-model-table.js.map +1 -1
  532. package/package.json +14 -7
  533. package/plugins/oh-my-codex/.app.json +3 -0
  534. package/plugins/oh-my-codex/.codex-plugin/plugin.json +30 -0
  535. package/plugins/oh-my-codex/.mcp.json +44 -0
  536. package/plugins/oh-my-codex/skills/ai-slop-cleaner/SKILL.md +114 -0
  537. package/plugins/oh-my-codex/skills/analyze/SKILL.md +148 -0
  538. package/plugins/oh-my-codex/skills/ask-claude/SKILL.md +61 -0
  539. package/plugins/oh-my-codex/skills/ask-gemini/SKILL.md +61 -0
  540. package/plugins/oh-my-codex/skills/autopilot/SKILL.md +231 -0
  541. package/plugins/oh-my-codex/skills/autoresearch/SKILL.md +68 -0
  542. package/plugins/oh-my-codex/skills/cancel/SKILL.md +399 -0
  543. package/plugins/oh-my-codex/skills/code-review/SKILL.md +290 -0
  544. package/plugins/oh-my-codex/skills/configure-notifications/SKILL.md +287 -0
  545. package/plugins/oh-my-codex/skills/deep-interview/SKILL.md +464 -0
  546. package/plugins/oh-my-codex/skills/doctor/SKILL.md +239 -0
  547. package/plugins/oh-my-codex/skills/help/SKILL.md +202 -0
  548. package/plugins/oh-my-codex/skills/hud/SKILL.md +98 -0
  549. package/plugins/oh-my-codex/skills/note/SKILL.md +62 -0
  550. package/plugins/oh-my-codex/skills/omx-setup/SKILL.md +135 -0
  551. package/plugins/oh-my-codex/skills/pipeline/SKILL.md +86 -0
  552. package/plugins/oh-my-codex/skills/plan/SKILL.md +276 -0
  553. package/plugins/oh-my-codex/skills/ralph/SKILL.md +269 -0
  554. package/plugins/oh-my-codex/skills/ralplan/SKILL.md +162 -0
  555. package/plugins/oh-my-codex/skills/security-review/SKILL.md +300 -0
  556. package/plugins/oh-my-codex/skills/skill/SKILL.md +835 -0
  557. package/plugins/oh-my-codex/skills/team/SKILL.md +510 -0
  558. package/plugins/oh-my-codex/skills/trace/SKILL.md +33 -0
  559. package/plugins/oh-my-codex/skills/ultraqa/SKILL.md +143 -0
  560. package/plugins/oh-my-codex/skills/ultrawork/SKILL.md +175 -0
  561. package/plugins/oh-my-codex/skills/visual-ralph/SKILL.md +153 -0
  562. package/plugins/oh-my-codex/skills/visual-verdict/SKILL.md +76 -0
  563. package/plugins/oh-my-codex/skills/wiki/SKILL.md +57 -0
  564. package/plugins/oh-my-codex/skills/worker/SKILL.md +106 -0
  565. package/prompts/critic.md +35 -83
  566. package/prompts/executor.md +32 -109
  567. package/prompts/explore-harness.md +1 -1
  568. package/prompts/explore.md +37 -90
  569. package/prompts/planner.md +28 -58
  570. package/prompts/researcher.md +46 -78
  571. package/prompts/verifier.md +23 -31
  572. package/skills/autopilot/SKILL.md +1 -4
  573. package/skills/deep-interview/SKILL.md +8 -5
  574. package/skills/doctor/SKILL.md +45 -17
  575. package/skills/help/SKILL.md +2 -2
  576. package/skills/omx-setup/SKILL.md +52 -9
  577. package/skills/plan/SKILL.md +1 -4
  578. package/skills/ralph/SKILL.md +3 -5
  579. package/skills/ralplan/SKILL.md +2 -6
  580. package/skills/team/SKILL.md +2 -5
  581. package/skills/ultraqa/SKILL.md +1 -4
  582. package/skills/ultrawork/SKILL.md +2 -3
  583. package/skills/visual-ralph/SKILL.md +153 -0
  584. package/skills/web-clone/SKILL.md +12 -354
  585. package/src/scripts/__tests__/codex-native-hook.test.ts +2306 -224
  586. package/src/scripts/__tests__/generate-release-body.test.ts +109 -0
  587. package/src/scripts/__tests__/hook-derived-watcher.test.ts +132 -2
  588. package/src/scripts/__tests__/postinstall.test.ts +7 -104
  589. package/src/scripts/__tests__/prompt-inventory.test.ts +64 -0
  590. package/src/scripts/__tests__/run-test-files.test.ts +72 -0
  591. package/src/scripts/__tests__/smoke-packed-install.test.ts +15 -0
  592. package/src/scripts/__tests__/verify-native-agents.test.ts +204 -0
  593. package/src/scripts/codex-execution-surface.ts +73 -0
  594. package/src/scripts/codex-native-hook.ts +579 -82
  595. package/src/scripts/codex-native-pre-post.ts +157 -19
  596. package/src/scripts/generate-release-body.ts +34 -2
  597. package/src/scripts/hook-derived-watcher.ts +51 -8
  598. package/src/scripts/notify-fallback-watcher.ts +65 -9
  599. package/src/scripts/notify-hook/__tests__/team-worker-posttooluse.test.ts +180 -0
  600. package/src/scripts/notify-hook/managed-tmux.ts +22 -4
  601. package/src/scripts/notify-hook/process-runner.ts +7 -3
  602. package/src/scripts/notify-hook/team-dispatch.ts +103 -11
  603. package/src/scripts/notify-hook/team-tmux-guard.ts +3 -3
  604. package/src/scripts/notify-hook/team-worker-posttooluse.ts +536 -0
  605. package/src/scripts/notify-hook/team-worker.ts +4 -48
  606. package/src/scripts/notify-hook.ts +36 -5
  607. package/src/scripts/postinstall.ts +4 -58
  608. package/src/scripts/prompt-inventory.ts +218 -0
  609. package/src/scripts/run-test-files.ts +41 -2
  610. package/src/scripts/smoke-packed-install.ts +10 -1
  611. package/src/scripts/sync-plugin-mirror.ts +360 -0
  612. package/src/scripts/verify-native-agents.ts +245 -0
  613. package/templates/AGENTS.md +26 -91
  614. package/templates/catalog-manifest.json +16 -1
@@ -0,0 +1,510 @@
1
+ ---
2
+ name: team
3
+ description: N coordinated agents on shared task list using tmux-based orchestration
4
+ ---
5
+
6
+ # Team Skill
7
+
8
+ `$team` is the tmux-based parallel execution mode for OMX. It starts real worker Codex and/or Claude CLI sessions in split panes and coordinates them through `.omx/state/team/...` files plus CLI team interop (`omx team api ...`) and state files.
9
+
10
+ This skill is operationally sensitive. Treat it as an operator workflow, not a generic prompt pattern. In Codex App or plain outside-tmux sessions, do not present `$team` / `omx team` as directly available; launch OMX CLI from shell first, or stay on the nearest app-safe surface until the user explicitly wants the tmux runtime.
11
+
12
+ ## Team vs Native Subagents
13
+
14
+ - Use **Codex native subagents** for bounded, in-session parallelism where one leader thread can fan out a few independent subtasks and wait for them directly.
15
+ - Use **`omx team`** when you need durable tmux workers, shared task state, mailbox/dispatch coordination, worktrees, explicit lifecycle control, or long-running parallel execution that must survive beyond one local reasoning burst.
16
+ - Native subagents can complement team/ralph execution, but they do **not** replace the tmux team runtime's stateful coordination contract.
17
+
18
+ ## What This Skill Must Do
19
+
20
+ ## GPT-5.4 Guidance Alignment
21
+
22
+ Use the shared workflow guidance pattern: concise, evidence-dense progress and completion reporting, local overrides for the active workflow branch, persistent inspection/verification while correctness depends on it, and automatic continuation for safe reversible steps. Ask only for material, destructive, or preference-dependent branches.
23
+
24
+ When user triggers `$team`, the agent must:
25
+
26
+ 1. Invoke OMX runtime directly with `omx team ...`
27
+ 2. Avoid replacing the flow with in-process `spawn_agent` fanout
28
+ 3. Verify startup and surface concrete state/pane evidence
29
+ 4. If active team mode state is missing, initialize/sync it from canonical team runtime state before proceeding
30
+ 5. Keep team state alive until workers are terminal (unless explicit abort)
31
+ 6. Handle cleanup and stale-pane recovery when needed
32
+
33
+ If `omx team` is unavailable, stop with a hard error.
34
+
35
+ ## Invocation Contract
36
+
37
+ ```bash
38
+ omx team [N:agent-type] "<task description>"
39
+ ```
40
+
41
+ Examples:
42
+
43
+ ```bash
44
+ omx team 3:executor "analyze feature X and report flaws"
45
+ omx team "debug flaky integration tests"
46
+ omx team "ship end-to-end fix with verification"
47
+ ```
48
+
49
+ ### Team-first launch contract
50
+
51
+ `omx team ...` is now the canonical launch path for coordinated execution.
52
+ Team mode should carry its own parallel delivery + verification lanes without
53
+ requiring a separate linked Ralph launch up front.
54
+
55
+ - **Canonical launch:** use plain `omx team ...` / `$team ...` for coordinated workers.
56
+ - **Verification ownership:** keep one lane focused on tests, regression coverage, and evidence before shutdown.
57
+ - **Escalation:** start a separate `omx ralph ...` / `$ralph ...` only when a later manual follow-up still needs a persistent single-owner fix/verification loop.
58
+ - **Deprecation:** `omx team ralph ...` has been removed. Use plain `omx team ...` for team execution or run `omx ralph ...` separately when you explicitly want a later Ralph loop.
59
+
60
+ ### Claude teammates (v0.6.0+)
61
+
62
+ Important: `N:agent-type` (for example `2:executor`) selects the **worker role prompt**, not the worker CLI (`codex` vs `claude`).
63
+
64
+ To launch Claude teammates, use the team worker CLI env vars:
65
+
66
+ ```bash
67
+ # Force all teammates to Claude CLI
68
+ OMX_TEAM_WORKER_CLI=claude omx team 2:executor "update docs and report"
69
+
70
+ # Mixed team (worker 1 = Codex, worker 2 = Claude)
71
+ OMX_TEAM_WORKER_CLI_MAP=codex,claude omx team 2:executor "split doc/code tasks"
72
+
73
+ # Auto mode: Claude is selected when worker launch args/model contains 'claude'
74
+ OMX_TEAM_WORKER_CLI=auto OMX_TEAM_WORKER_LAUNCH_ARGS="--model claude-..." omx team 2:executor "run mixed validation"
75
+ ```
76
+
77
+ ## Preconditions
78
+
79
+ Before running `$team`, confirm:
80
+
81
+ 1. `tmux` installed (`tmux -V`)
82
+ 2. Current leader session is inside tmux (`$TMUX` is set)
83
+ 3. `omx` command resolves to the intended install/build
84
+ 4. If running repo-local `node bin/omx.js ...`, run `npm run build` after `src` changes
85
+ 5. Check HUD pane count in the leader window and avoid duplicate `hud --watch` panes before split
86
+
87
+ Suggested preflight:
88
+
89
+ ```bash
90
+ tmux list-panes -F '#{pane_id}\t#{pane_start_command}' | rg 'hud --watch' || true
91
+ ```
92
+
93
+ If duplicates exist, remove extras before `omx team` to prevent HUD ending up in worker stack.
94
+
95
+ ## Pre-context Intake Gate
96
+
97
+ Before launching `omx team`, require a grounded context snapshot:
98
+
99
+ 1. Derive a task slug from the request.
100
+ 2. Reuse the latest relevant snapshot in `.omx/context/{slug}-*.md` when available.
101
+ 3. If none exists, create `.omx/context/{slug}-{timestamp}.md` (UTC `YYYYMMDDTHHMMSSZ`) with:
102
+ - task statement
103
+ - desired outcome
104
+ - known facts/evidence
105
+ - constraints
106
+ - unknowns/open questions
107
+ - likely codebase touchpoints
108
+ 4. If ambiguity remains high, run `explore` first for brownfield facts, then run `$deep-interview --quick <task>` before team launch.
109
+ 5. If current correctness depends on official docs, version-aware framework guidance, best practices, or external dependency behavior, auto-delegate `researcher` as an evidence lane before or alongside worker launch instead of relying on repo-local recall alone.
110
+
111
+ Do not start worker panes until this gate is satisfied; if forced to proceed quickly, state explicit scope/risk limitations in the launch report.
112
+
113
+ For simple read-only brownfield lookups during intake, follow active session guidance: when `USE_OMX_EXPLORE_CMD` is enabled, prefer `omx explore` with narrow, concrete prompts; otherwise use the richer normal explore path and fall back normally if `omx explore` is unavailable.
114
+
115
+ ## Follow-up Staffing Contract
116
+
117
+ When `$team` is used as a follow-up mode from ralplan, carry forward the approved plan's explicit **available-agent-types roster** and convert it into concrete staffing guidance before launch:
118
+
119
+ - keep worker-role choices inside the known roster
120
+ - state the recommended headcount and role counts
121
+ - state the suggested reasoning level for each lane when available
122
+ - explain why each lane exists (delivery, verification, specialist support)
123
+ - include an explicit launch hint (`omx team N "<task>"` / `$team N "<task>"`) for the coordinated team run; mention a later separate Ralph follow-up only when genuinely needed
124
+ - if the ideal role is unavailable, choose the closest role from the roster and say so
125
+
126
+ ## Current Runtime Behavior (As Implemented)
127
+
128
+ `omx team` currently performs:
129
+
130
+ 1. Parse args (`N`, `agent-type`, task)
131
+ 2. Sanitize team name from task text
132
+ 3. Initialize team state:
133
+ - `.omx/state/team/<team>/config.json`
134
+ - `.omx/state/team/<team>/manifest.v2.json`
135
+ - `.omx/state/team/<team>/tasks/task-<id>.json`
136
+ 4. Compose team-scoped worker instructions file at:
137
+ - `.omx/state/team/<team>/worker-agents.md`
138
+ - Uses project `AGENTS.md` content (if present) + worker overlay, without mutating project `AGENTS.md`
139
+ 5. Resolve canonical shared state root from leader cwd (`<leader-cwd>/.omx/state`)
140
+ 6. Split current tmux window into worker panes
141
+ 7. Launch workers with:
142
+ - `OMX_TEAM_WORKER=<team>/worker-<n>`
143
+ - `OMX_TEAM_STATE_ROOT=<leader-cwd>/.omx/state`
144
+ - `OMX_TEAM_LEADER_CWD=<leader-cwd>`
145
+ - worker CLI selected by `OMX_TEAM_WORKER_CLI` / `OMX_TEAM_WORKER_CLI_MAP` (`codex` or `claude`)
146
+ - optional worktree metadata envs when `--worktree` is used
147
+ 7. Wait for worker readiness (`capture-pane` polling)
148
+ 8. Write per-worker `inbox.md` and trigger via `tmux send-keys`
149
+ 9. Return control to leader; follow-up uses `status` / `resume` / `shutdown`
150
+
151
+ If coarse active team mode state is missing while canonical team runtime state exists, restore/sync the active team mode state before relying on hook/mode-aware behavior.
152
+
153
+ Important:
154
+
155
+ - Leader remains in existing pane
156
+ - Worker panes are independent full Codex/Claude CLI sessions
157
+ - Workers may run in separate git worktrees (`omx team --worktree[=<name>]`) while sharing one team state root
158
+ - Worker ACKs go to `mailbox/leader-fixed.json`
159
+ - Notify hook updates worker heartbeat and nudges leader during active team mode
160
+ - Submit routing uses this CLI resolution order per worker trigger:
161
+ 1) explicit worker CLI provided by runtime state (persisted on worker identity/config),
162
+ 2) `OMX_TEAM_WORKER_CLI_MAP` entry for that worker index,
163
+ 3) fallback `OMX_TEAM_WORKER_CLI` / auto detection.
164
+ - Mixed CLI-map teams are supported for both startup and trigger submit behavior.
165
+ - Trigger submit differs by CLI:
166
+ - Codex may use queue-first `Tab` on busy panes (strategy-dependent).
167
+ - Claude always uses direct Enter-only (`C-m`) rounds (never queue-first `Tab`).
168
+
169
+ ### Team worker model + thinking resolution (current contract)
170
+
171
+ Team mode resolves worker **model flags** from one shared launch-arg set (not per-worker model selection).
172
+
173
+ Model precedence (highest to lowest):
174
+ 1. Explicit worker model in `OMX_TEAM_WORKER_LAUNCH_ARGS`
175
+ 2. Inherited leader `--model` flag
176
+ 3. Low-complexity default from `OMX_DEFAULT_SPARK_MODEL` (legacy alias: `OMX_SPARK_MODEL`) when 1+2 are absent and team `agentType` is low-complexity
177
+
178
+ Default-model rule:
179
+ - Do **not** assume a frontier or spark model from recency or model-family heuristics.
180
+ - Use `OMX_DEFAULT_FRONTIER_MODEL` for frontier-default guidance.
181
+ - Use `OMX_DEFAULT_SPARK_MODEL` for spark/low-complexity worker-default guidance.
182
+
183
+ Thinking-level rule (critical):
184
+ - **No model-name heuristic mapping.**
185
+ - Team runtime must **not** infer `model_reasoning_effort` from model-name substrings (e.g., `spark`, `high-capability`, `mini`).
186
+ - When the leader assigns teammate roles/tasks, OMX allocates **per-worker reasoning effort dynamically** from the resolved worker role (`low`, `medium`, `high`).
187
+ - Explicit launch args still win: if `OMX_TEAM_WORKER_LAUNCH_ARGS` already includes `-c model_reasoning_effort=...`, that explicit value overrides dynamic allocation for every worker.
188
+
189
+ Normalization requirements:
190
+ - Parse both `--model <value>` and `--model=<value>`
191
+ - Remove duplicate/conflicting model flags
192
+ - Emit exactly one final canonical flag: `--model <value>`
193
+ - Preserve unrelated args in worker launch config
194
+ - If explicit reasoning exists, preserve canonical `-c model_reasoning_effort="<level>"`; otherwise inject the worker role's default reasoning level
195
+
196
+ ## Required Lifecycle (Operator Contract)
197
+
198
+ Follow this exact lifecycle when running `$team`:
199
+
200
+ 1. Start team and verify startup evidence (team line, tmux target, panes, ACK mailbox)
201
+ 2. Monitor task and worker progress with runtime/state tools first (`omx team status <team>`, `omx team resume <team>`, mailbox/state files)
202
+ 3. Wait for terminal task state before shutdown:
203
+ - `pending=0`
204
+ - `in_progress=0`
205
+ - `failed=0` (or explicitly acknowledged failure path)
206
+ 4. Only then run `omx team shutdown <team>`
207
+ 5. Verify shutdown evidence and state cleanup
208
+
209
+ Do not run `shutdown` while workers are actively writing updates unless user explicitly requested abort/cancel.
210
+ Do not treat ad-hoc pane typing as primary control flow when runtime/state evidence is available.
211
+
212
+ ### Active leader monitoring rule
213
+
214
+ While a team is **ON/running**, the leader must not go blind. Keep checking live team state until terminal completion.
215
+
216
+ Minimum acceptable loop:
217
+
218
+ ```bash
219
+ sleep 30 && omx team status <team-name>
220
+ ```
221
+
222
+ Repeat that check while the team stays active, or use `omx team await <team-name> --timeout-ms 30000 --json` when event-driven waiting is a better fit.
223
+
224
+ If the leader gets a stale/team-stalled nudge, immediately run `omx team status <team-name>` before taking any manual intervention.
225
+
226
+ ## Message Dispatch Policy (CLI-first, state-first)
227
+
228
+ To avoid brittle behavior, **message/task delivery must not be driven by ad-hoc tmux typing**.
229
+
230
+ Required default path:
231
+
232
+ 1. Use `omx team ...` runtime lifecycle commands for orchestration.
233
+ 2. Use `omx team api ... --json` for mailbox/task mutations.
234
+ 3. Verify delivery via mailbox/state evidence (`mailbox/*.json`, task status, `omx team status`).
235
+
236
+ Strict rules:
237
+
238
+ - **MUST NOT** use direct `tmux send-keys` as the primary mechanism to deliver instructions/messages.
239
+ - **MUST NOT** spam Enter/trigger keys without first checking runtime/state evidence.
240
+ - **MUST** prefer durable state writes + runtime dispatch (`dispatch/requests.json`, mailbox, inbox).
241
+ - Direct tmux interaction is **fallback-only** and only after failure checks (for example `worker_notify_failed:<worker>`) or explicit user request (for example “press enter”).
242
+
243
+ ## Operational Commands
244
+
245
+ ```bash
246
+ omx team status <team-name>
247
+ omx team resume <team-name>
248
+ omx team shutdown <team-name>
249
+ ```
250
+
251
+ Semantics:
252
+
253
+ - `status`: reads team snapshot (task counts, dead/non-reporting workers)
254
+ - `resume`: reconnects to live team session if present
255
+ - `shutdown`: graceful shutdown request, then cleanup (deletes `.omx/state/team/<team>`)
256
+
257
+ ## Data Plane and Control Plane
258
+
259
+ ### Control Plane
260
+
261
+ - tmux panes/processes (`OMX_TEAM_WORKER` per worker)
262
+ - leader notifications via `tmux display-message`
263
+
264
+ ### Data Plane
265
+
266
+ - `.omx/state/team/<team>/...` files
267
+ - Team mailbox files:
268
+ - `.omx/state/team/<team>/mailbox/leader-fixed.json`
269
+ - `.omx/state/team/<team>/mailbox/worker-<n>.json`
270
+ - `.omx/state/team/<team>/dispatch/requests.json` (durable dispatch queue; hook-preferred, fallback-aware)
271
+
272
+ ### Key Files
273
+
274
+ - `.omx/state/team/<team>/config.json`
275
+ - `.omx/state/team/<team>/manifest.v2.json`
276
+ - `.omx/state/team/<team>/tasks/task-<id>.json`
277
+ - `.omx/state/team/<team>/workers/worker-<n>/identity.json`
278
+ - `.omx/state/team/<team>/workers/worker-<n>/inbox.md`
279
+ - `.omx/state/team/<team>/workers/worker-<n>/heartbeat.json`
280
+ - `.omx/state/team/<team>/workers/worker-<n>/status.json`
281
+ - `.omx/state/team-leader-nudge.json`
282
+
283
+
284
+ ## Team Mutation Interop (CLI-first)
285
+
286
+ Use `omx team api` for machine-readable mutation/reads instead of legacy `team_*` MCP tools.
287
+
288
+ ```bash
289
+ omx team api <operation> --input '{"team_name":"my-team",...}' --json
290
+ ```
291
+
292
+ Examples:
293
+
294
+ ```bash
295
+ omx team api send-message --input '{"team_name":"my-team","from_worker":"worker-1","to_worker":"leader-fixed","body":"ACK"}' --json
296
+ omx team api claim-task --input '{"team_name":"my-team","task_id":"1","worker":"worker-1"}' --json
297
+ omx team api transition-task-status --input '{"team_name":"my-team","task_id":"1","from":"in_progress","to":"completed","claim_token":"<token>"}' --json
298
+ ```
299
+
300
+ `--json` responses include stable metadata for automation:
301
+ - `schema_version`
302
+ - `timestamp`
303
+ - `command`
304
+ - `ok`
305
+ - `operation`
306
+ - `data` or `error`
307
+
308
+ ## Team + Worker Protocol Notes
309
+
310
+ Leader-to-worker:
311
+
312
+ - Write full assignment to worker `inbox.md`
313
+ - Send short trigger (<200 chars) with `tmux send-keys`
314
+
315
+ Worker-to-leader:
316
+
317
+ - Send ACK to `leader-fixed` mailbox via `omx team api send-message --json`
318
+ - Claim/transition/release task lifecycle via `omx team api <operation> --json`
319
+
320
+ Worker commit protocol (critical for incremental integration):
321
+
322
+ - After completing task work and before reporting completion, workers MUST commit:
323
+ `git add -A && git commit -m "task: <task-subject>"`
324
+ - This ensures changes are available for incremental integration into the leader branch
325
+ - If a worker forgets to commit, the runtime auto-commits as a fallback, but explicit commits are preferred
326
+
327
+ Task ID rule (critical):
328
+
329
+ - File path uses `task-<id>.json` (example `task-1.json`)
330
+ - MCP API `task_id` uses bare id (example `"1"`, not `"task-1"`)
331
+ - Never instruct workers to read `tasks/{id}.json`
332
+
333
+ ## Environment Knobs
334
+
335
+ Useful runtime env vars:
336
+
337
+ - `OMX_TEAM_READY_TIMEOUT_MS`
338
+ - Worker readiness timeout (default 45000)
339
+ - `OMX_TEAM_SKIP_READY_WAIT=1`
340
+ - Skip readiness wait (debug only)
341
+ - `OMX_TEAM_AUTO_TRUST=0`
342
+ - Disable auto-advance for trust prompt (default behavior auto-advances)
343
+ - `OMX_TEAM_AUTO_ACCEPT_BYPASS=0`
344
+ - Disable Claude bypass-permissions prompt auto-accept (default behavior auto-accepts `2` + Enter)
345
+ - `OMX_TEAM_WORKER_LAUNCH_ARGS`
346
+ - Extra args passed to worker launch command
347
+ - `OMX_TEAM_WORKER_CLI`
348
+ - Worker CLI selector: `auto|codex|claude` (default: `auto`)
349
+ - `auto` chooses `claude` when worker `--model` contains `claude`, otherwise `codex`
350
+ - In `claude` mode, workers launch with exactly one `--dangerously-skip-permissions`
351
+ and ignore explicit model/config/effort launch overrides (uses default `settings.json`)
352
+ - `OMX_TEAM_WORKER_CLI_MAP`
353
+ - Per-worker CLI selector (comma-separated `auto|codex|claude`)
354
+ - Length must be `1` (broadcast) or exactly the team worker count
355
+ - Example: `OMX_TEAM_WORKER_CLI_MAP=codex,codex,claude,claude`
356
+ - When present, overrides `OMX_TEAM_WORKER_CLI`
357
+ - `OMX_TEAM_AUTO_INTERRUPT_RETRY`
358
+ - Trigger submit fallback (default: enabled)
359
+ - `0` disables adaptive queue->resend escalation
360
+ - `OMX_TEAM_LEADER_NUDGE_MS`
361
+ - Leader nudge interval in ms (default 120000)
362
+ - `OMX_TEAM_STRICT_SUBMIT=1`
363
+ - Force strict send-keys submit failure behavior
364
+
365
+ ## Failure Modes and Diagnosis
366
+
367
+ Operator note (important for Claude panes):
368
+ - Manual Enter injection (`tmux send-keys ... C-m`) can appear to "do nothing" when a worker is actively processing; Enter may be queued by the pane/task flow.
369
+ - This is not necessarily a runtime bug. Confirm worker/team state before diagnosing dispatch failure.
370
+ - Avoid repeated blind Enter spam; it can create noisy duplicate submits once the pane becomes idle.
371
+
372
+ ### Safe Manual Intervention (last resort)
373
+
374
+ Use only after checking `omx team status <team>` and mailbox/state evidence:
375
+
376
+ 1. Capture pane tail to confirm current worker state:
377
+ - `tmux capture-pane -t %<worker-pane> -p -S -120`
378
+ - If a larger-tail read or bounded summary would help, prefer explicit opt-in inspection via `omx sparkshell --tmux-pane %<worker-pane> --tail-lines 400` before improvising extra tmux commands.
379
+ 2. If the pane is stuck in an interactive state, safely return to idle prompt first:
380
+ - optional interrupt `C-c` or escape flow (CLI-specific) once, then re-check pane capture
381
+ 3. Send one concise trigger (single line) and wait for evidence:
382
+ - `tmux send-keys -t %<worker-pane> "ack + continue current task; report status" C-m`
383
+ 4. Re-check:
384
+ - pane output via `capture-pane`
385
+ - mailbox updates (`mailbox/leader-fixed.json` or worker mailbox)
386
+ - `omx team status <team>`
387
+
388
+ ### `worker_notify_failed:<worker>`
389
+
390
+ Meaning:
391
+ - Leader wrote inbox but trigger submit path failed
392
+
393
+ Checks:
394
+
395
+ 1. `tmux list-panes -F '#{pane_id}\t#{pane_start_command}'`
396
+ 2. `tmux capture-pane -t %<worker-pane> -p -S -120`
397
+ 3. Verify worker process alive and not stuck on trust prompt
398
+ 4. Rebuild if running repo-local (`npm run build`)
399
+
400
+ ### Team starts but leader gets no ACK
401
+
402
+ Checks:
403
+
404
+ 1. Worker pane capture shows inbox processing
405
+ 2. `.omx/state/team/<team>/mailbox/leader-fixed.json` exists
406
+ 3. Worker skill loaded and `omx team api send-message --json` called
407
+ 4. Task-id mismatch not blocking worker flow
408
+
409
+ ### Worker logs `omx team api ... ENOENT` (or legacy `team_send_message ENOENT` / `team_update_task ENOENT`)
410
+
411
+ Meaning:
412
+ - Team state path no longer exists while worker is still running.
413
+ - Typical cause: leader/manual flow ran `omx team shutdown <team>` (or removed `.omx/state/team/<team>`) before worker finished.
414
+
415
+ Checks:
416
+
417
+ 1. `omx team status <team>` and confirm whether tasks were still `in_progress` when shutdown occurred
418
+ 2. Verify whether `.omx/state/team/<team>/` exists
419
+ 3. Inspect worker pane tail for post-shutdown writes
420
+ 4. Confirm no external cleanup (`rm -rf .omx/state/team/<team>`) happened during execution
421
+
422
+ Prevention:
423
+
424
+ 1. Enforce completion gate (no in-progress tasks) before shutdown
425
+ 2. Use `shutdown` only for terminal completion or explicit abort
426
+ 3. If aborting, expect late worker writes to fail and treat ENOENT as expected teardown artifact
427
+
428
+ ### Shutdown reports success but stale worker panes remain
429
+
430
+ Cause:
431
+ - stale pane outside config tracking or previous failed run
432
+
433
+ Fix:
434
+ - manual pane cleanup (see clean-slate commands)
435
+
436
+ ## Clean-Slate Recovery
437
+
438
+ Run from leader pane:
439
+
440
+ ```bash
441
+ # 1) Inspect panes
442
+ tmux list-panes -F '#{pane_id}\t#{pane_current_command}\t#{pane_start_command}'
443
+
444
+ # 2) Kill stale worker panes only (examples)
445
+ tmux kill-pane -t %450
446
+ tmux kill-pane -t %451
447
+
448
+ # 3) Remove stale team state (example)
449
+ rm -rf .omx/state/team/<team-name>
450
+
451
+ # 4) Retry
452
+ omx team 1:executor "fresh retry"
453
+ ```
454
+
455
+ Guidelines:
456
+
457
+ - Do not kill leader pane
458
+ - Do not kill HUD pane (`omx hud --watch`) unless intentionally restarting HUD
459
+
460
+ ## Required Reporting During Execution
461
+
462
+ When operating this skill, provide concrete progress evidence:
463
+
464
+ 1. Team started line (`Team started: <name>`)
465
+ 2. tmux target and worker pane presence
466
+ 3. leader mailbox ACK path/content check
467
+ 4. status/shutdown outcomes
468
+
469
+ Do not claim success without file/pane evidence.
470
+ Do not claim clean completion if shutdown occurred with `in_progress>0`.
471
+ Use `omx sparkshell --tmux-pane ...` as an explicit opt-in operator aid for pane inspection and summaries; keep raw `tmux capture-pane` evidence available for manual intervention and proof.
472
+
473
+ ## Programmatic Team Orchestration
474
+
475
+ Use the `omx team ...` CLI as the supported team-launch surface. For automation, drive the same CLI flow from scripts or supervising agents rather than relying on a separate MCP runner.
476
+
477
+ ### Supported current surfaces
478
+
479
+ - **`omx team ...` CLI** — Primary method for interactive or automated team orchestration. Use this when you want direct tmux-pane visibility or a scriptable launch path.
480
+ - **Team state files** — Inspect `.omx/state/team/<team>/` when you need status, task, or mailbox evidence after launch.
481
+
482
+ ### Cleanup distinction
483
+
484
+ Two cleanup paths exist and must not be confused:
485
+
486
+ - `team_cleanup` (**state-server**): Deletes team state **files** on disk (`.omx/state/team/<team>/`). Use after a team run is fully complete.
487
+ - tmux/session cleanup: Use the documented `omx team` shutdown / cleanup flow when you need to stop worker panes or clean up an interrupted run.
488
+
489
+ ### Automation example
490
+
491
+ ```
492
+ 1. omx team 1:executor "fix bugs"
493
+ 2. omx team status <team-name>
494
+ 3. omx team shutdown <team-name>
495
+ 4. Clean up the finished team state for <team-name>
496
+ ```
497
+
498
+ ## Limitations
499
+
500
+ - Worktree provisioning requires a git repository and can fail on branch/path collisions
501
+ - send-keys interactions can be timing-sensitive under load
502
+ - stale panes from prior runs can interfere until manually cleaned
503
+
504
+ ## Scenario Examples
505
+
506
+ **Good:** The user says `continue` after the workflow already has a clear next step. Continue the current branch of work instead of restarting or re-asking the same question.
507
+
508
+ **Good:** The user changes only the output shape or downstream delivery step (for example `make a PR`). Preserve earlier non-conflicting workflow constraints and apply the update locally.
509
+
510
+ **Bad:** The user says `continue`, and the workflow restarts discovery or stops before the missing verification/evidence is gathered.
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: trace
3
+ description: Show agent flow trace timeline and summary
4
+ ---
5
+
6
+ # Agent Flow Trace
7
+
8
+ [TRACE MODE ACTIVATED]
9
+
10
+ ## Objective
11
+
12
+ Display the flow trace showing how hooks, keywords, skills, agents, and tools interacted during this session.
13
+
14
+ ## Instructions
15
+
16
+ 1. **Use `trace_timeline` MCP tool** to show the chronological event timeline
17
+ - Call with no arguments to show the latest session
18
+ - Use `filter` parameter to focus on specific event types (hooks, skills, agents, keywords, tools, modes)
19
+ - Use `last` parameter to limit output
20
+
21
+ 2. **Use `trace_summary` MCP tool** to show aggregate statistics
22
+ - Hook fire counts
23
+ - Keywords detected
24
+ - Skills activated
25
+ - Mode transitions
26
+ - Tool performance and bottlenecks
27
+
28
+ ## Output Format
29
+
30
+ Present the timeline first, then the summary. Highlight:
31
+ - **Mode transitions** (how execution modes changed)
32
+ - **Bottlenecks** (slow tools or agents)
33
+ - **Flow patterns** (keyword -> skill -> agent chains)
@@ -0,0 +1,143 @@
1
+ ---
2
+ name: ultraqa
3
+ description: QA cycling workflow - test, verify, fix, repeat until goal met
4
+ ---
5
+
6
+ # UltraQA Skill
7
+
8
+ [ULTRAQA ACTIVATED - AUTONOMOUS QA CYCLING]
9
+
10
+ ## Overview
11
+
12
+ ## GPT-5.4 Guidance Alignment
13
+
14
+ Use the shared workflow guidance pattern: concise, evidence-dense progress and completion reporting, local overrides for the active workflow branch, persistent inspection/verification while the QA cycle depends on it, and automatic continuation for safe reversible steps. Ask only for material, destructive, or preference-dependent branches.
15
+
16
+ You are now in **ULTRAQA** mode - an autonomous QA cycling workflow that runs until your quality goal is met.
17
+
18
+ **Cycle**: qa-tester → architect verification → fix → repeat
19
+
20
+ ## Goal Parsing
21
+
22
+ Parse the goal from arguments. Supported formats:
23
+
24
+ | Invocation | Goal Type | What to Check |
25
+ |------------|-----------|---------------|
26
+ | `/ultraqa --tests` | tests | All test suites pass |
27
+ | `/ultraqa --build` | build | Build succeeds with exit 0 |
28
+ | `/ultraqa --lint` | lint | No lint errors |
29
+ | `/ultraqa --typecheck` | typecheck | No TypeScript errors |
30
+ | `/ultraqa --custom "pattern"` | custom | Custom success pattern in output |
31
+
32
+ If no structured goal provided, interpret the argument as a custom goal.
33
+
34
+ ## Cycle Workflow
35
+
36
+ ### Cycle N (Max 5)
37
+
38
+ 1. **RUN QA**: Execute verification based on goal type
39
+ - `--tests`: Run the project's test command
40
+ - `--build`: Run the project's build command
41
+ - `--lint`: Run the project's lint command
42
+ - `--typecheck`: Run the project's type check command
43
+ - `--custom`: Run appropriate command and check for pattern
44
+ - `--interactive`: Use qa-tester for interactive CLI/service testing:
45
+ ```
46
+ delegate(role="qa-tester", tier="STANDARD", task="TEST:
47
+ Goal: [describe what to verify]
48
+ Service: [how to start]
49
+ Test cases: [specific scenarios to verify]")
50
+ ```
51
+
52
+ 2. **CHECK RESULT**: Did the goal pass?
53
+ - **YES** → Exit with success message
54
+ - **NO** → Continue to step 3
55
+
56
+ 3. **ARCHITECT DIAGNOSIS**: Spawn architect to analyze failure
57
+ ```
58
+ delegate(role="architect", tier="THOROUGH", task="DIAGNOSE FAILURE:
59
+ Goal: [goal type]
60
+ Output: [test/build output]
61
+ Provide root cause and specific fix recommendations.")
62
+ ```
63
+
64
+ 4. **FIX ISSUES**: Apply architect's recommendations
65
+ ```
66
+ delegate(role="executor", tier="STANDARD", task="FIX:
67
+ Issue: [architect diagnosis]
68
+ Files: [affected files]
69
+ Apply the fix precisely as recommended.")
70
+ ```
71
+
72
+ 5. **REPEAT**: Go back to step 1
73
+
74
+ ## Exit Conditions
75
+
76
+ | Condition | Action |
77
+ |-----------|--------|
78
+ | **Goal Met** | Exit with success: "ULTRAQA COMPLETE: Goal met after N cycles" |
79
+ | **Cycle 5 Reached** | Exit with diagnosis: "ULTRAQA STOPPED: Max cycles. Diagnosis: ..." |
80
+ | **Same Failure 3x** | Exit early: "ULTRAQA STOPPED: Same failure detected 3 times. Root cause: ..." |
81
+ | **Environment Error** | Exit: "ULTRAQA ERROR: [tmux/port/dependency issue]" |
82
+
83
+ ## Observability
84
+
85
+ Output progress each cycle:
86
+ ```
87
+ [ULTRAQA Cycle 1/5] Running tests...
88
+ [ULTRAQA Cycle 1/5] FAILED - 3 tests failing
89
+ [ULTRAQA Cycle 1/5] Architect diagnosing...
90
+ [ULTRAQA Cycle 1/5] Fixing: auth.test.ts - missing mock
91
+ [ULTRAQA Cycle 2/5] Running tests...
92
+ [ULTRAQA Cycle 2/5] PASSED - All 47 tests pass
93
+ [ULTRAQA COMPLETE] Goal met after 2 cycles
94
+ ```
95
+
96
+ ## State Tracking
97
+
98
+ Use `omx_state` MCP tools for UltraQA lifecycle state.
99
+
100
+ - **On start**:
101
+ `state_write({mode: "ultraqa", active: true, current_phase: "qa", iteration: 1, started_at: "<now>"})`
102
+ - **On each cycle**:
103
+ `state_write({mode: "ultraqa", current_phase: "qa", iteration: <cycle>})`
104
+ - **On diagnose/fix transitions**:
105
+ `state_write({mode: "ultraqa", current_phase: "diagnose"})`
106
+ `state_write({mode: "ultraqa", current_phase: "fix"})`
107
+ - **On completion**:
108
+ `state_write({mode: "ultraqa", active: false, current_phase: "complete", completed_at: "<now>"})`
109
+ - **For resume detection**:
110
+ `state_read({mode: "ultraqa"})`
111
+
112
+
113
+ ## Scenario Examples
114
+
115
+ **Good:** The user says `continue` after the workflow already has a clear next step. Continue the current branch of work instead of restarting or re-asking the same question.
116
+
117
+ **Good:** The user changes only the output shape or downstream delivery step (for example `make a PR`). Preserve earlier non-conflicting workflow constraints and apply the update locally.
118
+
119
+ **Bad:** The user says `continue`, and the workflow restarts discovery or stops before the missing verification/evidence is gathered.
120
+
121
+ ## Cancellation
122
+
123
+ User can cancel with `/cancel` which clears the state file.
124
+
125
+ ## Important Rules
126
+
127
+ 1. **PARALLEL when possible** - Run diagnosis while preparing potential fixes
128
+ 2. **TRACK failures** - Record each failure to detect patterns
129
+ 3. **EARLY EXIT on pattern** - 3x same failure = stop and surface
130
+ 4. **CLEAR OUTPUT** - User should always know current cycle and status
131
+ 5. **CLEAN UP** - Clear state file on completion or cancellation
132
+
133
+ ## STATE CLEANUP ON COMPLETION
134
+
135
+ When goal is met OR max cycles reached OR exiting early, run `$cancel` or call:
136
+
137
+ `state_clear({mode: "ultraqa"})`
138
+
139
+ Use MCP state cleanup rather than deleting files directly.
140
+
141
+ ---
142
+
143
+ Begin ULTRAQA cycling now. Parse the goal and start cycle 1.