@monoes/monomindcli 1.14.6 → 1.15.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 (329) hide show
  1. package/.claude/agents/reengineer-squad/boss.md +113 -0
  2. package/.claude/agents/reengineer-squad/critic-architect.md +132 -0
  3. package/.claude/agents/reengineer-squad/git-manager.md +145 -0
  4. package/.claude/agents/reengineer-squad/idea-generator.md +95 -0
  5. package/.claude/agents/reengineer-squad/implementer.md +112 -0
  6. package/.claude/agents/reengineer-squad/integration-planner.md +112 -0
  7. package/.claude/agents/reengineer-squad/source-analyst.md +103 -0
  8. package/.claude/agents/reengineer-squad/target-analyst.md +118 -0
  9. package/.claude/agents/reengineer-squad/tester.md +105 -0
  10. package/.claude/commands/mastermind/master.md +35 -14
  11. package/.claude/helpers/handlers/capture-handler.cjs +155 -18
  12. package/.claude/helpers/monolean-activate.cjs +20 -0
  13. package/.claude/helpers/monolean-config.cjs +76 -0
  14. package/.claude/helpers/monolean-instructions.cjs +109 -0
  15. package/.claude/helpers/monolean-propagate.cjs +9 -0
  16. package/.claude/helpers/monolean-tracker.cjs +18 -0
  17. package/.claude/helpers/skill-registry.json +2 -2
  18. package/.claude/skills/agent-browser-testing/SKILL.md +301 -18
  19. package/.claude/skills/mastermind/runorg.md +69 -23
  20. package/.claude/skills/monodesign/SKILL.md +32 -1
  21. package/.claude/skills/monodesign/adapt.md +53 -0
  22. package/.claude/skills/monodesign/agents/monodesign-asset-producer.md +100 -0
  23. package/.claude/skills/monodesign/animate.md +65 -0
  24. package/.claude/skills/monodesign/audit.md +89 -0
  25. package/.claude/skills/monodesign/bolder.md +50 -0
  26. package/.claude/skills/monodesign/clarify.md +64 -0
  27. package/.claude/skills/monodesign/colorize.md +68 -0
  28. package/.claude/skills/monodesign/craft.md +51 -0
  29. package/.claude/skills/monodesign/critique.md +66 -0
  30. package/.claude/skills/monodesign/delight.md +47 -0
  31. package/.claude/skills/monodesign/distill.md +56 -0
  32. package/.claude/skills/monodesign/document.md +80 -0
  33. package/.claude/skills/monodesign/extract.md +74 -0
  34. package/.claude/skills/monodesign/harden.md +65 -0
  35. package/.claude/skills/monodesign/live.md +59 -0
  36. package/.claude/skills/monodesign/onboard.md +50 -0
  37. package/.claude/skills/monodesign/optimize.md +64 -0
  38. package/.claude/skills/monodesign/overdrive.md +56 -0
  39. package/.claude/skills/monodesign/polish.md +68 -0
  40. package/.claude/skills/monodesign/quieter.md +57 -0
  41. package/.claude/skills/monodesign/reference/antipatterns-catalog.md +248 -76
  42. package/.claude/skills/monodesign/reference/codex.md +107 -0
  43. package/.claude/skills/monodesign/reference/craft.md +3 -0
  44. package/.claude/skills/monodesign/reference/hooks.md +99 -0
  45. package/.claude/skills/monodesign/reference/image-prompts.md +12 -0
  46. package/.claude/skills/monodesign/shape.md +71 -0
  47. package/.claude/skills/monodesign/teach.md +69 -0
  48. package/.claude/skills/monodesign/typeset.md +59 -0
  49. package/.claude/skills/monolean/SKILL.md +118 -0
  50. package/.claude/skills/monolean-audit/SKILL.md +41 -0
  51. package/.claude/skills/monolean-debt/SKILL.md +46 -0
  52. package/.claude/skills/monolean-help/SKILL.md +60 -0
  53. package/.claude/skills/monolean-review/SKILL.md +57 -0
  54. package/bin/cli.js +3 -1
  55. package/dist/dashboard/server.js +137 -0
  56. package/dist/src/__tests__/browse-adapters.test.d.ts +2 -0
  57. package/dist/src/__tests__/browse-adapters.test.d.ts.map +1 -0
  58. package/dist/src/__tests__/browse-adapters.test.js +51 -0
  59. package/dist/src/__tests__/browse-adapters.test.js.map +1 -0
  60. package/dist/src/__tests__/browse-analyzer.test.d.ts +2 -0
  61. package/dist/src/__tests__/browse-analyzer.test.d.ts.map +1 -0
  62. package/dist/src/__tests__/browse-analyzer.test.js +68 -0
  63. package/dist/src/__tests__/browse-analyzer.test.js.map +1 -0
  64. package/dist/src/__tests__/browse-builtin-handlers.test.d.ts +2 -0
  65. package/dist/src/__tests__/browse-builtin-handlers.test.d.ts.map +1 -0
  66. package/dist/src/__tests__/browse-builtin-handlers.test.js +139 -0
  67. package/dist/src/__tests__/browse-builtin-handlers.test.js.map +1 -0
  68. package/dist/src/__tests__/browse-cdp.test.d.ts +2 -0
  69. package/dist/src/__tests__/browse-cdp.test.d.ts.map +1 -0
  70. package/dist/src/__tests__/browse-cdp.test.js +169 -0
  71. package/dist/src/__tests__/browse-cdp.test.js.map +1 -0
  72. package/dist/src/__tests__/browse-dashboard.test.d.ts +2 -0
  73. package/dist/src/__tests__/browse-dashboard.test.d.ts.map +1 -0
  74. package/dist/src/__tests__/browse-dashboard.test.js +179 -0
  75. package/dist/src/__tests__/browse-dashboard.test.js.map +1 -0
  76. package/dist/src/__tests__/browse-engine.test.d.ts +2 -0
  77. package/dist/src/__tests__/browse-engine.test.d.ts.map +1 -0
  78. package/dist/src/__tests__/browse-engine.test.js +122 -0
  79. package/dist/src/__tests__/browse-engine.test.js.map +1 -0
  80. package/dist/src/__tests__/browse-expression.test.d.ts +2 -0
  81. package/dist/src/__tests__/browse-expression.test.d.ts.map +1 -0
  82. package/dist/src/__tests__/browse-expression.test.js +54 -0
  83. package/dist/src/__tests__/browse-expression.test.js.map +1 -0
  84. package/dist/src/__tests__/browse-store.test.d.ts +2 -0
  85. package/dist/src/__tests__/browse-store.test.d.ts.map +1 -0
  86. package/dist/src/__tests__/browse-store.test.js +99 -0
  87. package/dist/src/__tests__/browse-store.test.js.map +1 -0
  88. package/dist/src/__tests__/browse-workflow-types.test.d.ts +2 -0
  89. package/dist/src/__tests__/browse-workflow-types.test.d.ts.map +1 -0
  90. package/dist/src/__tests__/browse-workflow-types.test.js +33 -0
  91. package/dist/src/__tests__/browse-workflow-types.test.js.map +1 -0
  92. package/dist/src/browser/action-builder/analyzer.d.ts +11 -0
  93. package/dist/src/browser/action-builder/analyzer.d.ts.map +1 -0
  94. package/dist/src/browser/action-builder/analyzer.js +71 -0
  95. package/dist/src/browser/action-builder/analyzer.js.map +1 -0
  96. package/dist/src/browser/action-builder/types.d.ts +47 -0
  97. package/dist/src/browser/action-builder/types.d.ts.map +1 -0
  98. package/dist/src/browser/action-builder/types.js +2 -0
  99. package/dist/src/browser/action-builder/types.js.map +1 -0
  100. package/dist/src/browser/adapters/gemini.d.ts +3 -0
  101. package/dist/src/browser/adapters/gemini.d.ts.map +1 -0
  102. package/dist/src/browser/adapters/gemini.js +16 -0
  103. package/dist/src/browser/adapters/gemini.js.map +1 -0
  104. package/dist/src/browser/adapters/google.d.ts +3 -0
  105. package/dist/src/browser/adapters/google.d.ts.map +1 -0
  106. package/dist/src/browser/adapters/google.js +17 -0
  107. package/dist/src/browser/adapters/google.js.map +1 -0
  108. package/dist/src/browser/adapters/index.d.ts +19 -0
  109. package/dist/src/browser/adapters/index.d.ts.map +1 -0
  110. package/dist/src/browser/adapters/index.js +23 -0
  111. package/dist/src/browser/adapters/index.js.map +1 -0
  112. package/dist/src/browser/adapters/instagram.d.ts +3 -0
  113. package/dist/src/browser/adapters/instagram.d.ts.map +1 -0
  114. package/dist/src/browser/adapters/instagram.js +17 -0
  115. package/dist/src/browser/adapters/instagram.js.map +1 -0
  116. package/dist/src/browser/adapters/linkedin.d.ts +3 -0
  117. package/dist/src/browser/adapters/linkedin.d.ts.map +1 -0
  118. package/dist/src/browser/adapters/linkedin.js +19 -0
  119. package/dist/src/browser/adapters/linkedin.js.map +1 -0
  120. package/dist/src/browser/adapters/microsoft.d.ts +3 -0
  121. package/dist/src/browser/adapters/microsoft.d.ts.map +1 -0
  122. package/dist/src/browser/adapters/microsoft.js +16 -0
  123. package/dist/src/browser/adapters/microsoft.js.map +1 -0
  124. package/dist/src/browser/adapters/x.d.ts +3 -0
  125. package/dist/src/browser/adapters/x.d.ts.map +1 -0
  126. package/dist/src/browser/adapters/x.js +19 -0
  127. package/dist/src/browser/adapters/x.js.map +1 -0
  128. package/dist/src/browser/dashboard/api-types.d.ts +50 -0
  129. package/dist/src/browser/dashboard/api-types.d.ts.map +1 -0
  130. package/dist/src/browser/dashboard/api-types.js +14 -0
  131. package/dist/src/browser/dashboard/api-types.js.map +1 -0
  132. package/dist/src/browser/dashboard/server.d.ts +9 -0
  133. package/dist/src/browser/dashboard/server.d.ts.map +1 -0
  134. package/dist/src/browser/dashboard/server.js +62 -0
  135. package/dist/src/browser/dashboard/server.js.map +1 -0
  136. package/dist/src/browser/dashboard/ui.html +1811 -0
  137. package/dist/src/browser/workflow/builtin-handlers.d.ts +3 -0
  138. package/dist/src/browser/workflow/builtin-handlers.d.ts.map +1 -0
  139. package/dist/src/browser/workflow/builtin-handlers.js +343 -0
  140. package/dist/src/browser/workflow/builtin-handlers.js.map +1 -0
  141. package/dist/src/browser/workflow/engine.d.ts +15 -0
  142. package/dist/src/browser/workflow/engine.d.ts.map +1 -0
  143. package/dist/src/browser/workflow/engine.js +127 -0
  144. package/dist/src/browser/workflow/engine.js.map +1 -0
  145. package/dist/src/browser/workflow/expression.d.ts +4 -0
  146. package/dist/src/browser/workflow/expression.d.ts.map +1 -0
  147. package/dist/src/browser/workflow/expression.js +64 -0
  148. package/dist/src/browser/workflow/expression.js.map +1 -0
  149. package/dist/src/browser/workflow/store.d.ts +24 -0
  150. package/dist/src/browser/workflow/store.d.ts.map +1 -0
  151. package/dist/src/browser/workflow/store.js +145 -0
  152. package/dist/src/browser/workflow/store.js.map +1 -0
  153. package/dist/src/browser/workflow/types.d.ts +48 -0
  154. package/dist/src/browser/workflow/types.d.ts.map +1 -0
  155. package/dist/src/browser/workflow/types.js +2 -0
  156. package/dist/src/browser/workflow/types.js.map +1 -0
  157. package/dist/src/commands/browse-action.d.ts +4 -0
  158. package/dist/src/commands/browse-action.d.ts.map +1 -0
  159. package/dist/src/commands/browse-action.js +151 -0
  160. package/dist/src/commands/browse-action.js.map +1 -0
  161. package/dist/src/commands/browse-platform.d.ts +4 -0
  162. package/dist/src/commands/browse-platform.d.ts.map +1 -0
  163. package/dist/src/commands/browse-platform.js +117 -0
  164. package/dist/src/commands/browse-platform.js.map +1 -0
  165. package/dist/src/commands/browse-workflow.d.ts +4 -0
  166. package/dist/src/commands/browse-workflow.d.ts.map +1 -0
  167. package/dist/src/commands/browse-workflow.js +153 -0
  168. package/dist/src/commands/browse-workflow.js.map +1 -0
  169. package/dist/src/commands/browse.d.ts +10 -6
  170. package/dist/src/commands/browse.d.ts.map +1 -1
  171. package/dist/src/commands/browse.js +11 -2154
  172. package/dist/src/commands/browse.js.map +1 -1
  173. package/dist/src/commands/design-detect.d.ts +21 -0
  174. package/dist/src/commands/design-detect.d.ts.map +1 -0
  175. package/dist/src/commands/design-detect.js +127 -0
  176. package/dist/src/commands/design-detect.js.map +1 -0
  177. package/dist/src/commands/design-palette.d.ts +22 -0
  178. package/dist/src/commands/design-palette.d.ts.map +1 -0
  179. package/dist/src/commands/design-palette.js +539 -0
  180. package/dist/src/commands/design-palette.js.map +1 -0
  181. package/dist/src/commands/hooks-core-commands.d.ts +10 -0
  182. package/dist/src/commands/hooks-core-commands.d.ts.map +1 -0
  183. package/dist/src/commands/hooks-core-commands.js +377 -0
  184. package/dist/src/commands/hooks-core-commands.js.map +1 -0
  185. package/dist/src/commands/hooks-coverage-commands.d.ts +12 -0
  186. package/dist/src/commands/hooks-coverage-commands.d.ts.map +1 -0
  187. package/dist/src/commands/hooks-coverage-commands.js +1217 -0
  188. package/dist/src/commands/hooks-coverage-commands.js.map +1 -0
  189. package/dist/src/commands/hooks-coverage-utils.d.ts +42 -0
  190. package/dist/src/commands/hooks-coverage-utils.d.ts.map +1 -0
  191. package/dist/src/commands/hooks-coverage-utils.js +220 -0
  192. package/dist/src/commands/hooks-coverage-utils.js.map +1 -0
  193. package/dist/src/commands/hooks-extended-commands.d.ts +14 -0
  194. package/dist/src/commands/hooks-extended-commands.d.ts.map +1 -0
  195. package/dist/src/commands/hooks-extended-commands.js +579 -0
  196. package/dist/src/commands/hooks-extended-commands.js.map +1 -0
  197. package/dist/src/commands/hooks-formatting.d.ts +13 -0
  198. package/dist/src/commands/hooks-formatting.d.ts.map +1 -0
  199. package/dist/src/commands/hooks-formatting.js +42 -0
  200. package/dist/src/commands/hooks-formatting.js.map +1 -0
  201. package/dist/src/commands/hooks-routing-commands.d.ts +15 -0
  202. package/dist/src/commands/hooks-routing-commands.d.ts.map +1 -0
  203. package/dist/src/commands/hooks-routing-commands.js +723 -0
  204. package/dist/src/commands/hooks-routing-commands.js.map +1 -0
  205. package/dist/src/commands/hooks-workers.d.ts +9 -0
  206. package/dist/src/commands/hooks-workers.d.ts.map +1 -0
  207. package/dist/src/commands/hooks-workers.js +782 -0
  208. package/dist/src/commands/hooks-workers.js.map +1 -0
  209. package/dist/src/commands/hooks.d.ts +8 -0
  210. package/dist/src/commands/hooks.d.ts.map +1 -1
  211. package/dist/src/commands/hooks.js +179 -4103
  212. package/dist/src/commands/hooks.js.map +1 -1
  213. package/dist/src/commands/index.d.ts +1 -0
  214. package/dist/src/commands/index.d.ts.map +1 -1
  215. package/dist/src/commands/index.js +6 -0
  216. package/dist/src/commands/index.js.map +1 -1
  217. package/dist/src/commands/org.d.ts.map +1 -1
  218. package/dist/src/commands/org.js +14 -15
  219. package/dist/src/commands/org.js.map +1 -1
  220. package/dist/src/commands/tokens.d.ts.map +1 -1
  221. package/dist/src/commands/tokens.js +77 -1
  222. package/dist/src/commands/tokens.js.map +1 -1
  223. package/dist/src/init/executor.d.ts.map +1 -1
  224. package/dist/src/init/executor.js +18 -8
  225. package/dist/src/init/executor.js.map +1 -1
  226. package/dist/src/init/settings-generator.d.ts.map +1 -1
  227. package/dist/src/init/settings-generator.js +39 -5
  228. package/dist/src/init/settings-generator.js.map +1 -1
  229. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  230. package/dist/src/init/statusline-generator.js +25 -5
  231. package/dist/src/init/statusline-generator.js.map +1 -1
  232. package/dist/src/mcp-tools/browser-tools.d.ts +3 -5
  233. package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
  234. package/dist/src/mcp-tools/browser-tools.js +619 -326
  235. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  236. package/dist/src/mcp-tools/hooks-embedding.d.ts +161 -0
  237. package/dist/src/mcp-tools/hooks-embedding.d.ts.map +1 -0
  238. package/dist/src/mcp-tools/hooks-embedding.js +506 -0
  239. package/dist/src/mcp-tools/hooks-embedding.js.map +1 -0
  240. package/dist/src/mcp-tools/hooks-intelligence.d.ts +26 -0
  241. package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -0
  242. package/dist/src/mcp-tools/hooks-intelligence.js +1328 -0
  243. package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -0
  244. package/dist/src/mcp-tools/hooks-routing.d.ts +27 -0
  245. package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -0
  246. package/dist/src/mcp-tools/hooks-routing.js +1591 -0
  247. package/dist/src/mcp-tools/hooks-routing.js.map +1 -0
  248. package/dist/src/mcp-tools/hooks-tools.d.ts +3 -38
  249. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  250. package/dist/src/mcp-tools/hooks-tools.js +5 -3393
  251. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  252. package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
  253. package/dist/src/mcp-tools/monograph-tools.js +24 -14
  254. package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
  255. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  256. package/dist/src/mcp-tools/workflow-tools.js +54 -1
  257. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  258. package/dist/src/memory/embedding-operations.d.ts +58 -0
  259. package/dist/src/memory/embedding-operations.d.ts.map +1 -0
  260. package/dist/src/memory/embedding-operations.js +299 -0
  261. package/dist/src/memory/embedding-operations.js.map +1 -0
  262. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -1
  263. package/dist/src/memory/ewc-consolidation.js +37 -3
  264. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  265. package/dist/src/memory/hnsw-operations.d.ts +130 -0
  266. package/dist/src/memory/hnsw-operations.d.ts.map +1 -0
  267. package/dist/src/memory/hnsw-operations.js +400 -0
  268. package/dist/src/memory/hnsw-operations.js.map +1 -0
  269. package/dist/src/memory/intelligence.d.ts.map +1 -1
  270. package/dist/src/memory/intelligence.js +42 -23
  271. package/dist/src/memory/intelligence.js.map +1 -1
  272. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  273. package/dist/src/memory/memory-bridge.js +52 -8
  274. package/dist/src/memory/memory-bridge.js.map +1 -1
  275. package/dist/src/memory/memory-crud.d.ts +67 -0
  276. package/dist/src/memory/memory-crud.d.ts.map +1 -0
  277. package/dist/src/memory/memory-crud.js +415 -0
  278. package/dist/src/memory/memory-crud.js.map +1 -0
  279. package/dist/src/memory/memory-initializer.d.ts +9 -322
  280. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  281. package/dist/src/memory/memory-initializer.js +17 -1794
  282. package/dist/src/memory/memory-initializer.js.map +1 -1
  283. package/dist/src/memory/memory-migrations.d.ts +30 -0
  284. package/dist/src/memory/memory-migrations.d.ts.map +1 -0
  285. package/dist/src/memory/memory-migrations.js +134 -0
  286. package/dist/src/memory/memory-migrations.js.map +1 -0
  287. package/dist/src/memory/memory-read.d.ts +78 -0
  288. package/dist/src/memory/memory-read.d.ts.map +1 -0
  289. package/dist/src/memory/memory-read.js +331 -0
  290. package/dist/src/memory/memory-read.js.map +1 -0
  291. package/dist/src/memory/memory-schema.d.ts +13 -0
  292. package/dist/src/memory/memory-schema.d.ts.map +1 -0
  293. package/dist/src/memory/memory-schema.js +167 -0
  294. package/dist/src/memory/memory-schema.js.map +1 -0
  295. package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
  296. package/dist/src/memory/sona-optimizer.js +37 -4
  297. package/dist/src/memory/sona-optimizer.js.map +1 -1
  298. package/dist/src/monovector/route-outcomes.d.ts.map +1 -1
  299. package/dist/src/monovector/route-outcomes.js +16 -6
  300. package/dist/src/monovector/route-outcomes.js.map +1 -1
  301. package/dist/src/pricing/model-pricing.d.ts +41 -0
  302. package/dist/src/pricing/model-pricing.d.ts.map +1 -0
  303. package/dist/src/pricing/model-pricing.js +61 -0
  304. package/dist/src/pricing/model-pricing.js.map +1 -0
  305. package/dist/src/ui/.monomind/capture/active-run.json +1 -0
  306. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.convs.jsonl +3 -0
  307. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.jsonl +11 -0
  308. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/rigid-qa-restart-1782288201.jsonl +540 -0
  309. package/dist/src/ui/.monomind/orgs/system-trial-qa-threads.jsonl +3 -0
  310. package/dist/src/ui/.monomind/orgs/test-event-fix/runs/rigid-qa-restart-1782288201.jsonl +2 -0
  311. package/dist/src/ui/MODULARIZATION_PLAN.md +79 -0
  312. package/dist/src/ui/collector.mjs +23 -13
  313. package/dist/src/ui/dashboard.html +1652 -13
  314. package/dist/src/ui/data/known-projects.json +1 -0
  315. package/dist/src/ui/data/mastermind-events.jsonl +553 -0
  316. package/dist/src/ui/data/sessions/_index.json +1 -0
  317. package/dist/src/ui/data/sessions/final-sess-001.jsonl +542 -0
  318. package/dist/src/ui/data/unknown-events.jsonl +1 -0
  319. package/dist/src/ui/orgs.html +154 -10
  320. package/dist/src/ui/server.mjs +1131 -168
  321. package/dist/src/ui/sse-manager.mjs +119 -0
  322. package/dist/src/update/checker.js +1 -1
  323. package/dist/src/update/checker.js.map +1 -1
  324. package/dist/tsconfig.tsbuildinfo +1 -1
  325. package/dist/workflow/builtin-handlers.js +321 -0
  326. package/dist/workflow/engine.js +253 -0
  327. package/dist/workflow/expression.js +98 -0
  328. package/dist/workflow/types.js +2 -0
  329. package/package.json +8 -5
@@ -41,6 +41,40 @@ tools:
41
41
 
42
42
  ---
43
43
 
44
+ ## Commands at a Glance
45
+
46
+ All 55 subcommands — grouped by what they do.
47
+
48
+ | Group | Commands |
49
+ |---|---|
50
+ | **Open / Navigate** | `open`, `navigate back\|forward\|reload`, `pushstate`, `connect`, `close` |
51
+ | **Inspect** | `snapshot`, `get url\|title\|text\|html\|value\|attr\|count\|box\|styles`, `errors`, `console` |
52
+ | **Find** | `find role\|text\|label\|placeholder\|testid\|alttext\|title\|selector` |
53
+ | **Assert** | `is visible\|enabled\|checked`, `isvisible`, `isenabled`, `ischecked` |
54
+ | **Click / Tap** | `click`, `dblclick`, `tap`, `hover`, `focus` |
55
+ | **Type / Fill** | `fill`, `type`, `keyboard type\|inserttext`, `keydown`, `keyup`, `press` |
56
+ | **Form** | `select`, `check`, `uncheck`, `upload` |
57
+ | **Scroll / Drag** | `scroll`, `scrollintoview`, `drag`, `swipe up\|down\|left\|right` |
58
+ | **Mouse (raw)** | `mouse move\|down\|up\|wheel` |
59
+ | **Wait** | `wait --text\|--not-text\|--url\|--selector\|--load\|--ms\|--fn\|--download` |
60
+ | **Download** | `download <ref> <path>`, `wait --download <path>` |
61
+ | **Screenshot / PDF** | `screenshot`, `pdf`, `highlight`, `diff url` |
62
+ | **Clipboard** | `clipboard read\|write\|copy\|paste` |
63
+ | **Dialogs** | `dialog accept\|dismiss\|status` |
64
+ | **Tabs** | `tab list\|new\|close\|<targetId>` |
65
+ | **Windows** | `window new [url]` (isolated context / incognito) |
66
+ | **Frames** | `frame <ref>\|main` |
67
+ | **Storage** | `storage local\|session`, `cookies list\|set\|clear` |
68
+ | **Network** | `network route\|unroute\|headers\|capture\|requests\|request` |
69
+ | **Emulation** | `set device\|media\|geo\|offline\|useragent\|viewport\|credentials`, `resize` |
70
+ | **Session** | `state save\|load\|list\|show\|clear\|rename\|clean`, `open --session\|--state` |
71
+ | **JS / Init** | `eval`, `eval --stdin`, `addinitscript`, `removeinitscript` |
72
+ | **Record** | `record start\|stop\|restart\|status` |
73
+ | **Performance** | `vitals`, `trace start\|stop\|status`, `profiler start\|stop\|heap`, `har start\|stop\|status` |
74
+ | **Batch** | `batch "cmd1" "cmd2" ...` |
75
+
76
+ ---
77
+
44
78
  ## QA Execution Protocol
45
79
 
46
80
  When this skill is invoked, run ALL phases unless the user specifies a subset.
@@ -277,8 +311,10 @@ npx monomind browse find role button --name "Submit"
277
311
  npx monomind browse find text "Delete" # by visible text
278
312
  npx monomind browse find label "Email" # by label text
279
313
  npx monomind browse find testid "submit-btn" # by data-testid
314
+ npx monomind browse find alttext "Company logo" # by alt attribute (images)
315
+ npx monomind browse find title "More options" # by title attribute (tooltips)
280
316
  npx monomind browse find role link --nth 2 # nth match
281
- npx monomind browse find role image --last # last match
317
+ npx monomind browse find role image --last # last match
282
318
  npx monomind browse find placeholder "Search..." # by placeholder text
283
319
  npx monomind browse find selector "div.modal" # by CSS selector
284
320
 
@@ -293,6 +329,28 @@ npx monomind browse is enabled @eN
293
329
  npx monomind browse is checked @eN
294
330
  ```
295
331
 
332
+ ### Window Management (Isolated Contexts)
333
+
334
+ ```bash
335
+ # Open a new isolated browser window (like incognito — separate cookies/storage)
336
+ npx monomind browse window new
337
+ npx monomind browse window new https://app.example.com
338
+
339
+ # Useful for multi-user testing (e.g. admin + regular user simultaneously):
340
+ # 1. Connect once, then open isolated windows for each user role
341
+ npx monomind browse connect --port 9222
342
+ npx monomind browse window new # switches to new isolated context
343
+ npx monomind browse open https://app.example.com/login
344
+ npx monomind browse fill @e1 "admin@example.com"
345
+ # ...
346
+
347
+ # Tab management (within the same context)
348
+ npx monomind browse tab # list all tabs
349
+ npx monomind browse tab new https://example.com
350
+ npx monomind browse tab close <tabId>
351
+ npx monomind browse tab <tabId> # switch to tab
352
+ ```
353
+
296
354
  ### Interaction
297
355
 
298
356
  ```bash
@@ -316,11 +374,15 @@ npx monomind browse keyup "Shift"
316
374
  npx monomind browse select @eN "Option A" # select dropdown option
317
375
  npx monomind browse check @eN
318
376
  npx monomind browse uncheck @eN
319
- npx monomind browse scroll down --ref eN --amount 400 # scroll within element
377
+ npx monomind browse scroll down 300 # positional amount (shorthand)
320
378
  npx monomind browse scroll down --amount 600 # scroll page
379
+ npx monomind browse scroll down --ref eN --amount 400 # scroll within element ref
380
+ npx monomind browse scroll down --selector ".sidebar" 300 # scroll within CSS selector
321
381
  npx monomind browse scrollintoview @eN
322
382
  npx monomind browse drag @eN @eM # drag source to target
323
383
  npx monomind browse upload @eN ./file.pdf # file input
384
+ npx monomind browse download @eN ./report.pdf # click element, capture file download
385
+ npx monomind browse download ".export-btn" ./data.csv --timeout 15000
324
386
  npx monomind browse highlight @eN # visual debug highlight
325
387
  ```
326
388
 
@@ -356,32 +418,126 @@ npx monomind browse wait --load domcontentloaded
356
418
  npx monomind browse wait --ms 500
357
419
  npx monomind browse wait --fn "window.__ready === true"
358
420
  npx monomind browse wait --text "Done" --timeout 10000
421
+ npx monomind browse wait --download ./report.pdf # wait for browser-triggered download to complete
422
+ npx monomind browse wait --download ./data.csv --timeout 15000
423
+ ```
424
+
425
+ ### Element State Checks (Assertions)
426
+
427
+ ```bash
428
+ npx monomind browse isvisible @e3 # true/false — is element visible?
429
+ npx monomind browse isenabled @e2 # true/false — is element enabled (not disabled)?
430
+ npx monomind browse ischecked @e1 # true/false — is checkbox/radio checked?
431
+
432
+ # Also accepts CSS selectors
433
+ npx monomind browse isvisible ".submit-btn"
434
+ npx monomind browse isenabled "#email-input"
435
+ npx monomind browse ischecked "input[name='agree']"
436
+
437
+ # JSON output for scripting
438
+ npx monomind browse isvisible @e4 --json # → {"visible": true}
439
+ ```
440
+
441
+ **Use in test scripts:**
442
+ ```bash
443
+ # Run snapshot, then assert expected state
444
+ npx monomind browse snapshot -i
445
+ npx monomind browse click @e3 # click submit
446
+ npx monomind browse wait --text "Success"
447
+ npx monomind browse isvisible ".success-banner" --json
448
+ ```
449
+
450
+ ### Snapshot Regression Testing
451
+
452
+ ```bash
453
+ # Save current snapshot as baseline
454
+ npx monomind browse snapshot -i --save ./baselines/homepage.txt
455
+
456
+ # Later: compare against baseline (colored diff: green=added, red=removed)
457
+ npx monomind browse snapshot -i --diff ./baselines/homepage.txt
458
+ # → Snapshot changed: +2 lines, -1 lines
459
+ # + button "Sign Out" [@e12]
460
+ # - button "Sign In" [@e8]
461
+
462
+ # JSON output
463
+ npx monomind browse snapshot -i --diff ./baselines/homepage.txt --json
464
+
465
+ # Content-safety flags (for agentic pipelines with untrusted pages)
466
+ npx monomind browse snapshot --content-boundaries # wrap output in sentinel markers to prevent injection
467
+ npx monomind browse snapshot --max-output 10000 # truncate to 10k chars (prevents context blowout)
468
+ npx monomind browse snapshot --content-boundaries --max-output 8000 # both together
469
+
470
+ # Compare two URLs side-by-side (navigates to each, diffs their snapshots)
471
+ npx monomind browse diff url https://staging.example.com https://prod.example.com
472
+ npx monomind browse diff url https://app.com/v1 https://app.com/v2 --interactive
473
+ npx monomind browse diff url https://before.com https://after.com --json
474
+ ```
475
+
476
+ ### Mobile Testing (Touch Events)
477
+
478
+ ```bash
479
+ # Tap with touch event — useful for mobile-emulated layouts
480
+ npx monomind browse tap @e4
481
+ npx monomind browse tap ".mobile-nav-toggle"
482
+
483
+ # Swipe gestures — 10-step smooth touchMove sequence
484
+ npx monomind browse swipe up # swipe up 300px from center
485
+ npx monomind browse swipe down 500 # swipe down 500px
486
+ npx monomind browse swipe left --x 300 --y 400 # swipe left from (300,400)
487
+ npx monomind browse swipe right 200 --x 50 --y 300 # swipe right 200px
488
+
489
+ # Combine with device emulation
490
+ npx monomind browse set device "iPhone 14"
491
+ npx monomind browse snapshot -i
492
+ npx monomind browse tap @e2
493
+ npx monomind browse swipe up 400 # scroll via swipe on mobile
359
494
  ```
360
495
 
361
496
  ### Screenshots & Visual Evidence
362
497
 
363
498
  ```bash
364
499
  npx monomind browse screenshot before.png
365
- npx monomind browse screenshot --full page.png # full-page
500
+ npx monomind browse screenshot --full page.png # full-page
501
+ npx monomind browse screenshot --annotate out.png # overlay @eN numbered labels (requires prior snapshot -i)
502
+ npx monomind browse screenshot --hide-scrollbars clean.png # hide native scrollbars via CSS injection
366
503
  npx monomind browse screenshot --format webp --quality 90 out.webp
367
- npx monomind browse screenshot --json # returns path
504
+ npx monomind browse screenshot --json # returns path as JSON
368
505
  npx monomind browse pdf ./output.pdf
369
506
  npx monomind browse pdf --landscape ./report.pdf
370
507
  ```
371
508
 
509
+ **`--annotate` pattern:** always run `snapshot -i` first to populate refs, then `screenshot --annotate` to produce a screenshot with numbered labels at each element's position. Numbers match the `@eN` refs from the snapshot, so you can point to elements by number in bug reports.
510
+
511
+ > **Note:** `--annotate` uses viewport-relative coordinates — do not combine with `--full`. On full-page captures, badges will be misaligned below the fold.
512
+
513
+ ```bash
514
+ npx monomind browse snapshot -i
515
+ npx monomind browse screenshot --annotate ./issue-001.png
516
+ # → labels [1] [2] [3]... appear at each interactive element
517
+ ```
518
+
372
519
  ### Console, Errors & JavaScript
373
520
 
521
+ > **Console capture is always-on.** As soon as you `open` or `connect`, monobrowse hooks `Runtime.consoleAPICalled`, `Log.entryAdded`, and `Runtime.exceptionThrown` automatically. No `capture start` needed — messages accumulate in memory and `console`/`errors` read from that buffer at any time.
522
+
374
523
  ```bash
375
- npx monomind browse console # all console messages
376
- npx monomind browse console --clear # clear console history
377
- npx monomind browse console --errors-only # only error-level messages
378
- npx monomind browse errors # JS exceptions only
379
- npx monomind browse errors --clear # clear exception history
380
- npx monomind browse errors --json # machine-readable output
524
+ npx monomind browse console # all log/warn/error/info messages since connect
525
+ npx monomind browse console --errors-only # filter to error level only
526
+ npx monomind browse console --clear # reset the buffer
527
+ npx monomind browse console --json # machine-readable [{type, text, timestamp}]
528
+ npx monomind browse errors # uncaught JS exceptions (Runtime.exceptionThrown)
529
+ npx monomind browse errors --json # [{text, url, lineNumber, columnNumber, timestamp}]
530
+ npx monomind browse errors --clear
531
+
381
532
  npx monomind browse eval "document.title"
382
533
  npx monomind browse eval "document.querySelectorAll('button').length"
383
534
  npx monomind browse eval "window.__store.getState()" --json
384
- npx monomind browse addinitscript "window.__TEST__ = true"
535
+ # Multiline JS via heredoc (--stdin reads from stdin)
536
+ cat <<'EOF' | npx monomind browse eval --stdin
537
+ const items = document.querySelectorAll('li');
538
+ JSON.stringify([...items].map(i => i.textContent.trim()))
539
+ EOF
540
+ npx monomind browse addinitscript "window.__TEST__ = true" # runs on every page load
385
541
  npx monomind browse removeinitscript <id>
386
542
  ```
387
543
 
@@ -402,6 +558,11 @@ npx monomind browse network capture start
402
558
  npx monomind browse network capture stop
403
559
  npx monomind browse network capture clear
404
560
  npx monomind browse network requests --json
561
+ npx monomind browse network requests --filter "api/users" # filter by URL substring
562
+ npx monomind browse network requests --method POST # filter by HTTP method
563
+ npx monomind browse network requests --status-code 200 # filter by status code
564
+ npx monomind browse network requests --type xhr # filter by resource type
565
+ npx monomind browse network request <requestId> # full detail for one request
405
566
  npx monomind browse network cookies # cookies via network layer
406
567
  ```
407
568
 
@@ -465,12 +626,23 @@ npx monomind browse state load <name>
465
626
  npx monomind browse state list
466
627
  npx monomind browse state show # inspect current active session
467
628
  npx monomind browse state clear # clear current active session
629
+ npx monomind browse state rename <old> <new> # rename a saved session
630
+ npx monomind browse state clean --older-than 7 # delete sessions older than N days (default: 7)
468
631
  ```
469
632
 
470
633
  ### Performance & Diagnostics
471
634
 
635
+ > **DevTools panel coverage:**
636
+ > ✅ Console panel — `console` / `errors` (always-on, see above)
637
+ > ✅ Network panel — `network requests` + filters, `network request <id>`, `har start/stop --bodies`
638
+ > ✅ Performance panel — `trace start/stop` (exports Chrome DevTools-compatible `.json`)
639
+ > ✅ Memory panel — `profiler heap ./heap.json` (heap snapshot)
640
+ > ✅ Application panel — `storage`, `cookies`
641
+ > ✅ Sources / JS eval — `eval`, `eval --stdin`, `addinitscript`
642
+ > ❌ Not available: source-map resolution for error stacks, live network waterfall, Lighthouse audit scores, Total Blocking Time metric
643
+
472
644
  ```bash
473
- # Core Web Vitals
645
+ # Core Web Vitals (LCP < 2.5s PASS, 2.5–4s WARN, >4s FAIL)
474
646
  npx monomind browse vitals --wait 3000 --json
475
647
 
476
648
  # CPU profiler
@@ -480,11 +652,12 @@ npx monomind browse profiler stop --json
480
652
  # Heap snapshot
481
653
  npx monomind browse profiler heap ./heap.json
482
654
 
483
- # Chrome trace
655
+ # Chrome trace (load in chrome://tracing or Perfetto)
484
656
  npx monomind browse trace start --screenshots
485
657
  npx monomind browse trace stop ./trace.json
658
+ npx monomind browse trace status
486
659
 
487
- # HAR (full HTTP archive with bodies)
660
+ # HAR (full HTTP archive with request/response bodies)
488
661
  npx monomind browse har start
489
662
  npx monomind browse har status
490
663
  npx monomind browse har stop --bodies --json # --bodies only valid on stop
@@ -493,9 +666,7 @@ npx monomind browse har stop --bodies --json # --bodies only valid on stop
493
666
  npx monomind browse record start --format jpeg --quality 80
494
667
  npx monomind browse record status
495
668
  npx monomind browse record stop --json
496
-
497
- # Trace status
498
- npx monomind browse trace status
669
+ npx monomind browse record restart ./take2.mp4 # atomically stop+start (no page reload)
499
670
  ```
500
671
 
501
672
  ### Batch Execution
@@ -594,6 +765,67 @@ npx monomind browse snapshot -i # should show error state
594
765
 
595
766
  ---
596
767
 
768
+ ## Dogfood / Exploratory QA Mode
769
+
770
+ When asked to "dogfood", "QA", "find bugs", "exploratory test", or "bug hunt" a web app:
771
+
772
+ ### Setup
773
+
774
+ ```bash
775
+ mkdir -p ./dogfood-output/screenshots ./dogfood-output/videos
776
+ ```
777
+
778
+ ### Workflow
779
+
780
+ ```
781
+ 1. Orient → open URL, initial annotated screenshot, snapshot -i
782
+ 2. Explore → visit each major section, test interactive elements
783
+ 3. Document → screenshot + record for each issue found (as you go, not at end)
784
+ 4. Wrap up → re-check console errors, write summary
785
+ ```
786
+
787
+ ### At each page
788
+
789
+ ```bash
790
+ npx monomind browse snapshot -i # find interactive elements
791
+ npx monomind browse screenshot --annotate ./dogfood-output/screenshots/<page>.png # annotated overview
792
+ npx monomind browse errors # check for JS errors
793
+ npx monomind browse console # check console output
794
+ ```
795
+
796
+ ### Documenting an issue (repro-first)
797
+
798
+ For **interactive/behavioral bugs** (require clicking or typing to reproduce):
799
+
800
+ ```bash
801
+ # 1. Start recording before reproducing
802
+ npx monomind browse record start
803
+ # 2. Walk through the steps (use type not fill during recording — shows keystrokes)
804
+ npx monomind browse screenshot ./dogfood-output/screenshots/issue-001-step1.png
805
+ npx monomind browse type @eN "input value"
806
+ npx monomind browse click @eM
807
+ npx monomind browse screenshot --annotate ./dogfood-output/screenshots/issue-001-result.png
808
+ # 3. Stop recording
809
+ npx monomind browse record stop --json # returns path to frames JSON
810
+ ```
811
+
812
+ For **static/visible-on-load bugs** (typos, layout, placeholder text):
813
+
814
+ ```bash
815
+ npx monomind browse screenshot --annotate ./dogfood-output/screenshots/issue-001.png
816
+ # Single annotated screenshot is sufficient — no recording needed
817
+ ```
818
+
819
+ ### `type` vs `fill` during recording
820
+
821
+ Use `type` (character-by-character) when recording a video so keystrokes are visible in the recording. Use `fill` (instant clear + set) for speed outside recording.
822
+
823
+ ### Reporting
824
+
825
+ Aim for 5–10 well-documented issues. Depth of evidence (annotated screenshots, step-by-step repro) beats quantity. Append each issue as you find it — never batch for the end.
826
+
827
+ ---
828
+
597
829
  ## Task Walkthrough Mode
598
830
 
599
831
  When helping a user accomplish a task in a live UI:
@@ -669,10 +901,61 @@ npx monomind memory search --query "login flow" --namespace ui-testing
669
901
 
670
902
  ---
671
903
 
904
+ ## Electron App Automation
905
+
906
+ Automate any Electron desktop app (VS Code, Slack, Discord, Figma, Notion, Spotify) via CDP — same snapshot-interact workflow as for web pages.
907
+
908
+ ### Launch with CDP port
909
+
910
+ ```bash
911
+ # macOS — quit the app first if already running
912
+ open -a "Slack" --args --remote-debugging-port=9222
913
+ open -a "Visual Studio Code" --args --remote-debugging-port=9223
914
+ open -a "Discord" --args --remote-debugging-port=9224
915
+ open -a "Figma" --args --remote-debugging-port=9225
916
+ open -a "Notion" --args --remote-debugging-port=9226
917
+
918
+ # Linux
919
+ slack --remote-debugging-port=9222
920
+ code --remote-debugging-port=9223
921
+
922
+ # Windows
923
+ "C:\...\slack.exe" --remote-debugging-port=9222
924
+ ```
925
+
926
+ ### Connect and interact
927
+
928
+ ```bash
929
+ # Connect to a specific port
930
+ npx monomind browse connect --port 9222
931
+
932
+ # Auto-discover any running Chromium-based app on ports 9222 or 9229
933
+ npx monomind browse connect --auto-connect
934
+
935
+ # Standard workflow from here
936
+ npx monomind browse snapshot -i
937
+ npx monomind browse click @e5
938
+ npx monomind browse screenshot --annotate slack-desktop.png
939
+ ```
940
+
941
+ `--auto-connect` probes ports 9222 and 9229 in order and connects to the first responding Chrome/Electron instance.
942
+
943
+ ### Tab and webview management
944
+
945
+ Electron apps often have multiple windows or embedded webviews:
946
+
947
+ ```bash
948
+ npx monomind browse tab # list all tabs/webviews (shows targetId for each)
949
+ npx monomind browse tab <targetId> # switch to tab by its targetId
950
+ npx monomind browse tab new # open a new tab
951
+ ```
952
+
953
+ ---
954
+
672
955
  ## Activation Checklist
673
956
 
674
957
  When this skill fires:
675
- - [ ] Get the URL (ask if not provided)
958
+ - [ ] Get the URL (ask if not provided — or use `--auto-connect` for Electron apps)
676
959
  - [ ] Run `open` + `errors` baseline
677
960
  - [ ] Run all 7 QA phases (or subset the user requested)
678
961
  - [ ] Screenshot key states: initial, post-action, errors, mobile
@@ -113,7 +113,8 @@ curl -s -X POST "${CTRL_URL}/api/mastermind/event" \
113
113
  --arg org "$orgName" \
114
114
  --arg goal "$goal" \
115
115
  --arg proj "$REPO_ROOT" \
116
- '{type:"org:start",session:$session,org:$org,goal:$goal,project:$proj,ts:(now*1000|floor)}')" || true
116
+ --argjson ci "${CHECKPOINT_INTERVAL_MS:-600000}" \
117
+ '{type:"org:start",session:$session,org:$org,goal:$goal,project:$proj,checkpointInterval:$ci,ts:(now*1000|floor)}')" || true
117
118
  ```
118
119
 
119
120
  ### 1.6.4 — Execute first iteration inline
@@ -147,12 +148,22 @@ If `LOOP_STATUS == "active"` or `LOOP_STATUS == "paused"`:
147
148
  LOOP_PROMPT=$(cat "$run_prompt_file")
148
149
  ```
149
150
 
150
- 2. Call `ScheduleWakeup` with:
151
+ 2. Emit `org:stop` to signal this iteration is pausing:
152
+ ```bash
153
+ curl -s -X POST "${CTRL_URL}/api/mastermind/event" \
154
+ -H "Content-Type: application/json" \
155
+ -d "$(jq -cn \
156
+ --arg org "$orgName" \
157
+ --arg runId "run-$(date -u +%Y%m%dT%H%M%S)" \
158
+ '{type:"org:stop",org:$org,runId:$runId,ts:(now*1000|floor),reason:"scheduled-iteration-complete"}')" || true
159
+ ```
160
+
161
+ 3. Call `ScheduleWakeup` with:
151
162
  - `delaySeconds`: `$poll_interval_seconds`
152
163
  - `reason`: `"<orgName>: next scheduled poll (every <poll_interval_minutes> min)"`
153
164
  - `prompt`: full contents of `$LOOP_PROMPT`
154
165
 
155
- 3. Update `next_run` in org JSON:
166
+ 4. Update `next_run` in org JSON:
156
167
  ```bash
157
168
  next_ts=$(( $(date +%s) + poll_interval_seconds ))
158
169
  next_iso=$(date -u -r "$next_ts" +%Y-%m-%dT%H:%M:%SZ 2>/dev/null \
@@ -305,33 +316,37 @@ jq -cn \
305
316
  '{type:"run:start",runId:$runId,org:$org,orgName:$org,goal:$goal,bossRole:$bossRole,project:$proj,ts:(now*1000|floor)}' \
306
317
  >> "$runFile"
307
318
 
308
- # Print resolved values so Step 4 can embed them in the boss prompt
309
- echo "ORG_VARS: orgName=${orgName} runId=${runId} sessionId=${sessionId} goal=${goal} bossRole_id=${bossRole_id} bossRole_title=${bossRole_title} bossRole_agent_type=${bossRole_agent_type} board_id=${board_id} todo_col=${todo_col} doing_col=${doing_col} done_col=${done_col} checkpointMin=${checkpointMin} memNs=${memNs} CTRL_URL=${CTRL_URL} MONO_DIR=${MONO_DIR} runFile=${runFile} REPO_ROOT=${REPO_ROOT}"
310
- ```
311
-
312
- After running the script above, read the `ORG_VARS:` line from its output and hold those values for Step 4 (embed them into the boss prompt as literals — **do not re-run bash to look them up**).
313
-
314
- ---
315
-
316
- ## Step 3 — Emit org:start (separate Bash call, re-derives from output)
317
-
318
- After the combined Step 2+3 script runs, emit `org:start` using the values printed by `ORG_VARS:`. Replace each `<X>` with the literal value from that line:
319
+ # Emit session:start first creates the chat tab session record and writes active-session.json
320
+ # so capture-handler can tag all subsequent agent:spawn / agent:complete events with this session
321
+ curl -s -X POST "${CTRL_URL}/api/mastermind/event" \
322
+ -H "Content-Type: application/json" \
323
+ -d "$(jq -cn \
324
+ --arg session "$sessionId" \
325
+ --arg org "$orgName" \
326
+ --arg prompt "$goal" \
327
+ '{type:"session:start",session:$session,org:$org,prompt:$prompt,ts:(now*1000|floor)}')" || true
319
328
 
320
- ```bash
321
- curl -s -X POST "<CTRL_URL>/api/mastermind/event" \
329
+ # Emit org:start — must run here while CTRL_URL/runId/orgName are in scope
330
+ curl -s -X POST "${CTRL_URL}/api/mastermind/event" \
322
331
  -H "Content-Type: application/json" \
323
332
  -d "$(jq -cn \
324
- --arg session "<sessionId>" \
325
- --arg org "<orgName>" \
326
- --arg runId "<runId>" \
327
- --arg goal "<goal>" \
328
- --arg proj "<REPO_ROOT>" \
329
- '{type:"org:start",session:$session,org:$org,runId:$runId,goal:$goal,project:$proj,ts:(now*1000|floor)}')" || true
333
+ --arg session "$sessionId" \
334
+ --arg org "$orgName" \
335
+ --arg runId "$runId" \
336
+ --arg goal "$goal" \
337
+ --arg proj "$REPO_ROOT" \
338
+ --argjson ci "${CHECKPOINT_INTERVAL_MS:-600000}" \
339
+ '{type:"org:start",session:$session,org:$org,runId:$runId,goal:$goal,project:$proj,checkpointInterval:$ci,ts:(now*1000|floor)}')" || true
340
+
341
+ # Print resolved values so Step 3 can embed them in the boss prompt
342
+ echo "ORG_VARS: orgName=${orgName} runId=${runId} sessionId=${sessionId} goal=${goal} bossRole_id=${bossRole_id} bossRole_title=${bossRole_title} bossRole_agent_type=${bossRole_agent_type} board_id=${board_id} todo_col=${todo_col} doing_col=${doing_col} done_col=${done_col} checkpointMin=${checkpointMin} memNs=${memNs} CTRL_URL=${CTRL_URL} MONO_DIR=${MONO_DIR} runFile=${runFile} REPO_ROOT=${REPO_ROOT}"
330
343
  ```
331
344
 
345
+ After running the script above, read the `ORG_VARS:` line from its output and hold those values for Step 3 (embed them into the boss prompt as literals — **do not re-run bash to look them up**).
346
+
332
347
  ---
333
348
 
334
- ## Step 4 — Spawn Boss Agent
349
+ ## Step 3 — Spawn Boss Agent
335
350
 
336
351
  Using the literal values from the `ORG_VARS:` output (not shell variables — they don't persist), spawn the boss agent via Task tool:
337
352
 
@@ -508,6 +523,11 @@ OPERATING LOOP:
508
523
  -d "$(jq -cn --arg s "${sessionId}" --arg o "${orgName}" --arg rid "${runId}" \
509
524
  --arg from "<role_id>" --arg msg "Completed: <one-sentence summary of output>" \
510
525
  '{type:"org:comms",session:$s,org:$o,runId:$rid,from:$from,to:"boss",msg:$msg,ts:(now*1000|floor)}')" || true
526
+ # When your task is fully complete — signal offline:
527
+ curl -s -X POST "${CTRL_URL}/api/mastermind/event" -H "Content-Type: application/json" \
528
+ -d "$(jq -cn --arg s "${sessionId}" --arg o "${orgName}" --arg rid "${runId}" \
529
+ --arg from "<role_id>" \
530
+ '{type:"org:agent:offline",session:$s,org:$o,runId:$rid,from:$from,ts:(now*1000|floor)}')" || true
511
531
  # TOKEN TRACKING — estimate and persist token usage to state.json for the Budgets dashboard:
512
532
  # Count approximate output tokens from your work (1 word ≈ 1.3 tokens):
513
533
  _tok_out=$(echo -n "<paste a representative sample of your final output here>" | wc -w)
@@ -636,3 +656,29 @@ run_id: "<runId>"
636
656
  ## Step 8 — Brain Write (standalone only)
637
657
 
638
658
  If `caller` is not "command", follow _protocol.md Brain Write Procedure for domain `ops`.
659
+
660
+ ---
661
+
662
+ ## Reporting Artifacts (optional)
663
+
664
+ When you create or modify a file that represents output of this org run, emit:
665
+
666
+ ```bash
667
+ curl -s -X POST "${CTRL_URL}/api/mastermind/event" \
668
+ -H "Content-Type: application/json" \
669
+ -d "$(jq -cn \
670
+ --arg s "${sessionId}" \
671
+ --arg o "${orgName}" \
672
+ --arg rid "${runId}" \
673
+ --arg from "${AGENT_ROLE}" \
674
+ --arg label "Short description" \
675
+ --arg path "${FILE_PATH}" \
676
+ --arg mime "text/markdown" \
677
+ '{type:"org:artifact",session:$s,org:$o,runId:$rid,from:$from,artifact:{label:$label,type:"file",path:$path,mimeType:$mime},ts:(now*1000|floor)}')" || true
678
+ ```
679
+
680
+ The dashboard chat will show this as an artifact card with a "View" button. Fill in:
681
+ - `${AGENT_ROLE}` — the literal role id of the agent emitting the artifact
682
+ - `${FILE_PATH}` — the absolute or repo-relative path to the created/modified file
683
+ - `label` — a short human-readable description (e.g., "Weekly report", "Analysis output")
684
+ - `mimeType` — `text/markdown`, `application/json`, `text/plain`, etc.
@@ -160,13 +160,18 @@ If someone could look at this interface and say "AI made that" without doubt, it
160
160
 
161
161
  ## Antipattern Detection
162
162
 
163
- Before finalizing any design, run the antipattern detector. It checks for 27 known design antipatterns across two categories:
163
+ Before finalizing any design, run the antipattern detector. It checks for 46 known design antipatterns across two categories:
164
164
 
165
165
  - **slop** — AI tells that signal lack of intentional design (purple palettes, side-tabs, identical card grids, italic-serif heroes, overused fonts)
166
166
  - **quality** — Design principle violations (spacing, hierarchy, readability, contrast, motion, typography)
167
167
 
168
168
  To run detection on HTML/CSS files:
169
169
  ```bash
170
+ monomind design detect <file-or-dir>
171
+ ```
172
+
173
+ Or use `npx impeccable detect` directly as an alternative:
174
+ ```bash
170
175
  npx impeccable detect <file-or-dir>
171
176
  ```
172
177
 
@@ -177,8 +182,31 @@ npm install -g impeccable
177
182
  npx impeccable@latest detect <file-or-dir>
178
183
  ```
179
184
 
185
+ For machine-readable output (e.g. CI pipelines):
186
+ ```bash
187
+ monomind design detect --json <file-or-dir>
188
+ ```
189
+
180
190
  For the full antipattern catalog with detection rules and remediation, see [reference/antipatterns-catalog.md](reference/antipatterns-catalog.md).
181
191
 
192
+ ## OKLCH Palette Seed
193
+
194
+ Before composing a brand palette, seed the anchor color from the curated OKLCH library (129 hand-curated seeds):
195
+
196
+ ```bash
197
+ monomind design palette # random seed (hue-zone weighted)
198
+ monomind design palette --from "my-product-name" # deterministic seed from product name
199
+ monomind design palette --id seed-021 # specific seed by ID
200
+ monomind design palette --json # machine-readable output
201
+ ```
202
+
203
+ Each seed returns:
204
+ - **Anchor color** — the single OKLCH value your primary brand color derives from
205
+ - **Mood** — one evocative phrase describing the register this hue inhabits
206
+ - **Strategy** — a concrete composition hint (bg choice, accent pairing, surface treatment)
207
+
208
+ The seed is the start, not the recipe. Compose the full 5-role palette (bg, surface, ink, accent, muted) using your brief and the color-strategy guidance in this skill. The same seed can produce a dark-mode jazz club or a light-mode clinical brand depending on what the brief calls for.
209
+
182
210
  ## UX Quality Gate
183
211
 
184
212
  Antipatterns catch aesthetic and visual issues. For implementation-level UX quality — accessibility, touch interaction, form feedback, navigation patterns, animation timing, performance — load:
@@ -290,6 +318,9 @@ Shadows max at 0.15 alpha. No heavy drop shadows.
290
318
  | `components [target]` | Build | Build component systems, token foundations, theme toggles | [reference/component-system.md](reference/component-system.md) |
291
319
  | `research [target]` | Evaluate | UX research, usability testing, personas, journey mapping | [reference/ux-research.md](reference/ux-research.md) |
292
320
  | `images [target]` | Build | Generate design images, hero photography, inclusive prompts | [reference/image-prompts.md](reference/image-prompts.md) |
321
+ | `hooks [action]` | Config | Manage the impeccable design detector hook per project | [reference/hooks.md](reference/hooks.md) |
322
+ | `detect [file-or-dir]` | Evaluate | Run design anti-pattern detection on HTML/CSS files | (inline) |
323
+ | `palette [--from name]` | Build | Seed a brand palette from the OKLCH library (129 seeds) | (inline) |
293
324
 
294
325
  ### Routing rules
295
326