oh-my-codex 0.7.6 → 0.8.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 (376) hide show
  1. package/README.de.md +315 -0
  2. package/README.es.md +296 -17
  3. package/README.fr.md +315 -0
  4. package/README.it.md +315 -0
  5. package/README.ja.md +297 -18
  6. package/README.ko.md +296 -17
  7. package/README.md +110 -13
  8. package/README.pt.md +296 -17
  9. package/README.ru.md +296 -17
  10. package/README.tr.md +315 -0
  11. package/README.vi.md +297 -18
  12. package/README.zh-TW.md +362 -0
  13. package/README.zh.md +293 -17
  14. package/dist/catalog/__tests__/generator.test.js +2 -0
  15. package/dist/catalog/__tests__/generator.test.js.map +1 -1
  16. package/dist/catalog/__tests__/schema.test.js +7 -0
  17. package/dist/catalog/__tests__/schema.test.js.map +1 -1
  18. package/dist/cli/__tests__/ask.test.d.ts +2 -0
  19. package/dist/cli/__tests__/ask.test.d.ts.map +1 -0
  20. package/dist/cli/__tests__/ask.test.js +236 -0
  21. package/dist/cli/__tests__/ask.test.js.map +1 -0
  22. package/dist/cli/__tests__/doctor-warning-copy.test.d.ts +2 -0
  23. package/dist/cli/__tests__/doctor-warning-copy.test.d.ts.map +1 -0
  24. package/dist/cli/__tests__/doctor-warning-copy.test.js +45 -0
  25. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -0
  26. package/dist/cli/__tests__/index.test.js +85 -2
  27. package/dist/cli/__tests__/index.test.js.map +1 -1
  28. package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts +2 -0
  29. package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts.map +1 -0
  30. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js +15 -0
  31. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +1 -0
  32. package/dist/cli/__tests__/ralph.test.js +19 -43
  33. package/dist/cli/__tests__/ralph.test.js.map +1 -1
  34. package/dist/cli/__tests__/setup-scope.test.js +2 -0
  35. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  36. package/dist/cli/__tests__/team.test.js +219 -1
  37. package/dist/cli/__tests__/team.test.js.map +1 -1
  38. package/dist/cli/__tests__/version.test.d.ts +2 -0
  39. package/dist/cli/__tests__/version.test.d.ts.map +1 -0
  40. package/dist/cli/__tests__/version.test.js +21 -0
  41. package/dist/cli/__tests__/version.test.js.map +1 -0
  42. package/dist/cli/ask.d.ts +13 -0
  43. package/dist/cli/ask.d.ts.map +1 -0
  44. package/dist/cli/ask.js +174 -0
  45. package/dist/cli/ask.js.map +1 -0
  46. package/dist/cli/constants.d.ts +10 -0
  47. package/dist/cli/constants.d.ts.map +1 -0
  48. package/dist/cli/constants.js +10 -0
  49. package/dist/cli/constants.js.map +1 -0
  50. package/dist/cli/doctor.js +16 -5
  51. package/dist/cli/doctor.js.map +1 -1
  52. package/dist/cli/index.d.ts +8 -2
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +150 -52
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/ralph.d.ts +3 -11
  57. package/dist/cli/ralph.d.ts.map +1 -1
  58. package/dist/cli/ralph.js +64 -45
  59. package/dist/cli/ralph.js.map +1 -1
  60. package/dist/cli/setup.d.ts.map +1 -1
  61. package/dist/cli/setup.js +17 -18
  62. package/dist/cli/setup.js.map +1 -1
  63. package/dist/cli/team.d.ts.map +1 -1
  64. package/dist/cli/team.js +257 -0
  65. package/dist/cli/team.js.map +1 -1
  66. package/dist/hooks/__tests__/deep-interview-contract.test.d.ts +2 -0
  67. package/dist/hooks/__tests__/deep-interview-contract.test.d.ts.map +1 -0
  68. package/dist/hooks/__tests__/deep-interview-contract.test.js +55 -0
  69. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -0
  70. package/dist/hooks/__tests__/emulator.test.js +6 -0
  71. package/dist/hooks/__tests__/emulator.test.js.map +1 -1
  72. package/dist/hooks/__tests__/keyword-detector.test.js +44 -22
  73. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  74. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js +23 -7
  75. package/dist/hooks/__tests__/notify-hook-all-workers-idle.test.js.map +1 -1
  76. package/dist/hooks/__tests__/notify-hook-session-scope.test.js +59 -0
  77. package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
  78. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +264 -1
  79. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  80. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js +61 -1
  81. package/dist/hooks/__tests__/notify-hook-team-leader-nudge.test.js.map +1 -1
  82. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js +17 -7
  83. package/dist/hooks/__tests__/notify-hook-worker-idle.test.js.map +1 -1
  84. package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts +2 -0
  85. package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts.map +1 -0
  86. package/dist/hooks/__tests__/openclaw-setup-contract.test.js +61 -0
  87. package/dist/hooks/__tests__/openclaw-setup-contract.test.js.map +1 -0
  88. package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts +2 -0
  89. package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts.map +1 -0
  90. package/dist/hooks/__tests__/pre-context-gate-skills.test.js +34 -0
  91. package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -0
  92. package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts +2 -0
  93. package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts.map +1 -0
  94. package/dist/hooks/__tests__/visual-verdict-loop.test.js +35 -0
  95. package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +1 -0
  96. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  97. package/dist/hooks/agents-overlay.js +18 -16
  98. package/dist/hooks/agents-overlay.js.map +1 -1
  99. package/dist/hooks/codebase-map.d.ts.map +1 -1
  100. package/dist/hooks/codebase-map.js +6 -2
  101. package/dist/hooks/codebase-map.js.map +1 -1
  102. package/dist/hooks/emulator.d.ts.map +1 -1
  103. package/dist/hooks/emulator.js +2 -0
  104. package/dist/hooks/emulator.js.map +1 -1
  105. package/dist/hooks/extensibility/sdk.d.ts.map +1 -1
  106. package/dist/hooks/extensibility/sdk.js +2 -1
  107. package/dist/hooks/extensibility/sdk.js.map +1 -1
  108. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  109. package/dist/hooks/keyword-registry.js +6 -0
  110. package/dist/hooks/keyword-registry.js.map +1 -1
  111. package/dist/hud/index.d.ts.map +1 -1
  112. package/dist/hud/index.js +2 -24
  113. package/dist/hud/index.js.map +1 -1
  114. package/dist/mcp/__tests__/path-traversal.test.js +9 -227
  115. package/dist/mcp/__tests__/path-traversal.test.js.map +1 -1
  116. package/dist/mcp/__tests__/state-server-schema.test.js +16 -20
  117. package/dist/mcp/__tests__/state-server-schema.test.js.map +1 -1
  118. package/dist/mcp/__tests__/state-server-team-tools.test.js +30 -487
  119. package/dist/mcp/__tests__/state-server-team-tools.test.js.map +1 -1
  120. package/dist/mcp/code-intel-server.d.ts.map +1 -1
  121. package/dist/mcp/code-intel-server.js +18 -8
  122. package/dist/mcp/code-intel-server.js.map +1 -1
  123. package/dist/mcp/memory-server.js +72 -11
  124. package/dist/mcp/memory-server.js.map +1 -1
  125. package/dist/mcp/state-paths.d.ts.map +1 -1
  126. package/dist/mcp/state-paths.js +4 -1
  127. package/dist/mcp/state-paths.js.map +1 -1
  128. package/dist/mcp/state-server.d.ts +179 -0
  129. package/dist/mcp/state-server.d.ts.map +1 -1
  130. package/dist/mcp/state-server.js +221 -1111
  131. package/dist/mcp/state-server.js.map +1 -1
  132. package/dist/mcp/team-server.d.ts.map +1 -1
  133. package/dist/mcp/team-server.js +9 -3
  134. package/dist/mcp/team-server.js.map +1 -1
  135. package/dist/mcp/trace-server.d.ts.map +1 -1
  136. package/dist/mcp/trace-server.js +8 -3
  137. package/dist/mcp/trace-server.js.map +1 -1
  138. package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts +5 -0
  139. package/dist/notifications/__tests__/dispatch-cooldown.test.d.ts.map +1 -0
  140. package/dist/notifications/__tests__/dispatch-cooldown.test.js +100 -0
  141. package/dist/notifications/__tests__/dispatch-cooldown.test.js.map +1 -0
  142. package/dist/notifications/__tests__/temp-mode.test.d.ts +2 -0
  143. package/dist/notifications/__tests__/temp-mode.test.d.ts.map +1 -0
  144. package/dist/notifications/__tests__/temp-mode.test.js +172 -0
  145. package/dist/notifications/__tests__/temp-mode.test.js.map +1 -0
  146. package/dist/notifications/config.d.ts.map +1 -1
  147. package/dist/notifications/config.js +67 -7
  148. package/dist/notifications/config.js.map +1 -1
  149. package/dist/notifications/dispatch-cooldown.d.ts +36 -0
  150. package/dist/notifications/dispatch-cooldown.d.ts.map +1 -0
  151. package/dist/notifications/dispatch-cooldown.js +109 -0
  152. package/dist/notifications/dispatch-cooldown.js.map +1 -0
  153. package/dist/notifications/dispatcher.d.ts.map +1 -1
  154. package/dist/notifications/dispatcher.js +4 -4
  155. package/dist/notifications/dispatcher.js.map +1 -1
  156. package/dist/notifications/index.d.ts +5 -0
  157. package/dist/notifications/index.d.ts.map +1 -1
  158. package/dist/notifications/index.js +39 -8
  159. package/dist/notifications/index.js.map +1 -1
  160. package/dist/notifications/reply-listener.d.ts.map +1 -1
  161. package/dist/notifications/reply-listener.js +6 -2
  162. package/dist/notifications/reply-listener.js.map +1 -1
  163. package/dist/notifications/session-registry.d.ts.map +1 -1
  164. package/dist/notifications/session-registry.js +2 -2
  165. package/dist/notifications/session-registry.js.map +1 -1
  166. package/dist/notifications/temp-contract.d.ts +22 -0
  167. package/dist/notifications/temp-contract.d.ts.map +1 -0
  168. package/dist/notifications/temp-contract.js +147 -0
  169. package/dist/notifications/temp-contract.js.map +1 -0
  170. package/dist/notifications/tmux.js +2 -2
  171. package/dist/notifications/tmux.js.map +1 -1
  172. package/dist/notifications/types.d.ts +18 -0
  173. package/dist/notifications/types.d.ts.map +1 -1
  174. package/dist/openclaw/__tests__/config.test.js +81 -0
  175. package/dist/openclaw/__tests__/config.test.js.map +1 -1
  176. package/dist/openclaw/__tests__/dispatcher.test.js +40 -1
  177. package/dist/openclaw/__tests__/dispatcher.test.js.map +1 -1
  178. package/dist/openclaw/config.d.ts +4 -0
  179. package/dist/openclaw/config.d.ts.map +1 -1
  180. package/dist/openclaw/config.js +110 -16
  181. package/dist/openclaw/config.js.map +1 -1
  182. package/dist/openclaw/dispatcher.d.ts +9 -3
  183. package/dist/openclaw/dispatcher.d.ts.map +1 -1
  184. package/dist/openclaw/dispatcher.js +42 -9
  185. package/dist/openclaw/dispatcher.js.map +1 -1
  186. package/dist/openclaw/types.d.ts +5 -1
  187. package/dist/openclaw/types.d.ts.map +1 -1
  188. package/dist/ralph/__tests__/persistence.test.js +28 -1
  189. package/dist/ralph/__tests__/persistence.test.js.map +1 -1
  190. package/dist/ralph/persistence.d.ts +21 -0
  191. package/dist/ralph/persistence.d.ts.map +1 -1
  192. package/dist/ralph/persistence.js +85 -2
  193. package/dist/ralph/persistence.js.map +1 -1
  194. package/dist/state/paths.d.ts +3 -0
  195. package/dist/state/paths.d.ts.map +1 -0
  196. package/dist/state/paths.js +2 -0
  197. package/dist/state/paths.js.map +1 -0
  198. package/dist/team/__tests__/api-interop.test.d.ts +2 -0
  199. package/dist/team/__tests__/api-interop.test.d.ts.map +1 -0
  200. package/dist/team/__tests__/api-interop.test.js +1052 -0
  201. package/dist/team/__tests__/api-interop.test.js.map +1 -0
  202. package/dist/team/__tests__/idle-nudge.test.d.ts +2 -0
  203. package/dist/team/__tests__/idle-nudge.test.d.ts.map +1 -0
  204. package/dist/team/__tests__/idle-nudge.test.js +225 -0
  205. package/dist/team/__tests__/idle-nudge.test.js.map +1 -0
  206. package/dist/team/__tests__/mcp-comm.test.js +30 -0
  207. package/dist/team/__tests__/mcp-comm.test.js.map +1 -1
  208. package/dist/team/__tests__/runtime.test.js +33 -26
  209. package/dist/team/__tests__/runtime.test.js.map +1 -1
  210. package/dist/team/__tests__/state-root.test.d.ts +2 -0
  211. package/dist/team/__tests__/state-root.test.d.ts.map +1 -0
  212. package/dist/team/__tests__/state-root.test.js +9 -0
  213. package/dist/team/__tests__/state-root.test.js.map +1 -0
  214. package/dist/team/__tests__/state.test.js +52 -17
  215. package/dist/team/__tests__/state.test.js.map +1 -1
  216. package/dist/team/__tests__/team-ops-contract.test.d.ts +2 -0
  217. package/dist/team/__tests__/team-ops-contract.test.d.ts.map +1 -0
  218. package/dist/team/__tests__/team-ops-contract.test.js +90 -0
  219. package/dist/team/__tests__/team-ops-contract.test.js.map +1 -0
  220. package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts +2 -0
  221. package/dist/team/__tests__/tmux-claude-workers-demo.test.d.ts.map +1 -0
  222. package/dist/team/__tests__/tmux-claude-workers-demo.test.js +176 -0
  223. package/dist/team/__tests__/tmux-claude-workers-demo.test.js.map +1 -0
  224. package/dist/team/__tests__/tmux-session.test.js +8 -0
  225. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  226. package/dist/team/__tests__/worker-bootstrap.test.js +29 -0
  227. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  228. package/dist/team/__tests__/worktree.test.js +54 -1
  229. package/dist/team/__tests__/worktree.test.js.map +1 -1
  230. package/dist/team/api-interop.d.ts +19 -0
  231. package/dist/team/api-interop.d.ts.map +1 -0
  232. package/dist/team/api-interop.js +578 -0
  233. package/dist/team/api-interop.js.map +1 -0
  234. package/dist/team/mcp-comm.d.ts.map +1 -1
  235. package/dist/team/mcp-comm.js +32 -2
  236. package/dist/team/mcp-comm.js.map +1 -1
  237. package/dist/team/orchestrator.d.ts +1 -10
  238. package/dist/team/orchestrator.d.ts.map +1 -1
  239. package/dist/team/orchestrator.js +8 -0
  240. package/dist/team/orchestrator.js.map +1 -1
  241. package/dist/team/runtime-cli.js +14 -8
  242. package/dist/team/runtime-cli.js.map +1 -1
  243. package/dist/team/runtime.d.ts +2 -1
  244. package/dist/team/runtime.d.ts.map +1 -1
  245. package/dist/team/runtime.js +103 -30
  246. package/dist/team/runtime.js.map +1 -1
  247. package/dist/team/scaling.d.ts.map +1 -1
  248. package/dist/team/scaling.js +33 -12
  249. package/dist/team/scaling.js.map +1 -1
  250. package/dist/team/state/approvals.d.ts +25 -0
  251. package/dist/team/state/approvals.d.ts.map +1 -0
  252. package/dist/team/state/approvals.js +31 -0
  253. package/dist/team/state/approvals.js.map +1 -0
  254. package/dist/team/state/config.d.ts +2 -0
  255. package/dist/team/state/config.d.ts.map +1 -0
  256. package/dist/team/state/config.js +2 -0
  257. package/dist/team/state/config.js.map +1 -0
  258. package/dist/team/state/dispatch-lock.d.ts +3 -0
  259. package/dist/team/state/dispatch-lock.d.ts.map +1 -0
  260. package/dist/team/state/dispatch-lock.js +81 -0
  261. package/dist/team/state/dispatch-lock.js.map +1 -0
  262. package/dist/team/state/dispatch.d.ts +61 -0
  263. package/dist/team/state/dispatch.d.ts.map +1 -0
  264. package/dist/team/state/dispatch.js +158 -0
  265. package/dist/team/state/dispatch.js.map +1 -0
  266. package/dist/team/state/events.d.ts +2 -0
  267. package/dist/team/state/events.d.ts.map +1 -0
  268. package/dist/team/state/events.js +2 -0
  269. package/dist/team/state/events.js.map +1 -0
  270. package/dist/team/state/index.d.ts +11 -0
  271. package/dist/team/state/index.d.ts.map +1 -0
  272. package/dist/team/state/index.js +11 -0
  273. package/dist/team/state/index.js.map +1 -0
  274. package/dist/team/state/io.d.ts +2 -0
  275. package/dist/team/state/io.d.ts.map +1 -0
  276. package/dist/team/state/io.js +2 -0
  277. package/dist/team/state/io.js.map +1 -0
  278. package/dist/team/state/locks.d.ts +16 -0
  279. package/dist/team/state/locks.d.ts.map +1 -0
  280. package/dist/team/state/locks.js +201 -0
  281. package/dist/team/state/locks.js.map +1 -0
  282. package/dist/team/state/mailbox.d.ts +39 -0
  283. package/dist/team/state/mailbox.d.ts.map +1 -0
  284. package/dist/team/state/mailbox.js +58 -0
  285. package/dist/team/state/mailbox.js.map +1 -0
  286. package/dist/team/state/monitor.d.ts +96 -0
  287. package/dist/team/state/monitor.d.ts.map +1 -0
  288. package/dist/team/state/monitor.js +163 -0
  289. package/dist/team/state/monitor.js.map +1 -0
  290. package/dist/team/state/shutdown.d.ts +2 -0
  291. package/dist/team/state/shutdown.d.ts.map +1 -0
  292. package/dist/team/state/shutdown.js +2 -0
  293. package/dist/team/state/shutdown.js.map +1 -0
  294. package/dist/team/state/summary.d.ts +2 -0
  295. package/dist/team/state/summary.d.ts.map +1 -0
  296. package/dist/team/state/summary.js +2 -0
  297. package/dist/team/state/summary.js.map +1 -0
  298. package/dist/team/state/tasks.d.ts +49 -0
  299. package/dist/team/state/tasks.d.ts.map +1 -0
  300. package/dist/team/state/tasks.js +182 -0
  301. package/dist/team/state/tasks.js.map +1 -0
  302. package/dist/team/state/types.d.ts +281 -0
  303. package/dist/team/state/types.d.ts.map +1 -0
  304. package/dist/team/state/types.js +3 -0
  305. package/dist/team/state/types.js.map +1 -0
  306. package/dist/team/state/workers.d.ts +2 -0
  307. package/dist/team/state/workers.d.ts.map +1 -0
  308. package/dist/team/state/workers.js +2 -0
  309. package/dist/team/state/workers.js.map +1 -0
  310. package/dist/team/state-root.d.ts +5 -0
  311. package/dist/team/state-root.d.ts.map +1 -0
  312. package/dist/team/state-root.js +8 -0
  313. package/dist/team/state-root.js.map +1 -0
  314. package/dist/team/state.d.ts +4 -1
  315. package/dist/team/state.d.ts.map +1 -1
  316. package/dist/team/state.js +200 -881
  317. package/dist/team/state.js.map +1 -1
  318. package/dist/team/tmux-session.d.ts.map +1 -1
  319. package/dist/team/tmux-session.js +11 -10
  320. package/dist/team/tmux-session.js.map +1 -1
  321. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  322. package/dist/team/worker-bootstrap.js +58 -26
  323. package/dist/team/worker-bootstrap.js.map +1 -1
  324. package/dist/team/worktree.d.ts.map +1 -1
  325. package/dist/team/worktree.js +43 -1
  326. package/dist/team/worktree.js.map +1 -1
  327. package/dist/utils/safe-json.d.ts +3 -0
  328. package/dist/utils/safe-json.d.ts.map +1 -0
  329. package/dist/utils/safe-json.js +19 -0
  330. package/dist/utils/safe-json.js.map +1 -0
  331. package/dist/utils/sleep.d.ts +3 -0
  332. package/dist/utils/sleep.d.ts.map +1 -0
  333. package/dist/utils/sleep.js +15 -0
  334. package/dist/utils/sleep.js.map +1 -0
  335. package/dist/visual/__tests__/verdict.test.d.ts +2 -0
  336. package/dist/visual/__tests__/verdict.test.d.ts.map +1 -0
  337. package/dist/visual/__tests__/verdict.test.js +81 -0
  338. package/dist/visual/__tests__/verdict.test.js.map +1 -0
  339. package/dist/visual/constants.d.ts +4 -0
  340. package/dist/visual/constants.d.ts.map +1 -0
  341. package/dist/visual/constants.js +3 -0
  342. package/dist/visual/constants.js.map +1 -0
  343. package/dist/visual/verdict.d.ts +17 -0
  344. package/dist/visual/verdict.d.ts.map +1 -0
  345. package/dist/visual/verdict.js +61 -0
  346. package/dist/visual/verdict.js.map +1 -0
  347. package/package.json +10 -3
  348. package/scripts/ask-claude.sh +17 -0
  349. package/scripts/ask-gemini.sh +14 -0
  350. package/scripts/demo-claude-workers.sh +241 -0
  351. package/scripts/demo-team-e2e.sh +179 -0
  352. package/scripts/fixtures/ask-advisor-stub.js +12 -0
  353. package/scripts/notify-hook/team-dispatch.js +234 -12
  354. package/scripts/notify-hook/team-leader-nudge.js +42 -2
  355. package/scripts/notify-hook/team-worker.js +63 -4
  356. package/scripts/notify-hook/visual-verdict.js +50 -1
  357. package/scripts/notify-hook.js +1 -0
  358. package/scripts/run-provider-advisor.js +179 -0
  359. package/skills/ask-claude/SKILL.md +61 -0
  360. package/skills/ask-gemini/SKILL.md +61 -0
  361. package/skills/autopilot/SKILL.md +32 -2
  362. package/skills/configure-notifications/SKILL.md +188 -186
  363. package/skills/deep-interview/SKILL.md +247 -0
  364. package/skills/omx-setup/SKILL.md +1 -1
  365. package/skills/ralph/SKILL.md +42 -11
  366. package/skills/ralplan/SKILL.md +17 -0
  367. package/skills/team/SKILL.md +64 -5
  368. package/skills/visual-verdict/SKILL.md +76 -0
  369. package/skills/web-clone/SKILL.md +366 -0
  370. package/skills/worker/SKILL.md +42 -11
  371. package/templates/AGENTS.md +9 -0
  372. package/templates/catalog-manifest.json +39 -18
  373. package/skills/configure-discord/SKILL.md +0 -256
  374. package/skills/configure-openclaw/SKILL.md +0 -267
  375. package/skills/configure-slack/SKILL.md +0 -226
  376. package/skills/configure-telegram/SKILL.md +0 -232
@@ -0,0 +1,247 @@
1
+ ---
2
+ name: deep-interview
3
+ description: Socratic deep interview with mathematical ambiguity gating before execution
4
+ argument-hint: "<idea or vague description>"
5
+ ---
6
+
7
+ <Purpose>
8
+ Deep Interview implements an Ouroboros-inspired Socratic clarification loop before planning or implementation. It turns vague ideas into explicit specifications by asking targeted questions, scoring ambiguity across weighted dimensions, and gating execution until clarity reaches a configurable threshold.
9
+ </Purpose>
10
+
11
+ <Use_When>
12
+ - The request is broad, ambiguous, or missing concrete acceptance criteria
13
+ - The user says "deep interview", "interview me", "ask me everything", "don't assume", or "ouroboros"
14
+ - The user wants to avoid misaligned implementation from underspecified requirements
15
+ - You need a requirements artifact before handing off to `ralplan`, `autopilot`, `ralph`, or `team`
16
+ </Use_When>
17
+
18
+ <Do_Not_Use_When>
19
+ - The request already has concrete file/symbol targets and clear acceptance criteria
20
+ - The user explicitly asks to skip planning/interview and execute immediately
21
+ - The user asks for lightweight brainstorming only (use `plan` instead)
22
+ - A complete PRD/plan already exists and execution should start
23
+ </Do_Not_Use_When>
24
+
25
+ <Why_This_Exists>
26
+ Execution quality is usually bottlenecked by requirement clarity. A single expansion pass often misses hidden assumptions. This workflow applies Socratic pressure + quantitative ambiguity scoring so orchestration modes begin with an explicit, testable spec.
27
+
28
+ Inspired by Ouroboros (https://github.com/Q00/ouroboros) and adapted for OMX conventions.
29
+ </Why_This_Exists>
30
+
31
+ <Depth_Profiles>
32
+ - **Quick (`--quick`)**: fast pre-PRD pass; target threshold `<= 0.30`; max rounds 5
33
+ - **Standard (`--standard`, default)**: full requirement interview; target threshold `<= 0.20`; max rounds 12
34
+ - **Deep (`--deep`)**: high-rigor exploration; target threshold `<= 0.15`; max rounds 20
35
+
36
+ If no flag is provided, use **Standard**.
37
+ </Depth_Profiles>
38
+
39
+ <Execution_Policy>
40
+ - Ask ONE question per round (never batch)
41
+ - Target the weakest clarity dimension each round
42
+ - Gather codebase facts via `explore` before asking user about internals
43
+ - Always run a preflight context intake before the first interview question
44
+ - In Codex CLI, prefer `request_user_input` when available; if unavailable, fall back to concise plain-text one-question turns
45
+ - Re-score ambiguity after each answer and show progress transparently
46
+ - Do not hand off to execution while ambiguity remains above threshold unless user explicitly opts to proceed with warning
47
+ - Persist mode state for resume safety (`state_write` / `state_read`)
48
+ </Execution_Policy>
49
+
50
+ <Steps>
51
+
52
+ ## Phase 0: Preflight Context Intake
53
+
54
+ 1. Parse `{{ARGUMENTS}}` and derive a short task slug.
55
+ 2. Attempt to load the latest relevant context snapshot from `.omx/context/{slug}-*.md`.
56
+ 3. If no snapshot exists, create a minimum context snapshot with:
57
+ - Task statement
58
+ - Desired outcome
59
+ - Known facts/evidence
60
+ - Constraints
61
+ - Unknowns/open questions
62
+ - Likely codebase touchpoints
63
+ 4. Save snapshot to `.omx/context/{slug}-{timestamp}.md` (UTC `YYYYMMDDTHHMMSSZ`) and reference it in mode state.
64
+
65
+ ## Phase 1: Initialize
66
+
67
+ 1. Parse `{{ARGUMENTS}}` and depth profile (`--quick|--standard|--deep`).
68
+ 2. Detect project context:
69
+ - Run `explore` to classify **brownfield** (existing codebase target) vs **greenfield**.
70
+ - For brownfield, collect relevant codebase context before questioning.
71
+ 3. Initialize state via `state_write(mode="deep-interview")`:
72
+
73
+ ```json
74
+ {
75
+ "active": true,
76
+ "current_phase": "deep-interview",
77
+ "state": {
78
+ "interview_id": "<uuid>",
79
+ "profile": "quick|standard|deep",
80
+ "type": "greenfield|brownfield",
81
+ "initial_idea": "<user input>",
82
+ "rounds": [],
83
+ "current_ambiguity": 1.0,
84
+ "threshold": 0.3,
85
+ "max_rounds": 5,
86
+ "challenge_modes_used": [],
87
+ "codebase_context": null,
88
+ "context_snapshot_path": ".omx/context/<slug>-<timestamp>.md"
89
+ }
90
+ }
91
+ ```
92
+
93
+ 4. Announce kickoff with profile, threshold, and current ambiguity.
94
+
95
+ ## Phase 2: Socratic Interview Loop
96
+
97
+ Repeat until ambiguity `<= threshold`, user exits with warning, or max rounds reached.
98
+
99
+ ### 2a) Generate next question
100
+ Use:
101
+ - Original idea
102
+ - Prior Q&A rounds
103
+ - Current dimension scores
104
+ - Brownfield context (if any)
105
+ - Activated challenge mode injection (Phase 3)
106
+
107
+ Target the lowest-scoring dimension:
108
+ - Goal Clarity
109
+ - Constraint Clarity
110
+ - Success Criteria Clarity
111
+ - Context Clarity (brownfield only)
112
+
113
+ ### 2b) Ask the question
114
+ Use structured user-input tooling available in the runtime (`AskUserQuestion` / equivalent) and present:
115
+
116
+ ```
117
+ Round {n} | Target: {weakest_dimension} | Ambiguity: {score}%
118
+
119
+ {question}
120
+ ```
121
+
122
+ ### 2c) Score ambiguity
123
+ Score each dimension in `[0.0, 1.0]` with justification + gap.
124
+
125
+ Greenfield: `ambiguity = 1 - (goal × 0.40 + constraints × 0.30 + criteria × 0.30)`
126
+
127
+ Brownfield: `ambiguity = 1 - (goal × 0.35 + constraints × 0.25 + criteria × 0.25 + context × 0.15)`
128
+
129
+ ### 2d) Report progress
130
+ Show weighted breakdown table and next focus dimension.
131
+
132
+ ### 2e) Persist state
133
+ Append round result and updated scores via `state_write`.
134
+
135
+ ### 2f) Round controls
136
+ - Round 3+: allow explicit early exit with risk warning
137
+ - Soft warning at profile midpoint (e.g., round 3/6/10 depending on profile)
138
+ - Hard cap at profile `max_rounds`
139
+
140
+ ## Phase 3: Challenge Modes (assumption stress tests)
141
+
142
+ Use each mode once when applicable:
143
+
144
+ - **Contrarian** (round 4+): challenge core assumptions
145
+ - **Simplifier** (round 6+): probe minimal viable scope
146
+ - **Ontologist** (round 8+ and ambiguity > 0.30): ask for essence-level reframing
147
+
148
+ Track used modes in state to prevent repetition.
149
+
150
+ ## Phase 4: Crystallize Artifacts
151
+
152
+ When threshold is met (or user exits with warning / hard cap):
153
+
154
+ 1. Write interview transcript summary to:
155
+ - `.omx/interviews/{slug}-{timestamp}.md`
156
+ (kept for ralph PRD compatibility)
157
+ 2. Write execution-ready spec to:
158
+ - `.omx/specs/deep-interview-{slug}.md`
159
+
160
+ Spec should include:
161
+ - Metadata (profile, rounds, final ambiguity, threshold, context type)
162
+ - Context snapshot reference/path (for ralplan/team reuse)
163
+ - Clarity breakdown table
164
+ - Goal / Constraints / Non-goals
165
+ - Testable acceptance criteria
166
+ - Assumptions exposed + resolutions
167
+ - Technical context findings
168
+ - Full or condensed transcript
169
+
170
+ ## Phase 5: Execution Bridge
171
+
172
+ Present execution options after artifact generation:
173
+
174
+ 1. **`$ralplan` (Recommended)**
175
+ - Run consensus refinement on the spec:
176
+ - `$plan --consensus --direct <spec-path>`
177
+ 2. **`$autopilot`**
178
+ - Use spec as high-clarity execution input
179
+ 3. **`$ralph`**
180
+ - Sequential persistence loop using spec/criteria
181
+ 4. **`$team`**
182
+ - Parallel coordinated execution using shared spec
183
+ 5. **Refine further**
184
+ - Continue interview loop for lower ambiguity
185
+
186
+ **IMPORTANT:** Deep-interview is a requirements mode. On handoff, invoke the selected skill. **Do NOT implement directly** inside deep-interview.
187
+
188
+ </Steps>
189
+
190
+ <Tool_Usage>
191
+ - Use `explore` for codebase fact gathering
192
+ - Use `request_user_input` / structured user-input tool for each interview round when available
193
+ - If structured question tools are unavailable, use plain-text single-question rounds and keep the same stage order
194
+ - Use `state_write` / `state_read` for resumable mode state
195
+ - Read/write context snapshots under `.omx/context/`
196
+ - Save transcript/spec artifacts under `.omx/interviews/` and `.omx/specs/`
197
+ </Tool_Usage>
198
+
199
+ <Escalation_And_Stop_Conditions>
200
+ - User says stop/cancel/abort -> persist state and stop
201
+ - Ambiguity stalls for 3 rounds (+/- 0.05) -> force Ontologist mode once
202
+ - Max rounds reached -> proceed with explicit residual-risk warning
203
+ - All dimensions >= 0.9 -> allow early crystallization even before max rounds
204
+ </Escalation_And_Stop_Conditions>
205
+
206
+ <Final_Checklist>
207
+ - [ ] Preflight context snapshot exists under `.omx/context/{slug}-{timestamp}.md`
208
+ - [ ] Ambiguity score shown each round
209
+ - [ ] Weakest-dimension targeting used
210
+ - [ ] Challenge modes triggered at thresholds (when applicable)
211
+ - [ ] Transcript written to `.omx/interviews/{slug}-{timestamp}.md`
212
+ - [ ] Spec written to `.omx/specs/deep-interview-{slug}.md`
213
+ - [ ] Handoff options provided (`$ralplan`, `$autopilot`, `$ralph`, `$team`)
214
+ - [ ] No direct implementation performed in this mode
215
+ </Final_Checklist>
216
+
217
+ <Advanced>
218
+ ## Suggested Config (optional)
219
+
220
+ ```toml
221
+ [omx.deepInterview]
222
+ defaultProfile = "standard"
223
+ quickThreshold = 0.30
224
+ standardThreshold = 0.20
225
+ deepThreshold = 0.15
226
+ quickMaxRounds = 5
227
+ standardMaxRounds = 12
228
+ deepMaxRounds = 20
229
+ enableChallengeModes = true
230
+ ```
231
+
232
+ ## Resume
233
+
234
+ If interrupted, rerun `$deep-interview`. Resume from persisted mode state via `state_read(mode="deep-interview")`.
235
+
236
+ ## Recommended 3-Stage Pipeline
237
+
238
+ ```
239
+ deep-interview -> ralplan -> autopilot
240
+ ```
241
+
242
+ - Stage 1 (deep-interview): clarity gate
243
+ - Stage 2 (ralplan): feasibility + architecture gate
244
+ - Stage 3 (autopilot): execution + QA + validation gate
245
+ </Advanced>
246
+
247
+ Task: {{ARGUMENTS}}
@@ -30,7 +30,7 @@ Supported setup flags (current implementation):
30
30
  - else default `user` (safe for CI/tests)
31
31
  2. Create directories and persist effective scope
32
32
  3. Install prompts, native agent configs, skills, and merge config.toml (scope determines target directories)
33
- 4. Verify required team MCP comm tool exports exist in built `dist/mcp/state-server.js`
33
+ 4. Verify Team CLI API interop markers exist in built `dist/cli/team.js`
34
34
  5. Generate project-root `./AGENTS.md` from `templates/AGENTS.md` (or skip when existing and no force)
35
35
  6. Configure notify hook references and write `./.omx/hud-config.json`
36
36
 
@@ -38,6 +38,18 @@ Complex tasks often fail silently: partial implementations get declared "done",
38
38
  </Execution_Policy>
39
39
 
40
40
  <Steps>
41
+ 0. **Pre-context intake (required before planning/execution loop starts)**:
42
+ - Assemble or load a context snapshot at `.omx/context/{task-slug}-{timestamp}.md` (UTC `YYYYMMDDTHHMMSSZ`).
43
+ - Minimum snapshot fields:
44
+ - task statement
45
+ - desired outcome
46
+ - known facts/evidence
47
+ - constraints
48
+ - unknowns/open questions
49
+ - likely codebase touchpoints
50
+ - If an existing relevant snapshot is available, reuse it and record the path in Ralph state.
51
+ - If request ambiguity is high, run `explore` first for brownfield facts, then run `$deep-interview --quick <task>` to close critical gaps.
52
+ - Do not begin Ralph execution work (delegation, implementation, or verification loops) until snapshot grounding exists. If forced to proceed quickly, note explicit risk tradeoffs.
41
53
  1. **Review progress**: Check TODO list and any prior iteration state
42
54
  2. **Continue from where you left off**: Pick up incomplete tasks
43
55
  3. **Delegate in parallel**: Route tasks to specialist agents at appropriate tiers
@@ -45,18 +57,24 @@ Complex tasks often fail silently: partial implementations get declared "done",
45
57
  - Standard work: MEDIUM tier (Sonnet) -- "Add error handling to this module"
46
58
  - Complex analysis: HIGH tier (Opus) -- "Debug this race condition"
47
59
  4. **Run long operations in background**: Builds, installs, test suites use `run_in_background: true`
48
- 5. **Verify completion with fresh evidence**:
60
+ 5. **Visual task gate (when screenshot/reference images are present)**:
61
+ - Run `$visual-verdict` **before every next edit**.
62
+ - Require structured JSON output: `score`, `verdict`, `category_match`, `differences[]`, `suggestions[]`, `reasoning`.
63
+ - Persist verdict to `.omx/state/{scope}/ralph-progress.json` including numeric + qualitative feedback.
64
+ - Default pass threshold: `score >= 90`.
65
+ - **URL-based cloning tasks**: When the task description contains a target URL (e.g., "clone https://example.com"), invoke `$web-clone` instead of `$visual-verdict`. The web-clone skill handles the full extraction → generation → verification pipeline and uses `$visual-verdict` internally for visual scoring.
66
+ 6. **Verify completion with fresh evidence**:
49
67
  a. Identify what command proves the task is complete
50
68
  b. Run verification (test, build, lint)
51
69
  c. Read the output -- confirm it actually passed
52
70
  d. Check: zero pending/in_progress TODO items
53
- 6. **Architect verification** (tiered):
71
+ 7. **Architect verification** (tiered):
54
72
  - <5 files, <100 lines with full tests: STANDARD tier minimum (architect-medium / Sonnet)
55
73
  - Standard changes: STANDARD tier (architect-medium / Sonnet)
56
74
  - >20 files or security/architectural changes: THOROUGH tier (architect / Opus)
57
75
  - Ralph floor: always at least STANDARD, even for small changes
58
- 7. **On approval**: Run `/cancel` to cleanly exit and clean up all state files
59
- 8. **On rejection**: Fix the issues raised, then re-verify at the same tier
76
+ 8. **On approval**: Run `/cancel` to cleanly exit and clean up all state files
77
+ 9. **On rejection**: Fix the issues raised, then re-verify at the same tier
60
78
  </Steps>
61
79
 
62
80
  <Tool_Usage>
@@ -65,6 +83,7 @@ Complex tasks often fail silently: partial implementations get declared "done",
65
83
  - Skip Codex consultation for simple feature additions, well-tested changes, or time-critical verification
66
84
  - If ToolSearch finds no MCP tools or Codex is unavailable, proceed with architect agent verification alone -- never block on external tools
67
85
  - Use `state_write` / `state_read` for ralph mode state persistence between iterations
86
+ - Persist context snapshot path in Ralph mode state so later phases and agents share the same grounding context
68
87
  </Tool_Usage>
69
88
 
70
89
  ## State Management
@@ -72,7 +91,7 @@ Complex tasks often fail silently: partial implementations get declared "done",
72
91
  Use the `omx_state` MCP server tools (`state_write`, `state_read`, `state_clear`) for Ralph lifecycle state.
73
92
 
74
93
  - **On start**:
75
- `state_write({mode: "ralph", active: true, iteration: 1, max_iterations: 10, current_phase: "executing", started_at: "<now>"})`
94
+ `state_write({mode: "ralph", active: true, iteration: 1, max_iterations: 10, current_phase: "executing", started_at: "<now>", state: {context_snapshot_path: "<snapshot-path>"}})`
76
95
  - **On each iteration**:
77
96
  `state_write({mode: "ralph", iteration: <current>, current_phase: "executing"})`
78
97
  - **On verification/fix transition**:
@@ -148,12 +167,24 @@ When the user provides the `--prd` flag, initialize a Product Requirements Docum
148
167
  ### Detecting PRD Mode
149
168
  Check if `{{PROMPT}}` contains `--prd` or `--PRD`.
150
169
 
170
+ ### Visual Reference Flags (Optional)
171
+ Ralph execution supports visual reference flags for screenshot tasks:
172
+ - Repeatable image inputs: `-i <image-path>` (can be used multiple times)
173
+ - Image directory input: `--images-dir <directory>`
174
+
175
+ Example:
176
+ `ralph -i refs/hn.png -i refs/hn-item.png --images-dir ./screenshots "match HackerNews layout"`
177
+
151
178
  ### PRD Workflow
152
- 1. Create canonical PRD/progress artifacts:
179
+ 1. Run deep-interview in quick mode before creating PRD artifacts:
180
+ - Execute: `$deep-interview --quick <task>`
181
+ - Complete a compact requirements pass (context, goals, scope, constraints, validation)
182
+ - Persist interview output to `.omx/interviews/{slug}-{timestamp}.md`
183
+ 2. Create canonical PRD/progress artifacts:
153
184
  - PRD: `.omx/plans/prd-{slug}.md`
154
185
  - Progress ledger: `.omx/state/{scope}/ralph-progress.json` (session scope when available, else root scope)
155
- 2. Parse the task (everything after `--prd` flag)
156
- 3. Break down into user stories:
186
+ 3. Parse the task (everything after `--prd` flag)
187
+ 4. Break down into user stories:
157
188
 
158
189
  ```json
159
190
  {
@@ -173,9 +204,9 @@ Check if `{{PROMPT}}` contains `--prd` or `--PRD`.
173
204
  }
174
205
  ```
175
206
 
176
- 4. Initialize canonical progress ledger at `.omx/state/{scope}/ralph-progress.json`
177
- 5. Guidelines: right-sized stories (one session each), verifiable criteria, independent stories, priority order (foundational work first)
178
- 6. Proceed to normal ralph loop using user stories as the task list
207
+ 5. Initialize canonical progress ledger at `.omx/state/{scope}/ralph-progress.json`
208
+ 6. Guidelines: right-sized stories (one session each), verifiable criteria, independent stories, priority order (foundational work first)
209
+ 7. Proceed to normal ralph loop using user stories as the task list
179
210
 
180
211
  ### Example
181
212
  User input: `--prd build a todo app with React and TypeScript`
@@ -58,6 +58,23 @@ The consensus workflow:
58
58
 
59
59
  Follow the Plan skill's full documentation for consensus mode details.
60
60
 
61
+ ## Pre-context Intake
62
+
63
+ Before consensus planning or execution handoff, ensure a grounded context snapshot exists:
64
+
65
+ 1. Derive a task slug from the request.
66
+ 2. Reuse the latest relevant snapshot in `.omx/context/{slug}-*.md` when available.
67
+ 3. If none exists, create `.omx/context/{slug}-{timestamp}.md` (UTC `YYYYMMDDTHHMMSSZ`) with:
68
+ - task statement
69
+ - desired outcome
70
+ - known facts/evidence
71
+ - constraints
72
+ - unknowns/open questions
73
+ - likely codebase touchpoints
74
+ 4. If ambiguity remains high, run `explore` first for brownfield facts, then run `$deep-interview --quick <task>` before continuing.
75
+
76
+ Do not hand off to execution modes until this intake is complete; if urgency forces progress, explicitly document the risk tradeoffs.
77
+
61
78
  ## Pre-Execution Gate
62
79
 
63
80
  ### Why the Gate Exists
@@ -5,7 +5,7 @@ description: N coordinated agents on shared task list using tmux-based orchestra
5
5
 
6
6
  # Team Skill
7
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 MCP team tools.
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
9
 
10
10
  This skill is operationally sensitive. Treat it as an operator workflow, not a generic prompt pattern.
11
11
 
@@ -70,6 +70,23 @@ tmux list-panes -F '#{pane_id}\t#{pane_start_command}' | rg 'hud --watch' || tru
70
70
 
71
71
  If duplicates exist, remove extras before `omx team` to prevent HUD ending up in worker stack.
72
72
 
73
+ ## Pre-context Intake Gate
74
+
75
+ Before launching `omx team`, require a grounded context snapshot:
76
+
77
+ 1. Derive a task slug from the request.
78
+ 2. Reuse the latest relevant snapshot in `.omx/context/{slug}-*.md` when available.
79
+ 3. If none exists, create `.omx/context/{slug}-{timestamp}.md` (UTC `YYYYMMDDTHHMMSSZ`) with:
80
+ - task statement
81
+ - desired outcome
82
+ - known facts/evidence
83
+ - constraints
84
+ - unknowns/open questions
85
+ - likely codebase touchpoints
86
+ 4. If ambiguity remains high, run `explore` first for brownfield facts, then run `$deep-interview --quick <task>` before team launch.
87
+
88
+ Do not start worker panes until this gate is satisfied; if forced to proceed quickly, state explicit scope/risk limitations in the launch report.
89
+
73
90
  ## Current Runtime Behavior (As Implemented)
74
91
 
75
92
  `omx team` currently performs:
@@ -149,6 +166,23 @@ Follow this exact lifecycle when running `$team`:
149
166
  Do not run `shutdown` while workers are actively writing updates unless user explicitly requested abort/cancel.
150
167
  Do not treat ad-hoc pane typing as primary control flow when runtime/state evidence is available.
151
168
 
169
+ ## Message Dispatch Policy (CLI-first, state-first)
170
+
171
+ To avoid brittle behavior, **message/task delivery must not be driven by ad-hoc tmux typing**.
172
+
173
+ Required default path:
174
+
175
+ 1. Use `omx team ...` runtime lifecycle commands for orchestration.
176
+ 2. Use `omx team api ... --json` for mailbox/task mutations.
177
+ 3. Verify delivery via mailbox/state evidence (`mailbox/*.json`, task status, `omx team status`).
178
+
179
+ Strict rules:
180
+
181
+ - **MUST NOT** use direct `tmux send-keys` as the primary mechanism to deliver instructions/messages.
182
+ - **MUST NOT** spam Enter/trigger keys without first checking runtime/state evidence.
183
+ - **MUST** prefer durable state writes + runtime dispatch (`dispatch/requests.json`, mailbox, inbox).
184
+ - 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”).
185
+
152
186
  ## Operational Commands
153
187
 
154
188
  ```bash
@@ -189,6 +223,31 @@ Semantics:
189
223
  - `.omx/state/team/<team>/workers/worker-<n>/status.json`
190
224
  - `.omx/state/team-leader-nudge.json`
191
225
 
226
+
227
+ ## Team Mutation Interop (CLI-first)
228
+
229
+ Use `omx team api` for machine-readable mutation/reads instead of legacy `team_*` MCP tools.
230
+
231
+ ```bash
232
+ omx team api <operation> --input '{"team_name":"my-team",...}' --json
233
+ ```
234
+
235
+ Examples:
236
+
237
+ ```bash
238
+ omx team api send-message --input '{"team_name":"my-team","from_worker":"worker-1","to_worker":"leader-fixed","body":"ACK"}' --json
239
+ omx team api claim-task --input '{"team_name":"my-team","task_id":"1","worker":"worker-1"}' --json
240
+ omx team api transition-task-status --input '{"team_name":"my-team","task_id":"1","from":"in_progress","to":"completed","claim_token":"<token>"}' --json
241
+ ```
242
+
243
+ `--json` responses include stable metadata for automation:
244
+ - `schema_version`
245
+ - `timestamp`
246
+ - `command`
247
+ - `ok`
248
+ - `operation`
249
+ - `data` or `error`
250
+
192
251
  ## Team + Worker Protocol Notes
193
252
 
194
253
  Leader-to-worker:
@@ -198,8 +257,8 @@ Leader-to-worker:
198
257
 
199
258
  Worker-to-leader:
200
259
 
201
- - Send ACK to `leader-fixed` mailbox via `team_send_message`
202
- - Claim task via state API, execute, update task + status
260
+ - Send ACK to `leader-fixed` mailbox via `omx team api send-message --json`
261
+ - Claim/transition/release task lifecycle via `omx team api <operation> --json`
203
262
 
204
263
  Task ID rule (critical):
205
264
 
@@ -277,10 +336,10 @@ Checks:
277
336
 
278
337
  1. Worker pane capture shows inbox processing
279
338
  2. `.omx/state/team/<team>/mailbox/leader-fixed.json` exists
280
- 3. Worker skill loaded and `team_send_message` called
339
+ 3. Worker skill loaded and `omx team api send-message --json` called
281
340
  4. Task-id mismatch not blocking worker flow
282
341
 
283
- ### Worker logs `team_send_message ENOENT` / `team_update_task ENOENT`
342
+ ### Worker logs `omx team api ... ENOENT` (or legacy `team_send_message ENOENT` / `team_update_task ENOENT`)
284
343
 
285
344
  Meaning:
286
345
  - Team state path no longer exists while worker is still running.
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: visual-verdict
3
+ description: Structured visual QA verdict for screenshot-to-reference comparisons
4
+ ---
5
+
6
+ <Purpose>
7
+ Use this skill to compare generated UI screenshots against one or more reference images and return a strict JSON verdict that can drive the next edit iteration.
8
+ </Purpose>
9
+
10
+ <Use_When>
11
+ - The task includes visual fidelity requirements (layout, spacing, typography, component styling)
12
+ - You have a generated screenshot and at least one reference image
13
+ - You need deterministic pass/fail guidance before continuing edits
14
+ </Use_When>
15
+
16
+ <Inputs>
17
+ - `reference_images[]` (one or more image paths)
18
+ - `generated_screenshot` (current output image)
19
+ - Optional: `category_hint` (e.g., `hackernews`, `sns-feed`, `dashboard`)
20
+ </Inputs>
21
+
22
+ <Output_Contract>
23
+ Return **JSON only** with this exact shape:
24
+
25
+ ```json
26
+ {
27
+ "score": 0,
28
+ "verdict": "revise",
29
+ "category_match": false,
30
+ "differences": ["..."],
31
+ "suggestions": ["..."],
32
+ "reasoning": "short explanation"
33
+ }
34
+ ```
35
+
36
+ Rules:
37
+ - `score`: integer 0-100
38
+ - `verdict`: short status (`pass`, `revise`, or `fail`)
39
+ - `category_match`: `true` when the generated screenshot matches the intended UI category/style
40
+ - `differences[]`: concrete visual mismatches (layout, spacing, typography, colors, hierarchy)
41
+ - `suggestions[]`: actionable next edits tied to the differences
42
+ - `reasoning`: 1-2 sentence summary
43
+
44
+ <Threshold_And_Loop>
45
+ - Target pass threshold is **90+**.
46
+ - If `score < 90`, continue editing and rerun `$visual-verdict` before any further code edits in the next iteration.
47
+ - Persist the verdict in `.omx/state/{scope}/ralph-progress.json` with both:
48
+ - numeric signal (`score`, threshold pass/fail)
49
+ - qualitative signal (`reasoning`, `suggestions`, `next_actions`)
50
+ </Threshold_And_Loop>
51
+
52
+ <Debug_Visualization>
53
+ When mismatch diagnosis is hard:
54
+ 1. Keep `$visual-verdict` as the authoritative decision.
55
+ 2. Use pixel-level diff tooling (pixel diff / pixelmatch overlay) as a **secondary debug aid** to localize hotspots.
56
+ 3. Convert pixel diff hotspots into concrete `differences[]` and `suggestions[]` updates.
57
+ </Debug_Visualization>
58
+
59
+ <Example>
60
+ ```json
61
+ {
62
+ "score": 87,
63
+ "verdict": "revise",
64
+ "category_match": true,
65
+ "differences": [
66
+ "Top nav spacing is tighter than reference",
67
+ "Primary button uses smaller font weight"
68
+ ],
69
+ "suggestions": [
70
+ "Increase nav item horizontal padding by 4px",
71
+ "Set primary button font-weight to 600"
72
+ ],
73
+ "reasoning": "Core layout matches, but style details still diverge."
74
+ }
75
+ ```
76
+ </Example>