oh-my-claude-sisyphus 2.6.1 → 3.0.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 (548) hide show
  1. package/README.md +59 -785
  2. package/agents/analyst.md +85 -0
  3. package/agents/architect-low.md +88 -0
  4. package/agents/architect-medium.md +108 -0
  5. package/agents/architect.md +77 -0
  6. package/agents/critic.md +97 -0
  7. package/agents/designer-high.md +113 -0
  8. package/agents/designer-low.md +89 -0
  9. package/agents/designer.md +80 -0
  10. package/agents/executor-high.md +116 -0
  11. package/agents/executor-low.md +94 -0
  12. package/agents/executor.md +62 -0
  13. package/agents/explore-medium.md +113 -0
  14. package/agents/explore.md +86 -0
  15. package/agents/planner.md +164 -0
  16. package/agents/qa-tester.md +109 -0
  17. package/agents/researcher-low.md +84 -0
  18. package/agents/researcher.md +70 -0
  19. package/agents/vision.md +39 -0
  20. package/agents/writer.md +152 -0
  21. package/commands/.gitkeep +0 -0
  22. package/dist/__tests__/hooks.test.js +22 -22
  23. package/dist/__tests__/hooks.test.js.map +1 -1
  24. package/dist/__tests__/hud-agents.test.d.ts +7 -0
  25. package/dist/__tests__/hud-agents.test.d.ts.map +1 -0
  26. package/dist/__tests__/hud-agents.test.js +363 -0
  27. package/dist/__tests__/hud-agents.test.js.map +1 -0
  28. package/dist/__tests__/installer.test.js +184 -116
  29. package/dist/__tests__/installer.test.js.map +1 -1
  30. package/dist/__tests__/learned-skills/config.test.d.ts +2 -0
  31. package/dist/__tests__/learned-skills/config.test.d.ts.map +1 -0
  32. package/dist/__tests__/learned-skills/config.test.js +37 -0
  33. package/dist/__tests__/learned-skills/config.test.js.map +1 -0
  34. package/dist/__tests__/learned-skills/detector.test.d.ts +2 -0
  35. package/dist/__tests__/learned-skills/detector.test.d.ts.map +1 -0
  36. package/dist/__tests__/learned-skills/detector.test.js +99 -0
  37. package/dist/__tests__/learned-skills/detector.test.js.map +1 -0
  38. package/dist/__tests__/learned-skills/finder.test.d.ts +2 -0
  39. package/dist/__tests__/learned-skills/finder.test.d.ts.map +1 -0
  40. package/dist/__tests__/learned-skills/finder.test.js +59 -0
  41. package/dist/__tests__/learned-skills/finder.test.js.map +1 -0
  42. package/dist/__tests__/learned-skills/loader.test.d.ts +2 -0
  43. package/dist/__tests__/learned-skills/loader.test.d.ts.map +1 -0
  44. package/dist/__tests__/learned-skills/loader.test.js +69 -0
  45. package/dist/__tests__/learned-skills/loader.test.js.map +1 -0
  46. package/dist/__tests__/learned-skills/parser.test.d.ts +2 -0
  47. package/dist/__tests__/learned-skills/parser.test.d.ts.map +1 -0
  48. package/dist/__tests__/learned-skills/parser.test.js +81 -0
  49. package/dist/__tests__/learned-skills/parser.test.js.map +1 -0
  50. package/dist/__tests__/learned-skills/validator.test.d.ts +2 -0
  51. package/dist/__tests__/learned-skills/validator.test.d.ts.map +1 -0
  52. package/dist/__tests__/learned-skills/validator.test.js +85 -0
  53. package/dist/__tests__/learned-skills/validator.test.js.map +1 -0
  54. package/dist/__tests__/mnemosyne/config.test.d.ts +2 -0
  55. package/dist/__tests__/mnemosyne/config.test.d.ts.map +1 -0
  56. package/dist/__tests__/mnemosyne/config.test.js +37 -0
  57. package/dist/__tests__/mnemosyne/config.test.js.map +1 -0
  58. package/dist/__tests__/mnemosyne/detector.test.d.ts +2 -0
  59. package/dist/__tests__/mnemosyne/detector.test.d.ts.map +1 -0
  60. package/dist/__tests__/mnemosyne/detector.test.js +99 -0
  61. package/dist/__tests__/mnemosyne/detector.test.js.map +1 -0
  62. package/dist/__tests__/mnemosyne/finder.test.d.ts +2 -0
  63. package/dist/__tests__/mnemosyne/finder.test.d.ts.map +1 -0
  64. package/dist/__tests__/mnemosyne/finder.test.js +61 -0
  65. package/dist/__tests__/mnemosyne/finder.test.js.map +1 -0
  66. package/dist/__tests__/mnemosyne/loader.test.d.ts +2 -0
  67. package/dist/__tests__/mnemosyne/loader.test.d.ts.map +1 -0
  68. package/dist/__tests__/mnemosyne/loader.test.js +73 -0
  69. package/dist/__tests__/mnemosyne/loader.test.js.map +1 -0
  70. package/dist/__tests__/mnemosyne/parser.test.d.ts +2 -0
  71. package/dist/__tests__/mnemosyne/parser.test.d.ts.map +1 -0
  72. package/dist/__tests__/mnemosyne/parser.test.js +81 -0
  73. package/dist/__tests__/mnemosyne/parser.test.js.map +1 -0
  74. package/dist/__tests__/mnemosyne/validator.test.d.ts +2 -0
  75. package/dist/__tests__/mnemosyne/validator.test.d.ts.map +1 -0
  76. package/dist/__tests__/mnemosyne/validator.test.js +85 -0
  77. package/dist/__tests__/mnemosyne/validator.test.js.map +1 -0
  78. package/dist/__tests__/model-routing.test.js +34 -34
  79. package/dist/__tests__/model-routing.test.js.map +1 -1
  80. package/dist/__tests__/notepad.test.js +7 -7
  81. package/dist/__tests__/notepad.test.js.map +1 -1
  82. package/dist/__tests__/ralph-prd.test.js +12 -12
  83. package/dist/__tests__/ralph-prd.test.js.map +1 -1
  84. package/dist/__tests__/ralph-progress.test.js +12 -12
  85. package/dist/__tests__/ralph-progress.test.js.map +1 -1
  86. package/dist/__tests__/skills.test.js +50 -17
  87. package/dist/__tests__/skills.test.js.map +1 -1
  88. package/dist/__tests__/types.test.js +5 -5
  89. package/dist/__tests__/types.test.js.map +1 -1
  90. package/dist/agents/analyst.d.ts +11 -0
  91. package/dist/agents/analyst.d.ts.map +1 -0
  92. package/dist/agents/analyst.js +115 -0
  93. package/dist/agents/analyst.js.map +1 -0
  94. package/dist/agents/architect.d.ts +12 -0
  95. package/dist/agents/architect.d.ts.map +1 -0
  96. package/dist/agents/architect.js +189 -0
  97. package/dist/agents/architect.js.map +1 -0
  98. package/dist/agents/coordinator.d.ts +11 -0
  99. package/dist/agents/coordinator.d.ts.map +1 -0
  100. package/dist/agents/coordinator.js +115 -0
  101. package/dist/agents/coordinator.js.map +1 -0
  102. package/dist/agents/critic.d.ts +11 -0
  103. package/dist/agents/critic.d.ts.map +1 -0
  104. package/dist/agents/critic.js +127 -0
  105. package/dist/agents/critic.js.map +1 -0
  106. package/dist/agents/definitions.d.ts +33 -70
  107. package/dist/agents/definitions.d.ts.map +1 -1
  108. package/dist/agents/definitions.js +140 -1268
  109. package/dist/agents/definitions.js.map +1 -1
  110. package/dist/agents/designer.d.ts +11 -0
  111. package/dist/agents/designer.d.ts.map +1 -0
  112. package/dist/agents/designer.js +115 -0
  113. package/dist/agents/designer.js.map +1 -0
  114. package/dist/agents/executor.d.ts +12 -0
  115. package/dist/agents/executor.d.ts.map +1 -0
  116. package/dist/agents/executor.js +93 -0
  117. package/dist/agents/executor.js.map +1 -0
  118. package/dist/agents/explore.js +4 -4
  119. package/dist/agents/explore.js.map +1 -1
  120. package/dist/agents/index.d.ts +12 -11
  121. package/dist/agents/index.d.ts.map +1 -1
  122. package/dist/agents/index.js +15 -16
  123. package/dist/agents/index.js.map +1 -1
  124. package/dist/agents/planner.d.ts +11 -0
  125. package/dist/agents/planner.d.ts.map +1 -0
  126. package/dist/agents/planner.js +194 -0
  127. package/dist/agents/planner.js.map +1 -0
  128. package/dist/agents/qa-tester.js +16 -16
  129. package/dist/agents/qa-tester.js.map +1 -1
  130. package/dist/agents/researcher.d.ts +12 -0
  131. package/dist/agents/researcher.d.ts.map +1 -0
  132. package/dist/agents/researcher.js +103 -0
  133. package/dist/agents/researcher.js.map +1 -0
  134. package/dist/agents/vision.d.ts +11 -0
  135. package/dist/agents/vision.d.ts.map +1 -0
  136. package/dist/agents/vision.js +70 -0
  137. package/dist/agents/vision.js.map +1 -0
  138. package/dist/agents/writer.d.ts +11 -0
  139. package/dist/agents/writer.d.ts.map +1 -0
  140. package/dist/agents/writer.js +209 -0
  141. package/dist/agents/writer.js.map +1 -0
  142. package/dist/cli/index.js +32 -32
  143. package/dist/cli/index.js.map +1 -1
  144. package/dist/commands/index.d.ts +4 -4
  145. package/dist/commands/index.js +4 -4
  146. package/dist/config/loader.js +25 -25
  147. package/dist/config/loader.js.map +1 -1
  148. package/dist/features/auto-update.d.ts +5 -5
  149. package/dist/features/auto-update.d.ts.map +1 -1
  150. package/dist/features/auto-update.js +17 -17
  151. package/dist/features/auto-update.js.map +1 -1
  152. package/dist/features/background-agent/manager.js +1 -1
  153. package/dist/features/background-agent/manager.js.map +1 -1
  154. package/dist/features/boulder-state/constants.d.ts +5 -5
  155. package/dist/features/boulder-state/constants.d.ts.map +1 -1
  156. package/dist/features/boulder-state/constants.js +3 -3
  157. package/dist/features/boulder-state/constants.js.map +1 -1
  158. package/dist/features/boulder-state/index.d.ts +2 -2
  159. package/dist/features/boulder-state/index.d.ts.map +1 -1
  160. package/dist/features/boulder-state/index.js +2 -2
  161. package/dist/features/boulder-state/index.js.map +1 -1
  162. package/dist/features/boulder-state/storage.d.ts +3 -3
  163. package/dist/features/boulder-state/storage.d.ts.map +1 -1
  164. package/dist/features/boulder-state/storage.js +6 -6
  165. package/dist/features/boulder-state/storage.js.map +1 -1
  166. package/dist/features/builtin-skills/skills.d.ts +15 -1
  167. package/dist/features/builtin-skills/skills.d.ts.map +1 -1
  168. package/dist/features/builtin-skills/skills.js +100 -1110
  169. package/dist/features/builtin-skills/skills.js.map +1 -1
  170. package/dist/features/context-injector/types.d.ts +1 -1
  171. package/dist/features/context-injector/types.d.ts.map +1 -1
  172. package/dist/features/index.d.ts +1 -1
  173. package/dist/features/index.d.ts.map +1 -1
  174. package/dist/features/index.js +2 -2
  175. package/dist/features/index.js.map +1 -1
  176. package/dist/features/magic-keywords.js +14 -14
  177. package/dist/features/magic-keywords.js.map +1 -1
  178. package/dist/features/model-routing/prompts/opus.d.ts +1 -1
  179. package/dist/features/model-routing/prompts/opus.d.ts.map +1 -1
  180. package/dist/features/model-routing/prompts/opus.js +1 -1
  181. package/dist/features/model-routing/router.d.ts +1 -1
  182. package/dist/features/model-routing/router.js +14 -14
  183. package/dist/features/model-routing/router.js.map +1 -1
  184. package/dist/features/model-routing/rules.js +31 -31
  185. package/dist/features/model-routing/rules.js.map +1 -1
  186. package/dist/features/model-routing/types.js +1 -1
  187. package/dist/features/model-routing/types.js.map +1 -1
  188. package/dist/hooks/agent-usage-reminder/constants.d.ts +2 -2
  189. package/dist/hooks/agent-usage-reminder/constants.d.ts.map +1 -1
  190. package/dist/hooks/agent-usage-reminder/constants.js +5 -5
  191. package/dist/hooks/agent-usage-reminder/constants.js.map +1 -1
  192. package/dist/hooks/auto-slash-command/constants.d.ts +1 -1
  193. package/dist/hooks/auto-slash-command/constants.d.ts.map +1 -1
  194. package/dist/hooks/auto-slash-command/constants.js +9 -2
  195. package/dist/hooks/auto-slash-command/constants.js.map +1 -1
  196. package/dist/hooks/bridge.d.ts +2 -2
  197. package/dist/hooks/bridge.d.ts.map +1 -1
  198. package/dist/hooks/bridge.js +50 -18
  199. package/dist/hooks/bridge.js.map +1 -1
  200. package/dist/hooks/directory-readme-injector/constants.d.ts +1 -1
  201. package/dist/hooks/directory-readme-injector/constants.d.ts.map +1 -1
  202. package/dist/hooks/directory-readme-injector/constants.js +2 -2
  203. package/dist/hooks/directory-readme-injector/constants.js.map +1 -1
  204. package/dist/hooks/index.d.ts +3 -2
  205. package/dist/hooks/index.d.ts.map +1 -1
  206. package/dist/hooks/index.js +9 -4
  207. package/dist/hooks/index.js.map +1 -1
  208. package/dist/hooks/learned-skills/config.d.ts +53 -0
  209. package/dist/hooks/learned-skills/config.d.ts.map +1 -0
  210. package/dist/hooks/learned-skills/config.js +103 -0
  211. package/dist/hooks/learned-skills/config.js.map +1 -0
  212. package/dist/hooks/learned-skills/constants.d.ts +24 -0
  213. package/dist/hooks/learned-skills/constants.d.ts.map +1 -0
  214. package/dist/hooks/learned-skills/constants.js +26 -0
  215. package/dist/hooks/learned-skills/constants.js.map +1 -0
  216. package/dist/hooks/learned-skills/detection-hook.d.ts +39 -0
  217. package/dist/hooks/learned-skills/detection-hook.d.ts.map +1 -0
  218. package/dist/hooks/learned-skills/detection-hook.js +83 -0
  219. package/dist/hooks/learned-skills/detection-hook.js.map +1 -0
  220. package/dist/hooks/learned-skills/detector.d.ts +30 -0
  221. package/dist/hooks/learned-skills/detector.d.ts.map +1 -0
  222. package/dist/hooks/learned-skills/detector.js +150 -0
  223. package/dist/hooks/learned-skills/detector.js.map +1 -0
  224. package/dist/hooks/learned-skills/finder.d.ts +21 -0
  225. package/dist/hooks/learned-skills/finder.d.ts.map +1 -0
  226. package/dist/hooks/learned-skills/finder.js +117 -0
  227. package/dist/hooks/learned-skills/finder.js.map +1 -0
  228. package/dist/hooks/learned-skills/index.d.ts +62 -0
  229. package/dist/hooks/learned-skills/index.d.ts.map +1 -0
  230. package/dist/hooks/learned-skills/index.js +137 -0
  231. package/dist/hooks/learned-skills/index.js.map +1 -0
  232. package/dist/hooks/learned-skills/loader.d.ts +20 -0
  233. package/dist/hooks/learned-skills/loader.d.ts.map +1 -0
  234. package/dist/hooks/learned-skills/loader.js +107 -0
  235. package/dist/hooks/learned-skills/loader.js.map +1 -0
  236. package/dist/hooks/learned-skills/parser.d.ts +21 -0
  237. package/dist/hooks/learned-skills/parser.d.ts.map +1 -0
  238. package/dist/hooks/learned-skills/parser.js +190 -0
  239. package/dist/hooks/learned-skills/parser.js.map +1 -0
  240. package/dist/hooks/learned-skills/promotion.d.ts +29 -0
  241. package/dist/hooks/learned-skills/promotion.d.ts.map +1 -0
  242. package/dist/hooks/learned-skills/promotion.js +87 -0
  243. package/dist/hooks/learned-skills/promotion.js.map +1 -0
  244. package/dist/hooks/learned-skills/types.d.ts +109 -0
  245. package/dist/hooks/learned-skills/types.d.ts.map +1 -0
  246. package/dist/hooks/learned-skills/types.js +8 -0
  247. package/dist/hooks/learned-skills/types.js.map +1 -0
  248. package/dist/hooks/learned-skills/validator.d.ts +15 -0
  249. package/dist/hooks/learned-skills/validator.d.ts.map +1 -0
  250. package/dist/hooks/learned-skills/validator.js +87 -0
  251. package/dist/hooks/learned-skills/validator.js.map +1 -0
  252. package/dist/hooks/learned-skills/writer.d.ts +27 -0
  253. package/dist/hooks/learned-skills/writer.d.ts.map +1 -0
  254. package/dist/hooks/learned-skills/writer.js +126 -0
  255. package/dist/hooks/learned-skills/writer.js.map +1 -0
  256. package/dist/hooks/learner/config.d.ts +53 -0
  257. package/dist/hooks/learner/config.d.ts.map +1 -0
  258. package/dist/hooks/learner/config.js +103 -0
  259. package/dist/hooks/learner/config.js.map +1 -0
  260. package/dist/hooks/learner/constants.d.ts +24 -0
  261. package/dist/hooks/learner/constants.d.ts.map +1 -0
  262. package/dist/hooks/learner/constants.js +26 -0
  263. package/dist/hooks/learner/constants.js.map +1 -0
  264. package/dist/hooks/learner/detection-hook.d.ts +39 -0
  265. package/dist/hooks/learner/detection-hook.d.ts.map +1 -0
  266. package/dist/hooks/learner/detection-hook.js +83 -0
  267. package/dist/hooks/learner/detection-hook.js.map +1 -0
  268. package/dist/hooks/learner/detector.d.ts +30 -0
  269. package/dist/hooks/learner/detector.d.ts.map +1 -0
  270. package/dist/hooks/learner/detector.js +150 -0
  271. package/dist/hooks/learner/detector.js.map +1 -0
  272. package/dist/hooks/learner/finder.d.ts +21 -0
  273. package/dist/hooks/learner/finder.d.ts.map +1 -0
  274. package/dist/hooks/learner/finder.js +117 -0
  275. package/dist/hooks/learner/finder.js.map +1 -0
  276. package/dist/hooks/learner/index.d.ts +62 -0
  277. package/dist/hooks/learner/index.d.ts.map +1 -0
  278. package/dist/hooks/learner/index.js +137 -0
  279. package/dist/hooks/learner/index.js.map +1 -0
  280. package/dist/hooks/learner/loader.d.ts +20 -0
  281. package/dist/hooks/learner/loader.d.ts.map +1 -0
  282. package/dist/hooks/learner/loader.js +113 -0
  283. package/dist/hooks/learner/loader.js.map +1 -0
  284. package/dist/hooks/learner/parser.d.ts +21 -0
  285. package/dist/hooks/learner/parser.d.ts.map +1 -0
  286. package/dist/hooks/learner/parser.js +190 -0
  287. package/dist/hooks/learner/parser.js.map +1 -0
  288. package/dist/hooks/learner/promotion.d.ts +29 -0
  289. package/dist/hooks/learner/promotion.d.ts.map +1 -0
  290. package/dist/hooks/learner/promotion.js +87 -0
  291. package/dist/hooks/learner/promotion.js.map +1 -0
  292. package/dist/hooks/learner/types.d.ts +109 -0
  293. package/dist/hooks/learner/types.d.ts.map +1 -0
  294. package/dist/hooks/learner/types.js +8 -0
  295. package/dist/hooks/learner/types.js.map +1 -0
  296. package/dist/hooks/learner/validator.d.ts +15 -0
  297. package/dist/hooks/learner/validator.d.ts.map +1 -0
  298. package/dist/hooks/learner/validator.js +87 -0
  299. package/dist/hooks/learner/validator.js.map +1 -0
  300. package/dist/hooks/learner/writer.d.ts +27 -0
  301. package/dist/hooks/learner/writer.d.ts.map +1 -0
  302. package/dist/hooks/learner/writer.js +126 -0
  303. package/dist/hooks/learner/writer.js.map +1 -0
  304. package/dist/hooks/mnemosyne/config.d.ts +53 -0
  305. package/dist/hooks/mnemosyne/config.d.ts.map +1 -0
  306. package/dist/hooks/mnemosyne/config.js +103 -0
  307. package/dist/hooks/mnemosyne/config.js.map +1 -0
  308. package/dist/hooks/mnemosyne/constants.d.ts +24 -0
  309. package/dist/hooks/mnemosyne/constants.d.ts.map +1 -0
  310. package/dist/hooks/mnemosyne/constants.js +26 -0
  311. package/dist/hooks/mnemosyne/constants.js.map +1 -0
  312. package/dist/hooks/mnemosyne/detection-hook.d.ts +39 -0
  313. package/dist/hooks/mnemosyne/detection-hook.d.ts.map +1 -0
  314. package/dist/hooks/mnemosyne/detection-hook.js +83 -0
  315. package/dist/hooks/mnemosyne/detection-hook.js.map +1 -0
  316. package/dist/hooks/mnemosyne/detector.d.ts +30 -0
  317. package/dist/hooks/mnemosyne/detector.d.ts.map +1 -0
  318. package/dist/hooks/mnemosyne/detector.js +150 -0
  319. package/dist/hooks/mnemosyne/detector.js.map +1 -0
  320. package/dist/hooks/mnemosyne/finder.d.ts +21 -0
  321. package/dist/hooks/mnemosyne/finder.d.ts.map +1 -0
  322. package/dist/hooks/mnemosyne/finder.js +117 -0
  323. package/dist/hooks/mnemosyne/finder.js.map +1 -0
  324. package/dist/hooks/mnemosyne/index.d.ts +62 -0
  325. package/dist/hooks/mnemosyne/index.d.ts.map +1 -0
  326. package/dist/hooks/mnemosyne/index.js +137 -0
  327. package/dist/hooks/mnemosyne/index.js.map +1 -0
  328. package/dist/hooks/mnemosyne/loader.d.ts +20 -0
  329. package/dist/hooks/mnemosyne/loader.d.ts.map +1 -0
  330. package/dist/hooks/mnemosyne/loader.js +113 -0
  331. package/dist/hooks/mnemosyne/loader.js.map +1 -0
  332. package/dist/hooks/mnemosyne/parser.d.ts +21 -0
  333. package/dist/hooks/mnemosyne/parser.d.ts.map +1 -0
  334. package/dist/hooks/mnemosyne/parser.js +190 -0
  335. package/dist/hooks/mnemosyne/parser.js.map +1 -0
  336. package/dist/hooks/mnemosyne/promotion.d.ts +29 -0
  337. package/dist/hooks/mnemosyne/promotion.d.ts.map +1 -0
  338. package/dist/hooks/mnemosyne/promotion.js +87 -0
  339. package/dist/hooks/mnemosyne/promotion.js.map +1 -0
  340. package/dist/hooks/mnemosyne/types.d.ts +109 -0
  341. package/dist/hooks/mnemosyne/types.d.ts.map +1 -0
  342. package/dist/hooks/mnemosyne/types.js +8 -0
  343. package/dist/hooks/mnemosyne/types.js.map +1 -0
  344. package/dist/hooks/mnemosyne/validator.d.ts +15 -0
  345. package/dist/hooks/mnemosyne/validator.d.ts.map +1 -0
  346. package/dist/hooks/mnemosyne/validator.js +87 -0
  347. package/dist/hooks/mnemosyne/validator.js.map +1 -0
  348. package/dist/hooks/mnemosyne/writer.d.ts +27 -0
  349. package/dist/hooks/mnemosyne/writer.d.ts.map +1 -0
  350. package/dist/hooks/mnemosyne/writer.js +126 -0
  351. package/dist/hooks/mnemosyne/writer.js.map +1 -0
  352. package/dist/hooks/notepad/index.d.ts +2 -2
  353. package/dist/hooks/notepad/index.js +7 -7
  354. package/dist/hooks/notepad/index.js.map +1 -1
  355. package/dist/hooks/omc-orchestrator/constants.d.ts +23 -0
  356. package/dist/hooks/omc-orchestrator/constants.d.ts.map +1 -0
  357. package/dist/hooks/omc-orchestrator/constants.js +142 -0
  358. package/dist/hooks/omc-orchestrator/constants.js.map +1 -0
  359. package/dist/hooks/omc-orchestrator/index.d.ts +113 -0
  360. package/dist/hooks/omc-orchestrator/index.d.ts.map +1 -0
  361. package/dist/hooks/omc-orchestrator/index.js +309 -0
  362. package/dist/hooks/omc-orchestrator/index.js.map +1 -0
  363. package/dist/hooks/persistent-mode/index.d.ts +4 -4
  364. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  365. package/dist/hooks/persistent-mode/index.js +37 -37
  366. package/dist/hooks/persistent-mode/index.js.map +1 -1
  367. package/dist/hooks/ralph-loop/index.d.ts +33 -5
  368. package/dist/hooks/ralph-loop/index.d.ts.map +1 -1
  369. package/dist/hooks/ralph-loop/index.js +91 -17
  370. package/dist/hooks/ralph-loop/index.js.map +1 -1
  371. package/dist/hooks/ralph-prd/index.d.ts +4 -4
  372. package/dist/hooks/ralph-prd/index.d.ts.map +1 -1
  373. package/dist/hooks/ralph-prd/index.js +13 -13
  374. package/dist/hooks/ralph-prd/index.js.map +1 -1
  375. package/dist/hooks/ralph-progress/index.d.ts +5 -5
  376. package/dist/hooks/ralph-progress/index.d.ts.map +1 -1
  377. package/dist/hooks/ralph-progress/index.js +14 -14
  378. package/dist/hooks/ralph-progress/index.js.map +1 -1
  379. package/dist/hooks/ralph-verifier/index.d.ts +23 -23
  380. package/dist/hooks/ralph-verifier/index.d.ts.map +1 -1
  381. package/dist/hooks/ralph-verifier/index.js +41 -41
  382. package/dist/hooks/ralph-verifier/index.js.map +1 -1
  383. package/dist/hooks/rules-injector/constants.d.ts +1 -1
  384. package/dist/hooks/rules-injector/constants.d.ts.map +1 -1
  385. package/dist/hooks/rules-injector/constants.js +2 -2
  386. package/dist/hooks/rules-injector/constants.js.map +1 -1
  387. package/dist/hooks/todo-continuation/index.js +1 -1
  388. package/dist/hooks/todo-continuation/index.js.map +1 -1
  389. package/dist/hooks/ultraqa-loop/index.d.ts +1 -1
  390. package/dist/hooks/ultraqa-loop/index.js +8 -8
  391. package/dist/hooks/ultraqa-loop/index.js.map +1 -1
  392. package/dist/hooks/ultrawork-state/index.js +7 -7
  393. package/dist/hooks/ultrawork-state/index.js.map +1 -1
  394. package/dist/hud/background-tasks.d.ts +26 -0
  395. package/dist/hud/background-tasks.d.ts.map +1 -0
  396. package/dist/hud/background-tasks.js +116 -0
  397. package/dist/hud/background-tasks.js.map +1 -0
  398. package/dist/hud/colors.d.ts +54 -0
  399. package/dist/hud/colors.d.ts.map +1 -0
  400. package/dist/hud/colors.js +156 -0
  401. package/dist/hud/colors.js.map +1 -0
  402. package/dist/hud/elements/agents.d.ts +73 -0
  403. package/dist/hud/elements/agents.d.ts.map +1 -0
  404. package/dist/hud/elements/agents.js +405 -0
  405. package/dist/hud/elements/agents.js.map +1 -0
  406. package/dist/hud/elements/background.d.ts +20 -0
  407. package/dist/hud/elements/background.d.ts.map +1 -0
  408. package/dist/hud/elements/background.js +70 -0
  409. package/dist/hud/elements/background.js.map +1 -0
  410. package/dist/hud/elements/context.d.ts +19 -0
  411. package/dist/hud/elements/context.d.ts.map +1 -0
  412. package/dist/hud/elements/context.js +58 -0
  413. package/dist/hud/elements/context.js.map +1 -0
  414. package/dist/hud/elements/index.d.ts +17 -0
  415. package/dist/hud/elements/index.d.ts.map +1 -0
  416. package/dist/hud/elements/index.js +17 -0
  417. package/dist/hud/elements/index.js.map +1 -0
  418. package/dist/hud/elements/limits.d.ts +19 -0
  419. package/dist/hud/elements/limits.d.ts.map +1 -0
  420. package/dist/hud/elements/limits.js +54 -0
  421. package/dist/hud/elements/limits.js.map +1 -0
  422. package/dist/hud/elements/permission.d.ts +13 -0
  423. package/dist/hud/elements/permission.d.ts.map +1 -0
  424. package/dist/hud/elements/permission.js +20 -0
  425. package/dist/hud/elements/permission.js.map +1 -0
  426. package/dist/hud/elements/prd.d.ts +20 -0
  427. package/dist/hud/elements/prd.d.ts.map +1 -0
  428. package/dist/hud/elements/prd.js +52 -0
  429. package/dist/hud/elements/prd.js.map +1 -0
  430. package/dist/hud/elements/ralph.d.ts +14 -0
  431. package/dist/hud/elements/ralph.d.ts.map +1 -0
  432. package/dist/hud/elements/ralph.js +36 -0
  433. package/dist/hud/elements/ralph.js.map +1 -0
  434. package/dist/hud/elements/session.d.ts +13 -0
  435. package/dist/hud/elements/session.d.ts.map +1 -0
  436. package/dist/hud/elements/session.js +24 -0
  437. package/dist/hud/elements/session.js.map +1 -0
  438. package/dist/hud/elements/skills.d.ts +24 -0
  439. package/dist/hud/elements/skills.d.ts.map +1 -0
  440. package/dist/hud/elements/skills.js +81 -0
  441. package/dist/hud/elements/skills.js.map +1 -0
  442. package/dist/hud/elements/thinking.d.ts +13 -0
  443. package/dist/hud/elements/thinking.d.ts.map +1 -0
  444. package/dist/hud/elements/thinking.js +19 -0
  445. package/dist/hud/elements/thinking.js.map +1 -0
  446. package/dist/hud/elements/todos.d.ts +20 -0
  447. package/dist/hud/elements/todos.d.ts.map +1 -0
  448. package/dist/hud/elements/todos.js +70 -0
  449. package/dist/hud/elements/todos.js.map +1 -0
  450. package/dist/hud/index.d.ts +9 -0
  451. package/dist/hud/index.d.ts.map +1 -0
  452. package/dist/hud/index.js +89 -0
  453. package/dist/hud/index.js.map +1 -0
  454. package/dist/hud/omc-state.d.ts +31 -0
  455. package/dist/hud/omc-state.d.ts.map +1 -0
  456. package/dist/hud/omc-state.js +163 -0
  457. package/dist/hud/omc-state.js.map +1 -0
  458. package/dist/hud/render.d.ts +11 -0
  459. package/dist/hud/render.d.ts.map +1 -0
  460. package/dist/hud/render.js +121 -0
  461. package/dist/hud/render.js.map +1 -0
  462. package/dist/hud/sisyphus-state.d.ts +31 -0
  463. package/dist/hud/sisyphus-state.d.ts.map +1 -0
  464. package/dist/hud/sisyphus-state.js +163 -0
  465. package/dist/hud/sisyphus-state.js.map +1 -0
  466. package/dist/hud/state.d.ts +43 -0
  467. package/dist/hud/state.d.ts.map +1 -0
  468. package/dist/hud/state.js +201 -0
  469. package/dist/hud/state.js.map +1 -0
  470. package/dist/hud/stdin.d.ts +22 -0
  471. package/dist/hud/stdin.d.ts.map +1 -0
  472. package/dist/hud/stdin.js +65 -0
  473. package/dist/hud/stdin.js.map +1 -0
  474. package/dist/hud/transcript.d.ts +32 -0
  475. package/dist/hud/transcript.d.ts.map +1 -0
  476. package/dist/hud/transcript.js +364 -0
  477. package/dist/hud/transcript.js.map +1 -0
  478. package/dist/hud/types.d.ts +178 -0
  479. package/dist/hud/types.d.ts.map +1 -0
  480. package/dist/hud/types.js +119 -0
  481. package/dist/hud/types.js.map +1 -0
  482. package/dist/hud/usage-api.d.ts +24 -0
  483. package/dist/hud/usage-api.d.ts.map +1 -0
  484. package/dist/hud/usage-api.js +234 -0
  485. package/dist/hud/usage-api.js.map +1 -0
  486. package/dist/index.d.ts +7 -7
  487. package/dist/index.d.ts.map +1 -1
  488. package/dist/index.js +10 -12
  489. package/dist/index.js.map +1 -1
  490. package/dist/installer/hooks.d.ts +36 -64
  491. package/dist/installer/hooks.d.ts.map +1 -1
  492. package/dist/installer/hooks.js +91 -1298
  493. package/dist/installer/hooks.js.map +1 -1
  494. package/dist/installer/index.d.ts +23 -22
  495. package/dist/installer/index.d.ts.map +1 -1
  496. package/dist/installer/index.js +307 -2575
  497. package/dist/installer/index.js.map +1 -1
  498. package/dist/shared/types.d.ts +6 -6
  499. package/dist/shared/types.d.ts.map +1 -1
  500. package/docs/ARCHITECTURE.md +386 -0
  501. package/docs/CLAUDE.md +281 -0
  502. package/docs/FULL-README.md +822 -0
  503. package/docs/LOCAL_PLUGIN_INSTALL.md +94 -0
  504. package/docs/MIGRATION-v3.md +186 -0
  505. package/docs/MIGRATION.md +460 -0
  506. package/docs/TIERED_AGENTS_V2.md +322 -0
  507. package/hooks/hooks.json +70 -0
  508. package/hooks/keyword-detector.sh +102 -0
  509. package/hooks/persistent-mode.sh +172 -0
  510. package/hooks/session-start.sh +62 -0
  511. package/hooks/stop-continuation.sh +40 -0
  512. package/package.json +14 -8
  513. package/scripts/install.sh +90 -72
  514. package/scripts/keyword-detector.mjs +1 -1
  515. package/scripts/persistent-mode.mjs +9 -9
  516. package/scripts/persistent-mode.sh +21 -10
  517. package/scripts/plugin-setup.mjs +109 -0
  518. package/scripts/pre-tool-enforcer.mjs +1 -1
  519. package/scripts/pre-tool-enforcer.sh +1 -1
  520. package/scripts/session-start.mjs +38 -3
  521. package/scripts/skill-injector.mjs +231 -0
  522. package/scripts/uninstall.sh +8 -8
  523. package/skills/analyze/SKILL.md +47 -0
  524. package/skills/cancel-ralph/SKILL.md +43 -0
  525. package/skills/cancel-ultraqa/SKILL.md +29 -0
  526. package/skills/cancel-ultrawork/SKILL.md +42 -0
  527. package/skills/deepinit/SKILL.md +321 -0
  528. package/skills/deepsearch/SKILL.md +39 -0
  529. package/skills/doctor/SKILL.md +192 -0
  530. package/skills/frontend-ui-ux/SKILL.md +53 -0
  531. package/skills/git-master/SKILL.md +58 -0
  532. package/skills/help/SKILL.md +66 -0
  533. package/skills/hud/SKILL.md +142 -0
  534. package/skills/learner/SKILL.md +136 -0
  535. package/skills/note/SKILL.md +63 -0
  536. package/skills/omc-default/SKILL.md +78 -0
  537. package/skills/omc-default-global/SKILL.md +75 -0
  538. package/skills/omc-setup/SKILL.md +144 -0
  539. package/skills/orchestrate/SKILL.md +409 -0
  540. package/skills/plan/SKILL.md +37 -0
  541. package/skills/planner/SKILL.md +43 -0
  542. package/skills/ralph/SKILL.md +101 -0
  543. package/skills/ralph-init/SKILL.md +61 -0
  544. package/skills/ralplan/SKILL.md +219 -0
  545. package/skills/release/SKILL.md +84 -0
  546. package/skills/review/SKILL.md +37 -0
  547. package/skills/ultraqa/SKILL.md +123 -0
  548. package/skills/ultrawork/SKILL.md +89 -0
@@ -21,22 +21,22 @@ fi
21
21
 
22
22
  # Check for active ultrawork state
23
23
  ULTRAWORK_STATE=""
24
- if [ -f "$DIRECTORY/.sisyphus/ultrawork-state.json" ]; then
25
- ULTRAWORK_STATE=$(cat "$DIRECTORY/.sisyphus/ultrawork-state.json" 2>/dev/null)
24
+ if [ -f "$DIRECTORY/.omc/ultrawork-state.json" ]; then
25
+ ULTRAWORK_STATE=$(cat "$DIRECTORY/.omc/ultrawork-state.json" 2>/dev/null)
26
26
  elif [ -f "$HOME/.claude/ultrawork-state.json" ]; then
27
27
  ULTRAWORK_STATE=$(cat "$HOME/.claude/ultrawork-state.json" 2>/dev/null)
28
28
  fi
29
29
 
30
30
  # Check for active ralph loop
31
31
  RALPH_STATE=""
32
- if [ -f "$DIRECTORY/.sisyphus/ralph-state.json" ]; then
33
- RALPH_STATE=$(cat "$DIRECTORY/.sisyphus/ralph-state.json" 2>/dev/null)
32
+ if [ -f "$DIRECTORY/.omc/ralph-state.json" ]; then
33
+ RALPH_STATE=$(cat "$DIRECTORY/.omc/ralph-state.json" 2>/dev/null)
34
34
  fi
35
35
 
36
36
  # Check for verification state (oracle verification)
37
37
  VERIFICATION_STATE=""
38
- if [ -f "$DIRECTORY/.sisyphus/ralph-verification.json" ]; then
39
- VERIFICATION_STATE=$(cat "$DIRECTORY/.sisyphus/ralph-verification.json" 2>/dev/null)
38
+ if [ -f "$DIRECTORY/.omc/ralph-verification.json" ]; then
39
+ VERIFICATION_STATE=$(cat "$DIRECTORY/.omc/ralph-verification.json" 2>/dev/null)
40
40
  fi
41
41
 
42
42
  # Check for incomplete todos
@@ -58,7 +58,7 @@ if [ -d "$TODOS_DIR" ]; then
58
58
  fi
59
59
 
60
60
  # Check project todos as well
61
- for todo_path in "$DIRECTORY/.sisyphus/todos.json" "$DIRECTORY/.claude/todos.json"; do
61
+ for todo_path in "$DIRECTORY/.omc/todos.json" "$DIRECTORY/.claude/todos.json"; do
62
62
  if [ -f "$todo_path" ]; then
63
63
  if command -v jq &> /dev/null; then
64
64
  COUNT=$(jq 'if type == "array" then [.[] | select(.status != "completed" and .status != "cancelled")] | length else 0 end' "$todo_path" 2>/dev/null || echo "0")
@@ -106,11 +106,22 @@ EOF
106
106
  if [ "$ITERATION" -lt "$MAX_ITER" ]; then
107
107
  # Increment iteration
108
108
  NEW_ITER=$((ITERATION + 1))
109
- echo "$RALPH_STATE" | jq ".iteration = $NEW_ITER" > "$DIRECTORY/.sisyphus/ralph-state.json" 2>/dev/null
109
+ echo "$RALPH_STATE" | jq ".iteration = $NEW_ITER" > "$DIRECTORY/.omc/ralph-state.json" 2>/dev/null
110
110
 
111
- cat << EOF
111
+ # Check if ultrawork is linked (auto-activated with ralph)
112
+ LINKED_ULTRAWORK=$(echo "$RALPH_STATE" | jq -r '.linked_ultrawork // false' 2>/dev/null)
113
+
114
+ if [ "$LINKED_ULTRAWORK" = "true" ]; then
115
+ # Combined ralph+ultrawork message with parallel execution rules
116
+ cat << EOF
117
+ {"continue": false, "reason": "<ralph-ultrawork-continuation>\n\n[RALPH + ULTRAWORK - ITERATION $NEW_ITER/$MAX_ITER]\n\nYour previous attempt did not output the completion promise. The work is NOT done yet.\n\n## ULTRAWORK RULES (ACTIVE)\n- **PARALLEL**: Fire independent calls simultaneously - NEVER wait sequentially\n- **BACKGROUND FIRST**: Use Task(run_in_background=true) for long operations\n- **DELEGATE**: Route tasks to specialist agents immediately\n- **SMART ROUTING**: Use haiku for lookups, sonnet for standard work, opus for complex analysis\n- **TODO**: Track EVERY step. Mark complete IMMEDIATELY.\n\n## COMPLETION REQUIREMENTS\n1. Review your progress and the original task\n2. Check your todo list - are ALL items marked complete?\n3. Continue from where you left off using PARALLEL execution\n4. Get Architect verification when ready\n5. When FULLY complete AND verified, output: <promise>$PROMISE</promise>\n6. Do NOT stop until the task is truly done\n\nOriginal task: $PROMPT\n\n</ralph-ultrawork-continuation>\n\n---\n"}
118
+ EOF
119
+ else
120
+ # Standard ralph-only message
121
+ cat << EOF
112
122
  {"continue": false, "reason": "<ralph-loop-continuation>\n\n[RALPH LOOP - ITERATION $NEW_ITER/$MAX_ITER]\n\nYour previous attempt did not output the completion promise. The work is NOT done yet.\n\nCRITICAL INSTRUCTIONS:\n1. Review your progress and the original task\n2. Check your todo list - are ALL items marked complete?\n3. Continue from where you left off\n4. When FULLY complete, output: <promise>$PROMISE</promise>\n5. Do NOT stop until the task is truly done\n\nOriginal task: $PROMPT\n\n</ralph-loop-continuation>\n\n---\n"}
113
123
  EOF
124
+ fi
114
125
  exit 0
115
126
  fi
116
127
  fi
@@ -277,7 +288,7 @@ if [ -n "$ULTRAWORK_STATE" ] && [ "$INCOMPLETE_COUNT" -gt 0 ]; then
277
288
 
278
289
  # Update state file (best effort)
279
290
  if command -v jq &> /dev/null; then
280
- echo "$ULTRAWORK_STATE" | jq ".reinforcement_count = $NEW_COUNT | .last_checked_at = \"$(date -Iseconds)\"" > "$DIRECTORY/.sisyphus/ultrawork-state.json" 2>/dev/null
291
+ echo "$ULTRAWORK_STATE" | jq ".reinforcement_count = $NEW_COUNT | .last_checked_at = \"$(date -Iseconds)\"" > "$DIRECTORY/.omc/ultrawork-state.json" 2>/dev/null
281
292
  fi
282
293
 
283
294
  cat << EOF
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Plugin Post-Install Setup
4
+ *
5
+ * Configures HUD statusline when plugin is installed.
6
+ * This runs after `claude plugin install oh-my-claudecode@oh-my-claudecode`
7
+ */
8
+
9
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, chmodSync } from 'node:fs';
10
+ import { homedir } from 'node:os';
11
+ import { join, dirname } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+
17
+ const CLAUDE_DIR = join(homedir(), '.claude');
18
+ const HUD_DIR = join(CLAUDE_DIR, 'hud');
19
+ const SETTINGS_FILE = join(CLAUDE_DIR, 'settings.json');
20
+
21
+ console.log('[Sisyphus] Running post-install setup...');
22
+
23
+ // 1. Create HUD directory
24
+ if (!existsSync(HUD_DIR)) {
25
+ mkdirSync(HUD_DIR, { recursive: true });
26
+ }
27
+
28
+ // 2. Create HUD wrapper script
29
+ const hudScriptPath = join(HUD_DIR, 'sisyphus-hud.mjs');
30
+ const hudScript = `#!/usr/bin/env node
31
+ /**
32
+ * Sisyphus HUD - Statusline Script
33
+ * Wrapper that imports from plugin cache or development paths
34
+ */
35
+
36
+ import { existsSync, readdirSync } from "node:fs";
37
+ import { homedir } from "node:os";
38
+ import { join } from "node:path";
39
+
40
+ async function main() {
41
+ const home = homedir();
42
+
43
+ // 1. Try plugin cache first (preferred for 3.0.0+)
44
+ const pluginCacheBase = join(home, ".claude/plugins/cache/oh-my-claudecode/oh-my-claudecode");
45
+ if (existsSync(pluginCacheBase)) {
46
+ try {
47
+ const versions = readdirSync(pluginCacheBase);
48
+ if (versions.length > 0) {
49
+ const latestVersion = versions.sort().reverse()[0];
50
+ const pluginPath = join(pluginCacheBase, latestVersion, "dist/hud/index.js");
51
+ if (existsSync(pluginPath)) {
52
+ await import(pluginPath);
53
+ return;
54
+ }
55
+ }
56
+ } catch { /* continue */ }
57
+ }
58
+
59
+ // 2. Development paths
60
+ const devPaths = [
61
+ join(home, "Workspace/oh-my-claudecode/dist/hud/index.js"),
62
+ join(home, "workspace/oh-my-claudecode/dist/hud/index.js"),
63
+ ];
64
+
65
+ for (const devPath of devPaths) {
66
+ if (existsSync(devPath)) {
67
+ try {
68
+ await import(devPath);
69
+ return;
70
+ } catch { /* continue */ }
71
+ }
72
+ }
73
+
74
+ // 3. Fallback
75
+ console.log("[SISYPHUS] active");
76
+ }
77
+
78
+ main();
79
+ `;
80
+
81
+ writeFileSync(hudScriptPath, hudScript);
82
+ try {
83
+ chmodSync(hudScriptPath, 0o755);
84
+ } catch { /* Windows doesn't need this */ }
85
+ console.log('[Sisyphus] Installed HUD wrapper script');
86
+
87
+ // 3. Configure settings.json
88
+ try {
89
+ let settings = {};
90
+ if (existsSync(SETTINGS_FILE)) {
91
+ settings = JSON.parse(readFileSync(SETTINGS_FILE, 'utf-8'));
92
+ }
93
+
94
+ // Add statusLine if not configured
95
+ if (!settings.statusLine) {
96
+ settings.statusLine = {
97
+ type: 'command',
98
+ command: `node ${hudScriptPath}`
99
+ };
100
+ writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2));
101
+ console.log('[Sisyphus] Configured HUD statusLine in settings.json');
102
+ } else {
103
+ console.log('[Sisyphus] statusLine already configured, skipping');
104
+ }
105
+ } catch (e) {
106
+ console.log('[Sisyphus] Warning: Could not configure settings.json:', e.message);
107
+ }
108
+
109
+ console.log('[Sisyphus] Setup complete! Restart Claude Code to activate HUD.');
@@ -38,7 +38,7 @@ function getTodoStatus(directory) {
38
38
 
39
39
  // Check project-local todos
40
40
  const localPaths = [
41
- join(directory, '.sisyphus', 'todos.json'),
41
+ join(directory, '.omc', 'todos.json'),
42
42
  join(directory, '.claude', 'todos.json')
43
43
  ];
44
44
 
@@ -19,7 +19,7 @@ toolName=$(extract_json_field "toolName" "unknown")
19
19
  directory=$(extract_json_field "directory" "")
20
20
 
21
21
  # Try to get todo count from todo list file (if exists)
22
- todo_file="${directory}/.sisyphus/todos.json"
22
+ todo_file="${directory}/.omc/todos.json"
23
23
  todo_status=""
24
24
  if [[ -f "$todo_file" ]] && command -v jq &> /dev/null; then
25
25
  pending=$(jq -r '[.todos[] | select(.status == "pending")] | length' "$todo_file" 2>/dev/null || echo "0")
@@ -46,6 +46,33 @@ function countIncompleteTodos(todosDir) {
46
46
  return count;
47
47
  }
48
48
 
49
+ // Check if HUD is properly installed
50
+ function checkHudInstallation() {
51
+ const hudScript = join(homedir(), '.claude', 'hud', 'sisyphus-hud.mjs');
52
+ const settingsFile = join(homedir(), '.claude', 'settings.json');
53
+
54
+ // Check if HUD script exists
55
+ if (!existsSync(hudScript)) {
56
+ return { installed: false, reason: 'HUD script missing' };
57
+ }
58
+
59
+ // Check if statusLine is configured
60
+ try {
61
+ if (existsSync(settingsFile)) {
62
+ const settings = JSON.parse(readFileSync(settingsFile, 'utf-8'));
63
+ if (!settings.statusLine) {
64
+ return { installed: false, reason: 'statusLine not configured' };
65
+ }
66
+ } else {
67
+ return { installed: false, reason: 'settings.json missing' };
68
+ }
69
+ } catch {
70
+ return { installed: false, reason: 'Could not read settings' };
71
+ }
72
+
73
+ return { installed: true };
74
+ }
75
+
49
76
  // Main
50
77
  async function main() {
51
78
  try {
@@ -56,8 +83,16 @@ async function main() {
56
83
  const directory = data.directory || process.cwd();
57
84
  const messages = [];
58
85
 
86
+ // Check HUD installation (one-time setup guidance)
87
+ const hudCheck = checkHudInstallation();
88
+ if (!hudCheck.installed) {
89
+ messages.push(`<system-reminder>
90
+ [Sisyphus] HUD not configured (${hudCheck.reason}). Run /hud setup then restart Claude Code.
91
+ </system-reminder>`);
92
+ }
93
+
59
94
  // Check for ultrawork state
60
- const ultraworkState = readJsonFile(join(directory, '.sisyphus', 'ultrawork-state.json'))
95
+ const ultraworkState = readJsonFile(join(directory, '.omc', 'ultrawork-state.json'))
61
96
  || readJsonFile(join(homedir(), '.claude', 'ultrawork-state.json'));
62
97
 
63
98
  if (ultraworkState?.active) {
@@ -77,7 +112,7 @@ Continue working in ultrawork mode until all tasks are complete.
77
112
  }
78
113
 
79
114
  // Check for ralph loop state
80
- const ralphState = readJsonFile(join(directory, '.sisyphus', 'ralph-state.json'));
115
+ const ralphState = readJsonFile(join(directory, '.omc', 'ralph-state.json'));
81
116
  if (ralphState?.active) {
82
117
  messages.push(`<session-restore>
83
118
 
@@ -114,7 +149,7 @@ Please continue working on these tasks.
114
149
  }
115
150
 
116
151
  // Check for notepad Priority Context
117
- const notepadPath = join(directory, '.sisyphus', 'notepad.md');
152
+ const notepadPath = join(directory, '.omc', 'notepad.md');
118
153
  if (existsSync(notepadPath)) {
119
154
  try {
120
155
  const notepadContent = readFileSync(notepadPath, 'utf-8');
@@ -0,0 +1,231 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Skill Injector Hook (UserPromptSubmit)
5
+ * Injects relevant learned skills into context based on prompt triggers.
6
+ *
7
+ * STANDALONE SCRIPT - does not import from dist/
8
+ * Follows pattern of keyword-detector.mjs and session-start.mjs
9
+ */
10
+
11
+ import { existsSync, readdirSync, readFileSync, realpathSync } from 'fs';
12
+ import { join } from 'path';
13
+ import { homedir } from 'os';
14
+
15
+ // Constants
16
+ const USER_SKILLS_DIR = join(homedir(), '.claude', 'skills', 'omc-learned');
17
+ const PROJECT_SKILLS_SUBDIR = '.omc/skills';
18
+ const SKILL_EXTENSION = '.md';
19
+ const MAX_SKILLS_PER_SESSION = 5;
20
+
21
+ // Session cache to avoid re-injecting same skills
22
+ const injectedCache = new Map();
23
+
24
+ // Read all stdin
25
+ async function readStdin() {
26
+ const chunks = [];
27
+ for await (const chunk of process.stdin) {
28
+ chunks.push(chunk);
29
+ }
30
+ return Buffer.concat(chunks).toString('utf-8');
31
+ }
32
+
33
+ // Parse YAML frontmatter from skill file
34
+ function parseSkillFrontmatter(content) {
35
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
36
+ if (!match) return null;
37
+
38
+ const yamlContent = match[1];
39
+ const body = match[2].trim();
40
+
41
+ // Simple YAML parsing for triggers
42
+ const triggers = [];
43
+ const triggerMatch = yamlContent.match(/triggers:\s*\n((?:\s+-\s*.+\n?)*)/);
44
+ if (triggerMatch) {
45
+ const lines = triggerMatch[1].split('\n');
46
+ for (const line of lines) {
47
+ const itemMatch = line.match(/^\s+-\s*["']?([^"'\n]+)["']?\s*$/);
48
+ if (itemMatch) triggers.push(itemMatch[1].trim().toLowerCase());
49
+ }
50
+ }
51
+
52
+ // Extract name
53
+ const nameMatch = yamlContent.match(/name:\s*["']?([^"'\n]+)["']?/);
54
+ const name = nameMatch ? nameMatch[1].trim() : 'Unnamed Skill';
55
+
56
+ return { name, triggers, content: body };
57
+ }
58
+
59
+ // Find all skill files
60
+ function findSkillFiles(directory) {
61
+ const candidates = [];
62
+ const seenPaths = new Set();
63
+
64
+ // Project-level skills (higher priority)
65
+ const projectDir = join(directory, PROJECT_SKILLS_SUBDIR);
66
+ if (existsSync(projectDir)) {
67
+ try {
68
+ const files = readdirSync(projectDir, { withFileTypes: true });
69
+ for (const file of files) {
70
+ if (file.isFile() && file.name.endsWith(SKILL_EXTENSION)) {
71
+ const fullPath = join(projectDir, file.name);
72
+ try {
73
+ const realPath = realpathSync(fullPath);
74
+ if (!seenPaths.has(realPath)) {
75
+ seenPaths.add(realPath);
76
+ candidates.push({ path: fullPath, scope: 'project' });
77
+ }
78
+ } catch {
79
+ // Ignore symlink resolution errors
80
+ }
81
+ }
82
+ }
83
+ } catch {
84
+ // Ignore directory read errors
85
+ }
86
+ }
87
+
88
+ // User-level skills
89
+ if (existsSync(USER_SKILLS_DIR)) {
90
+ try {
91
+ const files = readdirSync(USER_SKILLS_DIR, { withFileTypes: true });
92
+ for (const file of files) {
93
+ if (file.isFile() && file.name.endsWith(SKILL_EXTENSION)) {
94
+ const fullPath = join(USER_SKILLS_DIR, file.name);
95
+ try {
96
+ const realPath = realpathSync(fullPath);
97
+ if (!seenPaths.has(realPath)) {
98
+ seenPaths.add(realPath);
99
+ candidates.push({ path: fullPath, scope: 'user' });
100
+ }
101
+ } catch {
102
+ // Ignore symlink resolution errors
103
+ }
104
+ }
105
+ }
106
+ } catch {
107
+ // Ignore directory read errors
108
+ }
109
+ }
110
+
111
+ return candidates;
112
+ }
113
+
114
+ // Find matching skills by trigger keywords
115
+ function findMatchingSkills(prompt, directory, sessionId) {
116
+ const promptLower = prompt.toLowerCase();
117
+ const candidates = findSkillFiles(directory);
118
+ const matches = [];
119
+
120
+ // Get or create session cache
121
+ if (!injectedCache.has(sessionId)) {
122
+ injectedCache.set(sessionId, new Set());
123
+ }
124
+ const alreadyInjected = injectedCache.get(sessionId);
125
+
126
+ for (const candidate of candidates) {
127
+ // Skip if already injected this session
128
+ if (alreadyInjected.has(candidate.path)) continue;
129
+
130
+ try {
131
+ const content = readFileSync(candidate.path, 'utf-8');
132
+ const skill = parseSkillFrontmatter(content);
133
+ if (!skill) continue;
134
+
135
+ // Check if any trigger matches
136
+ let score = 0;
137
+ for (const trigger of skill.triggers) {
138
+ if (promptLower.includes(trigger)) {
139
+ score += 10;
140
+ }
141
+ }
142
+
143
+ if (score > 0) {
144
+ matches.push({
145
+ path: candidate.path,
146
+ name: skill.name,
147
+ content: skill.content,
148
+ score,
149
+ scope: candidate.scope
150
+ });
151
+ }
152
+ } catch {
153
+ // Ignore file read errors
154
+ }
155
+ }
156
+
157
+ // Sort by score (descending) and limit
158
+ matches.sort((a, b) => b.score - a.score);
159
+ const selected = matches.slice(0, MAX_SKILLS_PER_SESSION);
160
+
161
+ // Mark as injected
162
+ for (const skill of selected) {
163
+ alreadyInjected.add(skill.path);
164
+ }
165
+
166
+ return selected;
167
+ }
168
+
169
+ // Format skills for injection
170
+ function formatSkillsMessage(skills) {
171
+ const lines = [
172
+ '<mnemosyne>',
173
+ '',
174
+ '## Relevant Learned Skills',
175
+ '',
176
+ 'The following skills from previous sessions may help:',
177
+ ''
178
+ ];
179
+
180
+ for (const skill of skills) {
181
+ lines.push(`### ${skill.name} (${skill.scope})`);
182
+ lines.push('');
183
+ lines.push(skill.content);
184
+ lines.push('');
185
+ lines.push('---');
186
+ lines.push('');
187
+ }
188
+
189
+ lines.push('</mnemosyne>');
190
+ return lines.join('\n');
191
+ }
192
+
193
+ // Main
194
+ async function main() {
195
+ try {
196
+ const input = await readStdin();
197
+ if (!input.trim()) {
198
+ console.log(JSON.stringify({ continue: true }));
199
+ return;
200
+ }
201
+
202
+ let data = {};
203
+ try { data = JSON.parse(input); } catch { /* ignore parse errors */ }
204
+
205
+ const prompt = data.prompt || '';
206
+ const sessionId = data.sessionId || 'unknown';
207
+ const directory = data.cwd || process.cwd();
208
+
209
+ // Skip if no prompt
210
+ if (!prompt) {
211
+ console.log(JSON.stringify({ continue: true }));
212
+ return;
213
+ }
214
+
215
+ const matchingSkills = findMatchingSkills(prompt, directory, sessionId);
216
+
217
+ if (matchingSkills.length > 0) {
218
+ console.log(JSON.stringify({
219
+ continue: true,
220
+ message: formatSkillsMessage(matchingSkills)
221
+ }));
222
+ } else {
223
+ console.log(JSON.stringify({ continue: true }));
224
+ }
225
+ } catch (error) {
226
+ // On any error, allow continuation
227
+ console.log(JSON.stringify({ continue: true }));
228
+ }
229
+ }
230
+
231
+ main();
@@ -90,10 +90,10 @@ rm -f "$CLAUDE_CONFIG_DIR/hooks/silent-auto-update.sh"
90
90
 
91
91
  # Remove version, state, and config files
92
92
  echo -e "${BLUE}Removing state and config files...${NC}"
93
- rm -f "$CLAUDE_CONFIG_DIR/.sisyphus-version.json"
94
- rm -f "$CLAUDE_CONFIG_DIR/.sisyphus-silent-update.json"
95
- rm -f "$CLAUDE_CONFIG_DIR/.sisyphus-update.log"
96
- rm -f "$CLAUDE_CONFIG_DIR/.sisyphus-config.json"
93
+ rm -f "$CLAUDE_CONFIG_DIR/.omc-version.json"
94
+ rm -f "$CLAUDE_CONFIG_DIR/.omc-silent-update.json"
95
+ rm -f "$CLAUDE_CONFIG_DIR/.omc-update.log"
96
+ rm -f "$CLAUDE_CONFIG_DIR/.omc-config.json"
97
97
 
98
98
  # Remove hook configurations from settings.json
99
99
  SETTINGS_FILE="$CLAUDE_CONFIG_DIR/settings.json"
@@ -154,11 +154,11 @@ else
154
154
  fi
155
155
  fi
156
156
 
157
- # Remove .sisyphus directory if it exists (plans, notepads, drafts)
158
- if [ -d "$CLAUDE_CONFIG_DIR/../.sisyphus" ] || [ -d ".sisyphus" ]; then
159
- echo -e "${YELLOW}Note: .sisyphus directory (plans/notepads) was not removed.${NC}"
157
+ # Remove .omc directory if it exists (plans, notepads, drafts)
158
+ if [ -d "$CLAUDE_CONFIG_DIR/../.omc" ] || [ -d ".omc" ]; then
159
+ echo -e "${YELLOW}Note: .omc directory (plans/notepads) was not removed.${NC}"
160
160
  echo " To remove project plans and notepads, run:"
161
- echo " rm -rf .sisyphus"
161
+ echo " rm -rf .omc"
162
162
  fi
163
163
 
164
164
  echo ""
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: analyze
3
+ description: Deep analysis and investigation
4
+ user-invocable: true
5
+ ---
6
+
7
+ # Deep Analysis Mode
8
+
9
+ [ANALYSIS MODE ACTIVATED]
10
+
11
+ ## Objective
12
+
13
+ Conduct thorough analysis of the specified target (code, architecture, issue, bug, performance bottleneck, security concern).
14
+
15
+ ## Approach
16
+
17
+ 1. **Gather Context**
18
+ - Read relevant files
19
+ - Check git history if relevant
20
+ - Review related issues/PRs if applicable
21
+
22
+ 2. **Analyze Systematically**
23
+ - Identify patterns and antipatterns
24
+ - Trace execution flows
25
+ - Map dependencies and relationships
26
+ - Check for edge cases
27
+
28
+ 3. **Synthesize Findings**
29
+ - Root cause (for bugs)
30
+ - Design decisions and tradeoffs (for architecture)
31
+ - Bottlenecks and hotspots (for performance)
32
+ - Vulnerabilities and risks (for security)
33
+
34
+ 4. **Provide Recommendations**
35
+ - Concrete, actionable next steps
36
+ - Prioritized by impact
37
+ - Consider maintainability and technical debt
38
+
39
+ ## Output Format
40
+
41
+ Present findings clearly:
42
+ - **Summary** (2-3 sentences)
43
+ - **Key Findings** (bulleted list)
44
+ - **Analysis** (detailed explanation)
45
+ - **Recommendations** (prioritized)
46
+
47
+ Stay objective. Cite file paths and line numbers. No speculation without evidence.
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: cancel-ralph
3
+ description: Cancel active Ralph (and linked ultrawork if auto-activated)
4
+ user-invocable: true
5
+ ---
6
+
7
+ # Cancel Ralph
8
+
9
+ [RALPH CANCELLED]
10
+
11
+ Ralph has been cancelled. You MUST now deactivate the state files.
12
+
13
+ ## MANDATORY ACTION
14
+
15
+ Execute this command to fully cancel ALL persistent modes:
16
+
17
+ ```bash
18
+ mkdir -p .omc ~/.claude && \
19
+ echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ralph"}' > .omc/ralph-state.json && \
20
+ echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ralph", "linked_to_ralph": false}' > .omc/ultrawork-state.json && \
21
+ echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ralph"}' > .omc/ralph-plan-state.json && \
22
+ echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ralph"}' > ~/.claude/ralph-state.json && \
23
+ echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ralph"}' > ~/.claude/ultrawork-state.json && \
24
+ rm -f .omc/ralph-verification.json
25
+ ```
26
+
27
+ After running this command, you are free to stop working. The persistent mode hook will no longer force continuation.
28
+
29
+ ## What Was Cancelled
30
+
31
+ - **Ralph**: Self-referential completion loop
32
+ - **Ultrawork**: Parallel execution mode (auto-activated with Ralph by default)
33
+ - **Ralph Plan**: Iterative planning loop (if active via /ralplan)
34
+ - **Verification State**: Any pending architect verification
35
+
36
+ ## Note on Linked Modes
37
+
38
+ Since v3.0, Ralph automatically activates Ultrawork for parallel execution. When you cancel Ralph, the linked Ultrawork is also cancelled. If you started Ultrawork separately (not via Ralph), use `/cancel-ultrawork` to cancel it independently.
39
+
40
+ ## To Start Fresh
41
+
42
+ - `/ralph "task"` - Start ralph with ultrawork (default)
43
+ - `/ultrawork "task"` - Start ultrawork only (standalone)
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: cancel-ultraqa
3
+ description: Cancel active UltraQA cycling workflow
4
+ user-invocable: true
5
+ ---
6
+
7
+ # Cancel UltraQA
8
+
9
+ [ULTRAQA CANCELLED]
10
+
11
+ The UltraQA cycling workflow has been cancelled. Clearing state file.
12
+
13
+ ## MANDATORY ACTION
14
+
15
+ Execute this command to cancel UltraQA:
16
+
17
+ ```bash
18
+ mkdir -p .sisyphus && echo '{"active": false, "cancelled_at": "'$(date -Iseconds)'", "reason": "User cancelled via /cancel-ultraqa"}' > .omc/ultraqa-state.json
19
+ ```
20
+
21
+ After running this command, the QA cycling will stop.
22
+
23
+ ## To Start Fresh
24
+
25
+ - `/ultraqa --tests` - Run until all tests pass
26
+ - `/ultraqa --build` - Run until build succeeds
27
+ - `/ultraqa --lint` - Run until no lint errors
28
+ - `/ultraqa --typecheck` - Run until no type errors
29
+ - `/ultraqa --custom "pattern"` - Run until pattern matches