oh-my-codex 0.7.5 → 0.8.0

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 (374) hide show
  1. package/README.de.md +314 -0
  2. package/README.es.md +295 -17
  3. package/README.fr.md +314 -0
  4. package/README.it.md +314 -0
  5. package/README.ja.md +296 -18
  6. package/README.ko.md +295 -17
  7. package/README.md +68 -3
  8. package/README.pt.md +295 -17
  9. package/README.ru.md +295 -17
  10. package/README.tr.md +314 -0
  11. package/README.vi.md +296 -18
  12. package/README.zh.md +292 -17
  13. package/dist/catalog/__tests__/generator.test.js +2 -0
  14. package/dist/catalog/__tests__/generator.test.js.map +1 -1
  15. package/dist/catalog/__tests__/schema.test.js +7 -0
  16. package/dist/catalog/__tests__/schema.test.js.map +1 -1
  17. package/dist/cli/__tests__/ask.test.d.ts +2 -0
  18. package/dist/cli/__tests__/ask.test.d.ts.map +1 -0
  19. package/dist/cli/__tests__/ask.test.js +236 -0
  20. package/dist/cli/__tests__/ask.test.js.map +1 -0
  21. package/dist/cli/__tests__/doctor-warning-copy.test.d.ts +2 -0
  22. package/dist/cli/__tests__/doctor-warning-copy.test.d.ts.map +1 -0
  23. package/dist/cli/__tests__/doctor-warning-copy.test.js +45 -0
  24. package/dist/cli/__tests__/doctor-warning-copy.test.js.map +1 -0
  25. package/dist/cli/__tests__/index.test.js +43 -1
  26. package/dist/cli/__tests__/index.test.js.map +1 -1
  27. package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts +2 -0
  28. package/dist/cli/__tests__/ralph-prd-deep-interview.test.d.ts.map +1 -0
  29. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js +15 -0
  30. package/dist/cli/__tests__/ralph-prd-deep-interview.test.js.map +1 -0
  31. package/dist/cli/__tests__/ralph.test.d.ts +2 -0
  32. package/dist/cli/__tests__/ralph.test.d.ts.map +1 -0
  33. package/dist/cli/__tests__/ralph.test.js +40 -0
  34. package/dist/cli/__tests__/ralph.test.js.map +1 -0
  35. package/dist/cli/__tests__/setup-scope.test.js +2 -0
  36. package/dist/cli/__tests__/setup-scope.test.js.map +1 -1
  37. package/dist/cli/__tests__/team-decompose.test.d.ts +2 -0
  38. package/dist/cli/__tests__/team-decompose.test.d.ts.map +1 -0
  39. package/dist/cli/__tests__/team-decompose.test.js +67 -0
  40. package/dist/cli/__tests__/team-decompose.test.js.map +1 -0
  41. package/dist/cli/__tests__/version.test.d.ts +2 -0
  42. package/dist/cli/__tests__/version.test.d.ts.map +1 -0
  43. package/dist/cli/__tests__/version.test.js +21 -0
  44. package/dist/cli/__tests__/version.test.js.map +1 -0
  45. package/dist/cli/ask.d.ts +13 -0
  46. package/dist/cli/ask.d.ts.map +1 -0
  47. package/dist/cli/ask.js +174 -0
  48. package/dist/cli/ask.js.map +1 -0
  49. package/dist/cli/constants.d.ts +10 -0
  50. package/dist/cli/constants.d.ts.map +1 -0
  51. package/dist/cli/constants.js +10 -0
  52. package/dist/cli/constants.js.map +1 -0
  53. package/dist/cli/doctor.js +16 -5
  54. package/dist/cli/doctor.js.map +1 -1
  55. package/dist/cli/index.d.ts +7 -1
  56. package/dist/cli/index.d.ts.map +1 -1
  57. package/dist/cli/index.js +117 -43
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/cli/ralph.d.ts +4 -0
  60. package/dist/cli/ralph.d.ts.map +1 -1
  61. package/dist/cli/ralph.js +89 -13
  62. package/dist/cli/ralph.js.map +1 -1
  63. package/dist/cli/setup.js +1 -1
  64. package/dist/cli/setup.js.map +1 -1
  65. package/dist/cli/team.d.ts +18 -0
  66. package/dist/cli/team.d.ts.map +1 -1
  67. package/dist/cli/team.js +108 -16
  68. package/dist/cli/team.js.map +1 -1
  69. package/dist/config/generator.d.ts.map +1 -1
  70. package/dist/config/generator.js +8 -0
  71. package/dist/config/generator.js.map +1 -1
  72. package/dist/hooks/__tests__/deep-interview-contract.test.d.ts +2 -0
  73. package/dist/hooks/__tests__/deep-interview-contract.test.d.ts.map +1 -0
  74. package/dist/hooks/__tests__/deep-interview-contract.test.js +55 -0
  75. package/dist/hooks/__tests__/deep-interview-contract.test.js.map +1 -0
  76. package/dist/hooks/__tests__/emulator.test.js +6 -0
  77. package/dist/hooks/__tests__/emulator.test.js.map +1 -1
  78. package/dist/hooks/__tests__/keyword-detector.test.js +44 -22
  79. package/dist/hooks/__tests__/keyword-detector.test.js.map +1 -1
  80. package/dist/hooks/__tests__/notify-hook-session-scope.test.js +59 -0
  81. package/dist/hooks/__tests__/notify-hook-session-scope.test.js.map +1 -1
  82. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js +88 -0
  83. package/dist/hooks/__tests__/notify-hook-team-dispatch.test.js.map +1 -1
  84. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js +199 -0
  85. package/dist/hooks/__tests__/notify-hook-tmux-heal.test.js.map +1 -1
  86. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts +11 -0
  87. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.d.ts.map +1 -0
  88. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js +266 -0
  89. package/dist/hooks/__tests__/notify-hook-visual-verdict.test.js.map +1 -0
  90. package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts +2 -0
  91. package/dist/hooks/__tests__/openclaw-setup-contract.test.d.ts.map +1 -0
  92. package/dist/hooks/__tests__/openclaw-setup-contract.test.js +51 -0
  93. package/dist/hooks/__tests__/openclaw-setup-contract.test.js.map +1 -0
  94. package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts +2 -0
  95. package/dist/hooks/__tests__/pre-context-gate-skills.test.d.ts.map +1 -0
  96. package/dist/hooks/__tests__/pre-context-gate-skills.test.js +34 -0
  97. package/dist/hooks/__tests__/pre-context-gate-skills.test.js.map +1 -0
  98. package/dist/hooks/__tests__/tmux-hook-engine.test.js +36 -1
  99. package/dist/hooks/__tests__/tmux-hook-engine.test.js.map +1 -1
  100. package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts +2 -0
  101. package/dist/hooks/__tests__/visual-verdict-loop.test.d.ts.map +1 -0
  102. package/dist/hooks/__tests__/visual-verdict-loop.test.js +35 -0
  103. package/dist/hooks/__tests__/visual-verdict-loop.test.js.map +1 -0
  104. package/dist/hooks/agents-overlay.d.ts.map +1 -1
  105. package/dist/hooks/agents-overlay.js +18 -16
  106. package/dist/hooks/agents-overlay.js.map +1 -1
  107. package/dist/hooks/codebase-map.d.ts.map +1 -1
  108. package/dist/hooks/codebase-map.js +6 -2
  109. package/dist/hooks/codebase-map.js.map +1 -1
  110. package/dist/hooks/emulator.d.ts.map +1 -1
  111. package/dist/hooks/emulator.js +2 -0
  112. package/dist/hooks/emulator.js.map +1 -1
  113. package/dist/hooks/extensibility/sdk.d.ts.map +1 -1
  114. package/dist/hooks/extensibility/sdk.js +2 -1
  115. package/dist/hooks/extensibility/sdk.js.map +1 -1
  116. package/dist/hooks/keyword-registry.d.ts.map +1 -1
  117. package/dist/hooks/keyword-registry.js +6 -0
  118. package/dist/hooks/keyword-registry.js.map +1 -1
  119. package/dist/hud/index.d.ts.map +1 -1
  120. package/dist/hud/index.js +2 -24
  121. package/dist/hud/index.js.map +1 -1
  122. package/dist/mcp/__tests__/team-server-cleanup.test.d.ts +2 -0
  123. package/dist/mcp/__tests__/team-server-cleanup.test.d.ts.map +1 -0
  124. package/dist/mcp/__tests__/team-server-cleanup.test.js +219 -0
  125. package/dist/mcp/__tests__/team-server-cleanup.test.js.map +1 -0
  126. package/dist/mcp/bootstrap.d.ts +1 -1
  127. package/dist/mcp/bootstrap.d.ts.map +1 -1
  128. package/dist/mcp/bootstrap.js +1 -0
  129. package/dist/mcp/bootstrap.js.map +1 -1
  130. package/dist/mcp/code-intel-server.d.ts.map +1 -1
  131. package/dist/mcp/code-intel-server.js +18 -8
  132. package/dist/mcp/code-intel-server.js.map +1 -1
  133. package/dist/mcp/memory-server.js +72 -11
  134. package/dist/mcp/memory-server.js.map +1 -1
  135. package/dist/mcp/state-paths.d.ts.map +1 -1
  136. package/dist/mcp/state-paths.js +4 -1
  137. package/dist/mcp/state-paths.js.map +1 -1
  138. package/dist/mcp/state-server.d.ts.map +1 -1
  139. package/dist/mcp/state-server.js +18 -5
  140. package/dist/mcp/state-server.js.map +1 -1
  141. package/dist/mcp/team-server.d.ts +24 -0
  142. package/dist/mcp/team-server.d.ts.map +1 -0
  143. package/dist/mcp/team-server.js +425 -0
  144. package/dist/mcp/team-server.js.map +1 -0
  145. package/dist/mcp/trace-server.d.ts.map +1 -1
  146. package/dist/mcp/trace-server.js +8 -3
  147. package/dist/mcp/trace-server.js.map +1 -1
  148. package/dist/notifications/__tests__/verbosity.test.js +35 -0
  149. package/dist/notifications/__tests__/verbosity.test.js.map +1 -1
  150. package/dist/notifications/config.d.ts.map +1 -1
  151. package/dist/notifications/config.js +12 -3
  152. package/dist/notifications/config.js.map +1 -1
  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/reply-listener.d.ts.map +1 -1
  157. package/dist/notifications/reply-listener.js +6 -2
  158. package/dist/notifications/reply-listener.js.map +1 -1
  159. package/dist/notifications/session-registry.d.ts.map +1 -1
  160. package/dist/notifications/session-registry.js +2 -2
  161. package/dist/notifications/session-registry.js.map +1 -1
  162. package/dist/notifications/tmux.d.ts.map +1 -1
  163. package/dist/notifications/tmux.js +13 -4
  164. package/dist/notifications/tmux.js.map +1 -1
  165. package/dist/notifications/types.d.ts +4 -0
  166. package/dist/notifications/types.d.ts.map +1 -1
  167. package/dist/openclaw/__tests__/index.test.js +40 -0
  168. package/dist/openclaw/__tests__/index.test.js.map +1 -1
  169. package/dist/openclaw/dispatcher.d.ts.map +1 -1
  170. package/dist/openclaw/dispatcher.js +5 -2
  171. package/dist/openclaw/dispatcher.js.map +1 -1
  172. package/dist/openclaw/index.d.ts.map +1 -1
  173. package/dist/openclaw/index.js +1 -0
  174. package/dist/openclaw/index.js.map +1 -1
  175. package/dist/openclaw/types.d.ts +2 -0
  176. package/dist/openclaw/types.d.ts.map +1 -1
  177. package/dist/ralph/__tests__/persistence.test.js +28 -1
  178. package/dist/ralph/__tests__/persistence.test.js.map +1 -1
  179. package/dist/ralph/persistence.d.ts +21 -0
  180. package/dist/ralph/persistence.d.ts.map +1 -1
  181. package/dist/ralph/persistence.js +85 -2
  182. package/dist/ralph/persistence.js.map +1 -1
  183. package/dist/state/paths.d.ts +3 -0
  184. package/dist/state/paths.d.ts.map +1 -0
  185. package/dist/state/paths.js +2 -0
  186. package/dist/state/paths.js.map +1 -0
  187. package/dist/team/__tests__/idle-nudge.test.d.ts +2 -0
  188. package/dist/team/__tests__/idle-nudge.test.d.ts.map +1 -0
  189. package/dist/team/__tests__/idle-nudge.test.js +225 -0
  190. package/dist/team/__tests__/idle-nudge.test.js.map +1 -0
  191. package/dist/team/__tests__/role-router.test.d.ts +2 -0
  192. package/dist/team/__tests__/role-router.test.d.ts.map +1 -0
  193. package/dist/team/__tests__/role-router.test.js +204 -0
  194. package/dist/team/__tests__/role-router.test.js.map +1 -0
  195. package/dist/team/__tests__/runtime-cli.test.d.ts +2 -0
  196. package/dist/team/__tests__/runtime-cli.test.d.ts.map +1 -0
  197. package/dist/team/__tests__/runtime-cli.test.js +72 -0
  198. package/dist/team/__tests__/runtime-cli.test.js.map +1 -0
  199. package/dist/team/__tests__/runtime.test.js +195 -9
  200. package/dist/team/__tests__/runtime.test.js.map +1 -1
  201. package/dist/team/__tests__/scaling.test.js +132 -2
  202. package/dist/team/__tests__/scaling.test.js.map +1 -1
  203. package/dist/team/__tests__/state-root.test.d.ts +2 -0
  204. package/dist/team/__tests__/state-root.test.d.ts.map +1 -0
  205. package/dist/team/__tests__/state-root.test.js +9 -0
  206. package/dist/team/__tests__/state-root.test.js.map +1 -0
  207. package/dist/team/__tests__/state.test.js +52 -17
  208. package/dist/team/__tests__/state.test.js.map +1 -1
  209. package/dist/team/__tests__/team-ops-contract.test.d.ts +2 -0
  210. package/dist/team/__tests__/team-ops-contract.test.d.ts.map +1 -0
  211. package/dist/team/__tests__/team-ops-contract.test.js +90 -0
  212. package/dist/team/__tests__/team-ops-contract.test.js.map +1 -0
  213. package/dist/team/__tests__/tmux-session.test.js +94 -7
  214. package/dist/team/__tests__/tmux-session.test.js.map +1 -1
  215. package/dist/team/__tests__/worker-bootstrap.test.js +59 -0
  216. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  217. package/dist/team/__tests__/worktree.test.js +81 -2
  218. package/dist/team/__tests__/worktree.test.js.map +1 -1
  219. package/dist/team/idle-nudge.d.ts +53 -0
  220. package/dist/team/idle-nudge.d.ts.map +1 -0
  221. package/dist/team/idle-nudge.js +140 -0
  222. package/dist/team/idle-nudge.js.map +1 -0
  223. package/dist/team/mcp-comm.d.ts +1 -1
  224. package/dist/team/mcp-comm.d.ts.map +1 -1
  225. package/dist/team/mcp-comm.js +6 -2
  226. package/dist/team/mcp-comm.js.map +1 -1
  227. package/dist/team/orchestrator.d.ts +1 -10
  228. package/dist/team/orchestrator.d.ts.map +1 -1
  229. package/dist/team/orchestrator.js +8 -0
  230. package/dist/team/orchestrator.js.map +1 -1
  231. package/dist/team/role-router.d.ts +32 -0
  232. package/dist/team/role-router.d.ts.map +1 -0
  233. package/dist/team/role-router.js +137 -0
  234. package/dist/team/role-router.js.map +1 -0
  235. package/dist/team/runtime-cli.d.ts +18 -0
  236. package/dist/team/runtime-cli.d.ts.map +1 -0
  237. package/dist/team/runtime-cli.js +244 -0
  238. package/dist/team/runtime-cli.js.map +1 -0
  239. package/dist/team/runtime.d.ts +6 -1
  240. package/dist/team/runtime.d.ts.map +1 -1
  241. package/dist/team/runtime.js +148 -60
  242. package/dist/team/runtime.js.map +1 -1
  243. package/dist/team/scaling.d.ts +1 -0
  244. package/dist/team/scaling.d.ts.map +1 -1
  245. package/dist/team/scaling.js +74 -32
  246. package/dist/team/scaling.js.map +1 -1
  247. package/dist/team/state/approvals.d.ts +25 -0
  248. package/dist/team/state/approvals.d.ts.map +1 -0
  249. package/dist/team/state/approvals.js +31 -0
  250. package/dist/team/state/approvals.js.map +1 -0
  251. package/dist/team/state/config.d.ts +2 -0
  252. package/dist/team/state/config.d.ts.map +1 -0
  253. package/dist/team/state/config.js +2 -0
  254. package/dist/team/state/config.js.map +1 -0
  255. package/dist/team/state/dispatch-lock.d.ts +3 -0
  256. package/dist/team/state/dispatch-lock.d.ts.map +1 -0
  257. package/dist/team/state/dispatch-lock.js +81 -0
  258. package/dist/team/state/dispatch-lock.js.map +1 -0
  259. package/dist/team/state/dispatch.d.ts +61 -0
  260. package/dist/team/state/dispatch.d.ts.map +1 -0
  261. package/dist/team/state/dispatch.js +158 -0
  262. package/dist/team/state/dispatch.js.map +1 -0
  263. package/dist/team/state/events.d.ts +2 -0
  264. package/dist/team/state/events.d.ts.map +1 -0
  265. package/dist/team/state/events.js +2 -0
  266. package/dist/team/state/events.js.map +1 -0
  267. package/dist/team/state/index.d.ts +11 -0
  268. package/dist/team/state/index.d.ts.map +1 -0
  269. package/dist/team/state/index.js +11 -0
  270. package/dist/team/state/index.js.map +1 -0
  271. package/dist/team/state/io.d.ts +2 -0
  272. package/dist/team/state/io.d.ts.map +1 -0
  273. package/dist/team/state/io.js +2 -0
  274. package/dist/team/state/io.js.map +1 -0
  275. package/dist/team/state/locks.d.ts +16 -0
  276. package/dist/team/state/locks.d.ts.map +1 -0
  277. package/dist/team/state/locks.js +201 -0
  278. package/dist/team/state/locks.js.map +1 -0
  279. package/dist/team/state/mailbox.d.ts +39 -0
  280. package/dist/team/state/mailbox.d.ts.map +1 -0
  281. package/dist/team/state/mailbox.js +58 -0
  282. package/dist/team/state/mailbox.js.map +1 -0
  283. package/dist/team/state/monitor.d.ts +96 -0
  284. package/dist/team/state/monitor.d.ts.map +1 -0
  285. package/dist/team/state/monitor.js +163 -0
  286. package/dist/team/state/monitor.js.map +1 -0
  287. package/dist/team/state/shutdown.d.ts +2 -0
  288. package/dist/team/state/shutdown.d.ts.map +1 -0
  289. package/dist/team/state/shutdown.js +2 -0
  290. package/dist/team/state/shutdown.js.map +1 -0
  291. package/dist/team/state/summary.d.ts +2 -0
  292. package/dist/team/state/summary.d.ts.map +1 -0
  293. package/dist/team/state/summary.js +2 -0
  294. package/dist/team/state/summary.js.map +1 -0
  295. package/dist/team/state/tasks.d.ts +49 -0
  296. package/dist/team/state/tasks.d.ts.map +1 -0
  297. package/dist/team/state/tasks.js +182 -0
  298. package/dist/team/state/tasks.js.map +1 -0
  299. package/dist/team/state/types.d.ts +281 -0
  300. package/dist/team/state/types.d.ts.map +1 -0
  301. package/dist/team/state/types.js +3 -0
  302. package/dist/team/state/types.js.map +1 -0
  303. package/dist/team/state/workers.d.ts +2 -0
  304. package/dist/team/state/workers.d.ts.map +1 -0
  305. package/dist/team/state/workers.js +2 -0
  306. package/dist/team/state/workers.js.map +1 -0
  307. package/dist/team/state-root.d.ts +5 -0
  308. package/dist/team/state-root.d.ts.map +1 -0
  309. package/dist/team/state-root.js +8 -0
  310. package/dist/team/state-root.js.map +1 -0
  311. package/dist/team/state.d.ts +6 -2
  312. package/dist/team/state.d.ts.map +1 -1
  313. package/dist/team/state.js +200 -881
  314. package/dist/team/state.js.map +1 -1
  315. package/dist/team/tmux-session.d.ts +42 -2
  316. package/dist/team/tmux-session.d.ts.map +1 -1
  317. package/dist/team/tmux-session.js +229 -74
  318. package/dist/team/tmux-session.js.map +1 -1
  319. package/dist/team/worker-bootstrap.d.ts +2 -0
  320. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  321. package/dist/team/worker-bootstrap.js +47 -20
  322. package/dist/team/worker-bootstrap.js.map +1 -1
  323. package/dist/team/worktree.d.ts +5 -1
  324. package/dist/team/worktree.d.ts.map +1 -1
  325. package/dist/team/worktree.js +71 -17
  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/fixtures/ask-advisor-stub.js +12 -0
  351. package/scripts/notify-hook/log.js +5 -0
  352. package/scripts/notify-hook/team-dispatch.js +56 -1
  353. package/scripts/notify-hook/tmux-injection.js +45 -4
  354. package/scripts/notify-hook/visual-verdict.js +158 -0
  355. package/scripts/notify-hook.js +27 -0
  356. package/scripts/run-provider-advisor.js +179 -0
  357. package/scripts/tmux-hook-engine.js +24 -0
  358. package/skills/ask-claude/SKILL.md +61 -0
  359. package/skills/ask-gemini/SKILL.md +61 -0
  360. package/skills/autopilot/SKILL.md +34 -4
  361. package/skills/configure-notifications/SKILL.md +1 -1
  362. package/skills/configure-openclaw/SKILL.md +154 -157
  363. package/skills/deep-interview/SKILL.md +247 -0
  364. package/skills/doctor/SKILL.md +1 -1
  365. package/skills/help/SKILL.md +3 -3
  366. package/skills/ralph/SKILL.md +42 -11
  367. package/skills/ralplan/SKILL.md +17 -0
  368. package/skills/skill/SKILL.md +32 -32
  369. package/skills/team/SKILL.md +60 -0
  370. package/skills/visual-verdict/SKILL.md +76 -0
  371. package/skills/web-clone/SKILL.md +366 -0
  372. package/skills/worker/SKILL.md +5 -4
  373. package/templates/AGENTS.md +9 -0
  374. package/templates/catalog-manifest.json +39 -2
@@ -44,7 +44,7 @@ I'll figure out what to stop based on context.
44
44
  If you haven't configured OMX yet:
45
45
 
46
46
  ```
47
- /omc-setup
47
+ /omx-setup
48
48
  ```
49
49
 
50
50
  This is the **only command** you need to know. It downloads the configuration and you're done.
@@ -134,7 +134,7 @@ Based on patterns found, output recommendations:
134
134
  - "Use security-reviewer after auth/API changes"
135
135
 
136
136
  **If defaultExecutionMode not set:**
137
- - "Set defaultExecutionMode in /omc-setup for consistent behavior"
137
+ - "Set defaultExecutionMode in /omx-setup for consistent behavior"
138
138
 
139
139
  ### Step 4: Output Report
140
140
 
@@ -179,7 +179,7 @@ No token tracking found. To enable tracking:
179
179
  1. Ensure ~/.omx/state/ directory exists
180
180
  2. Run any OMX command to start tracking
181
181
 
182
- Tip: Run /omc-setup to configure OMX properly.
182
+ Tip: Run /omx-setup to configure OMX properly.
183
183
  ```
184
184
 
185
185
  ## Need More Help?
@@ -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
@@ -15,19 +15,19 @@ Meta-skill for managing oh-my-codex skills via CLI-like commands.
15
15
  Show all local skills organized by scope.
16
16
 
17
17
  **Behavior:**
18
- 1. Scan user skills at `~/.codex/skills/omc-learned/`
19
- 2. Scan project skills at `.omx/skills/`
18
+ 1. Scan user skills at `~/.agents/skills/`
19
+ 2. Scan project skills at `.agents/skills/`
20
20
  3. Parse YAML frontmatter for metadata
21
21
  4. Display in organized table format:
22
22
 
23
23
  ```
24
- USER SKILLS (~/.codex/skills/omc-learned/):
24
+ USER SKILLS (~/.agents/skills/):
25
25
  | Name | Triggers | Quality | Usage | Scope |
26
26
  |-------------------|--------------------|---------|-------|-------|
27
27
  | error-handler | fix, error | 95% | 42 | user |
28
28
  | api-builder | api, endpoint | 88% | 23 | user |
29
29
 
30
- PROJECT SKILLS (.omx/skills/):
30
+ PROJECT SKILLS (.agents/skills/):
31
31
  | Name | Triggers | Quality | Usage | Scope |
32
32
  |-------------------|--------------------|---------|-------|---------|
33
33
  | test-runner | test, run | 92% | 15 | project |
@@ -51,8 +51,8 @@ Interactive wizard for creating a new skill.
51
51
  4. **Ask for argument hint** (optional)
52
52
  - Example: "<file> [options]"
53
53
  5. **Ask for scope:**
54
- - `user` → `~/.codex/skills/omc-learned/<name>/SKILL.md`
55
- - `project` → `.omx/skills/<name>/SKILL.md`
54
+ - `user` → `~/.agents/skills/<name>/SKILL.md`
55
+ - `project` → `.agents/skills/<name>/SKILL.md`
56
56
  6. **Create skill file** with template:
57
57
 
58
58
  ```yaml
@@ -105,7 +105,7 @@ Triggers (comma-separated): log, logger, logging
105
105
  Argument hint (optional): <level> [message]
106
106
  Scope (user/project): user
107
107
 
108
- ✓ Created skill at ~/.codex/skills/omc-learned/custom-logger/SKILL.md
108
+ ✓ Created skill at ~/.agents/skills/custom-logger/SKILL.md
109
109
  → Edit with: /skill edit custom-logger
110
110
  ```
111
111
 
@@ -117,13 +117,13 @@ Remove a skill by name.
117
117
 
118
118
  **Behavior:**
119
119
  1. **Search for skill** in both scopes:
120
- - `~/.codex/skills/omc-learned/<name>/SKILL.md`
121
- - `.omx/skills/<name>/SKILL.md`
120
+ - `~/.agents/skills/<name>/SKILL.md`
121
+ - `.agents/skills/<name>/SKILL.md`
122
122
  2. **If found:**
123
123
  - Display skill info (name, description, scope)
124
124
  - **Ask for confirmation:** "Delete '<name>' skill from <scope>? (yes/no)"
125
125
  3. **If confirmed:**
126
- - Delete entire skill directory (e.g., `~/.codex/skills/omc-learned/<name>/`)
126
+ - Delete entire skill directory (e.g., `~/.agents/skills/<name>/`)
127
127
  - Report: "✓ Removed skill '<name>' from <scope>"
128
128
  4. **If not found:**
129
129
  - Report: "✗ Skill '<name>' not found in user or project scope"
@@ -135,7 +135,7 @@ Remove a skill by name.
135
135
  User: /skill remove old-logger
136
136
  Assistant: Found skill 'old-logger' in user scope:
137
137
  Description: Legacy logging utility
138
- Scope: user (~/.codex/skills/omc-learned/)
138
+ Scope: user (~/.agents/skills/)
139
139
 
140
140
  Delete 'old-logger' skill? (yes/no)
141
141
 
@@ -251,13 +251,13 @@ Show detailed information about a skill.
251
251
 
252
252
  ```
253
253
  Skill: custom-logger
254
- Scope: user (~/.codex/skills/omc-learned/custom-logger/)
254
+ Scope: user (~/.agents/skills/custom-logger/)
255
255
  Description: Enhanced logging with structured output
256
256
  Triggers: log, logger, logging
257
257
  Argument Hint: <level> [message]
258
258
  Quality: 95% (if available)
259
259
  Usage Count: 42 times (if available)
260
- File Path: /home/user/.codex/skills/omc-learned/custom-logger/SKILL.md
260
+ File Path: /home/user/.agents/skills/custom-logger/SKILL.md
261
261
 
262
262
  --- FULL CONTENT ---
263
263
  [entire markdown content]
@@ -272,7 +272,7 @@ Assistant: Skill: custom-logger
272
272
  Scope: user
273
273
  Description: Enhanced logging with structured output
274
274
  Triggers: log, logger, logging
275
- File: ~/.codex/skills/omc-learned/custom-logger/SKILL.md
275
+ File: ~/.agents/skills/custom-logger/SKILL.md
276
276
 
277
277
  --- CONTENT ---
278
278
  # Custom Logger Skill
@@ -290,8 +290,8 @@ Sync skills between user and project scopes.
290
290
 
291
291
  **Behavior:**
292
292
  1. **Scan both scopes:**
293
- - User skills: `~/.codex/skills/omc-learned/`
294
- - Project skills: `.omx/skills/`
293
+ - User skills: `~/.agents/skills/`
294
+ - Project skills: `.agents/skills/`
295
295
  2. **Compare and categorize:**
296
296
  - User-only skills (not in project)
297
297
  - Project-only skills (not in user)
@@ -339,7 +339,7 @@ Assistant: Found 5 user-only skills and 2 project-only skills.
339
339
 
340
340
  Copy 'error-handler' from user to project? (yes/no/skip)
341
341
  User: yes
342
- Assistant: ✓ Copied 'error-handler' to .omx/skills/
342
+ Assistant: ✓ Copied 'error-handler' to .agents/skills/
343
343
 
344
344
  Copy 'api-builder' from user to project? (yes/no/skip)
345
345
  User: skip
@@ -360,7 +360,7 @@ First, check if skill directories exist and create them if needed:
360
360
 
361
361
  ```bash
362
362
  # Check and create user-level skills directory
363
- USER_SKILLS_DIR="$HOME/.codex/skills/omc-learned"
363
+ USER_SKILLS_DIR="$HOME/.agents/skills"
364
364
  if [ -d "$USER_SKILLS_DIR" ]; then
365
365
  echo "User skills directory exists: $USER_SKILLS_DIR"
366
366
  else
@@ -369,7 +369,7 @@ else
369
369
  fi
370
370
 
371
371
  # Check and create project-level skills directory
372
- PROJECT_SKILLS_DIR=".omx/skills"
372
+ PROJECT_SKILLS_DIR=".agents/skills"
373
373
  if [ -d "$PROJECT_SKILLS_DIR" ]; then
374
374
  echo "Project skills directory exists: $PROJECT_SKILLS_DIR"
375
375
  else
@@ -384,15 +384,15 @@ Scan both directories and show a comprehensive inventory:
384
384
 
385
385
  ```bash
386
386
  # Scan user-level skills
387
- echo "=== USER-LEVEL SKILLS (~/.codex/skills/omc-learned/) ==="
388
- if [ -d "$HOME/.codex/skills/omc-learned" ]; then
389
- USER_COUNT=$(find "$HOME/.codex/skills/omc-learned" -name "*.md" 2>/dev/null | wc -l)
387
+ echo "=== USER-LEVEL SKILLS (~/.agents/skills/) ==="
388
+ if [ -d "$HOME/.agents/skills" ]; then
389
+ USER_COUNT=$(find "$HOME/.agents/skills" -name "*.md" 2>/dev/null | wc -l)
390
390
  echo "Total skills: $USER_COUNT"
391
391
 
392
392
  if [ $USER_COUNT -gt 0 ]; then
393
393
  echo ""
394
394
  echo "Skills found:"
395
- find "$HOME/.codex/skills/omc-learned" -name "*.md" -type f -exec sh -c '
395
+ find "$HOME/.agents/skills" -name "*.md" -type f -exec sh -c '
396
396
  FILE="$1"
397
397
  NAME=$(grep -m1 "^name:" "$FILE" 2>/dev/null | sed "s/name: //")
398
398
  DESC=$(grep -m1 "^description:" "$FILE" 2>/dev/null | sed "s/description: //")
@@ -408,15 +408,15 @@ else
408
408
  fi
409
409
 
410
410
  echo ""
411
- echo "=== PROJECT-LEVEL SKILLS (.omx/skills/) ==="
412
- if [ -d ".omx/skills" ]; then
413
- PROJECT_COUNT=$(find ".omx/skills" -name "*.md" 2>/dev/null | wc -l)
411
+ echo "=== PROJECT-LEVEL SKILLS (.agents/skills/) ==="
412
+ if [ -d ".agents/skills" ]; then
413
+ PROJECT_COUNT=$(find ".agents/skills" -name "*.md" 2>/dev/null | wc -l)
414
414
  echo "Total skills: $PROJECT_COUNT"
415
415
 
416
416
  if [ $PROJECT_COUNT -gt 0 ]; then
417
417
  echo ""
418
418
  echo "Skills found:"
419
- find ".omx/skills" -name "*.md" -type f -exec sh -c '
419
+ find ".agents/skills" -name "*.md" -type f -exec sh -c '
420
420
  FILE="$1"
421
421
  NAME=$(grep -m1 "^name:" "$FILE" 2>/dev/null | sed "s/name: //")
422
422
  DESC=$(grep -m1 "^description:" "$FILE" 2>/dev/null | sed "s/description: //")
@@ -467,8 +467,8 @@ Ask user to provide either:
467
467
  - **Paste content**: Paste skill markdown content directly
468
468
 
469
469
  Then ask for scope:
470
- - **User-level** (~/.codex/skills/omc-learned/) - Available across all projects
471
- - **Project-level** (.omx/skills/) - Only for this project
470
+ - **User-level** (~/.agents/skills/) - Available across all projects
471
+ - **Project-level** (.agents/skills/) - Only for this project
472
472
 
473
473
  Validate the skill format and save to the chosen location.
474
474
 
@@ -715,7 +715,7 @@ When invoked without arguments, run the full guided wizard.
715
715
 
716
716
  **Automatic Application**: Codex detects triggers and applies skills automatically - no need to remember or search for solutions.
717
717
 
718
- **Version Control**: Project-level skills (.omx/skills/) are committed with your code, so the whole team benefits.
718
+ **Version Control**: Project-level skills (.agents/skills/) are committed with your code, so the whole team benefits.
719
719
 
720
720
  **Evolving Knowledge**: Skills improve over time as you discover better approaches and refine triggers.
721
721
 
@@ -760,8 +760,8 @@ Good skills are:
760
760
  > /skill list
761
761
 
762
762
  Checking skill directories...
763
- ✓ User skills directory exists: ~/.codex/skills/omc-learned/
764
- ✓ Project skills directory exists: .omx/skills/
763
+ ✓ User skills directory exists: ~/.agents/skills/
764
+ ✓ Project skills directory exists: .agents/skills/
765
765
 
766
766
  Scanning for skills...
767
767
 
@@ -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:
@@ -343,6 +360,49 @@ When operating this skill, provide concrete progress evidence:
343
360
  Do not claim success without file/pane evidence.
344
361
  Do not claim clean completion if shutdown occurred with `in_progress>0`.
345
362
 
363
+ ## MCP Job Lifecycle Tools
364
+
365
+ For programmatic or agent-driven team spawning (as opposed to interactive CLI use), OMX exposes four MCP tools via the `team-server`:
366
+
367
+ | Tool | Description |
368
+ |------|-------------|
369
+ | `omx_run_team_start` | Spawn tmux CLI workers in the background; returns a `jobId` immediately |
370
+ | `omx_run_team_status` | Non-blocking status check for a running job |
371
+ | `omx_run_team_wait` | Block until the job completes, with automatic idle-pane nudging |
372
+ | `omx_run_team_cleanup` | Kill worker tmux panes for a job (early stop only) |
373
+
374
+ ### CLI vs MCP Tools
375
+
376
+ - **`omx team ...` CLI** — Primary method for interactive team orchestration. Use this when you are operating inside a live tmux session and want direct pane visibility.
377
+ - **`omx_run_team_*` MCP tools** — For programmatic or agent-driven team spawning (analogous to OMC's `omc_run_team_*` tools). Use these when an agent needs to launch workers, poll status, and collect results without manual intervention.
378
+
379
+ ### Naming Distinction
380
+
381
+ Two cleanup tools exist and must not be confused:
382
+
383
+ - `team_cleanup` (**state-server**): Deletes team state **files** on disk (`.omx/state/team/<team>/`). Use after a team run is fully complete.
384
+ - `omx_run_team_cleanup` (**team-server**): Kills tmux worker **panes** for a job. Use only when stopping workers early; otherwise `omx_run_team_wait` handles natural termination.
385
+
386
+ ### Basic Usage Example
387
+
388
+ ```
389
+ 1. omx_run_team_start({
390
+ teamName: "fix-bugs",
391
+ agentTypes: ["codex"],
392
+ tasks: [{ subject: "Fix bug", description: "..." }],
393
+ cwd: "/path/to/project"
394
+ })
395
+ → Returns { jobId: "omx-abc123" }
396
+
397
+ 2. omx_run_team_wait({ job_id: "omx-abc123", timeout_ms: 300000 })
398
+ → Blocks until done, auto-nudges idle panes
399
+
400
+ 3. omx_run_team_cleanup({ job_id: "omx-abc123" })
401
+ → Only needed if stopping workers early
402
+ ```
403
+
404
+ `omx_run_team_status` can be called between steps 1 and 2 for a non-blocking poll if you need to interleave other work while workers run.
405
+
346
406
  ## Limitations
347
407
 
348
408
  - Worktree provisioning requires a git repository and can fail on branch/path collisions
@@ -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>