@rulemetric/cli 0.18.1 → 0.20.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 (288) hide show
  1. package/dist/base-command.js +1 -1
  2. package/dist/chunk-25JPYUEV.js +4 -0
  3. package/dist/{chunk-NSO2EBYE.js → chunk-2WRP6ZJF.js} +1 -1
  4. package/dist/{chunk-3ZHBOILE.js → chunk-45CCW25C.js} +1 -1
  5. package/dist/{chunk-TQFHRD5B.js → chunk-4EGU65H4.js} +1 -1
  6. package/dist/{chunk-CXENLSMR.js → chunk-4RC2SYZX.js} +1 -1
  7. package/dist/chunk-4W5BF4ZN.js +1 -0
  8. package/dist/{chunk-RQBN7WNS.js → chunk-4XIYUMTD.js} +7 -7
  9. package/dist/{chunk-NMCQ7JZZ.js → chunk-52RILE5M.js} +1 -1
  10. package/dist/{chunk-O7ZQEKND.js → chunk-5O62P6KC.js} +1 -1
  11. package/dist/chunk-6NTW62L4.js +1 -0
  12. package/dist/{chunk-ENW5SUQJ.js → chunk-6XCD343D.js} +1 -1
  13. package/dist/chunk-6Z4JNHBO.js +1 -0
  14. package/dist/{chunk-XAGNGQL3.js → chunk-7CQBFCHP.js} +1 -1
  15. package/dist/{chunk-MJLW5KN2.js → chunk-7F3S6JQ2.js} +1 -1
  16. package/dist/{chunk-ZFEDOPRU.js → chunk-AEIKPNLG.js} +1 -1
  17. package/dist/{chunk-XCN2YPWI.js → chunk-ANPGOUIO.js} +1 -1
  18. package/dist/chunk-B56GMANB.js +1 -0
  19. package/dist/chunk-BXXC3VXB.js +7 -0
  20. package/dist/{chunk-KIQK7NVF.js → chunk-CLPIN7TY.js} +1 -1
  21. package/dist/chunk-D6CXQBMN.js +1 -0
  22. package/dist/{chunk-5VWVQCNR.js → chunk-E5FI5YHO.js} +1 -1
  23. package/dist/{chunk-7MQZPDDZ.js → chunk-E6O2IFOK.js} +1 -1
  24. package/dist/{chunk-BOYWPUV2.js → chunk-EA3X4TAE.js} +1 -1
  25. package/dist/{chunk-AZWY2DOT.js → chunk-EBGVDX3Z.js} +1 -1
  26. package/dist/chunk-FKUFJWII.js +1 -0
  27. package/dist/chunk-G2MRNA45.js +1 -0
  28. package/dist/{chunk-C3XWDYZJ.js → chunk-G2UGWEMO.js} +1 -1
  29. package/dist/chunk-GKWZ2DSE.js +2 -0
  30. package/dist/chunk-GRTEWHXU.js +5 -0
  31. package/dist/{chunk-RRBFKVCI.js → chunk-HN2MRF25.js} +1 -1
  32. package/dist/chunk-HRU6WGCG.js +1 -0
  33. package/dist/{chunk-MHLHLJ5T.js → chunk-I2U5GNNM.js} +2 -2
  34. package/dist/{chunk-AZRGURHR.js → chunk-ICULHHNZ.js} +1 -1
  35. package/dist/{chunk-BRYURAUN.js → chunk-ID47WFUP.js} +1 -1
  36. package/dist/{chunk-4LVSD2XZ.js → chunk-IULEYP4V.js} +1 -1
  37. package/dist/chunk-JE2JX7IJ.js +4 -0
  38. package/dist/chunk-JES2CV5Z.js +1 -0
  39. package/dist/chunk-JXUSXDS6.js +1 -0
  40. package/dist/{chunk-D7L7IMJQ.js → chunk-K2PI3OGV.js} +1 -1
  41. package/dist/chunk-K4LO27GG.js +1 -0
  42. package/dist/{chunk-IYX65N6T.js → chunk-KIXBBZL5.js} +1 -1
  43. package/dist/{chunk-5LTJNYCP.js → chunk-KTLRSRHF.js} +1 -1
  44. package/dist/{chunk-WLLIFRRE.js → chunk-KUD7LWJJ.js} +1 -1
  45. package/dist/{chunk-I2FPXRA6.js → chunk-KYJ6WAPX.js} +1 -1
  46. package/dist/chunk-LAJ4RBRB.js +1 -0
  47. package/dist/chunk-LDFGM37E.js +2 -0
  48. package/dist/{chunk-K65DDLTZ.js → chunk-LKOUL3IF.js} +1 -1
  49. package/dist/{chunk-A2JFQUDW.js → chunk-NI6RDOZ5.js} +1 -1
  50. package/dist/{chunk-JCZOEIL7.js → chunk-NJKPUZNM.js} +1 -1
  51. package/dist/{chunk-PPQFN62M.js → chunk-NN4M476J.js} +1 -1
  52. package/dist/{chunk-RAMQVEJB.js → chunk-NNUZ4CG4.js} +1 -1
  53. package/dist/{chunk-7J7H7YFQ.js → chunk-O662MWOR.js} +1 -1
  54. package/dist/{chunk-UROUVE3D.js → chunk-OHMVGDWQ.js} +1 -1
  55. package/dist/chunk-ONSRPEUQ.js +7 -0
  56. package/dist/chunk-P2N4KRAR.js +1 -0
  57. package/dist/{chunk-CAQLSYOK.js → chunk-PCSSIYH6.js} +1 -1
  58. package/dist/chunk-Q42RXJ4R.js +1 -0
  59. package/dist/chunk-RAOV3MFF.js +1 -0
  60. package/dist/{chunk-3EZZGA72.js → chunk-RFLO7L5X.js} +1 -1
  61. package/dist/{chunk-5U5SHJJA.js → chunk-RYMQMJ7O.js} +1 -1
  62. package/dist/chunk-S7ZQTZNB.js +3 -0
  63. package/dist/{chunk-LELSVLNK.js → chunk-SFZSHNZZ.js} +1 -1
  64. package/dist/{chunk-WSUKOU3X.js → chunk-SWCM7IHC.js} +1 -1
  65. package/dist/{chunk-7N55TWYQ.js → chunk-T7DAU6DV.js} +1 -1
  66. package/dist/{chunk-HNPC5U3C.js → chunk-TUSFCQBL.js} +1 -1
  67. package/dist/chunk-UFRJ75FW.js +1 -0
  68. package/dist/{chunk-FGGESTXG.js → chunk-UJTMT6Z7.js} +1 -1
  69. package/dist/{chunk-QRKMRG6W.js → chunk-WGPFOHV3.js} +1 -1
  70. package/dist/{chunk-NAS7FIGM.js → chunk-WLLSWFAJ.js} +1 -1
  71. package/dist/chunk-WUDHDZOG.js +1 -0
  72. package/dist/{chunk-A6JUIZ3H.js → chunk-WYDRKFXO.js} +1 -1
  73. package/dist/chunk-XLFVX7N7.js +1 -0
  74. package/dist/{chunk-LSZ32DUR.js → chunk-XPVI6H2L.js} +1 -1
  75. package/dist/{chunk-IPNBW7ZW.js → chunk-XQEI7NOC.js} +1 -1
  76. package/dist/{chunk-EKTNI6RV.js → chunk-Y6VBAURK.js} +1 -1
  77. package/dist/chunk-YL62YV7G.js +1 -0
  78. package/dist/chunk-YMIO3CVV.js +2 -0
  79. package/dist/{chunk-ANLPPIMS.js → chunk-ZFIGOHQ6.js} +1 -1
  80. package/dist/commands/antigravity/backfill.js +1 -1
  81. package/dist/commands/auth/create-key.js +1 -1
  82. package/dist/commands/auth/login.js +1 -1
  83. package/dist/commands/auth/logout.js +1 -1
  84. package/dist/commands/auth/revoke-key.js +1 -1
  85. package/dist/commands/auth/signup.js +1 -1
  86. package/dist/commands/auth/status.js +1 -1
  87. package/dist/commands/capture/scope.js +1 -1
  88. package/dist/commands/catalog/index.js +1 -1
  89. package/dist/commands/catalog/recommend.js +1 -1
  90. package/dist/commands/crons/list.js +1 -1
  91. package/dist/commands/crons/run.js +1 -1
  92. package/dist/commands/dashboard.js +1 -1
  93. package/dist/commands/diagnostics.js +1 -1
  94. package/dist/commands/eval-targets/create.js +1 -1
  95. package/dist/commands/eval-targets/list.js +1 -1
  96. package/dist/commands/evals/agent.js +3 -3
  97. package/dist/commands/evals/auto-run.js +1 -5
  98. package/dist/commands/evals/benchmark.js +1 -1
  99. package/dist/commands/evals/compare.js +1 -31
  100. package/dist/commands/evals/create.js +1 -1
  101. package/dist/commands/evals/optimize-description.js +1 -59
  102. package/dist/commands/evals/optimize.js +1 -5
  103. package/dist/commands/evals/refine-cases.js +1 -1
  104. package/dist/commands/evals/run.js +1 -3
  105. package/dist/commands/evals/validate-judge.js +1 -1
  106. package/dist/commands/experiments/enroll.js +1 -0
  107. package/dist/commands/experiments/list.js +1 -1
  108. package/dist/commands/experiments/reuse.js +1 -0
  109. package/dist/commands/gateway/ensure.js +1 -1
  110. package/dist/commands/hooks/install.js +1 -1
  111. package/dist/commands/hooks/run.js +1 -1
  112. package/dist/commands/hooks/uninstall.js +1 -1
  113. package/dist/commands/instructions/create.js +1 -1
  114. package/dist/commands/instructions/dedupe.js +1 -1
  115. package/dist/commands/instructions/delete.js +1 -1
  116. package/dist/commands/instructions/fork.js +1 -1
  117. package/dist/commands/instructions/get.js +1 -1
  118. package/dist/commands/instructions/list.js +1 -1
  119. package/dist/commands/instructions/promote.js +1 -1
  120. package/dist/commands/instructions/pull.js +1 -1
  121. package/dist/commands/instructions/restore.js +1 -1
  122. package/dist/commands/instructions/retract.js +1 -1
  123. package/dist/commands/instructions/upstream.js +1 -1
  124. package/dist/commands/instructions/versions.js +1 -1
  125. package/dist/commands/launcher.js +1 -1
  126. package/dist/commands/local/down.js +1 -1
  127. package/dist/commands/local/up.js +1 -1
  128. package/dist/commands/org/current.js +1 -1
  129. package/dist/commands/org/list.js +1 -1
  130. package/dist/commands/org/switch.js +1 -1
  131. package/dist/commands/packs/add-instruction.js +1 -1
  132. package/dist/commands/packs/apply.js +1 -1
  133. package/dist/commands/packs/create.js +1 -1
  134. package/dist/commands/packs/fork.js +1 -1
  135. package/dist/commands/packs/get.js +1 -1
  136. package/dist/commands/packs/list.js +1 -1
  137. package/dist/commands/packs/remove-instruction.js +1 -1
  138. package/dist/commands/proxy/env.js +1 -1
  139. package/dist/commands/proxy/logs.js +1 -1
  140. package/dist/commands/proxy/restart.js +1 -1
  141. package/dist/commands/proxy/setup.js +1 -1
  142. package/dist/commands/proxy/start.js +1 -1
  143. package/dist/commands/proxy/status.js +1 -1
  144. package/dist/commands/proxy/stop.js +1 -1
  145. package/dist/commands/research/backfill.js +1 -1
  146. package/dist/commands/research/resume-scoped-outcomes.js +1 -1
  147. package/dist/commands/research/tail-transcript.js +1 -1
  148. package/dist/commands/service/install.js +37 -37
  149. package/dist/commands/service/status.js +1 -1
  150. package/dist/commands/service/uninstall.js +1 -1
  151. package/dist/commands/service/updates.js +1 -0
  152. package/dist/commands/sessions/analyze.js +1 -1
  153. package/dist/commands/sessions/delete.js +1 -1
  154. package/dist/commands/sessions/end.js +1 -1
  155. package/dist/commands/sessions/import.js +1 -1
  156. package/dist/commands/sessions/list.js +1 -1
  157. package/dist/commands/sessions/start.js +1 -1
  158. package/dist/commands/setup.js +1 -1
  159. package/dist/commands/skills/export-approved.js +1 -1
  160. package/dist/commands/skills/install.js +1 -1
  161. package/dist/commands/skills/list.js +1 -1
  162. package/dist/commands/skills/publish.js +1 -1
  163. package/dist/commands/skills/search.js +1 -1
  164. package/dist/commands/skills/update.js +1 -1
  165. package/dist/commands/suggestions/accept.js +1 -1
  166. package/dist/commands/suggestions/auto.js +1 -1
  167. package/dist/commands/suggestions/dismiss.js +1 -1
  168. package/dist/commands/suggestions/list.js +1 -1
  169. package/dist/commands/suggestions/refresh.js +1 -1
  170. package/dist/commands/suggestions/undo.js +1 -1
  171. package/dist/dashboard/Dashboard.js +1 -1
  172. package/dist/dashboard/data.js +1 -1
  173. package/dist/dashboard/launcher/LauncherOverlay.js +1 -1
  174. package/dist/dashboard/launcher/api.js +1 -1
  175. package/dist/dashboard/launcher/useLaunchJobs.js +1 -1
  176. package/dist/dashboard/panels/measurement.js +1 -1
  177. package/dist/dashboard/telemetry.js +1 -1
  178. package/dist/{dist-ZJY72TUD.js → dist-D2HLWE5I.js} +1 -1
  179. package/dist/lib/active-org-refresh.js +1 -1
  180. package/dist/lib/agent-loop.js +1 -1
  181. package/dist/lib/agent-presence.js +1 -1
  182. package/dist/lib/antigravity-transcript.js +1 -1
  183. package/dist/lib/api-client.js +1 -1
  184. package/dist/lib/case-refinement-policy.js +1 -0
  185. package/dist/lib/discovery-evidence.js +1 -0
  186. package/dist/lib/discovery-repository.js +1 -0
  187. package/dist/lib/ensure-api-key.js +1 -1
  188. package/dist/lib/ensure-fresh-token.js +1 -1
  189. package/dist/lib/eval-benchmark.js +1 -1
  190. package/dist/lib/eval-candidate-run.js +1 -1
  191. package/dist/lib/eval-compare.js +1 -1
  192. package/dist/lib/eval-conversation-handler.js +1 -1
  193. package/dist/lib/eval-quota-gate.js +1 -1
  194. package/dist/lib/eval-resume.js +1 -1
  195. package/dist/lib/eval-run-batch.js +1 -1
  196. package/dist/lib/eval-trigger-tester.js +8 -1
  197. package/dist/lib/experiment-reuse.js +1 -0
  198. package/dist/lib/insights/generation/installed-asks.js +1 -1
  199. package/dist/lib/insights/generation/project-evidence.js +1 -1
  200. package/dist/lib/insights/generation/quality-review.js +1 -1
  201. package/dist/lib/insights/nomination/nominate.js +1 -1
  202. package/dist/lib/instruction-proposer.js +16 -1
  203. package/dist/lib/instruction-restoration.js +1 -1
  204. package/dist/lib/instructions/acceptance/accept-events.js +1 -1
  205. package/dist/lib/instructions/acceptance/accept-hook.js +1 -1
  206. package/dist/lib/instructions/acceptance/hook-install.js +1 -1
  207. package/dist/lib/instructions/acceptance/reverse-applications.js +1 -1
  208. package/dist/lib/instructions/acceptance/suggestion-accept.js +1 -1
  209. package/dist/lib/jobs/handlers/cron-auto-accept-suggestions.js +1 -1
  210. package/dist/lib/jobs/handlers/cron-eval-autorun.js +1 -1
  211. package/dist/lib/jobs/handlers/cron-instruction-training.js +1 -1
  212. package/dist/lib/jobs/handlers/cron-reconcile-attribution.js +1 -1
  213. package/dist/lib/jobs/handlers/cron-refine-cases.js +1 -1
  214. package/dist/lib/jobs/handlers/cron-refresh-pricing.js +1 -1
  215. package/dist/lib/jobs/handlers/cron-retire-unused-skills.js +1 -1
  216. package/dist/lib/jobs/handlers/cron-suggest-instructions.js +1 -1
  217. package/dist/lib/jobs/handlers/distill-memories.js +1 -1
  218. package/dist/lib/jobs/handlers/finalize-scoped-launch.js +1 -1
  219. package/dist/lib/jobs/handlers/harbor-ab.js +1 -1
  220. package/dist/lib/jobs/handlers/prepare-isolated-launch.js +1 -0
  221. package/dist/lib/jobs/handlers/prepare-suggestion-live.js +1 -1
  222. package/dist/lib/jobs/handlers/process-changelog.js +1 -1
  223. package/dist/lib/jobs/handlers/process-conversation.js +1 -1
  224. package/dist/lib/jobs/handlers/process-eval.js +1 -1
  225. package/dist/lib/jobs/handlers/process-insights.js +1 -1
  226. package/dist/lib/jobs/handlers/process-judge-review.js +1 -1
  227. package/dist/lib/jobs/handlers/process-launch.js +1 -1
  228. package/dist/lib/jobs/handlers/process-run-cleanup.js +1 -1
  229. package/dist/lib/jobs/handlers/process-session-goal.js +1 -1
  230. package/dist/lib/jobs/handlers/process-suggestion-adoption.js +1 -1
  231. package/dist/lib/jobs/handlers/process-suggestion-discovery.js +1 -1
  232. package/dist/lib/jobs/handlers/process-suggestion-eval.js +1 -1
  233. package/dist/lib/jobs/handlers/restore-instruction.js +1 -0
  234. package/dist/lib/jobs/shed-retry.js +1 -1
  235. package/dist/lib/judge-review-runner.js +1 -1
  236. package/dist/lib/manual-tasks.js +1 -1
  237. package/dist/lib/projects/workspace/worktree.js +1 -1
  238. package/dist/lib/refine-cases.js +1 -1
  239. package/dist/lib/research-client.js +1 -1
  240. package/dist/lib/retraction.js +1 -1
  241. package/dist/lib/session-updates.js +1 -1
  242. package/dist/lib/setup-steps.js +1 -1
  243. package/dist/lib/study-fixture.js +1 -1
  244. package/dist/lib/study-result-store.js +1 -0
  245. package/dist/lib/suggestion-discovery.js +1 -1
  246. package/dist/lib/telemetry.js +1 -1
  247. package/dist/lib/terminal-target-heartbeat.js +1 -1
  248. package/dist/lib/transcript-sync.js +1 -1
  249. package/dist/lib/work-report.js +1 -1
  250. package/dist/lib/worker-updates.js +1 -0
  251. package/oclif.manifest.json +996 -813
  252. package/package.json +8 -8
  253. package/dist/chunk-2C7CFCMM.js +0 -1
  254. package/dist/chunk-647M2I2Y.js +0 -1
  255. package/dist/chunk-7OTOAC6C.js +0 -8
  256. package/dist/chunk-A6XQSO62.js +0 -4
  257. package/dist/chunk-AHLVY52I.js +0 -1
  258. package/dist/chunk-BDWQ6J4V.js +0 -1
  259. package/dist/chunk-BU3ZGLQG.js +0 -1
  260. package/dist/chunk-CJ2WSSHD.js +0 -1
  261. package/dist/chunk-DTTR4EUJ.js +0 -1
  262. package/dist/chunk-DZRBB34J.js +0 -16
  263. package/dist/chunk-FLJTAD2R.js +0 -1
  264. package/dist/chunk-G7V4ZZZ3.js +0 -1
  265. package/dist/chunk-GHUW7P55.js +0 -2
  266. package/dist/chunk-GYKYJJNF.js +0 -1
  267. package/dist/chunk-JU5ZNXPK.js +0 -1
  268. package/dist/chunk-KFNFLMUR.js +0 -3
  269. package/dist/chunk-KOIFFSYW.js +0 -2
  270. package/dist/chunk-KR32Y5Q5.js +0 -1
  271. package/dist/chunk-L5ILEWHH.js +0 -1
  272. package/dist/chunk-LZPE6424.js +0 -5
  273. package/dist/chunk-MRQIYIQE.js +0 -1
  274. package/dist/chunk-NLUHMHPM.js +0 -1
  275. package/dist/chunk-NVOYP4HX.js +0 -1
  276. package/dist/chunk-P577DWWL.js +0 -1
  277. package/dist/chunk-PMMHMRFS.js +0 -1
  278. package/dist/chunk-R26SQ3BE.js +0 -5
  279. package/dist/chunk-RITL4NU3.js +0 -1
  280. package/dist/chunk-RWQG25JU.js +0 -1
  281. package/dist/chunk-YZQZD2E6.js +0 -1
  282. package/dist/chunk-ZJABRHIP.js +0 -1
  283. package/dist/lib/eval-accumulation.js +0 -1
  284. package/dist/lib/evolution-cost.js +0 -1
  285. package/dist/lib/evolution-enrolment.js +0 -1
  286. package/dist/lib/jobs/handlers/cron-instruction-evolution.js +0 -1
  287. package/dist/lib/jobs/handlers/process-memory-ab.js +0 -1
  288. package/dist/lib/optimize-compare.js +0 -1
@@ -937,6 +937,212 @@
937
937
  "list.js"
938
938
  ]
939
939
  },
940
+ "experiments:enroll": {
941
+ "aliases": [],
942
+ "args": {},
943
+ "description": "Submit a fresh work request to an eligible project experiment",
944
+ "examples": [
945
+ "<%= config.bin %> experiments enroll --project /repo --family parser-repair --prompt-file task.txt"
946
+ ],
947
+ "flags": {
948
+ "api-url": {
949
+ "description": "Override API base URL",
950
+ "env": "RULEMETRIC_API_URL",
951
+ "hidden": true,
952
+ "name": "api-url",
953
+ "hasDynamicHelp": false,
954
+ "multiple": false,
955
+ "type": "option"
956
+ },
957
+ "project": {
958
+ "char": "p",
959
+ "description": "Project path (defaults to current directory)",
960
+ "name": "project",
961
+ "hasDynamicHelp": false,
962
+ "multiple": false,
963
+ "type": "option"
964
+ },
965
+ "family": {
966
+ "description": "Task family shown by the waiting experiment",
967
+ "name": "family",
968
+ "required": true,
969
+ "hasDynamicHelp": false,
970
+ "multiple": false,
971
+ "type": "option"
972
+ },
973
+ "prompt-file": {
974
+ "description": "UTF-8 file containing a real, fresh work request",
975
+ "name": "prompt-file",
976
+ "required": true,
977
+ "hasDynamicHelp": false,
978
+ "multiple": false,
979
+ "type": "option"
980
+ },
981
+ "model": {
982
+ "description": "Optional model constraint; must match the experiment pin",
983
+ "name": "model",
984
+ "hasDynamicHelp": false,
985
+ "multiple": false,
986
+ "type": "option"
987
+ }
988
+ },
989
+ "hasDynamicHelp": false,
990
+ "hiddenAliases": [],
991
+ "id": "experiments:enroll",
992
+ "pluginAlias": "@rulemetric/cli",
993
+ "pluginName": "@rulemetric/cli",
994
+ "pluginType": "core",
995
+ "strict": true,
996
+ "enableJsonFlag": false,
997
+ "isESM": true,
998
+ "relativePath": [
999
+ "dist",
1000
+ "commands",
1001
+ "experiments",
1002
+ "enroll.js"
1003
+ ]
1004
+ },
1005
+ "experiments:list": {
1006
+ "aliases": [],
1007
+ "args": {},
1008
+ "description": "List experiments with execution, metric finding, and application separately",
1009
+ "examples": [
1010
+ "<%= config.bin %> experiments list",
1011
+ "<%= config.bin %> experiments list --all"
1012
+ ],
1013
+ "flags": {
1014
+ "api-url": {
1015
+ "description": "Override API base URL",
1016
+ "env": "RULEMETRIC_API_URL",
1017
+ "hidden": true,
1018
+ "name": "api-url",
1019
+ "hasDynamicHelp": false,
1020
+ "multiple": false,
1021
+ "type": "option"
1022
+ },
1023
+ "project": {
1024
+ "char": "p",
1025
+ "description": "Project path (defaults to current directory)",
1026
+ "name": "project",
1027
+ "hasDynamicHelp": false,
1028
+ "multiple": false,
1029
+ "type": "option"
1030
+ },
1031
+ "all": {
1032
+ "description": "Every project",
1033
+ "name": "all",
1034
+ "allowNo": false,
1035
+ "type": "boolean"
1036
+ }
1037
+ },
1038
+ "hasDynamicHelp": false,
1039
+ "hiddenAliases": [],
1040
+ "id": "experiments:list",
1041
+ "pluginAlias": "@rulemetric/cli",
1042
+ "pluginName": "@rulemetric/cli",
1043
+ "pluginType": "core",
1044
+ "strict": true,
1045
+ "enableJsonFlag": false,
1046
+ "isESM": true,
1047
+ "relativePath": [
1048
+ "dist",
1049
+ "commands",
1050
+ "experiments",
1051
+ "list.js"
1052
+ ]
1053
+ },
1054
+ "experiments:reuse": {
1055
+ "aliases": [],
1056
+ "args": {
1057
+ "id": {
1058
+ "description": "Completed source experiment UUID",
1059
+ "name": "id",
1060
+ "required": true
1061
+ }
1062
+ },
1063
+ "description": "Run selected previously measured fixture tasks with a new bounded exploratory budget",
1064
+ "flags": {
1065
+ "api-url": {
1066
+ "description": "Override API base URL",
1067
+ "env": "RULEMETRIC_API_URL",
1068
+ "hidden": true,
1069
+ "name": "api-url",
1070
+ "hasDynamicHelp": false,
1071
+ "multiple": false,
1072
+ "type": "option"
1073
+ },
1074
+ "task": {
1075
+ "description": "Source task ID to reuse (repeat for multiple tasks)",
1076
+ "name": "task",
1077
+ "required": true,
1078
+ "hasDynamicHelp": false,
1079
+ "multiple": true,
1080
+ "type": "option"
1081
+ },
1082
+ "reason": {
1083
+ "description": "Why this additional exploratory execution is useful (at least 20 characters)",
1084
+ "name": "reason",
1085
+ "required": true,
1086
+ "hasDynamicHelp": false,
1087
+ "multiple": false,
1088
+ "type": "option"
1089
+ },
1090
+ "request-id": {
1091
+ "description": "Explicit UUID for a new budget; identical arguments otherwise recover the same request",
1092
+ "name": "request-id",
1093
+ "hasDynamicHelp": false,
1094
+ "multiple": false,
1095
+ "type": "option"
1096
+ }
1097
+ },
1098
+ "hasDynamicHelp": false,
1099
+ "hiddenAliases": [],
1100
+ "id": "experiments:reuse",
1101
+ "pluginAlias": "@rulemetric/cli",
1102
+ "pluginName": "@rulemetric/cli",
1103
+ "pluginType": "core",
1104
+ "strict": true,
1105
+ "enableJsonFlag": false,
1106
+ "isESM": true,
1107
+ "relativePath": [
1108
+ "dist",
1109
+ "commands",
1110
+ "experiments",
1111
+ "reuse.js"
1112
+ ]
1113
+ },
1114
+ "gateway:ensure": {
1115
+ "aliases": [],
1116
+ "args": {},
1117
+ "description": "Ensure the gateway proxy is running (called by hooks, not for direct use)",
1118
+ "flags": {
1119
+ "api-url": {
1120
+ "description": "Override API base URL",
1121
+ "env": "RULEMETRIC_API_URL",
1122
+ "hidden": true,
1123
+ "name": "api-url",
1124
+ "hasDynamicHelp": false,
1125
+ "multiple": false,
1126
+ "type": "option"
1127
+ }
1128
+ },
1129
+ "hasDynamicHelp": false,
1130
+ "hidden": true,
1131
+ "hiddenAliases": [],
1132
+ "id": "gateway:ensure",
1133
+ "pluginAlias": "@rulemetric/cli",
1134
+ "pluginName": "@rulemetric/cli",
1135
+ "pluginType": "core",
1136
+ "strict": true,
1137
+ "enableJsonFlag": false,
1138
+ "isESM": true,
1139
+ "relativePath": [
1140
+ "dist",
1141
+ "commands",
1142
+ "gateway",
1143
+ "ensure.js"
1144
+ ]
1145
+ },
940
1146
  "evals:agent": {
941
1147
  "aliases": [],
942
1148
  "args": {},
@@ -980,11 +1186,9 @@
980
1186
  "required": true
981
1187
  }
982
1188
  },
983
- "description": "Run evals in a loop until the effect verdict is statistically powered (§6f auto-run-to-power)",
1189
+ "description": "Retired adaptive loop; use evals run for one bounded experiment",
984
1190
  "examples": [
985
- "<%= config.bin %> evals auto-run <target-id> # preview (cost + plan)",
986
- "<%= config.bin %> evals auto-run <target-id> --yes # run until powered / budget",
987
- "<%= config.bin %> evals auto-run <target-id> --yes --max-runs 120 --batch-parallel 4"
1191
+ "<%= config.bin %> evals run <target-id>"
988
1192
  ],
989
1193
  "flags": {
990
1194
  "api-url": {
@@ -1127,9 +1331,9 @@
1127
1331
  "required": true
1128
1332
  }
1129
1333
  },
1130
- "description": "Blind A/B comparison between two eval target versions",
1334
+ "description": "Retired blind comparison; use evals run for recorded task outcomes",
1131
1335
  "examples": [
1132
- "<%= config.bin %> evals compare <target-a> <target-b>"
1336
+ "<%= config.bin %> evals run <target-id>"
1133
1337
  ],
1134
1338
  "flags": {
1135
1339
  "api-url": {
@@ -1254,10 +1458,9 @@
1254
1458
  "required": true
1255
1459
  }
1256
1460
  },
1257
- "description": "Optimize eval target description for better triggering accuracy",
1461
+ "description": "Retired optimization workflow; use canonical experiments",
1258
1462
  "examples": [
1259
- "<%= config.bin %> evals optimize-description <target-id>",
1260
- "<%= config.bin %> evals optimize-description <target-id> --queries 10"
1463
+ "<%= config.bin %> evals run <target-id>"
1261
1464
  ],
1262
1465
  "flags": {
1263
1466
  "api-url": {
@@ -1342,10 +1545,9 @@
1342
1545
  "required": true
1343
1546
  }
1344
1547
  },
1345
- "description": "Iteratively optimize eval target content using eval results as feedback",
1548
+ "description": "Retired optimization workflow; use canonical experiments",
1346
1549
  "examples": [
1347
- "<%= config.bin %> evals optimize <target-id>",
1348
- "<%= config.bin %> evals optimize <target-id> --auto --max-iterations 3"
1550
+ "<%= config.bin %> evals run <target-id>"
1349
1551
  ],
1350
1552
  "flags": {
1351
1553
  "api-url": {
@@ -1482,7 +1684,7 @@
1482
1684
  "required": true
1483
1685
  }
1484
1686
  },
1485
- "description": "Run evals against a target, optionally grade results, and post to API",
1687
+ "description": "Queue an experiment against a target using the configured worker",
1486
1688
  "examples": [
1487
1689
  "<%= config.bin %> evals run <target-id>",
1488
1690
  "<%= config.bin %> evals run <target-id> --parallel 3 --runs-per-eval 2",
@@ -1671,43 +1873,30 @@
1671
1873
  "validate-judge.js"
1672
1874
  ]
1673
1875
  },
1674
- "experiments:list": {
1876
+ "hooks:emit-instructions": {
1675
1877
  "aliases": [],
1676
1878
  "args": {},
1677
- "description": "Show instructions under randomised test and what each sample supports",
1678
- "examples": [
1679
- "<%= config.bin %> experiments list",
1680
- "<%= config.bin %> experiments list --project /path/to/project",
1681
- "<%= config.bin %> experiments list --all"
1682
- ],
1879
+ "description": "Print a synthetic instruction snapshot (on-disk instruction files) as JSON for zero-proxy instruction linking",
1683
1880
  "flags": {
1684
- "api-url": {
1685
- "description": "Override API base URL",
1686
- "env": "RULEMETRIC_API_URL",
1687
- "hidden": true,
1688
- "name": "api-url",
1881
+ "project-dir": {
1882
+ "description": "Project directory to scan (defaults to cwd)",
1883
+ "name": "project-dir",
1689
1884
  "hasDynamicHelp": false,
1690
1885
  "multiple": false,
1691
1886
  "type": "option"
1692
1887
  },
1693
- "project": {
1694
- "char": "p",
1695
- "description": "Project path (defaults to current directory)",
1696
- "name": "project",
1888
+ "tool": {
1889
+ "description": "Hook tool id whose instruction files to read (claude_code, codex, copilot_agent, copilot_cli, vscode_copilot)",
1890
+ "name": "tool",
1697
1891
  "hasDynamicHelp": false,
1698
1892
  "multiple": false,
1699
1893
  "type": "option"
1700
- },
1701
- "all": {
1702
- "description": "Every project, not just this one",
1703
- "name": "all",
1704
- "allowNo": false,
1705
- "type": "boolean"
1706
1894
  }
1707
1895
  },
1708
1896
  "hasDynamicHelp": false,
1897
+ "hidden": true,
1709
1898
  "hiddenAliases": [],
1710
- "id": "experiments:list",
1899
+ "id": "hooks:emit-instructions",
1711
1900
  "pluginAlias": "@rulemetric/cli",
1712
1901
  "pluginName": "@rulemetric/cli",
1713
1902
  "pluginType": "core",
@@ -1717,14 +1906,19 @@
1717
1906
  "relativePath": [
1718
1907
  "dist",
1719
1908
  "commands",
1720
- "experiments",
1721
- "list.js"
1909
+ "hooks",
1910
+ "emit-instructions.js"
1722
1911
  ]
1723
1912
  },
1724
- "gateway:ensure": {
1913
+ "hooks:install": {
1725
1914
  "aliases": [],
1726
1915
  "args": {},
1727
- "description": "Ensure the gateway proxy is running (called by hooks, not for direct use)",
1916
+ "description": "Install session tracking hooks and context capture proxy for Claude Code",
1917
+ "examples": [
1918
+ "<%= config.bin %> hooks install",
1919
+ "<%= config.bin %> hooks install --global",
1920
+ "<%= config.bin %> hooks install --no-proxy"
1921
+ ],
1728
1922
  "flags": {
1729
1923
  "api-url": {
1730
1924
  "description": "Override API base URL",
@@ -1734,117 +1928,43 @@
1734
1928
  "hasDynamicHelp": false,
1735
1929
  "multiple": false,
1736
1930
  "type": "option"
1931
+ },
1932
+ "no-proxy": {
1933
+ "description": "Skip proxy/gateway configuration (hooks only)",
1934
+ "name": "no-proxy",
1935
+ "allowNo": false,
1936
+ "type": "boolean"
1937
+ },
1938
+ "project-dir": {
1939
+ "description": "Project directory to install hooks in (defaults to cwd)",
1940
+ "name": "project-dir",
1941
+ "hasDynamicHelp": false,
1942
+ "multiple": false,
1943
+ "type": "option"
1944
+ },
1945
+ "user-hooks": {
1946
+ "description": "Write user-level Cursor/Antigravity hooks (~/.cursor, ~/.gemini). Required for Cursor capture — its traffic bypasses the proxy.",
1947
+ "name": "user-hooks",
1948
+ "allowNo": true,
1949
+ "type": "boolean"
1950
+ },
1951
+ "global": {
1952
+ "char": "g",
1953
+ "description": "Install hooks globally (~/.claude/settings.json) so all projects are tracked",
1954
+ "name": "global",
1955
+ "allowNo": false,
1956
+ "type": "boolean"
1957
+ },
1958
+ "statusline-usage": {
1959
+ "description": "Install the statusline shim so Claude Code pushes live rate_limits on every refresh (makes /usage rings update in real time without needing the proxy)",
1960
+ "name": "statusline-usage",
1961
+ "allowNo": false,
1962
+ "type": "boolean"
1737
1963
  }
1738
1964
  },
1739
1965
  "hasDynamicHelp": false,
1740
- "hidden": true,
1741
1966
  "hiddenAliases": [],
1742
- "id": "gateway:ensure",
1743
- "pluginAlias": "@rulemetric/cli",
1744
- "pluginName": "@rulemetric/cli",
1745
- "pluginType": "core",
1746
- "strict": true,
1747
- "enableJsonFlag": false,
1748
- "isESM": true,
1749
- "relativePath": [
1750
- "dist",
1751
- "commands",
1752
- "gateway",
1753
- "ensure.js"
1754
- ]
1755
- },
1756
- "hooks:emit-instructions": {
1757
- "aliases": [],
1758
- "args": {},
1759
- "description": "Print a synthetic instruction snapshot (on-disk instruction files) as JSON for zero-proxy instruction linking",
1760
- "flags": {
1761
- "project-dir": {
1762
- "description": "Project directory to scan (defaults to cwd)",
1763
- "name": "project-dir",
1764
- "hasDynamicHelp": false,
1765
- "multiple": false,
1766
- "type": "option"
1767
- },
1768
- "tool": {
1769
- "description": "Hook tool id whose instruction files to read (claude_code, codex, copilot_agent, copilot_cli, vscode_copilot)",
1770
- "name": "tool",
1771
- "hasDynamicHelp": false,
1772
- "multiple": false,
1773
- "type": "option"
1774
- }
1775
- },
1776
- "hasDynamicHelp": false,
1777
- "hidden": true,
1778
- "hiddenAliases": [],
1779
- "id": "hooks:emit-instructions",
1780
- "pluginAlias": "@rulemetric/cli",
1781
- "pluginName": "@rulemetric/cli",
1782
- "pluginType": "core",
1783
- "strict": true,
1784
- "enableJsonFlag": false,
1785
- "isESM": true,
1786
- "relativePath": [
1787
- "dist",
1788
- "commands",
1789
- "hooks",
1790
- "emit-instructions.js"
1791
- ]
1792
- },
1793
- "hooks:install": {
1794
- "aliases": [],
1795
- "args": {},
1796
- "description": "Install session tracking hooks and context capture proxy for Claude Code",
1797
- "examples": [
1798
- "<%= config.bin %> hooks install",
1799
- "<%= config.bin %> hooks install --global",
1800
- "<%= config.bin %> hooks install --no-proxy"
1801
- ],
1802
- "flags": {
1803
- "api-url": {
1804
- "description": "Override API base URL",
1805
- "env": "RULEMETRIC_API_URL",
1806
- "hidden": true,
1807
- "name": "api-url",
1808
- "hasDynamicHelp": false,
1809
- "multiple": false,
1810
- "type": "option"
1811
- },
1812
- "no-proxy": {
1813
- "description": "Skip proxy/gateway configuration (hooks only)",
1814
- "name": "no-proxy",
1815
- "allowNo": false,
1816
- "type": "boolean"
1817
- },
1818
- "project-dir": {
1819
- "description": "Project directory to install hooks in (defaults to cwd)",
1820
- "name": "project-dir",
1821
- "hasDynamicHelp": false,
1822
- "multiple": false,
1823
- "type": "option"
1824
- },
1825
- "user-hooks": {
1826
- "description": "Write user-level Cursor/Antigravity hooks (~/.cursor, ~/.gemini). Required for Cursor capture — its traffic bypasses the proxy.",
1827
- "name": "user-hooks",
1828
- "allowNo": true,
1829
- "type": "boolean"
1830
- },
1831
- "global": {
1832
- "char": "g",
1833
- "description": "Install hooks globally (~/.claude/settings.json) so all projects are tracked",
1834
- "name": "global",
1835
- "allowNo": false,
1836
- "type": "boolean"
1837
- },
1838
- "statusline-usage": {
1839
- "description": "Install the statusline shim so Claude Code pushes live rate_limits on every refresh (makes /usage rings update in real time without needing the proxy)",
1840
- "name": "statusline-usage",
1841
- "allowNo": false,
1842
- "type": "boolean"
1843
- }
1844
- },
1845
- "hasDynamicHelp": false,
1846
- "hiddenAliases": [],
1847
- "id": "hooks:install",
1967
+ "id": "hooks:install",
1848
1968
  "pluginAlias": "@rulemetric/cli",
1849
1969
  "pluginName": "@rulemetric/cli",
1850
1970
  "pluginType": "core",
@@ -2608,10 +2728,16 @@
2608
2728
  "versions.js"
2609
2729
  ]
2610
2730
  },
2611
- "local:down": {
2731
+ "proxy:env": {
2612
2732
  "aliases": [],
2613
2733
  "args": {},
2614
- "description": "Stop the local RuleMetric server and database stack. Data is preserved (restart with `rulemetric local up`); use --delete-data to also wipe the local database.",
2734
+ "description": "Print shell env vars to route any client through the RuleMetric proxy",
2735
+ "examples": [
2736
+ "<%= config.bin %> proxy env",
2737
+ "<%= config.bin %> proxy env --shell fish",
2738
+ "eval \"$(rulemetric proxy env)\"",
2739
+ "rulemetric proxy env --python"
2740
+ ],
2615
2741
  "flags": {
2616
2742
  "api-url": {
2617
2743
  "description": "Override API base URL",
@@ -2622,16 +2748,48 @@
2622
2748
  "multiple": false,
2623
2749
  "type": "option"
2624
2750
  },
2625
- "delete-data": {
2626
- "description": "Also delete the local database volumes (irreversible)",
2627
- "name": "delete-data",
2751
+ "shell": {
2752
+ "char": "s",
2753
+ "description": "Shell format (posix, fish, powershell)",
2754
+ "name": "shell",
2755
+ "default": "posix",
2756
+ "hasDynamicHelp": false,
2757
+ "multiple": false,
2758
+ "options": [
2759
+ "posix",
2760
+ "fish",
2761
+ "powershell"
2762
+ ],
2763
+ "type": "option"
2764
+ },
2765
+ "python": {
2766
+ "description": "Include Python-specific env vars (REQUESTS_CA_BUNDLE, SSL_CERT_FILE)",
2767
+ "name": "python",
2768
+ "allowNo": false,
2769
+ "type": "boolean"
2770
+ },
2771
+ "node": {
2772
+ "description": "Include Node.js-specific env vars (NODE_EXTRA_CA_CERTS)",
2773
+ "name": "node",
2774
+ "allowNo": false,
2775
+ "type": "boolean"
2776
+ },
2777
+ "all": {
2778
+ "description": "Include env vars for all runtimes",
2779
+ "name": "all",
2780
+ "allowNo": false,
2781
+ "type": "boolean"
2782
+ },
2783
+ "vscode": {
2784
+ "description": "Output VS Code settings.json snippet for Copilot proxy",
2785
+ "name": "vscode",
2628
2786
  "allowNo": false,
2629
2787
  "type": "boolean"
2630
2788
  }
2631
2789
  },
2632
2790
  "hasDynamicHelp": false,
2633
2791
  "hiddenAliases": [],
2634
- "id": "local:down",
2792
+ "id": "proxy:env",
2635
2793
  "pluginAlias": "@rulemetric/cli",
2636
2794
  "pluginName": "@rulemetric/cli",
2637
2795
  "pluginType": "core",
@@ -2641,18 +2799,18 @@
2641
2799
  "relativePath": [
2642
2800
  "dist",
2643
2801
  "commands",
2644
- "local",
2645
- "down.js"
2802
+ "proxy",
2803
+ "env.js"
2646
2804
  ]
2647
2805
  },
2648
- "local:up": {
2806
+ "proxy:logs": {
2649
2807
  "aliases": [],
2650
2808
  "args": {},
2651
- "description": "Run RuleMetric fully locally: start a local Supabase stack (Docker), apply migrations, and serve the API + dashboard from the @rulemetric/local runtime — all data on this machine, zero cloud contact. Downloads the runtime package on first run.",
2809
+ "description": "View context capture proxy logs",
2652
2810
  "examples": [
2653
- "<%= config.bin %> local up --email you@example.com --password <pw>",
2654
- "<%= config.bin %> local up --port 3000",
2655
- "<%= config.bin %> local up --foreground"
2811
+ "<%= config.bin %> proxy logs",
2812
+ "<%= config.bin %> proxy logs --follow",
2813
+ "<%= config.bin %> proxy logs --lines 50"
2656
2814
  ],
2657
2815
  "flags": {
2658
2816
  "api-url": {
@@ -2664,47 +2822,26 @@
2664
2822
  "multiple": false,
2665
2823
  "type": "option"
2666
2824
  },
2667
- "port": {
2668
- "char": "p",
2669
- "description": "Local API + dashboard port",
2670
- "name": "port",
2671
- "default": 3000,
2672
- "hasDynamicHelp": false,
2673
- "multiple": false,
2674
- "type": "option"
2675
- },
2676
- "email": {
2677
- "char": "e",
2678
- "description": "Create the first user with this email (with --password)",
2679
- "name": "email",
2680
- "hasDynamicHelp": false,
2681
- "multiple": false,
2682
- "type": "option"
2825
+ "follow": {
2826
+ "char": "f",
2827
+ "description": "Follow log output (like tail -f)",
2828
+ "name": "follow",
2829
+ "allowNo": false,
2830
+ "type": "boolean"
2683
2831
  },
2684
- "password": {
2685
- "description": "Password for the first user (min 8 chars)",
2686
- "name": "password",
2832
+ "lines": {
2833
+ "char": "n",
2834
+ "description": "Number of lines to show",
2835
+ "name": "lines",
2836
+ "default": 30,
2687
2837
  "hasDynamicHelp": false,
2688
2838
  "multiple": false,
2689
2839
  "type": "option"
2690
- },
2691
- "foreground": {
2692
- "description": "Run the server in this terminal instead of installing a launchd service (works on any OS; skips user provisioning)",
2693
- "name": "foreground",
2694
- "allowNo": false,
2695
- "type": "boolean"
2696
- },
2697
- "yes": {
2698
- "char": "y",
2699
- "description": "Skip the runtime-download confirmation",
2700
- "name": "yes",
2701
- "allowNo": false,
2702
- "type": "boolean"
2703
2840
  }
2704
2841
  },
2705
2842
  "hasDynamicHelp": false,
2706
2843
  "hiddenAliases": [],
2707
- "id": "local:up",
2844
+ "id": "proxy:logs",
2708
2845
  "pluginAlias": "@rulemetric/cli",
2709
2846
  "pluginName": "@rulemetric/cli",
2710
2847
  "pluginType": "core",
@@ -2714,16 +2851,16 @@
2714
2851
  "relativePath": [
2715
2852
  "dist",
2716
2853
  "commands",
2717
- "local",
2718
- "up.js"
2854
+ "proxy",
2855
+ "logs.js"
2719
2856
  ]
2720
2857
  },
2721
- "org:current": {
2858
+ "proxy:restart": {
2722
2859
  "aliases": [],
2723
2860
  "args": {},
2724
- "description": "Show the current active organization",
2861
+ "description": "Restart the context capture proxy (stop + start)",
2725
2862
  "examples": [
2726
- "<%= config.bin %> org current"
2863
+ "<%= config.bin %> proxy restart"
2727
2864
  ],
2728
2865
  "flags": {
2729
2866
  "api-url": {
@@ -2734,11 +2871,26 @@
2734
2871
  "hasDynamicHelp": false,
2735
2872
  "multiple": false,
2736
2873
  "type": "option"
2874
+ },
2875
+ "port": {
2876
+ "char": "p",
2877
+ "description": "Proxy listen port",
2878
+ "name": "port",
2879
+ "hasDynamicHelp": false,
2880
+ "multiple": false,
2881
+ "type": "option"
2882
+ },
2883
+ "docker": {
2884
+ "char": "d",
2885
+ "description": "Run in Docker mode",
2886
+ "name": "docker",
2887
+ "allowNo": false,
2888
+ "type": "boolean"
2737
2889
  }
2738
2890
  },
2739
2891
  "hasDynamicHelp": false,
2740
2892
  "hiddenAliases": [],
2741
- "id": "org:current",
2893
+ "id": "proxy:restart",
2742
2894
  "pluginAlias": "@rulemetric/cli",
2743
2895
  "pluginName": "@rulemetric/cli",
2744
2896
  "pluginType": "core",
@@ -2748,16 +2900,18 @@
2748
2900
  "relativePath": [
2749
2901
  "dist",
2750
2902
  "commands",
2751
- "org",
2752
- "current.js"
2903
+ "proxy",
2904
+ "restart.js"
2753
2905
  ]
2754
2906
  },
2755
- "org:list": {
2907
+ "proxy:setup": {
2756
2908
  "aliases": [],
2757
2909
  "args": {},
2758
- "description": "List organizations the current user is a member of",
2910
+ "description": "Set up context capture proxy (installs mitmproxy, configures shell)",
2759
2911
  "examples": [
2760
- "<%= config.bin %> org list"
2912
+ "<%= config.bin %> proxy setup",
2913
+ "<%= config.bin %> proxy setup --shell zsh",
2914
+ "<%= config.bin %> proxy setup --check"
2761
2915
  ],
2762
2916
  "flags": {
2763
2917
  "api-url": {
@@ -2768,11 +2922,39 @@
2768
2922
  "hasDynamicHelp": false,
2769
2923
  "multiple": false,
2770
2924
  "type": "option"
2771
- }
2772
- },
2773
- "hasDynamicHelp": false,
2925
+ },
2926
+ "shell": {
2927
+ "description": "Shell to configure (auto-detected if omitted)",
2928
+ "name": "shell",
2929
+ "hasDynamicHelp": false,
2930
+ "multiple": false,
2931
+ "options": [
2932
+ "zsh",
2933
+ "bash",
2934
+ "fish",
2935
+ "powershell"
2936
+ ],
2937
+ "type": "option"
2938
+ },
2939
+ "port": {
2940
+ "char": "p",
2941
+ "description": "Proxy listen port",
2942
+ "name": "port",
2943
+ "default": 8787,
2944
+ "hasDynamicHelp": false,
2945
+ "multiple": false,
2946
+ "type": "option"
2947
+ },
2948
+ "check": {
2949
+ "description": "Only check prerequisites, do not install anything",
2950
+ "name": "check",
2951
+ "allowNo": false,
2952
+ "type": "boolean"
2953
+ }
2954
+ },
2955
+ "hasDynamicHelp": false,
2774
2956
  "hiddenAliases": [],
2775
- "id": "org:list",
2957
+ "id": "proxy:setup",
2776
2958
  "pluginAlias": "@rulemetric/cli",
2777
2959
  "pluginName": "@rulemetric/cli",
2778
2960
  "pluginType": "core",
@@ -2782,23 +2964,19 @@
2782
2964
  "relativePath": [
2783
2965
  "dist",
2784
2966
  "commands",
2785
- "org",
2786
- "list.js"
2967
+ "proxy",
2968
+ "setup.js"
2787
2969
  ]
2788
2970
  },
2789
- "org:switch": {
2971
+ "proxy:start": {
2790
2972
  "aliases": [],
2791
- "args": {
2792
- "slug": {
2793
- "description": "Organization slug to switch to",
2794
- "name": "slug",
2795
- "required": false
2796
- }
2797
- },
2798
- "description": "Switch the active organization",
2973
+ "args": {},
2974
+ "description": "Start context capture proxy",
2799
2975
  "examples": [
2800
- "<%= config.bin %> org switch acme",
2801
- "<%= config.bin %> org switch --clear"
2976
+ "<%= config.bin %> proxy start",
2977
+ "<%= config.bin %> proxy start --docker",
2978
+ "<%= config.bin %> proxy start --port 9090",
2979
+ "<%= config.bin %> proxy start --web"
2802
2980
  ],
2803
2981
  "flags": {
2804
2982
  "api-url": {
@@ -2810,16 +2988,44 @@
2810
2988
  "multiple": false,
2811
2989
  "type": "option"
2812
2990
  },
2813
- "clear": {
2814
- "description": "Clear the active organization (personal mode)",
2815
- "name": "clear",
2991
+ "port": {
2992
+ "char": "p",
2993
+ "description": "Proxy listen port",
2994
+ "name": "port",
2995
+ "default": 8788,
2996
+ "hasDynamicHelp": false,
2997
+ "multiple": false,
2998
+ "type": "option"
2999
+ },
3000
+ "docker": {
3001
+ "char": "d",
3002
+ "description": "Run proxy in Docker (no local mitmproxy needed)",
3003
+ "name": "docker",
3004
+ "allowNo": false,
3005
+ "type": "boolean"
3006
+ },
3007
+ "web": {
3008
+ "description": "Launch mitmweb debug UI instead of mitmdump (local mode only)",
3009
+ "name": "web",
3010
+ "allowNo": false,
3011
+ "type": "boolean"
3012
+ },
3013
+ "skip-checks": {
3014
+ "description": "Skip prerequisite checks",
3015
+ "name": "skip-checks",
3016
+ "allowNo": false,
3017
+ "type": "boolean"
3018
+ },
3019
+ "build": {
3020
+ "description": "Force rebuild Docker image",
3021
+ "name": "build",
2816
3022
  "allowNo": false,
2817
3023
  "type": "boolean"
2818
3024
  }
2819
3025
  },
2820
3026
  "hasDynamicHelp": false,
2821
3027
  "hiddenAliases": [],
2822
- "id": "org:switch",
3028
+ "id": "proxy:start",
2823
3029
  "pluginAlias": "@rulemetric/cli",
2824
3030
  "pluginName": "@rulemetric/cli",
2825
3031
  "pluginType": "core",
@@ -2829,8 +3035,76 @@
2829
3035
  "relativePath": [
2830
3036
  "dist",
2831
3037
  "commands",
2832
- "org",
2833
- "switch.js"
3038
+ "proxy",
3039
+ "start.js"
3040
+ ]
3041
+ },
3042
+ "proxy:status": {
3043
+ "aliases": [],
3044
+ "args": {},
3045
+ "description": "Check gateway and context capture proxy status",
3046
+ "examples": [
3047
+ "<%= config.bin %> proxy status"
3048
+ ],
3049
+ "flags": {
3050
+ "api-url": {
3051
+ "description": "Override API base URL",
3052
+ "env": "RULEMETRIC_API_URL",
3053
+ "hidden": true,
3054
+ "name": "api-url",
3055
+ "hasDynamicHelp": false,
3056
+ "multiple": false,
3057
+ "type": "option"
3058
+ }
3059
+ },
3060
+ "hasDynamicHelp": false,
3061
+ "hiddenAliases": [],
3062
+ "id": "proxy:status",
3063
+ "pluginAlias": "@rulemetric/cli",
3064
+ "pluginName": "@rulemetric/cli",
3065
+ "pluginType": "core",
3066
+ "strict": true,
3067
+ "enableJsonFlag": false,
3068
+ "isESM": true,
3069
+ "relativePath": [
3070
+ "dist",
3071
+ "commands",
3072
+ "proxy",
3073
+ "status.js"
3074
+ ]
3075
+ },
3076
+ "proxy:stop": {
3077
+ "aliases": [],
3078
+ "args": {},
3079
+ "description": "Stop the context capture proxy",
3080
+ "examples": [
3081
+ "<%= config.bin %> proxy stop"
3082
+ ],
3083
+ "flags": {
3084
+ "api-url": {
3085
+ "description": "Override API base URL",
3086
+ "env": "RULEMETRIC_API_URL",
3087
+ "hidden": true,
3088
+ "name": "api-url",
3089
+ "hasDynamicHelp": false,
3090
+ "multiple": false,
3091
+ "type": "option"
3092
+ }
3093
+ },
3094
+ "hasDynamicHelp": false,
3095
+ "hiddenAliases": [],
3096
+ "id": "proxy:stop",
3097
+ "pluginAlias": "@rulemetric/cli",
3098
+ "pluginName": "@rulemetric/cli",
3099
+ "pluginType": "core",
3100
+ "strict": true,
3101
+ "enableJsonFlag": false,
3102
+ "isESM": true,
3103
+ "relativePath": [
3104
+ "dist",
3105
+ "commands",
3106
+ "proxy",
3107
+ "stop.js"
2834
3108
  ]
2835
3109
  },
2836
3110
  "packs:add-instruction": {
@@ -3181,15 +3455,13 @@
3181
3455
  "remove-instruction.js"
3182
3456
  ]
3183
3457
  },
3184
- "proxy:env": {
3458
+ "research:backfill": {
3185
3459
  "aliases": [],
3186
3460
  "args": {},
3187
- "description": "Print shell env vars to route any client through the RuleMetric proxy",
3461
+ "description": "Scan every ~/.claude/projects transcript for past rate-limit (429) events and POST them as observations. Opt-in seed for the usage-research dataset — forward-only tail is the default capture path.",
3188
3462
  "examples": [
3189
- "<%= config.bin %> proxy env",
3190
- "<%= config.bin %> proxy env --shell fish",
3191
- "eval \"$(rulemetric proxy env)\"",
3192
- "rulemetric proxy env --python"
3463
+ "<%= config.bin %> research backfill",
3464
+ "<%= config.bin %> research backfill --claude-dir /custom/.claude --dry-run"
3193
3465
  ],
3194
3466
  "flags": {
3195
3467
  "api-url": {
@@ -3201,48 +3473,24 @@
3201
3473
  "multiple": false,
3202
3474
  "type": "option"
3203
3475
  },
3204
- "shell": {
3205
- "char": "s",
3206
- "description": "Shell format (posix, fish, powershell)",
3207
- "name": "shell",
3208
- "default": "posix",
3476
+ "claude-dir": {
3477
+ "description": "Override the Claude Code projects directory (defaults to ~/.claude)",
3478
+ "name": "claude-dir",
3479
+ "noCacheDefault": true,
3209
3480
  "hasDynamicHelp": false,
3210
3481
  "multiple": false,
3211
- "options": [
3212
- "posix",
3213
- "fish",
3214
- "powershell"
3215
- ],
3216
3482
  "type": "option"
3217
3483
  },
3218
- "python": {
3219
- "description": "Include Python-specific env vars (REQUESTS_CA_BUNDLE, SSL_CERT_FILE)",
3220
- "name": "python",
3221
- "allowNo": false,
3222
- "type": "boolean"
3223
- },
3224
- "node": {
3225
- "description": "Include Node.js-specific env vars (NODE_EXTRA_CA_CERTS)",
3226
- "name": "node",
3227
- "allowNo": false,
3228
- "type": "boolean"
3229
- },
3230
- "all": {
3231
- "description": "Include env vars for all runtimes",
3232
- "name": "all",
3233
- "allowNo": false,
3234
- "type": "boolean"
3235
- },
3236
- "vscode": {
3237
- "description": "Output VS Code settings.json snippet for Copilot proxy",
3238
- "name": "vscode",
3484
+ "dry-run": {
3485
+ "description": "Print observation count without POSTing",
3486
+ "name": "dry-run",
3239
3487
  "allowNo": false,
3240
3488
  "type": "boolean"
3241
3489
  }
3242
3490
  },
3243
3491
  "hasDynamicHelp": false,
3244
3492
  "hiddenAliases": [],
3245
- "id": "proxy:env",
3493
+ "id": "research:backfill",
3246
3494
  "pluginAlias": "@rulemetric/cli",
3247
3495
  "pluginName": "@rulemetric/cli",
3248
3496
  "pluginType": "core",
@@ -3252,18 +3500,17 @@
3252
3500
  "relativePath": [
3253
3501
  "dist",
3254
3502
  "commands",
3255
- "proxy",
3256
- "env.js"
3503
+ "research",
3504
+ "backfill.js"
3257
3505
  ]
3258
3506
  },
3259
- "proxy:logs": {
3507
+ "research:resume-scoped-outcomes": {
3260
3508
  "aliases": [],
3261
3509
  "args": {},
3262
- "description": "View context capture proxy logs",
3510
+ "description": "Finish uploading scoped headless outcomes whose receipt was preserved locally after the actor exited but whose capture or verification upload failed. Never re-runs the actor or re-measures the repository; ships the stored receipt and exact transcript only.",
3263
3511
  "examples": [
3264
- "<%= config.bin %> proxy logs",
3265
- "<%= config.bin %> proxy logs --follow",
3266
- "<%= config.bin %> proxy logs --lines 50"
3512
+ "<%= config.bin %> research resume-scoped-outcomes",
3513
+ "<%= config.bin %> research resume-scoped-outcomes --list"
3267
3514
  ],
3268
3515
  "flags": {
3269
3516
  "api-url": {
@@ -3275,26 +3522,17 @@
3275
3522
  "multiple": false,
3276
3523
  "type": "option"
3277
3524
  },
3278
- "follow": {
3279
- "char": "f",
3280
- "description": "Follow log output (like tail -f)",
3281
- "name": "follow",
3525
+ "list": {
3526
+ "description": "Show the outcome store without uploading anything",
3527
+ "name": "list",
3282
3528
  "allowNo": false,
3283
3529
  "type": "boolean"
3284
- },
3285
- "lines": {
3286
- "char": "n",
3287
- "description": "Number of lines to show",
3288
- "name": "lines",
3289
- "default": 30,
3290
- "hasDynamicHelp": false,
3291
- "multiple": false,
3292
- "type": "option"
3293
3530
  }
3294
3531
  },
3295
3532
  "hasDynamicHelp": false,
3533
+ "hidden": true,
3296
3534
  "hiddenAliases": [],
3297
- "id": "proxy:logs",
3535
+ "id": "research:resume-scoped-outcomes",
3298
3536
  "pluginAlias": "@rulemetric/cli",
3299
3537
  "pluginName": "@rulemetric/cli",
3300
3538
  "pluginType": "core",
@@ -3304,17 +3542,20 @@
3304
3542
  "relativePath": [
3305
3543
  "dist",
3306
3544
  "commands",
3307
- "proxy",
3308
- "logs.js"
3545
+ "research",
3546
+ "resume-scoped-outcomes.js"
3309
3547
  ]
3310
3548
  },
3311
- "proxy:restart": {
3549
+ "research:tail-transcript": {
3312
3550
  "aliases": [],
3313
- "args": {},
3314
- "description": "Restart the context capture proxy (stop + start)",
3315
- "examples": [
3316
- "<%= config.bin %> proxy restart"
3317
- ],
3551
+ "args": {
3552
+ "transcript": {
3553
+ "description": "Absolute path to a Claude Code .jsonl transcript",
3554
+ "name": "transcript",
3555
+ "required": true
3556
+ }
3557
+ },
3558
+ "description": "Read new lines from a Claude Code transcript since the last cached offset, POST any 429 events, and persist the new offset. Invoked by the session-end hook — safe to re-run.",
3318
3559
  "flags": {
3319
3560
  "api-url": {
3320
3561
  "description": "Override API base URL",
@@ -3325,25 +3566,17 @@
3325
3566
  "multiple": false,
3326
3567
  "type": "option"
3327
3568
  },
3328
- "port": {
3329
- "char": "p",
3330
- "description": "Proxy listen port",
3331
- "name": "port",
3332
- "hasDynamicHelp": false,
3333
- "multiple": false,
3334
- "type": "option"
3335
- },
3336
- "docker": {
3337
- "char": "d",
3338
- "description": "Run in Docker mode",
3339
- "name": "docker",
3569
+ "no-post": {
3570
+ "description": "Parse and advance the offset without POSTing (debug)",
3571
+ "name": "no-post",
3340
3572
  "allowNo": false,
3341
3573
  "type": "boolean"
3342
3574
  }
3343
3575
  },
3344
3576
  "hasDynamicHelp": false,
3577
+ "hidden": true,
3345
3578
  "hiddenAliases": [],
3346
- "id": "proxy:restart",
3579
+ "id": "research:tail-transcript",
3347
3580
  "pluginAlias": "@rulemetric/cli",
3348
3581
  "pluginName": "@rulemetric/cli",
3349
3582
  "pluginType": "core",
@@ -3353,18 +3586,20 @@
3353
3586
  "relativePath": [
3354
3587
  "dist",
3355
3588
  "commands",
3356
- "proxy",
3357
- "restart.js"
3589
+ "research",
3590
+ "tail-transcript.js"
3358
3591
  ]
3359
3592
  },
3360
- "proxy:setup": {
3593
+ "service:install": {
3361
3594
  "aliases": [],
3362
3595
  "args": {},
3363
- "description": "Set up context capture proxy (installs mitmproxy, configures shell)",
3596
+ "description": "Install RuleMetric services. Default (in a repo checkout): API + worker + gateway + capture proxy as launchd agents. With --worker-only: just the job worker, targeting the globally-installed CLI — no repo, no build (works from `npm i -g @rulemetric/cli`, macOS launchd or Linux systemd).",
3364
3597
  "examples": [
3365
- "<%= config.bin %> proxy setup",
3366
- "<%= config.bin %> proxy setup --shell zsh",
3367
- "<%= config.bin %> proxy setup --check"
3598
+ "<%= config.bin %> service install",
3599
+ "<%= config.bin %> service install --port 3000",
3600
+ "<%= config.bin %> service install --skip-build",
3601
+ "<%= config.bin %> service install --no-proxy",
3602
+ "<%= config.bin %> service install --worker-only"
3368
3603
  ],
3369
3604
  "flags": {
3370
3605
  "api-url": {
@@ -3376,38 +3611,53 @@
3376
3611
  "multiple": false,
3377
3612
  "type": "option"
3378
3613
  },
3379
- "shell": {
3380
- "description": "Shell to configure (auto-detected if omitted)",
3381
- "name": "shell",
3382
- "hasDynamicHelp": false,
3383
- "multiple": false,
3384
- "options": [
3385
- "zsh",
3386
- "bash",
3387
- "fish",
3388
- "powershell"
3389
- ],
3390
- "type": "option"
3391
- },
3392
3614
  "port": {
3393
3615
  "char": "p",
3394
- "description": "Proxy listen port",
3616
+ "description": "API server port",
3395
3617
  "name": "port",
3396
- "default": 8787,
3618
+ "default": 3000,
3397
3619
  "hasDynamicHelp": false,
3398
3620
  "multiple": false,
3399
3621
  "type": "option"
3400
3622
  },
3401
- "check": {
3402
- "description": "Only check prerequisites, do not install anything",
3403
- "name": "check",
3623
+ "force": {
3624
+ "char": "f",
3625
+ "description": "Overwrite existing service configuration and reclaim conflicting ports",
3626
+ "name": "force",
3627
+ "allowNo": false,
3628
+ "type": "boolean"
3629
+ },
3630
+ "skip-build": {
3631
+ "description": "Skip the pre-install workspace build (API/web/cli dist must already exist)",
3632
+ "name": "skip-build",
3633
+ "allowNo": false,
3634
+ "type": "boolean"
3635
+ },
3636
+ "no-proxy": {
3637
+ "description": "Skip gateway + mitmproxy plists (just install API + worker)",
3638
+ "name": "no-proxy",
3639
+ "allowNo": false,
3640
+ "type": "boolean"
3641
+ },
3642
+ "auto-update": {
3643
+ "dependsOn": [
3644
+ "worker-only"
3645
+ ],
3646
+ "description": "Opt this machine into automatic stable CLI updates after active worker jobs finish (requires --worker-only)",
3647
+ "name": "auto-update",
3648
+ "allowNo": false,
3649
+ "type": "boolean"
3650
+ },
3651
+ "worker-only": {
3652
+ "description": "Install ONLY the job worker as a persistent service, targeting the globally-installed CLI (no repo checkout, no build, no API/gateway/proxy). Sources auth from ~/.config/rulemetric/env. macOS (launchd) + Linux (systemd --user).",
3653
+ "name": "worker-only",
3404
3654
  "allowNo": false,
3405
3655
  "type": "boolean"
3406
3656
  }
3407
3657
  },
3408
3658
  "hasDynamicHelp": false,
3409
3659
  "hiddenAliases": [],
3410
- "id": "proxy:setup",
3660
+ "id": "service:install",
3411
3661
  "pluginAlias": "@rulemetric/cli",
3412
3662
  "pluginName": "@rulemetric/cli",
3413
3663
  "pluginType": "core",
@@ -3417,20 +3667,14 @@
3417
3667
  "relativePath": [
3418
3668
  "dist",
3419
3669
  "commands",
3420
- "proxy",
3421
- "setup.js"
3670
+ "service",
3671
+ "install.js"
3422
3672
  ]
3423
3673
  },
3424
- "proxy:start": {
3674
+ "service:status": {
3425
3675
  "aliases": [],
3426
3676
  "args": {},
3427
- "description": "Start context capture proxy",
3428
- "examples": [
3429
- "<%= config.bin %> proxy start",
3430
- "<%= config.bin %> proxy start --docker",
3431
- "<%= config.bin %> proxy start --port 9090",
3432
- "<%= config.bin %> proxy start --web"
3433
- ],
3677
+ "description": "Check the status of installed RuleMetric services (launchd on macOS; systemd --user worker on Linux)",
3434
3678
  "flags": {
3435
3679
  "api-url": {
3436
3680
  "description": "Override API base URL",
@@ -3440,45 +3684,11 @@
3440
3684
  "hasDynamicHelp": false,
3441
3685
  "multiple": false,
3442
3686
  "type": "option"
3443
- },
3444
- "port": {
3445
- "char": "p",
3446
- "description": "Proxy listen port",
3447
- "name": "port",
3448
- "default": 8788,
3449
- "hasDynamicHelp": false,
3450
- "multiple": false,
3451
- "type": "option"
3452
- },
3453
- "docker": {
3454
- "char": "d",
3455
- "description": "Run proxy in Docker (no local mitmproxy needed)",
3456
- "name": "docker",
3457
- "allowNo": false,
3458
- "type": "boolean"
3459
- },
3460
- "web": {
3461
- "description": "Launch mitmweb debug UI instead of mitmdump (local mode only)",
3462
- "name": "web",
3463
- "allowNo": false,
3464
- "type": "boolean"
3465
- },
3466
- "skip-checks": {
3467
- "description": "Skip prerequisite checks",
3468
- "name": "skip-checks",
3469
- "allowNo": false,
3470
- "type": "boolean"
3471
- },
3472
- "build": {
3473
- "description": "Force rebuild Docker image",
3474
- "name": "build",
3475
- "allowNo": false,
3476
- "type": "boolean"
3477
3687
  }
3478
3688
  },
3479
3689
  "hasDynamicHelp": false,
3480
3690
  "hiddenAliases": [],
3481
- "id": "proxy:start",
3691
+ "id": "service:status",
3482
3692
  "pluginAlias": "@rulemetric/cli",
3483
3693
  "pluginName": "@rulemetric/cli",
3484
3694
  "pluginType": "core",
@@ -3488,17 +3698,14 @@
3488
3698
  "relativePath": [
3489
3699
  "dist",
3490
3700
  "commands",
3491
- "proxy",
3492
- "start.js"
3701
+ "service",
3702
+ "status.js"
3493
3703
  ]
3494
3704
  },
3495
- "proxy:status": {
3705
+ "service:uninstall": {
3496
3706
  "aliases": [],
3497
3707
  "args": {},
3498
- "description": "Check gateway and context capture proxy status",
3499
- "examples": [
3500
- "<%= config.bin %> proxy status"
3501
- ],
3708
+ "description": "Remove RuleMetric services (macOS launchd: API/worker/gateway/proxy; Linux: the --worker-only systemd unit)",
3502
3709
  "flags": {
3503
3710
  "api-url": {
3504
3711
  "description": "Override API base URL",
@@ -3512,7 +3719,7 @@
3512
3719
  },
3513
3720
  "hasDynamicHelp": false,
3514
3721
  "hiddenAliases": [],
3515
- "id": "proxy:status",
3722
+ "id": "service:uninstall",
3516
3723
  "pluginAlias": "@rulemetric/cli",
3517
3724
  "pluginName": "@rulemetric/cli",
3518
3725
  "pluginType": "core",
@@ -3522,16 +3729,18 @@
3522
3729
  "relativePath": [
3523
3730
  "dist",
3524
3731
  "commands",
3525
- "proxy",
3526
- "status.js"
3732
+ "service",
3733
+ "uninstall.js"
3527
3734
  ]
3528
3735
  },
3529
- "proxy:stop": {
3736
+ "service:updates": {
3530
3737
  "aliases": [],
3531
3738
  "args": {},
3532
- "description": "Stop the context capture proxy",
3739
+ "description": "Show or change automatic worker updates on this machine (off by default)",
3533
3740
  "examples": [
3534
- "<%= config.bin %> proxy stop"
3741
+ "<%= config.bin %> service updates",
3742
+ "<%= config.bin %> service updates --enable",
3743
+ "<%= config.bin %> service updates --disable"
3535
3744
  ],
3536
3745
  "flags": {
3537
3746
  "api-url": {
@@ -3542,11 +3751,29 @@
3542
3751
  "hasDynamicHelp": false,
3543
3752
  "multiple": false,
3544
3753
  "type": "option"
3754
+ },
3755
+ "enable": {
3756
+ "description": "Install stable npm releases automatically after active jobs finish",
3757
+ "exclusive": [
3758
+ "disable"
3759
+ ],
3760
+ "name": "enable",
3761
+ "allowNo": false,
3762
+ "type": "boolean"
3763
+ },
3764
+ "disable": {
3765
+ "description": "Stop future automatic updates",
3766
+ "exclusive": [
3767
+ "enable"
3768
+ ],
3769
+ "name": "disable",
3770
+ "allowNo": false,
3771
+ "type": "boolean"
3545
3772
  }
3546
3773
  },
3547
3774
  "hasDynamicHelp": false,
3548
3775
  "hiddenAliases": [],
3549
- "id": "proxy:stop",
3776
+ "id": "service:updates",
3550
3777
  "pluginAlias": "@rulemetric/cli",
3551
3778
  "pluginName": "@rulemetric/cli",
3552
3779
  "pluginType": "core",
@@ -3556,17 +3783,16 @@
3556
3783
  "relativePath": [
3557
3784
  "dist",
3558
3785
  "commands",
3559
- "proxy",
3560
- "stop.js"
3786
+ "service",
3787
+ "updates.js"
3561
3788
  ]
3562
3789
  },
3563
- "research:backfill": {
3790
+ "org:current": {
3564
3791
  "aliases": [],
3565
3792
  "args": {},
3566
- "description": "Scan every ~/.claude/projects transcript for past rate-limit (429) events and POST them as observations. Opt-in seed for the usage-research dataset — forward-only tail is the default capture path.",
3793
+ "description": "Show the current active organization",
3567
3794
  "examples": [
3568
- "<%= config.bin %> research backfill",
3569
- "<%= config.bin %> research backfill --claude-dir /custom/.claude --dry-run"
3795
+ "<%= config.bin %> org current"
3570
3796
  ],
3571
3797
  "flags": {
3572
3798
  "api-url": {
@@ -3577,25 +3803,11 @@
3577
3803
  "hasDynamicHelp": false,
3578
3804
  "multiple": false,
3579
3805
  "type": "option"
3580
- },
3581
- "claude-dir": {
3582
- "description": "Override the Claude Code projects directory (defaults to ~/.claude)",
3583
- "name": "claude-dir",
3584
- "noCacheDefault": true,
3585
- "hasDynamicHelp": false,
3586
- "multiple": false,
3587
- "type": "option"
3588
- },
3589
- "dry-run": {
3590
- "description": "Print observation count without POSTing",
3591
- "name": "dry-run",
3592
- "allowNo": false,
3593
- "type": "boolean"
3594
3806
  }
3595
3807
  },
3596
3808
  "hasDynamicHelp": false,
3597
3809
  "hiddenAliases": [],
3598
- "id": "research:backfill",
3810
+ "id": "org:current",
3599
3811
  "pluginAlias": "@rulemetric/cli",
3600
3812
  "pluginName": "@rulemetric/cli",
3601
3813
  "pluginType": "core",
@@ -3605,17 +3817,16 @@
3605
3817
  "relativePath": [
3606
3818
  "dist",
3607
3819
  "commands",
3608
- "research",
3609
- "backfill.js"
3820
+ "org",
3821
+ "current.js"
3610
3822
  ]
3611
3823
  },
3612
- "research:resume-scoped-outcomes": {
3824
+ "org:list": {
3613
3825
  "aliases": [],
3614
3826
  "args": {},
3615
- "description": "Finish uploading scoped headless outcomes whose receipt was preserved locally after the actor exited but whose capture or verification upload failed. Never re-runs the actor or re-measures the repository; ships the stored receipt and exact transcript only.",
3827
+ "description": "List organizations the current user is a member of",
3616
3828
  "examples": [
3617
- "<%= config.bin %> research resume-scoped-outcomes",
3618
- "<%= config.bin %> research resume-scoped-outcomes --list"
3829
+ "<%= config.bin %> org list"
3619
3830
  ],
3620
3831
  "flags": {
3621
3832
  "api-url": {
@@ -3626,18 +3837,11 @@
3626
3837
  "hasDynamicHelp": false,
3627
3838
  "multiple": false,
3628
3839
  "type": "option"
3629
- },
3630
- "list": {
3631
- "description": "Show the outcome store without uploading anything",
3632
- "name": "list",
3633
- "allowNo": false,
3634
- "type": "boolean"
3635
3840
  }
3636
3841
  },
3637
3842
  "hasDynamicHelp": false,
3638
- "hidden": true,
3639
3843
  "hiddenAliases": [],
3640
- "id": "research:resume-scoped-outcomes",
3844
+ "id": "org:list",
3641
3845
  "pluginAlias": "@rulemetric/cli",
3642
3846
  "pluginName": "@rulemetric/cli",
3643
3847
  "pluginType": "core",
@@ -3647,20 +3851,24 @@
3647
3851
  "relativePath": [
3648
3852
  "dist",
3649
3853
  "commands",
3650
- "research",
3651
- "resume-scoped-outcomes.js"
3854
+ "org",
3855
+ "list.js"
3652
3856
  ]
3653
3857
  },
3654
- "research:tail-transcript": {
3858
+ "org:switch": {
3655
3859
  "aliases": [],
3656
3860
  "args": {
3657
- "transcript": {
3658
- "description": "Absolute path to a Claude Code .jsonl transcript",
3659
- "name": "transcript",
3660
- "required": true
3861
+ "slug": {
3862
+ "description": "Organization slug to switch to",
3863
+ "name": "slug",
3864
+ "required": false
3661
3865
  }
3662
3866
  },
3663
- "description": "Read new lines from a Claude Code transcript since the last cached offset, POST any 429 events, and persist the new offset. Invoked by the session-end hook — safe to re-run.",
3867
+ "description": "Switch the active organization",
3868
+ "examples": [
3869
+ "<%= config.bin %> org switch acme",
3870
+ "<%= config.bin %> org switch --clear"
3871
+ ],
3664
3872
  "flags": {
3665
3873
  "api-url": {
3666
3874
  "description": "Override API base URL",
@@ -3671,17 +3879,16 @@
3671
3879
  "multiple": false,
3672
3880
  "type": "option"
3673
3881
  },
3674
- "no-post": {
3675
- "description": "Parse and advance the offset without POSTing (debug)",
3676
- "name": "no-post",
3882
+ "clear": {
3883
+ "description": "Clear the active organization (personal mode)",
3884
+ "name": "clear",
3677
3885
  "allowNo": false,
3678
3886
  "type": "boolean"
3679
3887
  }
3680
3888
  },
3681
3889
  "hasDynamicHelp": false,
3682
- "hidden": true,
3683
3890
  "hiddenAliases": [],
3684
- "id": "research:tail-transcript",
3891
+ "id": "org:switch",
3685
3892
  "pluginAlias": "@rulemetric/cli",
3686
3893
  "pluginName": "@rulemetric/cli",
3687
3894
  "pluginType": "core",
@@ -3691,21 +3898,14 @@
3691
3898
  "relativePath": [
3692
3899
  "dist",
3693
3900
  "commands",
3694
- "research",
3695
- "tail-transcript.js"
3901
+ "org",
3902
+ "switch.js"
3696
3903
  ]
3697
3904
  },
3698
- "service:install": {
3905
+ "local:down": {
3699
3906
  "aliases": [],
3700
3907
  "args": {},
3701
- "description": "Install RuleMetric services. Default (in a repo checkout): API + worker + gateway + capture proxy as launchd agents. With --worker-only: just the job worker, targeting the globally-installed CLI — no repo, no build (works from `npm i -g @rulemetric/cli`, macOS launchd or Linux systemd).",
3702
- "examples": [
3703
- "<%= config.bin %> service install",
3704
- "<%= config.bin %> service install --port 3000",
3705
- "<%= config.bin %> service install --skip-build",
3706
- "<%= config.bin %> service install --no-proxy",
3707
- "<%= config.bin %> service install --worker-only"
3708
- ],
3908
+ "description": "Stop the local RuleMetric server and database stack. Data is preserved (restart with `rulemetric local up`); use --delete-data to also wipe the local database.",
3709
3909
  "flags": {
3710
3910
  "api-url": {
3711
3911
  "description": "Override API base URL",
@@ -3716,44 +3916,16 @@
3716
3916
  "multiple": false,
3717
3917
  "type": "option"
3718
3918
  },
3719
- "port": {
3720
- "char": "p",
3721
- "description": "API server port",
3722
- "name": "port",
3723
- "default": 3000,
3724
- "hasDynamicHelp": false,
3725
- "multiple": false,
3726
- "type": "option"
3727
- },
3728
- "force": {
3729
- "char": "f",
3730
- "description": "Overwrite existing service configuration and reclaim conflicting ports",
3731
- "name": "force",
3732
- "allowNo": false,
3733
- "type": "boolean"
3734
- },
3735
- "skip-build": {
3736
- "description": "Skip the pre-install workspace build (API/web/cli dist must already exist)",
3737
- "name": "skip-build",
3738
- "allowNo": false,
3739
- "type": "boolean"
3740
- },
3741
- "no-proxy": {
3742
- "description": "Skip gateway + mitmproxy plists (just install API + worker)",
3743
- "name": "no-proxy",
3744
- "allowNo": false,
3745
- "type": "boolean"
3746
- },
3747
- "worker-only": {
3748
- "description": "Install ONLY the job worker as a persistent service, targeting the globally-installed CLI (no repo checkout, no build, no API/gateway/proxy). Sources auth from ~/.config/rulemetric/env. macOS (launchd) + Linux (systemd --user).",
3749
- "name": "worker-only",
3919
+ "delete-data": {
3920
+ "description": "Also delete the local database volumes (irreversible)",
3921
+ "name": "delete-data",
3750
3922
  "allowNo": false,
3751
3923
  "type": "boolean"
3752
3924
  }
3753
3925
  },
3754
3926
  "hasDynamicHelp": false,
3755
3927
  "hiddenAliases": [],
3756
- "id": "service:install",
3928
+ "id": "local:down",
3757
3929
  "pluginAlias": "@rulemetric/cli",
3758
3930
  "pluginName": "@rulemetric/cli",
3759
3931
  "pluginType": "core",
@@ -3763,14 +3935,19 @@
3763
3935
  "relativePath": [
3764
3936
  "dist",
3765
3937
  "commands",
3766
- "service",
3767
- "install.js"
3938
+ "local",
3939
+ "down.js"
3768
3940
  ]
3769
3941
  },
3770
- "service:status": {
3942
+ "local:up": {
3771
3943
  "aliases": [],
3772
3944
  "args": {},
3773
- "description": "Check the status of installed RuleMetric services (launchd on macOS; systemd --user worker on Linux)",
3945
+ "description": "Run RuleMetric fully locally: start a local Supabase stack (Docker), apply migrations, and serve the API + dashboard from the @rulemetric/local runtime — all data on this machine, zero cloud contact. Downloads the runtime package on first run.",
3946
+ "examples": [
3947
+ "<%= config.bin %> local up --email you@example.com --password <pw>",
3948
+ "<%= config.bin %> local up --port 3000",
3949
+ "<%= config.bin %> local up --foreground"
3950
+ ],
3774
3951
  "flags": {
3775
3952
  "api-url": {
3776
3953
  "description": "Override API base URL",
@@ -3780,11 +3957,48 @@
3780
3957
  "hasDynamicHelp": false,
3781
3958
  "multiple": false,
3782
3959
  "type": "option"
3960
+ },
3961
+ "port": {
3962
+ "char": "p",
3963
+ "description": "Local API + dashboard port",
3964
+ "name": "port",
3965
+ "default": 3000,
3966
+ "hasDynamicHelp": false,
3967
+ "multiple": false,
3968
+ "type": "option"
3969
+ },
3970
+ "email": {
3971
+ "char": "e",
3972
+ "description": "Create the first user with this email (with --password)",
3973
+ "name": "email",
3974
+ "hasDynamicHelp": false,
3975
+ "multiple": false,
3976
+ "type": "option"
3977
+ },
3978
+ "password": {
3979
+ "description": "Password for the first user (min 8 chars)",
3980
+ "name": "password",
3981
+ "hasDynamicHelp": false,
3982
+ "multiple": false,
3983
+ "type": "option"
3984
+ },
3985
+ "foreground": {
3986
+ "description": "Run the server in this terminal instead of installing a launchd service (works on any OS; skips user provisioning)",
3987
+ "name": "foreground",
3988
+ "allowNo": false,
3989
+ "type": "boolean"
3990
+ },
3991
+ "yes": {
3992
+ "char": "y",
3993
+ "description": "Skip the runtime-download confirmation",
3994
+ "name": "yes",
3995
+ "allowNo": false,
3996
+ "type": "boolean"
3783
3997
  }
3784
3998
  },
3785
3999
  "hasDynamicHelp": false,
3786
4000
  "hiddenAliases": [],
3787
- "id": "service:status",
4001
+ "id": "local:up",
3788
4002
  "pluginAlias": "@rulemetric/cli",
3789
4003
  "pluginName": "@rulemetric/cli",
3790
4004
  "pluginType": "core",
@@ -3794,14 +4008,18 @@
3794
4008
  "relativePath": [
3795
4009
  "dist",
3796
4010
  "commands",
3797
- "service",
3798
- "status.js"
4011
+ "local",
4012
+ "up.js"
3799
4013
  ]
3800
4014
  },
3801
- "service:uninstall": {
4015
+ "skills:export-approved": {
3802
4016
  "aliases": [],
3803
4017
  "args": {},
3804
- "description": "Remove RuleMetric services (macOS launchd: API/worker/gateway/proxy; Linux: the --worker-only systemd unit)",
4018
+ "description": "Export approved community submissions as community-skills.json for registry merge",
4019
+ "examples": [
4020
+ "<%= config.bin %> skills export-approved",
4021
+ "<%= config.bin %> skills export-approved --output ./community-skills.json"
4022
+ ],
3805
4023
  "flags": {
3806
4024
  "api-url": {
3807
4025
  "description": "Override API base URL",
@@ -3811,11 +4029,19 @@
3811
4029
  "hasDynamicHelp": false,
3812
4030
  "multiple": false,
3813
4031
  "type": "option"
4032
+ },
4033
+ "output": {
4034
+ "description": "Output file path",
4035
+ "name": "output",
4036
+ "default": "packages/skills-registry/community-skills.json",
4037
+ "hasDynamicHelp": false,
4038
+ "multiple": false,
4039
+ "type": "option"
3814
4040
  }
3815
4041
  },
3816
4042
  "hasDynamicHelp": false,
3817
4043
  "hiddenAliases": [],
3818
- "id": "service:uninstall",
4044
+ "id": "skills:export-approved",
3819
4045
  "pluginAlias": "@rulemetric/cli",
3820
4046
  "pluginName": "@rulemetric/cli",
3821
4047
  "pluginType": "core",
@@ -3825,22 +4051,24 @@
3825
4051
  "relativePath": [
3826
4052
  "dist",
3827
4053
  "commands",
3828
- "service",
3829
- "uninstall.js"
4054
+ "skills",
4055
+ "export-approved.js"
3830
4056
  ]
3831
4057
  },
3832
- "sessions:analyze": {
4058
+ "skills:install": {
3833
4059
  "aliases": [],
3834
4060
  "args": {
3835
4061
  "id": {
3836
- "description": "Session ID",
4062
+ "description": "Skill ID to install",
3837
4063
  "name": "id",
3838
4064
  "required": true
3839
4065
  }
3840
4066
  },
3841
- "description": "Trigger AI analysis on a session",
4067
+ "description": "Install a skill from the registry into your project",
3842
4068
  "examples": [
3843
- "<%= config.bin %> sessions analyze <session-id>"
4069
+ "<%= config.bin %> skills install tdd-workflow",
4070
+ "<%= config.bin %> skills install tdd-workflow --preview",
4071
+ "<%= config.bin %> skills install tdd-workflow --force"
3844
4072
  ],
3845
4073
  "flags": {
3846
4074
  "api-url": {
@@ -3851,85 +4079,64 @@
3851
4079
  "hasDynamicHelp": false,
3852
4080
  "multiple": false,
3853
4081
  "type": "option"
3854
- }
3855
- },
3856
- "hasDynamicHelp": false,
3857
- "hiddenAliases": [],
3858
- "id": "sessions:analyze",
3859
- "pluginAlias": "@rulemetric/cli",
3860
- "pluginName": "@rulemetric/cli",
3861
- "pluginType": "core",
3862
- "strict": true,
3863
- "enableJsonFlag": false,
3864
- "isESM": true,
3865
- "relativePath": [
3866
- "dist",
3867
- "commands",
3868
- "sessions",
3869
- "analyze.js"
3870
- ]
3871
- },
3872
- "sessions:delete": {
3873
- "aliases": [],
3874
- "args": {
3875
- "ids": {
3876
- "description": "Session id(s) to delete",
3877
- "name": "ids",
3878
- "required": false
3879
- }
3880
- },
3881
- "description": "Permanently delete captured sessions and everything stored with them (events, context snapshots, offloaded blobs)",
3882
- "examples": [
3883
- "<%= config.bin %> sessions delete 4f9d…",
3884
- "<%= config.bin %> sessions delete 4f9d… 8a21…",
3885
- "<%= config.bin %> sessions delete --project /work/client-a --yes"
3886
- ],
3887
- "flags": {
3888
- "api-url": {
3889
- "description": "Override API base URL",
3890
- "env": "RULEMETRIC_API_URL",
4082
+ },
4083
+ "tool": {
4084
+ "description": "Deprecated and ignored — skills install to every agent path at once",
3891
4085
  "hidden": true,
3892
- "name": "api-url",
4086
+ "name": "tool",
3893
4087
  "hasDynamicHelp": false,
3894
4088
  "multiple": false,
4089
+ "options": [
4090
+ "claude_code",
4091
+ "cursor",
4092
+ "copilot"
4093
+ ],
3895
4094
  "type": "option"
3896
4095
  },
3897
- "project": {
3898
- "description": "Delete every session captured under this project path (use with --yes).",
3899
- "name": "project",
4096
+ "preview": {
4097
+ "description": "Preview content without writing",
4098
+ "name": "preview",
4099
+ "allowNo": false,
4100
+ "type": "boolean"
4101
+ },
4102
+ "dir": {
4103
+ "description": "Project directory",
4104
+ "name": "dir",
4105
+ "default": ".",
3900
4106
  "hasDynamicHelp": false,
3901
4107
  "multiple": false,
3902
4108
  "type": "option"
3903
4109
  },
3904
- "yes": {
3905
- "description": "Skip the confirmation prompt. Required for --project in non-interactive use.",
3906
- "name": "yes",
4110
+ "force": {
4111
+ "description": "Replace an existing skill directory at the Claude Code path",
4112
+ "name": "force",
3907
4113
  "allowNo": false,
3908
4114
  "type": "boolean"
3909
4115
  }
3910
4116
  },
3911
4117
  "hasDynamicHelp": false,
3912
4118
  "hiddenAliases": [],
3913
- "id": "sessions:delete",
4119
+ "id": "skills:install",
3914
4120
  "pluginAlias": "@rulemetric/cli",
3915
4121
  "pluginName": "@rulemetric/cli",
3916
4122
  "pluginType": "core",
3917
- "strict": false,
4123
+ "strict": true,
3918
4124
  "enableJsonFlag": false,
3919
4125
  "isESM": true,
3920
4126
  "relativePath": [
3921
4127
  "dist",
3922
4128
  "commands",
3923
- "sessions",
3924
- "delete.js"
4129
+ "skills",
4130
+ "install.js"
3925
4131
  ]
3926
4132
  },
3927
- "sessions:end": {
4133
+ "skills:list": {
3928
4134
  "aliases": [],
3929
4135
  "args": {},
3930
- "description": "End the active capture session",
4136
+ "description": "List skills in the registry",
3931
4137
  "examples": [
3932
- "<%= config.bin %> sessions end"
4138
+ "<%= config.bin %> skills list",
4139
+ "<%= config.bin %> skills list --stats"
3933
4140
  ],
3934
4141
  "flags": {
3935
4142
  "api-url": {
@@ -3940,11 +4147,25 @@
3940
4147
  "hasDynamicHelp": false,
3941
4148
  "multiple": false,
3942
4149
  "type": "option"
4150
+ },
4151
+ "stats": {
4152
+ "description": "Show registry statistics",
4153
+ "name": "stats",
4154
+ "allowNo": false,
4155
+ "type": "boolean"
4156
+ },
4157
+ "limit": {
4158
+ "description": "Max skills to show",
4159
+ "name": "limit",
4160
+ "default": 30,
4161
+ "hasDynamicHelp": false,
4162
+ "multiple": false,
4163
+ "type": "option"
3943
4164
  }
3944
4165
  },
3945
4166
  "hasDynamicHelp": false,
3946
4167
  "hiddenAliases": [],
3947
- "id": "sessions:end",
4168
+ "id": "skills:list",
3948
4169
  "pluginAlias": "@rulemetric/cli",
3949
4170
  "pluginName": "@rulemetric/cli",
3950
4171
  "pluginType": "core",
@@ -3954,23 +4175,23 @@
3954
4175
  "relativePath": [
3955
4176
  "dist",
3956
4177
  "commands",
3957
- "sessions",
3958
- "end.js"
4178
+ "skills",
4179
+ "list.js"
3959
4180
  ]
3960
4181
  },
3961
- "sessions:import": {
4182
+ "skills:publish": {
3962
4183
  "aliases": [],
3963
4184
  "args": {
3964
- "path": {
3965
- "description": "Path to session file",
3966
- "name": "path",
4185
+ "file": {
4186
+ "description": "Path to skill file (.md)",
4187
+ "name": "file",
3967
4188
  "required": true
3968
4189
  }
3969
4190
  },
3970
- "description": "Import a session file (JSONL, JSON)",
4191
+ "description": "Submit a skill file to the RuleMetric skills registry",
3971
4192
  "examples": [
3972
- "<%= config.bin %> sessions import ~/.claude/projects/my-project/session-abc.jsonl",
3973
- "<%= config.bin %> sessions import ./copilot-export.json --tool vscode_copilot"
4193
+ "<%= config.bin %> skills publish ./my-skill.md",
4194
+ "<%= config.bin %> skills publish ./my-skill.md --category workflow --tool claude_code"
3974
4195
  ],
3975
4196
  "flags": {
3976
4197
  "api-url": {
@@ -3982,18 +4203,69 @@
3982
4203
  "multiple": false,
3983
4204
  "type": "option"
3984
4205
  },
3985
- "tool": {
3986
- "description": "Override tool detection (claude_code, cursor, vscode_copilot)",
3987
- "name": "tool",
4206
+ "name": {
4207
+ "description": "Skill name (defaults to filename)",
4208
+ "name": "name",
3988
4209
  "hasDynamicHelp": false,
3989
4210
  "multiple": false,
3990
4211
  "type": "option"
3991
- }
3992
- },
3993
- "hasDynamicHelp": false,
3994
- "hiddenAliases": [],
3995
- "id": "sessions:import",
3996
- "pluginAlias": "@rulemetric/cli",
4212
+ },
4213
+ "description": {
4214
+ "description": "One-line description",
4215
+ "name": "description",
4216
+ "hasDynamicHelp": false,
4217
+ "multiple": false,
4218
+ "type": "option"
4219
+ },
4220
+ "category": {
4221
+ "description": "Skill category",
4222
+ "name": "category",
4223
+ "default": "other",
4224
+ "hasDynamicHelp": false,
4225
+ "multiple": false,
4226
+ "options": [
4227
+ "workflow",
4228
+ "language",
4229
+ "framework",
4230
+ "tool",
4231
+ "security",
4232
+ "testing",
4233
+ "architecture",
4234
+ "devops",
4235
+ "documentation",
4236
+ "performance",
4237
+ "other"
4238
+ ],
4239
+ "type": "option"
4240
+ },
4241
+ "tool": {
4242
+ "description": "Primary tool this skill targets",
4243
+ "name": "tool",
4244
+ "default": "universal",
4245
+ "hasDynamicHelp": false,
4246
+ "multiple": false,
4247
+ "options": [
4248
+ "claude_code",
4249
+ "cursor",
4250
+ "copilot",
4251
+ "windsurf",
4252
+ "universal"
4253
+ ],
4254
+ "type": "option"
4255
+ },
4256
+ "tags": {
4257
+ "description": "Comma-separated tags",
4258
+ "name": "tags",
4259
+ "default": "",
4260
+ "hasDynamicHelp": false,
4261
+ "multiple": false,
4262
+ "type": "option"
4263
+ }
4264
+ },
4265
+ "hasDynamicHelp": false,
4266
+ "hiddenAliases": [],
4267
+ "id": "skills:publish",
4268
+ "pluginAlias": "@rulemetric/cli",
3997
4269
  "pluginName": "@rulemetric/cli",
3998
4270
  "pluginType": "core",
3999
4271
  "strict": true,
@@ -4002,18 +4274,24 @@
4002
4274
  "relativePath": [
4003
4275
  "dist",
4004
4276
  "commands",
4005
- "sessions",
4006
- "import.js"
4277
+ "skills",
4278
+ "publish.js"
4007
4279
  ]
4008
4280
  },
4009
- "sessions:list": {
4281
+ "skills:search": {
4010
4282
  "aliases": [],
4011
- "args": {},
4012
- "description": "List captured sessions",
4283
+ "args": {
4284
+ "query": {
4285
+ "description": "Search term",
4286
+ "name": "query",
4287
+ "required": false
4288
+ }
4289
+ },
4290
+ "description": "Search the community skills registry",
4013
4291
  "examples": [
4014
- "<%= config.bin %> sessions list",
4015
- "<%= config.bin %> sessions list --tool claude_code",
4016
- "<%= config.bin %> sessions list --tool codex"
4292
+ "<%= config.bin %> skills search \"tdd\"",
4293
+ "<%= config.bin %> skills search --tool cursor --category testing",
4294
+ "<%= config.bin %> skills search --language python"
4017
4295
  ],
4018
4296
  "flags": {
4019
4297
  "api-url": {
@@ -4026,10 +4304,51 @@
4026
4304
  "type": "option"
4027
4305
  },
4028
4306
  "tool": {
4029
- "description": "Filter by tool (claude_code, cursor, vscode_copilot, copilot_agent, rulemetric_mcp, codex, pi, opencode, antigravity)",
4307
+ "description": "Filter by tool",
4030
4308
  "name": "tool",
4031
4309
  "hasDynamicHelp": false,
4032
4310
  "multiple": false,
4311
+ "options": [
4312
+ "claude_code",
4313
+ "cursor",
4314
+ "copilot",
4315
+ "windsurf",
4316
+ "cline",
4317
+ "universal"
4318
+ ],
4319
+ "type": "option"
4320
+ },
4321
+ "category": {
4322
+ "description": "Filter by category",
4323
+ "name": "category",
4324
+ "hasDynamicHelp": false,
4325
+ "multiple": false,
4326
+ "options": [
4327
+ "workflow",
4328
+ "language",
4329
+ "framework",
4330
+ "tool",
4331
+ "security",
4332
+ "testing",
4333
+ "architecture",
4334
+ "devops",
4335
+ "documentation",
4336
+ "performance"
4337
+ ],
4338
+ "type": "option"
4339
+ },
4340
+ "language": {
4341
+ "description": "Filter by programming language",
4342
+ "name": "language",
4343
+ "hasDynamicHelp": false,
4344
+ "multiple": false,
4345
+ "type": "option"
4346
+ },
4347
+ "framework": {
4348
+ "description": "Filter by framework",
4349
+ "name": "framework",
4350
+ "hasDynamicHelp": false,
4351
+ "multiple": false,
4033
4352
  "type": "option"
4034
4353
  },
4035
4354
  "limit": {
@@ -4043,7 +4362,7 @@
4043
4362
  },
4044
4363
  "hasDynamicHelp": false,
4045
4364
  "hiddenAliases": [],
4046
- "id": "sessions:list",
4365
+ "id": "skills:search",
4047
4366
  "pluginAlias": "@rulemetric/cli",
4048
4367
  "pluginName": "@rulemetric/cli",
4049
4368
  "pluginType": "core",
@@ -4053,18 +4372,17 @@
4053
4372
  "relativePath": [
4054
4373
  "dist",
4055
4374
  "commands",
4056
- "sessions",
4057
- "list.js"
4375
+ "skills",
4376
+ "search.js"
4058
4377
  ]
4059
4378
  },
4060
- "sessions:start": {
4379
+ "skills:update": {
4061
4380
  "aliases": [],
4062
4381
  "args": {},
4063
- "description": "Start a capture session for any LLM provider (Cortex, Groq, etc.)",
4382
+ "description": "Fetch latest skills from GitHub sources and update local registry",
4064
4383
  "examples": [
4065
- "<%= config.bin %> sessions start --tool cortex",
4066
- "<%= config.bin %> sessions start --tool groq --project-dir /path/to/project",
4067
- "eval \"$(rulemetric proxy env --python)\" && rulemetric sessions start --tool cortex"
4384
+ "<%= config.bin %> skills update",
4385
+ "<%= config.bin %> skills update --all"
4068
4386
  ],
4069
4387
  "flags": {
4070
4388
  "api-url": {
@@ -4076,27 +4394,16 @@
4076
4394
  "multiple": false,
4077
4395
  "type": "option"
4078
4396
  },
4079
- "tool": {
4080
- "char": "t",
4081
- "description": "LLM provider or tool name (e.g., cortex, groq, deepseek, custom_app)",
4082
- "name": "tool",
4083
- "required": true,
4084
- "hasDynamicHelp": false,
4085
- "multiple": false,
4086
- "type": "option"
4087
- },
4088
- "project-dir": {
4089
- "char": "d",
4090
- "description": "Project directory (defaults to cwd)",
4091
- "name": "project-dir",
4092
- "hasDynamicHelp": false,
4093
- "multiple": false,
4094
- "type": "option"
4397
+ "all": {
4398
+ "description": "Include Tier 2 (niche) sources",
4399
+ "name": "all",
4400
+ "allowNo": false,
4401
+ "type": "boolean"
4095
4402
  }
4096
4403
  },
4097
4404
  "hasDynamicHelp": false,
4098
4405
  "hiddenAliases": [],
4099
- "id": "sessions:start",
4406
+ "id": "skills:update",
4100
4407
  "pluginAlias": "@rulemetric/cli",
4101
4408
  "pluginName": "@rulemetric/cli",
4102
4409
  "pluginType": "core",
@@ -4106,17 +4413,22 @@
4106
4413
  "relativePath": [
4107
4414
  "dist",
4108
4415
  "commands",
4109
- "sessions",
4110
- "start.js"
4416
+ "skills",
4417
+ "update.js"
4111
4418
  ]
4112
4419
  },
4113
- "skills:export-approved": {
4420
+ "sessions:analyze": {
4114
4421
  "aliases": [],
4115
- "args": {},
4116
- "description": "Export approved community submissions as community-skills.json for registry merge",
4422
+ "args": {
4423
+ "id": {
4424
+ "description": "Session ID",
4425
+ "name": "id",
4426
+ "required": true
4427
+ }
4428
+ },
4429
+ "description": "Trigger AI analysis on a session",
4117
4430
  "examples": [
4118
- "<%= config.bin %> skills export-approved",
4119
- "<%= config.bin %> skills export-approved --output ./community-skills.json"
4431
+ "<%= config.bin %> sessions analyze <session-id>"
4120
4432
  ],
4121
4433
  "flags": {
4122
4434
  "api-url": {
@@ -4127,19 +4439,11 @@
4127
4439
  "hasDynamicHelp": false,
4128
4440
  "multiple": false,
4129
4441
  "type": "option"
4130
- },
4131
- "output": {
4132
- "description": "Output file path",
4133
- "name": "output",
4134
- "default": "packages/skills-registry/community-skills.json",
4135
- "hasDynamicHelp": false,
4136
- "multiple": false,
4137
- "type": "option"
4138
4442
  }
4139
4443
  },
4140
4444
  "hasDynamicHelp": false,
4141
4445
  "hiddenAliases": [],
4142
- "id": "skills:export-approved",
4446
+ "id": "sessions:analyze",
4143
4447
  "pluginAlias": "@rulemetric/cli",
4144
4448
  "pluginName": "@rulemetric/cli",
4145
4449
  "pluginType": "core",
@@ -4149,24 +4453,24 @@
4149
4453
  "relativePath": [
4150
4454
  "dist",
4151
4455
  "commands",
4152
- "skills",
4153
- "export-approved.js"
4456
+ "sessions",
4457
+ "analyze.js"
4154
4458
  ]
4155
4459
  },
4156
- "skills:install": {
4460
+ "sessions:delete": {
4157
4461
  "aliases": [],
4158
4462
  "args": {
4159
- "id": {
4160
- "description": "Skill ID to install",
4161
- "name": "id",
4162
- "required": true
4463
+ "ids": {
4464
+ "description": "Session id(s) to delete",
4465
+ "name": "ids",
4466
+ "required": false
4163
4467
  }
4164
4468
  },
4165
- "description": "Install a skill from the registry into your project",
4469
+ "description": "Permanently delete captured sessions and everything stored with them (events, context snapshots, offloaded blobs)",
4166
4470
  "examples": [
4167
- "<%= config.bin %> skills install tdd-workflow",
4168
- "<%= config.bin %> skills install tdd-workflow --preview",
4169
- "<%= config.bin %> skills install tdd-workflow --force"
4471
+ "<%= config.bin %> sessions delete 4f9d…",
4472
+ "<%= config.bin %> sessions delete 4f9d… 8a21…",
4473
+ "<%= config.bin %> sessions delete --project /work/client-a --yes"
4170
4474
  ],
4171
4475
  "flags": {
4172
4476
  "api-url": {
@@ -4178,63 +4482,42 @@
4178
4482
  "multiple": false,
4179
4483
  "type": "option"
4180
4484
  },
4181
- "tool": {
4182
- "description": "Deprecated and ignored skills install to every agent path at once",
4183
- "hidden": true,
4184
- "name": "tool",
4185
- "hasDynamicHelp": false,
4186
- "multiple": false,
4187
- "options": [
4188
- "claude_code",
4189
- "cursor",
4190
- "copilot"
4191
- ],
4192
- "type": "option"
4193
- },
4194
- "preview": {
4195
- "description": "Preview content without writing",
4196
- "name": "preview",
4197
- "allowNo": false,
4198
- "type": "boolean"
4199
- },
4200
- "dir": {
4201
- "description": "Project directory",
4202
- "name": "dir",
4203
- "default": ".",
4485
+ "project": {
4486
+ "description": "Delete every session captured under this project path (use with --yes).",
4487
+ "name": "project",
4204
4488
  "hasDynamicHelp": false,
4205
4489
  "multiple": false,
4206
4490
  "type": "option"
4207
4491
  },
4208
- "force": {
4209
- "description": "Replace an existing skill directory at the Claude Code path",
4210
- "name": "force",
4492
+ "yes": {
4493
+ "description": "Skip the confirmation prompt. Required for --project in non-interactive use.",
4494
+ "name": "yes",
4211
4495
  "allowNo": false,
4212
4496
  "type": "boolean"
4213
4497
  }
4214
4498
  },
4215
4499
  "hasDynamicHelp": false,
4216
4500
  "hiddenAliases": [],
4217
- "id": "skills:install",
4501
+ "id": "sessions:delete",
4218
4502
  "pluginAlias": "@rulemetric/cli",
4219
4503
  "pluginName": "@rulemetric/cli",
4220
4504
  "pluginType": "core",
4221
- "strict": true,
4505
+ "strict": false,
4222
4506
  "enableJsonFlag": false,
4223
4507
  "isESM": true,
4224
4508
  "relativePath": [
4225
4509
  "dist",
4226
4510
  "commands",
4227
- "skills",
4228
- "install.js"
4511
+ "sessions",
4512
+ "delete.js"
4229
4513
  ]
4230
4514
  },
4231
- "skills:list": {
4515
+ "sessions:end": {
4232
4516
  "aliases": [],
4233
4517
  "args": {},
4234
- "description": "List skills in the registry",
4518
+ "description": "End the active capture session",
4235
4519
  "examples": [
4236
- "<%= config.bin %> skills list",
4237
- "<%= config.bin %> skills list --stats"
4520
+ "<%= config.bin %> sessions end"
4238
4521
  ],
4239
4522
  "flags": {
4240
4523
  "api-url": {
@@ -4245,25 +4528,11 @@
4245
4528
  "hasDynamicHelp": false,
4246
4529
  "multiple": false,
4247
4530
  "type": "option"
4248
- },
4249
- "stats": {
4250
- "description": "Show registry statistics",
4251
- "name": "stats",
4252
- "allowNo": false,
4253
- "type": "boolean"
4254
- },
4255
- "limit": {
4256
- "description": "Max skills to show",
4257
- "name": "limit",
4258
- "default": 30,
4259
- "hasDynamicHelp": false,
4260
- "multiple": false,
4261
- "type": "option"
4262
4531
  }
4263
4532
  },
4264
4533
  "hasDynamicHelp": false,
4265
4534
  "hiddenAliases": [],
4266
- "id": "skills:list",
4535
+ "id": "sessions:end",
4267
4536
  "pluginAlias": "@rulemetric/cli",
4268
4537
  "pluginName": "@rulemetric/cli",
4269
4538
  "pluginType": "core",
@@ -4273,23 +4542,23 @@
4273
4542
  "relativePath": [
4274
4543
  "dist",
4275
4544
  "commands",
4276
- "skills",
4277
- "list.js"
4545
+ "sessions",
4546
+ "end.js"
4278
4547
  ]
4279
4548
  },
4280
- "skills:publish": {
4549
+ "sessions:import": {
4281
4550
  "aliases": [],
4282
4551
  "args": {
4283
- "file": {
4284
- "description": "Path to skill file (.md)",
4285
- "name": "file",
4552
+ "path": {
4553
+ "description": "Path to session file",
4554
+ "name": "path",
4286
4555
  "required": true
4287
4556
  }
4288
4557
  },
4289
- "description": "Submit a skill file to the RuleMetric skills registry",
4558
+ "description": "Import a session file (JSONL, JSON)",
4290
4559
  "examples": [
4291
- "<%= config.bin %> skills publish ./my-skill.md",
4292
- "<%= config.bin %> skills publish ./my-skill.md --category workflow --tool claude_code"
4560
+ "<%= config.bin %> sessions import ~/.claude/projects/my-project/session-abc.jsonl",
4561
+ "<%= config.bin %> sessions import ./copilot-export.json --tool vscode_copilot"
4293
4562
  ],
4294
4563
  "flags": {
4295
4564
  "api-url": {
@@ -4301,60 +4570,9 @@
4301
4570
  "multiple": false,
4302
4571
  "type": "option"
4303
4572
  },
4304
- "name": {
4305
- "description": "Skill name (defaults to filename)",
4306
- "name": "name",
4307
- "hasDynamicHelp": false,
4308
- "multiple": false,
4309
- "type": "option"
4310
- },
4311
- "description": {
4312
- "description": "One-line description",
4313
- "name": "description",
4314
- "hasDynamicHelp": false,
4315
- "multiple": false,
4316
- "type": "option"
4317
- },
4318
- "category": {
4319
- "description": "Skill category",
4320
- "name": "category",
4321
- "default": "other",
4322
- "hasDynamicHelp": false,
4323
- "multiple": false,
4324
- "options": [
4325
- "workflow",
4326
- "language",
4327
- "framework",
4328
- "tool",
4329
- "security",
4330
- "testing",
4331
- "architecture",
4332
- "devops",
4333
- "documentation",
4334
- "performance",
4335
- "other"
4336
- ],
4337
- "type": "option"
4338
- },
4339
4573
  "tool": {
4340
- "description": "Primary tool this skill targets",
4574
+ "description": "Override tool detection (claude_code, cursor, vscode_copilot)",
4341
4575
  "name": "tool",
4342
- "default": "universal",
4343
- "hasDynamicHelp": false,
4344
- "multiple": false,
4345
- "options": [
4346
- "claude_code",
4347
- "cursor",
4348
- "copilot",
4349
- "windsurf",
4350
- "universal"
4351
- ],
4352
- "type": "option"
4353
- },
4354
- "tags": {
4355
- "description": "Comma-separated tags",
4356
- "name": "tags",
4357
- "default": "",
4358
4576
  "hasDynamicHelp": false,
4359
4577
  "multiple": false,
4360
4578
  "type": "option"
@@ -4362,7 +4580,7 @@
4362
4580
  },
4363
4581
  "hasDynamicHelp": false,
4364
4582
  "hiddenAliases": [],
4365
- "id": "skills:publish",
4583
+ "id": "sessions:import",
4366
4584
  "pluginAlias": "@rulemetric/cli",
4367
4585
  "pluginName": "@rulemetric/cli",
4368
4586
  "pluginType": "core",
@@ -4372,24 +4590,18 @@
4372
4590
  "relativePath": [
4373
4591
  "dist",
4374
4592
  "commands",
4375
- "skills",
4376
- "publish.js"
4593
+ "sessions",
4594
+ "import.js"
4377
4595
  ]
4378
4596
  },
4379
- "skills:search": {
4597
+ "sessions:list": {
4380
4598
  "aliases": [],
4381
- "args": {
4382
- "query": {
4383
- "description": "Search term",
4384
- "name": "query",
4385
- "required": false
4386
- }
4387
- },
4388
- "description": "Search the community skills registry",
4599
+ "args": {},
4600
+ "description": "List captured sessions",
4389
4601
  "examples": [
4390
- "<%= config.bin %> skills search \"tdd\"",
4391
- "<%= config.bin %> skills search --tool cursor --category testing",
4392
- "<%= config.bin %> skills search --language python"
4602
+ "<%= config.bin %> sessions list",
4603
+ "<%= config.bin %> sessions list --tool claude_code",
4604
+ "<%= config.bin %> sessions list --tool codex"
4393
4605
  ],
4394
4606
  "flags": {
4395
4607
  "api-url": {
@@ -4402,51 +4614,10 @@
4402
4614
  "type": "option"
4403
4615
  },
4404
4616
  "tool": {
4405
- "description": "Filter by tool",
4617
+ "description": "Filter by tool (claude_code, cursor, vscode_copilot, copilot_agent, rulemetric_mcp, codex, pi, opencode, antigravity)",
4406
4618
  "name": "tool",
4407
4619
  "hasDynamicHelp": false,
4408
4620
  "multiple": false,
4409
- "options": [
4410
- "claude_code",
4411
- "cursor",
4412
- "copilot",
4413
- "windsurf",
4414
- "cline",
4415
- "universal"
4416
- ],
4417
- "type": "option"
4418
- },
4419
- "category": {
4420
- "description": "Filter by category",
4421
- "name": "category",
4422
- "hasDynamicHelp": false,
4423
- "multiple": false,
4424
- "options": [
4425
- "workflow",
4426
- "language",
4427
- "framework",
4428
- "tool",
4429
- "security",
4430
- "testing",
4431
- "architecture",
4432
- "devops",
4433
- "documentation",
4434
- "performance"
4435
- ],
4436
- "type": "option"
4437
- },
4438
- "language": {
4439
- "description": "Filter by programming language",
4440
- "name": "language",
4441
- "hasDynamicHelp": false,
4442
- "multiple": false,
4443
- "type": "option"
4444
- },
4445
- "framework": {
4446
- "description": "Filter by framework",
4447
- "name": "framework",
4448
- "hasDynamicHelp": false,
4449
- "multiple": false,
4450
4621
  "type": "option"
4451
4622
  },
4452
4623
  "limit": {
@@ -4460,7 +4631,7 @@
4460
4631
  },
4461
4632
  "hasDynamicHelp": false,
4462
4633
  "hiddenAliases": [],
4463
- "id": "skills:search",
4634
+ "id": "sessions:list",
4464
4635
  "pluginAlias": "@rulemetric/cli",
4465
4636
  "pluginName": "@rulemetric/cli",
4466
4637
  "pluginType": "core",
@@ -4470,17 +4641,18 @@
4470
4641
  "relativePath": [
4471
4642
  "dist",
4472
4643
  "commands",
4473
- "skills",
4474
- "search.js"
4644
+ "sessions",
4645
+ "list.js"
4475
4646
  ]
4476
4647
  },
4477
- "skills:update": {
4648
+ "sessions:start": {
4478
4649
  "aliases": [],
4479
4650
  "args": {},
4480
- "description": "Fetch latest skills from GitHub sources and update local registry",
4651
+ "description": "Start a capture session for any LLM provider (Cortex, Groq, etc.)",
4481
4652
  "examples": [
4482
- "<%= config.bin %> skills update",
4483
- "<%= config.bin %> skills update --all"
4653
+ "<%= config.bin %> sessions start --tool cortex",
4654
+ "<%= config.bin %> sessions start --tool groq --project-dir /path/to/project",
4655
+ "eval \"$(rulemetric proxy env --python)\" && rulemetric sessions start --tool cortex"
4484
4656
  ],
4485
4657
  "flags": {
4486
4658
  "api-url": {
@@ -4492,16 +4664,27 @@
4492
4664
  "multiple": false,
4493
4665
  "type": "option"
4494
4666
  },
4495
- "all": {
4496
- "description": "Include Tier 2 (niche) sources",
4497
- "name": "all",
4498
- "allowNo": false,
4499
- "type": "boolean"
4667
+ "tool": {
4668
+ "char": "t",
4669
+ "description": "LLM provider or tool name (e.g., cortex, groq, deepseek, custom_app)",
4670
+ "name": "tool",
4671
+ "required": true,
4672
+ "hasDynamicHelp": false,
4673
+ "multiple": false,
4674
+ "type": "option"
4675
+ },
4676
+ "project-dir": {
4677
+ "char": "d",
4678
+ "description": "Project directory (defaults to cwd)",
4679
+ "name": "project-dir",
4680
+ "hasDynamicHelp": false,
4681
+ "multiple": false,
4682
+ "type": "option"
4500
4683
  }
4501
4684
  },
4502
4685
  "hasDynamicHelp": false,
4503
4686
  "hiddenAliases": [],
4504
- "id": "skills:update",
4687
+ "id": "sessions:start",
4505
4688
  "pluginAlias": "@rulemetric/cli",
4506
4689
  "pluginName": "@rulemetric/cli",
4507
4690
  "pluginType": "core",
@@ -4511,8 +4694,8 @@
4511
4694
  "relativePath": [
4512
4695
  "dist",
4513
4696
  "commands",
4514
- "skills",
4515
- "update.js"
4697
+ "sessions",
4698
+ "start.js"
4516
4699
  ]
4517
4700
  },
4518
4701
  "suggestions:accept": {
@@ -4815,5 +4998,5 @@
4815
4998
  ]
4816
4999
  }
4817
5000
  },
4818
- "version": "0.18.1"
5001
+ "version": "0.20.0"
4819
5002
  }