oh-my-claude-sisyphus 3.8.9 → 3.8.11

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 (456) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +1 -1
  4. package/agents/architect.md +78 -0
  5. package/agents/explore.md +15 -0
  6. package/agents/qa-tester.md +159 -1
  7. package/agents/writer.md +20 -0
  8. package/commands/help.md +1 -1
  9. package/commands/omc-setup.md +1 -1
  10. package/dist/__tests__/agent-registry.test.d.ts +2 -0
  11. package/dist/__tests__/agent-registry.test.d.ts.map +1 -0
  12. package/dist/__tests__/agent-registry.test.js +39 -0
  13. package/dist/__tests__/agent-registry.test.js.map +1 -0
  14. package/dist/__tests__/load-agent-prompt.test.d.ts +2 -0
  15. package/dist/__tests__/load-agent-prompt.test.d.ts.map +1 -0
  16. package/dist/__tests__/load-agent-prompt.test.js +68 -0
  17. package/dist/__tests__/load-agent-prompt.test.js.map +1 -0
  18. package/dist/__tests__/model-routing.test.js +5 -34
  19. package/dist/__tests__/model-routing.test.js.map +1 -1
  20. package/dist/agents/analyst.d.ts.map +1 -1
  21. package/dist/agents/analyst.js +2 -77
  22. package/dist/agents/analyst.js.map +1 -1
  23. package/dist/agents/architect.d.ts.map +1 -1
  24. package/dist/agents/architect.js +3 -148
  25. package/dist/agents/architect.js.map +1 -1
  26. package/dist/agents/coordinator-deprecated.d.ts +18 -0
  27. package/dist/agents/coordinator-deprecated.d.ts.map +1 -0
  28. package/dist/agents/coordinator-deprecated.js +34 -0
  29. package/dist/agents/coordinator-deprecated.js.map +1 -0
  30. package/dist/agents/critic.d.ts.map +1 -1
  31. package/dist/agents/critic.js +2 -90
  32. package/dist/agents/critic.js.map +1 -1
  33. package/dist/agents/definitions.d.ts +2 -0
  34. package/dist/agents/definitions.d.ts.map +1 -1
  35. package/dist/agents/definitions.js +3 -32
  36. package/dist/agents/definitions.js.map +1 -1
  37. package/dist/agents/designer.d.ts.map +1 -1
  38. package/dist/agents/designer.js +2 -73
  39. package/dist/agents/designer.js.map +1 -1
  40. package/dist/agents/executor.d.ts +1 -0
  41. package/dist/agents/executor.d.ts.map +1 -1
  42. package/dist/agents/executor.js +3 -56
  43. package/dist/agents/executor.js.map +1 -1
  44. package/dist/agents/explore.d.ts.map +1 -1
  45. package/dist/agents/explore.js +2 -64
  46. package/dist/agents/explore.js.map +1 -1
  47. package/dist/agents/index.d.ts +4 -3
  48. package/dist/agents/index.d.ts.map +1 -1
  49. package/dist/agents/index.js +6 -3
  50. package/dist/agents/index.js.map +1 -1
  51. package/dist/agents/planner.d.ts.map +1 -1
  52. package/dist/agents/planner.js +2 -157
  53. package/dist/agents/planner.js.map +1 -1
  54. package/dist/agents/qa-tester.d.ts.map +1 -1
  55. package/dist/agents/qa-tester.js +2 -324
  56. package/dist/agents/qa-tester.js.map +1 -1
  57. package/dist/agents/researcher.d.ts.map +1 -1
  58. package/dist/agents/researcher.js +2 -65
  59. package/dist/agents/researcher.js.map +1 -1
  60. package/dist/agents/scientist.d.ts.map +1 -1
  61. package/dist/agents/scientist.js +2 -293
  62. package/dist/agents/scientist.js.map +1 -1
  63. package/dist/agents/utils.d.ts +7 -0
  64. package/dist/agents/utils.d.ts.map +1 -1
  65. package/dist/agents/utils.js +50 -0
  66. package/dist/agents/utils.js.map +1 -1
  67. package/dist/agents/vision.d.ts.map +1 -1
  68. package/dist/agents/vision.js +2 -32
  69. package/dist/agents/vision.js.map +1 -1
  70. package/dist/agents/writer.d.ts.map +1 -1
  71. package/dist/agents/writer.js +2 -171
  72. package/dist/agents/writer.js.map +1 -1
  73. package/dist/cli/analytics.js +0 -0
  74. package/dist/cli/index.js +0 -0
  75. package/dist/features/model-routing/index.d.ts +1 -1
  76. package/dist/features/model-routing/index.d.ts.map +1 -1
  77. package/dist/features/model-routing/index.js +1 -1
  78. package/dist/features/model-routing/index.js.map +1 -1
  79. package/dist/features/model-routing/router.d.ts +1 -15
  80. package/dist/features/model-routing/router.d.ts.map +1 -1
  81. package/dist/features/model-routing/router.js +2 -33
  82. package/dist/features/model-routing/router.js.map +1 -1
  83. package/dist/features/model-routing/rules.d.ts.map +1 -1
  84. package/dist/features/model-routing/rules.js +0 -8
  85. package/dist/features/model-routing/rules.js.map +1 -1
  86. package/dist/features/model-routing/types.d.ts +1 -2
  87. package/dist/features/model-routing/types.d.ts.map +1 -1
  88. package/dist/features/model-routing/types.js +2 -6
  89. package/dist/features/model-routing/types.js.map +1 -1
  90. package/dist/features/task-decomposer/index.d.ts +1 -1
  91. package/dist/features/task-decomposer/index.d.ts.map +1 -1
  92. package/dist/features/task-decomposer/index.js +5 -8
  93. package/dist/features/task-decomposer/index.js.map +1 -1
  94. package/dist/features/task-decomposer/types.d.ts +4 -4
  95. package/dist/features/task-decomposer/types.d.ts.map +1 -1
  96. package/dist/hooks/bridge.d.ts.map +1 -1
  97. package/dist/hooks/bridge.js +56 -49
  98. package/dist/hooks/bridge.js.map +1 -1
  99. package/dist/hooks/keyword-detector/__tests__/index.test.js +89 -1
  100. package/dist/hooks/keyword-detector/__tests__/index.test.js.map +1 -1
  101. package/dist/hooks/keyword-detector/index.d.ts +5 -1
  102. package/dist/hooks/keyword-detector/index.d.ts.map +1 -1
  103. package/dist/hooks/keyword-detector/index.js +32 -11
  104. package/dist/hooks/keyword-detector/index.js.map +1 -1
  105. package/dist/hooks/ultrapilot/decomposer.d.ts +1 -1
  106. package/dist/hooks/ultrapilot/decomposer.js +2 -2
  107. package/dist/index.d.ts +1 -1
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +4 -2
  110. package/dist/index.js.map +1 -1
  111. package/docs/CLAUDE.md +44 -4
  112. package/docs/FEATURES.md +1 -1
  113. package/docs/MIGRATION.md +5 -5
  114. package/docs/REFERENCE.md +6 -2
  115. package/package.json +1 -1
  116. package/scripts/keyword-detector.mjs +140 -59
  117. package/skills/help/SKILL.md +1 -1
  118. package/skills/omc-setup/SKILL.md +1 -1
  119. package/templates/hooks/keyword-detector.mjs +280 -118
  120. package/dist/__tests__/analytics/analytics-summary.test.d.ts +0 -2
  121. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +0 -1
  122. package/dist/__tests__/analytics/analytics-summary.test.js +0 -267
  123. package/dist/__tests__/analytics/analytics-summary.test.js.map +0 -1
  124. package/dist/__tests__/analytics/cost-estimator.test.d.ts +0 -2
  125. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +0 -1
  126. package/dist/__tests__/analytics/cost-estimator.test.js +0 -212
  127. package/dist/__tests__/analytics/cost-estimator.test.js.map +0 -1
  128. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts +0 -7
  129. package/dist/__tests__/hooks/auto-slash-command/executor.test.d.ts.map +0 -1
  130. package/dist/__tests__/hooks/auto-slash-command/executor.test.js +0 -374
  131. package/dist/__tests__/hooks/auto-slash-command/executor.test.js.map +0 -1
  132. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +0 -2
  133. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +0 -1
  134. package/dist/__tests__/hud/auto-tracking.integration.test.js +0 -12
  135. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +0 -1
  136. package/dist/__tests__/learned-skills/config.test.d.ts +0 -2
  137. package/dist/__tests__/learned-skills/config.test.d.ts.map +0 -1
  138. package/dist/__tests__/learned-skills/config.test.js +0 -37
  139. package/dist/__tests__/learned-skills/config.test.js.map +0 -1
  140. package/dist/__tests__/learned-skills/detector.test.d.ts +0 -2
  141. package/dist/__tests__/learned-skills/detector.test.d.ts.map +0 -1
  142. package/dist/__tests__/learned-skills/detector.test.js +0 -99
  143. package/dist/__tests__/learned-skills/detector.test.js.map +0 -1
  144. package/dist/__tests__/learned-skills/finder.test.d.ts +0 -2
  145. package/dist/__tests__/learned-skills/finder.test.d.ts.map +0 -1
  146. package/dist/__tests__/learned-skills/finder.test.js +0 -59
  147. package/dist/__tests__/learned-skills/finder.test.js.map +0 -1
  148. package/dist/__tests__/learned-skills/loader.test.d.ts +0 -2
  149. package/dist/__tests__/learned-skills/loader.test.d.ts.map +0 -1
  150. package/dist/__tests__/learned-skills/loader.test.js +0 -69
  151. package/dist/__tests__/learned-skills/loader.test.js.map +0 -1
  152. package/dist/__tests__/learned-skills/parser.test.d.ts +0 -2
  153. package/dist/__tests__/learned-skills/parser.test.d.ts.map +0 -1
  154. package/dist/__tests__/learned-skills/parser.test.js +0 -81
  155. package/dist/__tests__/learned-skills/parser.test.js.map +0 -1
  156. package/dist/__tests__/learned-skills/validator.test.d.ts +0 -2
  157. package/dist/__tests__/learned-skills/validator.test.d.ts.map +0 -1
  158. package/dist/__tests__/learned-skills/validator.test.js +0 -85
  159. package/dist/__tests__/learned-skills/validator.test.js.map +0 -1
  160. package/dist/agents/codex-agents.d.ts +0 -20
  161. package/dist/agents/codex-agents.d.ts.map +0 -1
  162. package/dist/agents/codex-agents.js +0 -36
  163. package/dist/agents/codex-agents.js.map +0 -1
  164. package/dist/agents/coordinator.d.ts +0 -11
  165. package/dist/agents/coordinator.d.ts.map +0 -1
  166. package/dist/agents/coordinator.js +0 -115
  167. package/dist/agents/coordinator.js.map +0 -1
  168. package/dist/agents/document-writer.d.ts +0 -11
  169. package/dist/agents/document-writer.d.ts.map +0 -1
  170. package/dist/agents/document-writer.js +0 -209
  171. package/dist/agents/document-writer.js.map +0 -1
  172. package/dist/agents/frontend-engineer.d.ts +0 -11
  173. package/dist/agents/frontend-engineer.d.ts.map +0 -1
  174. package/dist/agents/frontend-engineer.js +0 -115
  175. package/dist/agents/frontend-engineer.js.map +0 -1
  176. package/dist/agents/librarian.d.ts +0 -12
  177. package/dist/agents/librarian.d.ts.map +0 -1
  178. package/dist/agents/librarian.js +0 -103
  179. package/dist/agents/librarian.js.map +0 -1
  180. package/dist/agents/metis.d.ts +0 -12
  181. package/dist/agents/metis.d.ts.map +0 -1
  182. package/dist/agents/metis.js +0 -117
  183. package/dist/agents/metis.js.map +0 -1
  184. package/dist/agents/momus.d.ts +0 -12
  185. package/dist/agents/momus.d.ts.map +0 -1
  186. package/dist/agents/momus.js +0 -128
  187. package/dist/agents/momus.js.map +0 -1
  188. package/dist/agents/multimodal-looker.d.ts +0 -11
  189. package/dist/agents/multimodal-looker.d.ts.map +0 -1
  190. package/dist/agents/multimodal-looker.js +0 -70
  191. package/dist/agents/multimodal-looker.js.map +0 -1
  192. package/dist/agents/oracle.d.ts +0 -13
  193. package/dist/agents/oracle.d.ts.map +0 -1
  194. package/dist/agents/oracle.js +0 -191
  195. package/dist/agents/oracle.js.map +0 -1
  196. package/dist/agents/orchestrator-sisyphus.d.ts +0 -11
  197. package/dist/agents/orchestrator-sisyphus.d.ts.map +0 -1
  198. package/dist/agents/orchestrator-sisyphus.js +0 -115
  199. package/dist/agents/orchestrator-sisyphus.js.map +0 -1
  200. package/dist/agents/prometheus.d.ts +0 -12
  201. package/dist/agents/prometheus.d.ts.map +0 -1
  202. package/dist/agents/prometheus.js +0 -195
  203. package/dist/agents/prometheus.js.map +0 -1
  204. package/dist/agents/sisyphus-junior.d.ts +0 -12
  205. package/dist/agents/sisyphus-junior.d.ts.map +0 -1
  206. package/dist/agents/sisyphus-junior.js +0 -93
  207. package/dist/agents/sisyphus-junior.js.map +0 -1
  208. package/dist/cli/components/CostDashboard.d.ts +0 -15
  209. package/dist/cli/components/CostDashboard.d.ts.map +0 -1
  210. package/dist/cli/components/CostDashboard.js +0 -15
  211. package/dist/cli/components/CostDashboard.js.map +0 -1
  212. package/dist/cli/components/LiveStats.d.ts +0 -16
  213. package/dist/cli/components/LiveStats.d.ts.map +0 -1
  214. package/dist/cli/components/LiveStats.js +0 -16
  215. package/dist/cli/components/LiveStats.js.map +0 -1
  216. package/dist/cli/components/SessionBrowser.d.ts +0 -14
  217. package/dist/cli/components/SessionBrowser.d.ts.map +0 -1
  218. package/dist/cli/components/SessionBrowser.js +0 -14
  219. package/dist/cli/components/SessionBrowser.js.map +0 -1
  220. package/dist/cli/tui.d.ts +0 -21
  221. package/dist/cli/tui.d.ts.map +0 -1
  222. package/dist/cli/tui.js +0 -21
  223. package/dist/cli/tui.js.map +0 -1
  224. package/dist/hooks/autopilot/signals.d.ts +0 -20
  225. package/dist/hooks/autopilot/signals.d.ts.map +0 -1
  226. package/dist/hooks/autopilot/signals.js +0 -75
  227. package/dist/hooks/autopilot/signals.js.map +0 -1
  228. package/dist/hooks/autopilot/summary.d.ts +0 -27
  229. package/dist/hooks/autopilot/summary.d.ts.map +0 -1
  230. package/dist/hooks/autopilot/summary.js +0 -160
  231. package/dist/hooks/autopilot/summary.js.map +0 -1
  232. package/dist/hooks/autopilot/transition.d.ts +0 -39
  233. package/dist/hooks/autopilot/transition.d.ts.map +0 -1
  234. package/dist/hooks/autopilot/transition.js +0 -216
  235. package/dist/hooks/autopilot/transition.js.map +0 -1
  236. package/dist/hooks/context-window-limit-recovery/constants.d.ts +0 -28
  237. package/dist/hooks/context-window-limit-recovery/constants.d.ts.map +0 -1
  238. package/dist/hooks/context-window-limit-recovery/constants.js +0 -85
  239. package/dist/hooks/context-window-limit-recovery/constants.js.map +0 -1
  240. package/dist/hooks/context-window-limit-recovery/index.d.ts +0 -62
  241. package/dist/hooks/context-window-limit-recovery/index.d.ts.map +0 -1
  242. package/dist/hooks/context-window-limit-recovery/index.js +0 -201
  243. package/dist/hooks/context-window-limit-recovery/index.js.map +0 -1
  244. package/dist/hooks/context-window-limit-recovery/parser.d.ts +0 -31
  245. package/dist/hooks/context-window-limit-recovery/parser.d.ts.map +0 -1
  246. package/dist/hooks/context-window-limit-recovery/parser.js +0 -241
  247. package/dist/hooks/context-window-limit-recovery/parser.js.map +0 -1
  248. package/dist/hooks/context-window-limit-recovery/types.d.ts +0 -84
  249. package/dist/hooks/context-window-limit-recovery/types.d.ts.map +0 -1
  250. package/dist/hooks/context-window-limit-recovery/types.js +0 -34
  251. package/dist/hooks/context-window-limit-recovery/types.js.map +0 -1
  252. package/dist/hooks/edit-error-recovery/index.d.ts +0 -62
  253. package/dist/hooks/edit-error-recovery/index.d.ts.map +0 -1
  254. package/dist/hooks/edit-error-recovery/index.js +0 -89
  255. package/dist/hooks/edit-error-recovery/index.js.map +0 -1
  256. package/dist/hooks/github-auto-responder/classifier.d.ts +0 -43
  257. package/dist/hooks/github-auto-responder/classifier.d.ts.map +0 -1
  258. package/dist/hooks/github-auto-responder/classifier.js +0 -150
  259. package/dist/hooks/github-auto-responder/classifier.js.map +0 -1
  260. package/dist/hooks/github-auto-responder/config.d.ts +0 -109
  261. package/dist/hooks/github-auto-responder/config.d.ts.map +0 -1
  262. package/dist/hooks/github-auto-responder/config.js +0 -69
  263. package/dist/hooks/github-auto-responder/config.js.map +0 -1
  264. package/dist/hooks/github-auto-responder/constants.d.ts +0 -45
  265. package/dist/hooks/github-auto-responder/constants.d.ts.map +0 -1
  266. package/dist/hooks/github-auto-responder/constants.js +0 -60
  267. package/dist/hooks/github-auto-responder/constants.js.map +0 -1
  268. package/dist/hooks/github-auto-responder/filters.d.ts +0 -95
  269. package/dist/hooks/github-auto-responder/filters.d.ts.map +0 -1
  270. package/dist/hooks/github-auto-responder/filters.js +0 -174
  271. package/dist/hooks/github-auto-responder/filters.js.map +0 -1
  272. package/dist/hooks/github-auto-responder/github-client.d.ts +0 -65
  273. package/dist/hooks/github-auto-responder/github-client.d.ts.map +0 -1
  274. package/dist/hooks/github-auto-responder/github-client.js +0 -128
  275. package/dist/hooks/github-auto-responder/github-client.js.map +0 -1
  276. package/dist/hooks/github-auto-responder/idempotency.d.ts +0 -68
  277. package/dist/hooks/github-auto-responder/idempotency.d.ts.map +0 -1
  278. package/dist/hooks/github-auto-responder/idempotency.js +0 -147
  279. package/dist/hooks/github-auto-responder/idempotency.js.map +0 -1
  280. package/dist/hooks/github-auto-responder/index.d.ts +0 -140
  281. package/dist/hooks/github-auto-responder/index.d.ts.map +0 -1
  282. package/dist/hooks/github-auto-responder/index.js +0 -145
  283. package/dist/hooks/github-auto-responder/index.js.map +0 -1
  284. package/dist/hooks/github-auto-responder/persona.d.ts +0 -40
  285. package/dist/hooks/github-auto-responder/persona.d.ts.map +0 -1
  286. package/dist/hooks/github-auto-responder/persona.js +0 -99
  287. package/dist/hooks/github-auto-responder/persona.js.map +0 -1
  288. package/dist/hooks/github-auto-responder/responder.d.ts +0 -122
  289. package/dist/hooks/github-auto-responder/responder.d.ts.map +0 -1
  290. package/dist/hooks/github-auto-responder/responder.js +0 -264
  291. package/dist/hooks/github-auto-responder/responder.js.map +0 -1
  292. package/dist/hooks/github-auto-responder/server.d.ts +0 -140
  293. package/dist/hooks/github-auto-responder/server.d.ts.map +0 -1
  294. package/dist/hooks/github-auto-responder/server.js +0 -301
  295. package/dist/hooks/github-auto-responder/server.js.map +0 -1
  296. package/dist/hooks/github-auto-responder/signature.d.ts +0 -34
  297. package/dist/hooks/github-auto-responder/signature.d.ts.map +0 -1
  298. package/dist/hooks/github-auto-responder/signature.js +0 -79
  299. package/dist/hooks/github-auto-responder/signature.js.map +0 -1
  300. package/dist/hooks/github-auto-responder/templates.d.ts +0 -16
  301. package/dist/hooks/github-auto-responder/templates.d.ts.map +0 -1
  302. package/dist/hooks/github-auto-responder/templates.js +0 -93
  303. package/dist/hooks/github-auto-responder/templates.js.map +0 -1
  304. package/dist/hooks/github-auto-responder/types.d.ts +0 -246
  305. package/dist/hooks/github-auto-responder/types.d.ts.map +0 -1
  306. package/dist/hooks/github-auto-responder/types.js +0 -7
  307. package/dist/hooks/github-auto-responder/types.js.map +0 -1
  308. package/dist/hooks/learned-skills/config.d.ts +0 -53
  309. package/dist/hooks/learned-skills/config.d.ts.map +0 -1
  310. package/dist/hooks/learned-skills/config.js +0 -103
  311. package/dist/hooks/learned-skills/config.js.map +0 -1
  312. package/dist/hooks/learned-skills/constants.d.ts +0 -24
  313. package/dist/hooks/learned-skills/constants.d.ts.map +0 -1
  314. package/dist/hooks/learned-skills/constants.js +0 -26
  315. package/dist/hooks/learned-skills/constants.js.map +0 -1
  316. package/dist/hooks/learned-skills/detection-hook.d.ts +0 -39
  317. package/dist/hooks/learned-skills/detection-hook.d.ts.map +0 -1
  318. package/dist/hooks/learned-skills/detection-hook.js +0 -83
  319. package/dist/hooks/learned-skills/detection-hook.js.map +0 -1
  320. package/dist/hooks/learned-skills/detector.d.ts +0 -30
  321. package/dist/hooks/learned-skills/detector.d.ts.map +0 -1
  322. package/dist/hooks/learned-skills/detector.js +0 -150
  323. package/dist/hooks/learned-skills/detector.js.map +0 -1
  324. package/dist/hooks/learned-skills/finder.d.ts +0 -21
  325. package/dist/hooks/learned-skills/finder.d.ts.map +0 -1
  326. package/dist/hooks/learned-skills/finder.js +0 -117
  327. package/dist/hooks/learned-skills/finder.js.map +0 -1
  328. package/dist/hooks/learned-skills/index.d.ts +0 -62
  329. package/dist/hooks/learned-skills/index.d.ts.map +0 -1
  330. package/dist/hooks/learned-skills/index.js +0 -137
  331. package/dist/hooks/learned-skills/index.js.map +0 -1
  332. package/dist/hooks/learned-skills/loader.d.ts +0 -20
  333. package/dist/hooks/learned-skills/loader.d.ts.map +0 -1
  334. package/dist/hooks/learned-skills/loader.js +0 -107
  335. package/dist/hooks/learned-skills/loader.js.map +0 -1
  336. package/dist/hooks/learned-skills/parser.d.ts +0 -21
  337. package/dist/hooks/learned-skills/parser.d.ts.map +0 -1
  338. package/dist/hooks/learned-skills/parser.js +0 -190
  339. package/dist/hooks/learned-skills/parser.js.map +0 -1
  340. package/dist/hooks/learned-skills/promotion.d.ts +0 -29
  341. package/dist/hooks/learned-skills/promotion.d.ts.map +0 -1
  342. package/dist/hooks/learned-skills/promotion.js +0 -87
  343. package/dist/hooks/learned-skills/promotion.js.map +0 -1
  344. package/dist/hooks/learned-skills/types.d.ts +0 -109
  345. package/dist/hooks/learned-skills/types.d.ts.map +0 -1
  346. package/dist/hooks/learned-skills/types.js +0 -8
  347. package/dist/hooks/learned-skills/types.js.map +0 -1
  348. package/dist/hooks/learned-skills/validator.d.ts +0 -15
  349. package/dist/hooks/learned-skills/validator.d.ts.map +0 -1
  350. package/dist/hooks/learned-skills/validator.js +0 -87
  351. package/dist/hooks/learned-skills/validator.js.map +0 -1
  352. package/dist/hooks/learned-skills/writer.d.ts +0 -27
  353. package/dist/hooks/learned-skills/writer.d.ts.map +0 -1
  354. package/dist/hooks/learned-skills/writer.js +0 -126
  355. package/dist/hooks/learned-skills/writer.js.map +0 -1
  356. package/dist/hooks/mnemosyne/config.d.ts +0 -53
  357. package/dist/hooks/mnemosyne/config.d.ts.map +0 -1
  358. package/dist/hooks/mnemosyne/config.js +0 -103
  359. package/dist/hooks/mnemosyne/config.js.map +0 -1
  360. package/dist/hooks/mnemosyne/constants.d.ts +0 -24
  361. package/dist/hooks/mnemosyne/constants.d.ts.map +0 -1
  362. package/dist/hooks/mnemosyne/constants.js +0 -26
  363. package/dist/hooks/mnemosyne/constants.js.map +0 -1
  364. package/dist/hooks/mnemosyne/detection-hook.d.ts +0 -39
  365. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +0 -1
  366. package/dist/hooks/mnemosyne/detection-hook.js +0 -83
  367. package/dist/hooks/mnemosyne/detection-hook.js.map +0 -1
  368. package/dist/hooks/mnemosyne/detector.d.ts +0 -30
  369. package/dist/hooks/mnemosyne/detector.d.ts.map +0 -1
  370. package/dist/hooks/mnemosyne/detector.js +0 -150
  371. package/dist/hooks/mnemosyne/detector.js.map +0 -1
  372. package/dist/hooks/mnemosyne/finder.d.ts +0 -21
  373. package/dist/hooks/mnemosyne/finder.d.ts.map +0 -1
  374. package/dist/hooks/mnemosyne/finder.js +0 -117
  375. package/dist/hooks/mnemosyne/finder.js.map +0 -1
  376. package/dist/hooks/mnemosyne/index.d.ts +0 -62
  377. package/dist/hooks/mnemosyne/index.d.ts.map +0 -1
  378. package/dist/hooks/mnemosyne/index.js +0 -137
  379. package/dist/hooks/mnemosyne/index.js.map +0 -1
  380. package/dist/hooks/mnemosyne/loader.d.ts +0 -20
  381. package/dist/hooks/mnemosyne/loader.d.ts.map +0 -1
  382. package/dist/hooks/mnemosyne/loader.js +0 -113
  383. package/dist/hooks/mnemosyne/loader.js.map +0 -1
  384. package/dist/hooks/mnemosyne/parser.d.ts +0 -21
  385. package/dist/hooks/mnemosyne/parser.d.ts.map +0 -1
  386. package/dist/hooks/mnemosyne/parser.js +0 -190
  387. package/dist/hooks/mnemosyne/parser.js.map +0 -1
  388. package/dist/hooks/mnemosyne/promotion.d.ts +0 -29
  389. package/dist/hooks/mnemosyne/promotion.d.ts.map +0 -1
  390. package/dist/hooks/mnemosyne/promotion.js +0 -87
  391. package/dist/hooks/mnemosyne/promotion.js.map +0 -1
  392. package/dist/hooks/mnemosyne/types.d.ts +0 -109
  393. package/dist/hooks/mnemosyne/types.d.ts.map +0 -1
  394. package/dist/hooks/mnemosyne/types.js +0 -8
  395. package/dist/hooks/mnemosyne/types.js.map +0 -1
  396. package/dist/hooks/mnemosyne/validator.d.ts +0 -15
  397. package/dist/hooks/mnemosyne/validator.d.ts.map +0 -1
  398. package/dist/hooks/mnemosyne/validator.js +0 -87
  399. package/dist/hooks/mnemosyne/validator.js.map +0 -1
  400. package/dist/hooks/mnemosyne/writer.d.ts +0 -27
  401. package/dist/hooks/mnemosyne/writer.d.ts.map +0 -1
  402. package/dist/hooks/mnemosyne/writer.js +0 -126
  403. package/dist/hooks/mnemosyne/writer.js.map +0 -1
  404. package/dist/hooks/ralph-loop/index.d.ts +0 -116
  405. package/dist/hooks/ralph-loop/index.d.ts.map +0 -1
  406. package/dist/hooks/ralph-loop/index.js +0 -322
  407. package/dist/hooks/ralph-loop/index.js.map +0 -1
  408. package/dist/hooks/ralph-prd/index.d.ts +0 -130
  409. package/dist/hooks/ralph-prd/index.d.ts.map +0 -1
  410. package/dist/hooks/ralph-prd/index.js +0 -310
  411. package/dist/hooks/ralph-prd/index.js.map +0 -1
  412. package/dist/hooks/ralph-progress/index.d.ts +0 -102
  413. package/dist/hooks/ralph-progress/index.d.ts.map +0 -1
  414. package/dist/hooks/ralph-progress/index.js +0 -408
  415. package/dist/hooks/ralph-progress/index.js.map +0 -1
  416. package/dist/hooks/ralph-verifier/index.d.ts +0 -72
  417. package/dist/hooks/ralph-verifier/index.d.ts.map +0 -1
  418. package/dist/hooks/ralph-verifier/index.js +0 -223
  419. package/dist/hooks/ralph-verifier/index.js.map +0 -1
  420. package/dist/hooks/session-recovery/constants.d.ts +0 -56
  421. package/dist/hooks/session-recovery/constants.d.ts.map +0 -1
  422. package/dist/hooks/session-recovery/constants.js +0 -78
  423. package/dist/hooks/session-recovery/constants.js.map +0 -1
  424. package/dist/hooks/session-recovery/index.d.ts +0 -53
  425. package/dist/hooks/session-recovery/index.d.ts.map +0 -1
  426. package/dist/hooks/session-recovery/index.js +0 -321
  427. package/dist/hooks/session-recovery/index.js.map +0 -1
  428. package/dist/hooks/session-recovery/storage.d.ts +0 -76
  429. package/dist/hooks/session-recovery/storage.d.ts.map +0 -1
  430. package/dist/hooks/session-recovery/storage.js +0 -383
  431. package/dist/hooks/session-recovery/storage.js.map +0 -1
  432. package/dist/hooks/session-recovery/types.d.ts +0 -145
  433. package/dist/hooks/session-recovery/types.d.ts.map +0 -1
  434. package/dist/hooks/session-recovery/types.js +0 -8
  435. package/dist/hooks/session-recovery/types.js.map +0 -1
  436. package/dist/hooks/sisyphus-orchestrator/constants.d.ts +0 -23
  437. package/dist/hooks/sisyphus-orchestrator/constants.d.ts.map +0 -1
  438. package/dist/hooks/sisyphus-orchestrator/constants.js +0 -142
  439. package/dist/hooks/sisyphus-orchestrator/constants.js.map +0 -1
  440. package/dist/hooks/sisyphus-orchestrator/index.d.ts +0 -113
  441. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +0 -1
  442. package/dist/hooks/sisyphus-orchestrator/index.js +0 -309
  443. package/dist/hooks/sisyphus-orchestrator/index.js.map +0 -1
  444. package/dist/hooks/ultraqa-loop/index.d.ts +0 -94
  445. package/dist/hooks/ultraqa-loop/index.d.ts.map +0 -1
  446. package/dist/hooks/ultraqa-loop/index.js +0 -216
  447. package/dist/hooks/ultraqa-loop/index.js.map +0 -1
  448. package/dist/hooks/ultrawork-state/index.d.ts +0 -62
  449. package/dist/hooks/ultrawork-state/index.d.ts.map +0 -1
  450. package/dist/hooks/ultrawork-state/index.js +0 -208
  451. package/dist/hooks/ultrawork-state/index.js.map +0 -1
  452. package/dist/hud/sisyphus-state.d.ts +0 -31
  453. package/dist/hud/sisyphus-state.d.ts.map +0 -1
  454. package/dist/hud/sisyphus-state.js +0 -163
  455. package/dist/hud/sisyphus-state.js.map +0 -1
  456. package/dist/mcp/standalone-server.cjs +0 -19135
package/docs/CLAUDE.md CHANGED
@@ -227,7 +227,7 @@ Users don't need to learn commands. You detect intent and activate behaviors aut
227
227
  | `ralplan` | Iterative planning consensus | "ralplan this feature" |
228
228
  | `eco` | Token-efficient parallelism | "eco fix all errors" |
229
229
 
230
- **Combine them:** "ralph ulw: migrate database" = persistence + parallelism
230
+ **ralph includes ultrawork:** When you activate ralph mode, it automatically includes ultrawork's parallel execution. No need to combine keywords.
231
231
 
232
232
  ### Stopping and Cancelling
233
233
 
@@ -274,6 +274,32 @@ User says "cancelomc", "stopomc" → Invoke unified `cancel` skill (automaticall
274
274
  | `tdd` | TDD enforcement: test-first development | "tdd", "test first" | `/oh-my-claudecode:tdd` |
275
275
  | `mcp-setup` | Configure MCP servers for extended capabilities | "setup mcp", "configure mcp" | `/oh-my-claudecode:mcp-setup` |
276
276
  | `learn-about-omc` | Usage pattern analysis | - | `/oh-my-claudecode:learn-about-omc` |
277
+ | `build-fix` | Fix build and TypeScript errors with minimal changes | - | `/oh-my-claudecode:build-fix` |
278
+ | `code-review` | Run a comprehensive code review | - | `/oh-my-claudecode:code-review` |
279
+ | `security-review` | Run a comprehensive security review on code | - | `/oh-my-claudecode:security-review` |
280
+ | `writer-memory` | Agentic memory system for writers - track characters, relationships, scenes | - | `/oh-my-claudecode:writer-memory` |
281
+ | `project-session-manager` | Manage isolated dev environments with git worktrees and tmux | - | `/oh-my-claudecode:project-session-manager` |
282
+ | `local-skills-setup` | Set up and manage local skills for automatic matching and invocation | - | `/oh-my-claudecode:local-skills-setup` |
283
+ | `skill` | Manage local skills - list, add, remove, search, edit | - | `/oh-my-claudecode:skill` |
284
+
285
+ ### Choosing the Right Mode
286
+
287
+ | If you want... | Use this mode | Trigger keyword |
288
+ |----------------|---------------|-----------------|
289
+ | Full autonomous build from idea | `autopilot` | "autopilot", "build me", "I want a" |
290
+ | Parallel autopilot (3-5x faster) | `ultrapilot` | "ultrapilot", "parallel build" |
291
+ | Persistence until verified done | `ralph` | "ralph", "don't stop", "must complete" |
292
+ | Maximum parallelism, manual verify | `ultrawork` | "ulw", "ultrawork" |
293
+ | Cost-efficient parallel execution | `ecomode` | "eco", "ecomode", "budget" |
294
+ | Coordinated N agents on task pool | `swarm` | "swarm N agents" |
295
+ | Sequential agent chaining | `pipeline` | "pipeline", "chain agents" |
296
+ | QA cycling: test, fix, repeat | `ultraqa` | via autopilot transition |
297
+
298
+ #### Mode Relationships
299
+
300
+ - **ralph includes ultrawork**: When ralph is activated, it automatically enables ultrawork's parallel execution. No need to combine keywords.
301
+ - **autopilot can transition**: Autopilot may transition to ralph (for persistence) or ultraqa (for QA cycling) during execution.
302
+ - **ecomode = ultrawork + cheaper models**: Same parallel behavior but routes to haiku/sonnet agents for cost savings.
277
303
 
278
304
  ### All 32 Agents
279
305
 
@@ -528,9 +554,23 @@ Reusable verification protocol for workflows.
528
554
 
529
555
  Standardized state file locations.
530
556
 
531
- **Standard paths:**
532
- - Local: `.omc/state/{name}.json`
533
- - Global: `~/.omc/state/{name}.json`
557
+ **Standard paths for all mode state files:**
558
+ - Primary: `.omc/state/{name}.json` (local, per-project)
559
+ - Global backup: `~/.omc/state/{name}.json` (global, session continuity)
560
+
561
+ **Mode State Files:**
562
+ | Mode | State File |
563
+ |------|-----------|
564
+ | ralph | `ralph-state.json` |
565
+ | autopilot | `autopilot-state.json` |
566
+ | ultrapilot | `ultrapilot-state.json` |
567
+ | ultrawork | `ultrawork-state.json` |
568
+ | ecomode | `ecomode-state.json` |
569
+ | ultraqa | `ultraqa-state.json` |
570
+ | pipeline | `pipeline-state.json` |
571
+ | swarm | `swarm-summary.json` + `swarm-active.marker` |
572
+
573
+ **Important:** Never store OMC state in `~/.claude/` - that directory is reserved for Claude Code itself.
534
574
 
535
575
  Legacy locations auto-migrated on read.
536
576
 
package/docs/FEATURES.md CHANGED
@@ -562,7 +562,7 @@ if (validationStatus?.allApproved) {
562
562
 
563
563
  ### State Persistence
564
564
 
565
- All state is persisted to `.omc/autopilot-state.json` and includes:
565
+ All state is persisted to `.omc/state/autopilot-state.json` and includes:
566
566
 
567
567
  - Active status and current phase
568
568
  - Original user idea
package/docs/MIGRATION.md CHANGED
@@ -30,7 +30,7 @@ Maintenance release fixing test suite issues and continuing skill consolidation
30
30
  **Skill Consolidation:**
31
31
  - Continued cleanup from v3.5.3
32
32
  - Removed deprecated `cancel-*` skills (use `/cancel` instead)
33
- - Final skill count: 35 core skills
33
+ - Final skill count: 37 core skills
34
34
 
35
35
  ### Migration Steps
36
36
 
@@ -103,7 +103,7 @@ The following skills have been **completely removed** in v3.5.3:
103
103
  ### Skill Count
104
104
 
105
105
  - v3.5: 42 skills
106
- - v3.5.3: 35 skills (8 removed, 1 added)
106
+ - v3.5.3: 37 skills (8 removed, 3 added)
107
107
 
108
108
  ---
109
109
 
@@ -254,11 +254,11 @@ Include these anywhere in your message to explicitly activate behaviors. Use key
254
254
  | `ulw` / `ultrawork` | Maximum parallel execution | "ulw: fix all type errors" |
255
255
  | `plan` | Planning interview | "plan: new API design" |
256
256
 
257
- **Combine them for superpowers:**
257
+ **ralph includes ultrawork:**
258
258
  ```
259
- ralph ulw: migrate the entire database
259
+ ralph: migrate the entire database
260
260
 
261
- Persistence (won't stop) + Ultrawork (maximum parallelism)
261
+ Persistence (won't stop) + Ultrawork (maximum parallelism) built-in
262
262
  ```
263
263
 
264
264
  **No keywords?** Claude still auto-detects:
package/docs/REFERENCE.md CHANGED
@@ -9,7 +9,7 @@ Complete reference for oh-my-claudecode. For quick start, see the main [README.m
9
9
  - [Installation](#installation)
10
10
  - [Configuration](#configuration)
11
11
  - [Agents (32 Total)](#agents-32-total)
12
- - [Skills (35 Total)](#skills-35-total)
12
+ - [Skills (37 Total)](#skills-37-total)
13
13
  - [Slash Commands](#slash-commands)
14
14
  - [Hooks System](#hooks-system)
15
15
  - [Magic Keywords](#magic-keywords)
@@ -195,7 +195,7 @@ Always use `oh-my-claudecode:` prefix when calling via Task tool.
195
195
 
196
196
  ---
197
197
 
198
- ## Skills (35 Total)
198
+ ## Skills (37 Total)
199
199
 
200
200
  ### Core Skills
201
201
 
@@ -241,6 +241,10 @@ Always use `oh-my-claudecode:` prefix when calling via Task tool.
241
241
  | `release` | Automated release workflow | `/oh-my-claudecode:release` |
242
242
  | `mcp-setup` | Configure MCP servers | `/oh-my-claudecode:mcp-setup` |
243
243
  | `learn-about-omc` | Usage pattern analysis | `/oh-my-claudecode:learn-about-omc` |
244
+ | `writer-memory` | Agentic memory system for writers | `/oh-my-claudecode:writer-memory` |
245
+ | `project-session-manager` | Manage isolated dev environments (git worktrees + tmux) | `/oh-my-claudecode:project-session-manager` |
246
+ | `local-skills-setup` | Set up and manage local skills | `/oh-my-claudecode:local-skills-setup` |
247
+ | `skill` | Manage local skills (list, add, remove, search, edit) | `/oh-my-claudecode:skill` |
244
248
 
245
249
  ---
246
250
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-claude-sisyphus",
3
- "version": "3.8.9",
3
+ "version": "3.8.11",
4
4
  "description": "Multi-agent orchestration system for Claude Code - Inspired by oh-my-opencode",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -134,6 +134,64 @@ ${originalPrompt}
134
134
  IMPORTANT: Invoke the skill IMMEDIATELY. Do not proceed without loading the skill instructions.`;
135
135
  }
136
136
 
137
+ /**
138
+ * Create multi-skill invocation message for combined keywords
139
+ */
140
+ function createMultiSkillInvocation(skills, originalPrompt) {
141
+ if (skills.length === 0) return '';
142
+ if (skills.length === 1) {
143
+ return createSkillInvocation(skills[0].name, originalPrompt, skills[0].args);
144
+ }
145
+
146
+ const skillBlocks = skills.map((s, i) => {
147
+ const argsSection = s.args ? `\nArguments: ${s.args}` : '';
148
+ return `### Skill ${i + 1}: ${s.name.toUpperCase()}
149
+ Skill: oh-my-claudecode:${s.name}${argsSection}`;
150
+ }).join('\n\n');
151
+
152
+ return `[MAGIC KEYWORDS DETECTED: ${skills.map(s => s.name.toUpperCase()).join(', ')}]
153
+
154
+ You MUST invoke ALL of the following skills using the Skill tool, in order:
155
+
156
+ ${skillBlocks}
157
+
158
+ User request:
159
+ ${originalPrompt}
160
+
161
+ IMPORTANT: Invoke ALL skills listed above. Start with the first skill IMMEDIATELY. After it completes, invoke the next skill in order. Do not skip any skill.`;
162
+ }
163
+
164
+ /**
165
+ * Resolve conflicts between detected keywords
166
+ */
167
+ function resolveConflicts(matches) {
168
+ const names = matches.map(m => m.name);
169
+
170
+ // Cancel is exclusive
171
+ if (names.includes('cancel')) {
172
+ return [matches.find(m => m.name === 'cancel')];
173
+ }
174
+
175
+ let resolved = [...matches];
176
+
177
+ // Ecomode beats ultrawork
178
+ if (names.includes('ecomode') && names.includes('ultrawork')) {
179
+ resolved = resolved.filter(m => m.name !== 'ultrawork');
180
+ }
181
+
182
+ // Ultrapilot beats autopilot
183
+ if (names.includes('ultrapilot') && names.includes('autopilot')) {
184
+ resolved = resolved.filter(m => m.name !== 'autopilot');
185
+ }
186
+
187
+ // Sort by priority order
188
+ const priorityOrder = ['cancel','ralph','autopilot','ultrapilot','ultrawork','ecomode',
189
+ 'swarm','pipeline','ralplan','plan','tdd','research','ultrathink','deepsearch','analyze'];
190
+ resolved.sort((a, b) => priorityOrder.indexOf(a.name) - priorityOrder.indexOf(b.name));
191
+
192
+ return resolved;
193
+ }
194
+
137
195
  /**
138
196
  * Create proper hook output with additionalContext (Claude Code hooks API)
139
197
  * The 'message' field is NOT a valid hook output - use hookSpecificOutput.additionalContext
@@ -169,27 +227,20 @@ async function main() {
169
227
 
170
228
  const cleanPrompt = removeCodeBlocks(prompt).toLowerCase();
171
229
 
172
- // Priority order: cancel > ralph > autopilot > ultrapilot > ultrawork > ecomode > swarm > pipeline > ralplan > plan > tdd > research > ultrathink > deepsearch > analyze
230
+ // Collect all matching keywords
231
+ const matches = [];
173
232
 
174
- // Priority 1: Cancel (BEFORE other modes - clears states)
175
- // Use specific keywords to avoid false positives from natural language
176
- // (e.g., "don't let it stop the context" or URLs containing "cancel")
233
+ // Cancel keywords
177
234
  if (/\b(cancelomc|stopomc)\b/i.test(cleanPrompt)) {
178
- // Special: clear state files instead of creating them
179
- clearStateFiles(directory, ['ralph', 'autopilot', 'ultrapilot', 'ultrawork', 'ecomode', 'swarm', 'pipeline']);
180
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('cancel', prompt))));
181
- return;
235
+ matches.push({ name: 'cancel', args: '' });
182
236
  }
183
237
 
184
- // Priority 2: Ralph keywords
238
+ // Ralph keywords
185
239
  if (/\b(ralph|don't stop|must complete|until done)\b/i.test(cleanPrompt)) {
186
- activateState(directory, prompt, 'ralph');
187
- activateState(directory, prompt, 'ultrawork');
188
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('ralph', prompt))));
189
- return;
240
+ matches.push({ name: 'ralph', args: '' });
190
241
  }
191
242
 
192
- // Priority 3: Autopilot keywords
243
+ // Autopilot keywords
193
244
  if (/\b(autopilot|auto pilot|auto-pilot|autonomous|full auto|fullsend)\b/i.test(cleanPrompt) ||
194
245
  /\bbuild\s+me\s+/i.test(cleanPrompt) ||
195
246
  /\bcreate\s+me\s+/i.test(cleanPrompt) ||
@@ -199,101 +250,131 @@ async function main() {
199
250
  /\bhandle\s+it\s+all\b/i.test(cleanPrompt) ||
200
251
  /\bend\s+to\s+end\b/i.test(cleanPrompt) ||
201
252
  /\be2e\s+this\b/i.test(cleanPrompt)) {
202
- activateState(directory, prompt, 'autopilot');
203
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('autopilot', prompt))));
204
- return;
253
+ matches.push({ name: 'autopilot', args: '' });
205
254
  }
206
255
 
207
- // Priority 4: Ultrapilot
256
+ // Ultrapilot keywords
208
257
  if (/\b(ultrapilot|ultra-pilot)\b/i.test(cleanPrompt) ||
209
258
  /\bparallel\s+build\b/i.test(cleanPrompt) ||
210
259
  /\bswarm\s+build\b/i.test(cleanPrompt)) {
211
- activateState(directory, prompt, 'ultrapilot');
212
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('ultrapilot', prompt))));
213
- return;
260
+ matches.push({ name: 'ultrapilot', args: '' });
214
261
  }
215
262
 
216
- // Priority 5: Ultrawork keywords
263
+ // Ultrawork keywords
217
264
  if (/\b(ultrawork|ulw|uw)\b/i.test(cleanPrompt)) {
218
- activateState(directory, prompt, 'ultrawork');
219
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('ultrawork', prompt))));
220
- return;
265
+ matches.push({ name: 'ultrawork', args: '' });
221
266
  }
222
267
 
223
- // Priority 6: Ecomode keywords (includes "efficient")
268
+ // Ecomode keywords
224
269
  if (/\b(eco|ecomode|eco-mode|efficient|save-tokens|budget)\b/i.test(cleanPrompt)) {
225
- activateState(directory, prompt, 'ecomode');
226
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('ecomode', prompt))));
227
- return;
270
+ matches.push({ name: 'ecomode', args: '' });
228
271
  }
229
272
 
230
- // Priority 7: Swarm - parse N from "swarm N agents"
273
+ // Swarm - parse N from "swarm N agents"
231
274
  const swarmMatch = cleanPrompt.match(/\bswarm\s+(\d+)\s+agents?\b/i);
232
275
  if (swarmMatch || /\bcoordinated\s+agents\b/i.test(cleanPrompt)) {
233
- const agentCount = swarmMatch ? swarmMatch[1] : '3'; // default 3
234
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('swarm', prompt, agentCount))));
235
- return;
276
+ const agentCount = swarmMatch ? swarmMatch[1] : '3';
277
+ matches.push({ name: 'swarm', args: agentCount });
236
278
  }
237
279
 
238
- // Priority 8: Pipeline
280
+ // Pipeline keywords
239
281
  if (/\b(pipeline)\b/i.test(cleanPrompt) || /\bchain\s+agents\b/i.test(cleanPrompt)) {
240
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('pipeline', prompt))));
241
- return;
282
+ matches.push({ name: 'pipeline', args: '' });
242
283
  }
243
284
 
244
- // Priority 9: Ralplan keyword (before plan to avoid false match)
285
+ // Ralplan keyword
245
286
  if (/\b(ralplan)\b/i.test(cleanPrompt)) {
246
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('ralplan', prompt))));
247
- return;
287
+ matches.push({ name: 'ralplan', args: '' });
248
288
  }
249
289
 
250
- // Priority 10: Plan keywords
290
+ // Plan keywords
251
291
  if (/\b(plan this|plan the)\b/i.test(cleanPrompt)) {
252
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('plan', prompt))));
253
- return;
292
+ matches.push({ name: 'plan', args: '' });
254
293
  }
255
294
 
256
- // Priority 11: TDD
295
+ // TDD keywords
257
296
  if (/\b(tdd)\b/i.test(cleanPrompt) ||
258
297
  /\btest\s+first\b/i.test(cleanPrompt) ||
259
298
  /\bred\s+green\b/i.test(cleanPrompt)) {
260
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('tdd', prompt))));
261
- return;
299
+ matches.push({ name: 'tdd', args: '' });
262
300
  }
263
301
 
264
- // Priority 12: Research
265
- // "research" alone OR "analyze data" OR "statistics" trigger research skill
302
+ // Research keywords
266
303
  if (/\b(research)\b/i.test(cleanPrompt) ||
267
304
  /\banalyze\s+data\b/i.test(cleanPrompt) ||
268
305
  /\bstatistics\b/i.test(cleanPrompt)) {
269
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('research', prompt))));
270
- return;
306
+ matches.push({ name: 'research', args: '' });
271
307
  }
272
308
 
273
- // Priority 13: Ultrathink/think keywords (keep inline message)
309
+ // Ultrathink keywords
274
310
  if (/\b(ultrathink|think hard|think deeply)\b/i.test(cleanPrompt)) {
275
- console.log(JSON.stringify(createHookOutput(ULTRATHINK_MESSAGE)));
276
- return;
311
+ matches.push({ name: 'ultrathink', args: '' });
277
312
  }
278
313
 
279
- // Priority 14: Deepsearch (RESTRICTED patterns)
314
+ // Deepsearch keywords
280
315
  if (/\b(deepsearch)\b/i.test(cleanPrompt) ||
281
316
  /\bsearch\s+(the\s+)?(codebase|code|files?|project)\b/i.test(cleanPrompt) ||
282
317
  /\bfind\s+(in\s+)?(codebase|code|all\s+files?)\b/i.test(cleanPrompt)) {
283
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('deepsearch', prompt))));
284
- return;
318
+ matches.push({ name: 'deepsearch', args: '' });
285
319
  }
286
320
 
287
- // Priority 15: Analyze (RESTRICTED patterns)
321
+ // Analyze keywords
288
322
  if (/\b(deep\s*analyze)\b/i.test(cleanPrompt) ||
289
323
  /\binvestigate\s+(the|this|why)\b/i.test(cleanPrompt) ||
290
324
  /\bdebug\s+(the|this|why)\b/i.test(cleanPrompt)) {
291
- console.log(JSON.stringify(createHookOutput(createSkillInvocation('analyze', prompt))));
325
+ matches.push({ name: 'analyze', args: '' });
326
+ }
327
+
328
+ // No matches - pass through
329
+ if (matches.length === 0) {
330
+ console.log(JSON.stringify({ continue: true }));
292
331
  return;
293
332
  }
294
333
 
295
- // No keywords detected
296
- console.log(JSON.stringify({ continue: true }));
334
+ // Resolve conflicts
335
+ const resolved = resolveConflicts(matches);
336
+
337
+ // Handle cancel specially - clear states and emit
338
+ if (resolved.length > 0 && resolved[0].name === 'cancel') {
339
+ clearStateFiles(directory, ['ralph', 'autopilot', 'ultrapilot', 'ultrawork', 'ecomode', 'swarm', 'pipeline']);
340
+ console.log(JSON.stringify(createHookOutput(createSkillInvocation('cancel', prompt))));
341
+ return;
342
+ }
343
+
344
+ // Activate states for modes that need them
345
+ const stateModes = resolved.filter(m => ['ralph', 'autopilot', 'ultrapilot', 'ultrawork', 'ecomode'].includes(m.name));
346
+ for (const mode of stateModes) {
347
+ activateState(directory, prompt, mode.name);
348
+ }
349
+
350
+ // Special: Ralph with ultrawork (only if ecomode NOT present)
351
+ const hasRalph = resolved.some(m => m.name === 'ralph');
352
+ const hasEcomode = resolved.some(m => m.name === 'ecomode');
353
+ const hasUltrawork = resolved.some(m => m.name === 'ultrawork');
354
+ if (hasRalph && !hasEcomode && !hasUltrawork) {
355
+ activateState(directory, prompt, 'ultrawork');
356
+ }
357
+
358
+ // Handle ultrathink specially - prepend message instead of skill invocation
359
+ const ultrathinkIndex = resolved.findIndex(m => m.name === 'ultrathink');
360
+ if (ultrathinkIndex !== -1) {
361
+ // Remove ultrathink from skill list
362
+ resolved.splice(ultrathinkIndex, 1);
363
+
364
+ // If ultrathink was the only match, emit message
365
+ if (resolved.length === 0) {
366
+ console.log(JSON.stringify(createHookOutput(ULTRATHINK_MESSAGE)));
367
+ return;
368
+ }
369
+
370
+ // Otherwise, prepend ultrathink message to skill invocation
371
+ const skillMessage = createMultiSkillInvocation(resolved, prompt);
372
+ console.log(JSON.stringify(createHookOutput(ULTRATHINK_MESSAGE + skillMessage)));
373
+ return;
374
+ }
375
+
376
+ // Emit skill invocation(s)
377
+ console.log(JSON.stringify(createHookOutput(createMultiSkillInvocation(resolved, prompt))));
297
378
  } catch (error) {
298
379
  // On any error, allow continuation
299
380
  console.log(JSON.stringify({ continue: true }));
@@ -28,7 +28,7 @@ You can include these words naturally in your request for explicit control:
28
28
  | **ulw** | Max parallelism | "ulw refactor the API" |
29
29
  | **plan** | Planning interview | "plan the new endpoints" |
30
30
 
31
- **Combine them:** "ralph ulw: migrate the database"
31
+ **ralph includes ultrawork:** When you activate ralph mode, it automatically includes ultrawork's parallel execution. No need to combine keywords.
32
32
 
33
33
  ## Stopping Things
34
34
 
@@ -511,7 +511,7 @@ Just include these words naturally in your request:
511
511
  | eco | Token-efficient mode | "eco refactor the API" |
512
512
  | plan | Planning interview | "plan the new endpoints" |
513
513
 
514
- Combine them: "ralph ulw: migrate the database"
514
+ **ralph includes ultrawork:** When you activate ralph mode, it automatically includes ultrawork's parallel execution. No need to combine keywords.
515
515
 
516
516
  MCP SERVERS:
517
517
  Run /oh-my-claudecode:mcp-setup to add tools like web search, GitHub, etc.