catherd-cli 1.4.0 → 2.0.0-beta.20261022113309

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 (320) hide show
  1. package/README.md +188 -169
  2. package/THIRD_PARTY_NOTICES.md +217 -35
  3. package/catalog/jev.json +27 -1
  4. package/catalog/models.json +56 -239
  5. package/package.json +6 -8
  6. package/plugin/.claude-plugin/plugin.json +1 -1
  7. package/plugin/.codex-plugin/plugin.json +1 -1
  8. package/plugin/bin/catherd-mcp +1 -1
  9. package/plugin/commands/catherd.md +2 -2
  10. package/plugin/skills/catherd/SKILL.md +97 -356
  11. package/plugin/skills/catherd-setup/SKILL.md +21 -20
  12. package/src/adapters/all.ts +0 -4
  13. package/src/adapters/backend.ts +19 -4
  14. package/src/adapters/claude-code/index.ts +126 -14
  15. package/src/adapters/codex/events.ts +10 -0
  16. package/src/adapters/codex/index.ts +17 -5
  17. package/src/adapters/cursor/home.ts +1 -1
  18. package/src/adapters/cursor/index.ts +10 -4
  19. package/src/adapters/opencode/index.ts +38 -1
  20. package/src/cli.ts +27 -27
  21. package/src/domain/agents.ts +3 -1
  22. package/src/domain/bars.ts +33 -107
  23. package/src/domain/blocked.ts +72 -0
  24. package/src/domain/branch.ts +51 -0
  25. package/src/domain/brief.ts +106 -0
  26. package/src/domain/catalog.ts +69 -313
  27. package/src/domain/changes.ts +23 -1
  28. package/src/domain/cost.ts +19 -29
  29. package/src/domain/errors.ts +6 -2
  30. package/src/domain/fail-lines.ts +26 -0
  31. package/src/domain/failover.ts +37 -75
  32. package/src/domain/findings.ts +47 -0
  33. package/src/domain/gate-brief.ts +53 -0
  34. package/src/domain/hints.ts +13 -2
  35. package/src/domain/ids.ts +13 -2
  36. package/src/domain/jev.ts +47 -2
  37. package/src/domain/judge.ts +124 -0
  38. package/src/domain/lane.ts +118 -3
  39. package/src/domain/milestone-memory.ts +53 -0
  40. package/src/domain/notice.ts +32 -8
  41. package/src/domain/notify.ts +32 -0
  42. package/src/domain/plan-doc.ts +198 -0
  43. package/src/domain/plan-lint.ts +141 -0
  44. package/src/domain/profile-rules.ts +175 -138
  45. package/src/domain/profile.ts +140 -63
  46. package/src/domain/record.ts +68 -3
  47. package/src/domain/reply.ts +29 -0
  48. package/src/domain/role-prompts.ts +182 -56
  49. package/src/domain/role-scope.ts +76 -0
  50. package/src/domain/role-tools.ts +34 -0
  51. package/src/domain/roles.ts +2 -0
  52. package/src/domain/route.ts +90 -0
  53. package/src/domain/rules.ts +33 -0
  54. package/src/domain/run-events.ts +298 -0
  55. package/src/domain/run-machine.ts +668 -0
  56. package/src/domain/run-state.ts +1310 -0
  57. package/src/domain/scorecard.ts +197 -0
  58. package/src/domain/select.ts +229 -72
  59. package/src/domain/slopalytics.ts +72 -0
  60. package/src/domain/state.ts +5 -0
  61. package/src/domain/util.ts +22 -0
  62. package/src/domain/workspace.ts +130 -0
  63. package/src/entry/answer-command.ts +39 -0
  64. package/src/entry/catalog-command.ts +24 -165
  65. package/src/entry/check-bin.ts +17 -0
  66. package/src/entry/cli-kit.ts +18 -2
  67. package/src/entry/daemon-bin.ts +22 -0
  68. package/src/entry/deps.ts +2 -0
  69. package/src/entry/doctor-command.ts +20 -2
  70. package/src/entry/glyphs.ts +15 -2
  71. package/src/entry/host-arg.ts +28 -0
  72. package/src/entry/init-command.ts +20 -69
  73. package/src/entry/knowledge-command.ts +121 -5
  74. package/src/entry/lock-command.ts +103 -8
  75. package/src/entry/mcp/handshake.ts +6 -2
  76. package/src/entry/mcp/role-bin.ts +20 -0
  77. package/src/entry/mcp/role-server.ts +134 -0
  78. package/src/entry/mcp/server.ts +85 -21
  79. package/src/entry/mcp/session-tools.ts +149 -0
  80. package/src/entry/panel/openapi.ts +189 -0
  81. package/src/entry/panel/server.ts +410 -0
  82. package/src/entry/panel-command.ts +68 -0
  83. package/src/entry/pause-command.ts +67 -0
  84. package/src/entry/profile-command.ts +33 -18
  85. package/src/entry/role-cli-command.ts +159 -0
  86. package/src/entry/runs-command.ts +81 -27
  87. package/src/entry/scorecard-command.ts +187 -0
  88. package/src/entry/supervise-bin.ts +1 -1
  89. package/src/entry/supervise-command.ts +30 -3
  90. package/src/entry/workspace-command.ts +44 -0
  91. package/src/infra/boot-lock.ts +25 -0
  92. package/src/infra/delivery.ts +3 -0
  93. package/src/infra/dispatch-dir.ts +2 -0
  94. package/src/infra/env.ts +11 -3
  95. package/src/infra/git.ts +70 -0
  96. package/src/infra/heavy-lock.ts +133 -6
  97. package/src/infra/host-probe.ts +16 -0
  98. package/src/infra/launch.ts +63 -7
  99. package/src/infra/lock-activity.ts +88 -0
  100. package/src/infra/login-env.ts +48 -0
  101. package/src/infra/memory.ts +45 -0
  102. package/src/infra/ntfy.ts +40 -0
  103. package/src/infra/open-url.ts +42 -0
  104. package/src/infra/paths.ts +37 -2
  105. package/src/infra/role-mcp.ts +69 -0
  106. package/src/infra/slopalytics.ts +30 -0
  107. package/src/infra/store.ts +6 -1
  108. package/src/infra/supervisor.ts +107 -16
  109. package/src/services/admission.ts +133 -31
  110. package/src/services/backends.ts +4 -6
  111. package/src/services/budget.ts +26 -6
  112. package/src/services/capture.ts +1 -22
  113. package/src/services/catalog-service.ts +155 -254
  114. package/src/services/credentials.ts +15 -26
  115. package/src/services/daemon.ts +181 -0
  116. package/src/services/dispatch-service.ts +209 -17
  117. package/src/services/dispatches.ts +30 -2
  118. package/src/services/doctor-access.ts +8 -3
  119. package/src/services/doctor-backends.ts +1 -1
  120. package/src/services/doctor-checks.ts +47 -0
  121. package/src/services/doctor-docker.ts +221 -0
  122. package/src/services/doctor-role-mcp.ts +65 -0
  123. package/src/services/doctor.ts +72 -15
  124. package/src/services/end-push.ts +157 -0
  125. package/src/services/failover-rungs.ts +109 -0
  126. package/src/services/finalize.ts +24 -2
  127. package/src/services/gate-env.ts +217 -0
  128. package/src/services/gate-service.ts +231 -45
  129. package/src/services/global-install.ts +46 -13
  130. package/src/services/jev-service.ts +2 -4
  131. package/src/services/lane-edit.ts +154 -0
  132. package/src/services/lane-service.ts +291 -55
  133. package/src/services/milestone-check.ts +433 -0
  134. package/src/services/milestone-tree.ts +170 -0
  135. package/src/services/milestones.ts +167 -29
  136. package/src/services/notifier.ts +124 -4
  137. package/src/services/notify-service.ts +26 -0
  138. package/src/services/orchestrator-wait.ts +82 -0
  139. package/src/services/panel-setup.ts +116 -0
  140. package/src/services/pause.ts +161 -0
  141. package/src/services/peek.ts +79 -17
  142. package/src/services/plan-input.ts +151 -0
  143. package/src/services/ports.ts +60 -5
  144. package/src/services/preflight.ts +232 -24
  145. package/src/services/profile-service.ts +31 -3
  146. package/src/services/profile-store.ts +18 -6
  147. package/src/services/protocol.ts +123 -25
  148. package/src/services/provenance.ts +34 -89
  149. package/src/services/questions.ts +24 -0
  150. package/src/services/reconcile.ts +33 -1
  151. package/src/services/reentry.ts +7 -6
  152. package/src/services/role-access.ts +27 -0
  153. package/src/services/routing-service.ts +161 -42
  154. package/src/services/run-briefs.ts +477 -0
  155. package/src/services/run-client.ts +217 -0
  156. package/src/services/run-effects.ts +837 -0
  157. package/src/services/run-events-store.ts +174 -0
  158. package/src/services/run-evidence.ts +1 -1
  159. package/src/services/run-pin.ts +125 -0
  160. package/src/services/run-read.ts +221 -0
  161. package/src/services/run-report.ts +176 -0
  162. package/src/services/run-service.ts +204 -23
  163. package/src/services/run-store.ts +159 -18
  164. package/src/services/scorecard-metrics.ts +86 -0
  165. package/src/services/scorecard.ts +382 -0
  166. package/src/services/scratch.ts +60 -0
  167. package/src/services/sessions.ts +3 -1
  168. package/src/services/state.ts +21 -0
  169. package/src/services/summary.ts +76 -12
  170. package/src/services/tree-path.ts +27 -0
  171. package/src/services/verifier-brief.ts +23 -0
  172. package/src/services/verifier-step.ts +48 -0
  173. package/src/services/workspace-admission.ts +259 -0
  174. package/src/services/workspace-service.ts +259 -0
  175. package/src/services/workspace-store.ts +95 -0
  176. package/web/dist/assets/Brand-PKlUX5TE.js +1 -0
  177. package/web/dist/assets/Brand-PKlUX5TE.js.br +0 -0
  178. package/web/dist/assets/Brand-PKlUX5TE.js.gz +0 -0
  179. package/web/dist/assets/Modal-Dxc5so53.js +1 -0
  180. package/web/dist/assets/Modal-Dxc5so53.js.br +0 -0
  181. package/web/dist/assets/Modal-Dxc5so53.js.gz +0 -0
  182. package/web/dist/assets/Pressable-C8-T6Ed_.js +1 -0
  183. package/web/dist/assets/StatusChip-B5xfI_Mn.js +153 -0
  184. package/web/dist/assets/StatusChip-B5xfI_Mn.js.br +0 -0
  185. package/web/dist/assets/StatusChip-B5xfI_Mn.js.gz +0 -0
  186. package/web/dist/assets/_app-Ea5cpyKe.js +1 -0
  187. package/web/dist/assets/_app-Ea5cpyKe.js.br +0 -0
  188. package/web/dist/assets/_app-Ea5cpyKe.js.gz +0 -0
  189. package/web/dist/assets/_runId-pTG0fXVo.js +1 -0
  190. package/web/dist/assets/_runId-pTG0fXVo.js.br +0 -0
  191. package/web/dist/assets/_runId-pTG0fXVo.js.gz +0 -0
  192. package/web/dist/assets/drawer-Du3cdlok.js +1 -0
  193. package/web/dist/assets/drawer-Du3cdlok.js.br +0 -0
  194. package/web/dist/assets/drawer-Du3cdlok.js.gz +0 -0
  195. package/web/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  196. package/web/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  197. package/web/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  198. package/web/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  199. package/web/dist/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  200. package/web/dist/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  201. package/web/dist/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  202. package/web/dist/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  203. package/web/dist/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  204. package/web/dist/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  205. package/web/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  206. package/web/dist/assets/index-B6GiwDkh.js +11 -0
  207. package/web/dist/assets/index-B6GiwDkh.js.br +0 -0
  208. package/web/dist/assets/index-B6GiwDkh.js.gz +0 -0
  209. package/web/dist/assets/index-C5IbylvM.css +2 -0
  210. package/web/dist/assets/index-C5IbylvM.css.br +0 -0
  211. package/web/dist/assets/index-C5IbylvM.css.gz +0 -0
  212. package/web/dist/assets/label-DFSYBc62.js +1 -0
  213. package/web/dist/assets/label-DFSYBc62.js.br +0 -0
  214. package/web/dist/assets/label-DFSYBc62.js.gz +0 -0
  215. package/web/dist/assets/link-D8EcKZUt.js +1 -0
  216. package/web/dist/assets/link-D8EcKZUt.js.br +0 -0
  217. package/web/dist/assets/link-D8EcKZUt.js.gz +0 -0
  218. package/web/dist/assets/login-DaN5HPPW.js +1 -0
  219. package/web/dist/assets/login-DaN5HPPW.js.br +0 -0
  220. package/web/dist/assets/login-DaN5HPPW.js.gz +0 -0
  221. package/web/dist/assets/query-Cu--ccT3.js +1 -0
  222. package/web/dist/assets/questions-shoO9OVj.js +1 -0
  223. package/web/dist/assets/questions-shoO9OVj.js.br +0 -0
  224. package/web/dist/assets/questions-shoO9OVj.js.gz +0 -0
  225. package/web/dist/assets/react-query.gen-Bu2yV-qJ.js +12 -0
  226. package/web/dist/assets/react-query.gen-Bu2yV-qJ.js.br +0 -0
  227. package/web/dist/assets/react-query.gen-Bu2yV-qJ.js.gz +0 -0
  228. package/web/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  229. package/web/dist/assets/run-status-C0DRuV7U.js +1 -0
  230. package/web/dist/assets/runs-C3rg2zZc.js +1 -0
  231. package/web/dist/assets/runs-C3rg2zZc.js.br +0 -0
  232. package/web/dist/assets/runs-C3rg2zZc.js.gz +0 -0
  233. package/web/dist/assets/setup-5I4Vl9fR.js +1 -0
  234. package/web/dist/assets/setup-5I4Vl9fR.js.br +0 -0
  235. package/web/dist/assets/setup-5I4Vl9fR.js.gz +0 -0
  236. package/web/dist/assets/table-BOxXhqS4.js +1 -0
  237. package/web/dist/assets/table-BOxXhqS4.js.br +0 -0
  238. package/web/dist/assets/table-BOxXhqS4.js.gz +0 -0
  239. package/web/dist/assets/textfield-BzRFkxBF.js +1 -0
  240. package/web/dist/assets/textfield-BzRFkxBF.js.br +0 -0
  241. package/web/dist/assets/textfield-BzRFkxBF.js.gz +0 -0
  242. package/web/dist/assets/time--9kSQbbp.js +1 -0
  243. package/web/dist/assets/use-css-variable-CpnN9WtA.js +5 -0
  244. package/web/dist/assets/use-css-variable-CpnN9WtA.js.br +0 -0
  245. package/web/dist/assets/use-css-variable-CpnN9WtA.js.gz +0 -0
  246. package/web/dist/assets/useMutation-CVPKlR34.js +1 -0
  247. package/web/dist/assets/useMutation-CVPKlR34.js.br +0 -0
  248. package/web/dist/assets/useMutation-CVPKlR34.js.gz +0 -0
  249. package/web/dist/index.html +15 -0
  250. package/catalog/ATTRIBUTION.md +0 -36
  251. package/catalog/scores.json +0 -3202
  252. package/catalog/sources.json +0 -97
  253. package/src/adapters/antigravity/events.ts +0 -131
  254. package/src/adapters/antigravity/home.ts +0 -46
  255. package/src/adapters/antigravity/index.ts +0 -320
  256. package/src/adapters/antigravity/models.ts +0 -37
  257. package/src/adapters/grok/events.ts +0 -112
  258. package/src/adapters/grok/home.ts +0 -132
  259. package/src/adapters/grok/index.ts +0 -339
  260. package/src/adapters/grok/models.ts +0 -48
  261. package/src/domain/calibration.ts +0 -125
  262. package/src/domain/sources.ts +0 -144
  263. package/src/entry/mcp/dispatch-tools.ts +0 -52
  264. package/src/entry/mcp/lane-tools.ts +0 -84
  265. package/src/entry/mcp/protocol-tools.ts +0 -57
  266. package/src/entry/mcp/run-tools.ts +0 -148
  267. package/src/entry/mcp/setup-tools.ts +0 -108
  268. package/src/entry/tui/commands.ts +0 -563
  269. package/src/entry/tui/effects.ts +0 -381
  270. package/src/entry/tui/fixtures.ts +0 -637
  271. package/src/entry/tui/profile-edits.ts +0 -146
  272. package/src/entry/tui/profile-tree.ts +0 -429
  273. package/src/entry/tui/providers/app.tsx +0 -162
  274. package/src/entry/tui/providers/boundary.tsx +0 -57
  275. package/src/entry/tui/providers/data.tsx +0 -160
  276. package/src/entry/tui/providers/keymap.tsx +0 -166
  277. package/src/entry/tui/providers/root.tsx +0 -45
  278. package/src/entry/tui/providers/theme.tsx +0 -17
  279. package/src/entry/tui/providers/toast.tsx +0 -77
  280. package/src/entry/tui/run.tsx +0 -114
  281. package/src/entry/tui/state.ts +0 -373
  282. package/src/entry/tui/stories.ts +0 -114
  283. package/src/entry/tui/text.ts +0 -130
  284. package/src/entry/tui/theme.ts +0 -140
  285. package/src/entry/tui/views/app.tsx +0 -208
  286. package/src/entry/tui/views/dialogs.tsx +0 -41
  287. package/src/entry/tui/views/profile-actions.ts +0 -331
  288. package/src/entry/tui/views/profiles.tsx +0 -520
  289. package/src/entry/tui/views/runs.tsx +0 -573
  290. package/src/entry/tui/views/save-dialog.tsx +0 -340
  291. package/src/entry/tui/views/status.tsx +0 -209
  292. package/src/entry/tui/widgets/chrome.tsx +0 -114
  293. package/src/entry/tui/widgets/dialog-confirm.tsx +0 -58
  294. package/src/entry/tui/widgets/dialog-prompt.tsx +0 -52
  295. package/src/entry/tui/widgets/dialog-select.tsx +0 -212
  296. package/src/entry/tui/widgets/dialog.tsx +0 -68
  297. package/src/entry/tui/widgets/line.tsx +0 -92
  298. package/src/entry/tui/widgets/list.tsx +0 -197
  299. package/src/entry/tui/widgets/spinner.tsx +0 -49
  300. package/src/entry/tui/widgets/toast.tsx +0 -62
  301. package/src/infra/sources/arena.ts +0 -87
  302. package/src/infra/sources/artificial-analysis.ts +0 -112
  303. package/src/infra/sources/cache.ts +0 -124
  304. package/src/infra/sources/csv.ts +0 -38
  305. package/src/infra/sources/epoch.ts +0 -82
  306. package/src/infra/sources/http.ts +0 -75
  307. package/src/infra/sources/litellm.ts +0 -58
  308. package/src/infra/sources/models-dev.ts +0 -59
  309. package/src/infra/sources/openrouter-endpoints.ts +0 -52
  310. package/src/infra/sources/openrouter-models.ts +0 -60
  311. package/src/infra/sources/rows.ts +0 -38
  312. package/src/infra/sources/vectara.ts +0 -69
  313. package/src/infra/sources/zip.ts +0 -48
  314. package/src/services/catalog-refresh.ts +0 -201
  315. package/src/services/doctor-sources.ts +0 -76
  316. package/src/services/runs-page.ts +0 -255
  317. package/src/services/source-derive.ts +0 -374
  318. package/src/services/source-sync.ts +0 -305
  319. package/src/services/standins.ts +0 -204
  320. package/src/services/treat-likes.ts +0 -97
@@ -1,13 +1,6 @@
1
1
  {
2
2
  "schema": 1,
3
- "version": "2026-10-01",
4
- "sources": {
5
- "claude": "https://platform.claude.com/docs/en/models/overview (2026-09-25); efforts https://platform.claude.com/docs/en/build-with-claude/effort; prices https://platform.claude.com/docs/en/about-claude/pricing",
6
- "codex": "codex debug models --bundled, Codex CLI 0.157.0 (2026-09-25), gpt-6.1-sol from Codex CLI 0.159.2 (2026-10-01); prices https://developers.openai.com/api/docs/pricing; plan weights https://learn.chatgpt.com/docs/pricing",
7
- "opencode": "opencode models <provider> --verbose on 1.18.32 and the v2 model.list (2026-09-25); https://opencode.ai/docs/zen, https://opencode.ai/docs/go",
8
- "cursor": "cursor-agent models on 2026.09.28-64d2043 (research 2026-09-29 §2.4; ids to confirm in the live kit, docs/dev/live-verification.md §11); prices https://openrouter.ai/api/v1/models and https://models.dev/api.json (2026-09-28)",
9
- "antigravity": "agy 1.2.13 docs (models, and slugs such as gemini-3.8-flash-high; research 2026-09-29 §4.5) and the Gemini API's thinking levels; ids and efforts to confirm in the live kit, docs/dev/live-verification.md §13"
10
- },
3
+ "version": "2026-10-21",
11
4
  "backends": {
12
5
  "codex": {
13
6
  "imageGen": {
@@ -21,22 +14,11 @@
21
14
  {
22
15
  "id": "gpt-6-astra",
23
16
  "name": "GPT-6 Astra",
24
- "vendor": "openai",
25
- "releaseDate": "2026-09-04",
26
17
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
27
- "price": { "input": 10, "cached": 1, "output": 50 },
28
18
  "planWeight": 60,
29
19
  "on": {
30
- "codex": {
31
- "id": "gpt-6-astra",
32
- "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"],
33
- "context": 272000
34
- },
35
- "opencode": {
36
- "id": "opencode/gpt-6-astra",
37
- "efforts": ["low", "medium", "high", "xhigh", "max"],
38
- "context": 1050000
39
- }
20
+ "codex": { "id": "gpt-6-astra" },
21
+ "opencode": { "id": "opencode/gpt-6-astra" }
40
22
  },
41
23
  "notes": {
42
24
  "ultra": "maximum reasoning with automatic task delegation to parallel subagents; never in a default ladder"
@@ -45,16 +27,9 @@
45
27
  {
46
28
  "id": "gpt-6.1-sol",
47
29
  "name": "GPT-6.1 Sol",
48
- "vendor": "openai",
49
- "releaseDate": "2026-09-29",
50
30
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
51
- "price": { "input": 2, "cached": 0.1, "output": 10 },
52
31
  "on": {
53
- "codex": {
54
- "id": "gpt-6.1-sol",
55
- "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"],
56
- "context": 272000
57
- }
32
+ "codex": { "id": "gpt-6.1-sol" }
58
33
  },
59
34
  "notes": {
60
35
  "ultra": "maximum reasoning with automatic task delegation to parallel subagents; never in a default ladder"
@@ -63,23 +38,12 @@
63
38
  {
64
39
  "id": "gpt-6-sol",
65
40
  "name": "GPT-6 Sol",
66
- "vendor": "openai",
67
- "releaseDate": "2026-09-22",
68
41
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
69
- "price": { "input": 2, "cached": 0.2, "output": 10 },
70
42
  "planWeight": 20,
71
43
  "on": {
72
- "codex": {
73
- "id": "gpt-6-sol",
74
- "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"],
75
- "context": 272000
76
- },
77
- "opencode": {
78
- "id": "opencode/gpt-6-sol",
79
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
80
- "context": 1050000
81
- },
82
- "cursor": { "id": "gpt-6-sol", "efforts": ["low", "high", "xhigh"], "context": 200000 }
44
+ "codex": { "id": "gpt-6-sol" },
45
+ "opencode": { "id": "opencode/gpt-6-sol" },
46
+ "cursor": { "id": "gpt-6-sol" }
83
47
  },
84
48
  "notes": {
85
49
  "ultra": "maximum reasoning with automatic task delegation to parallel subagents; never in a default ladder"
@@ -88,123 +52,63 @@
88
52
  {
89
53
  "id": "gpt-6-luna",
90
54
  "name": "GPT-6 Luna",
91
- "vendor": "openai",
92
- "releaseDate": "2026-09-22",
93
55
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
94
- "price": { "input": 0.1, "cached": 0.01, "output": 0.5 },
95
56
  "planWeight": 1,
96
57
  "on": {
97
- "codex": {
98
- "id": "gpt-6-luna",
99
- "efforts": ["low", "medium", "high", "xhigh", "max"],
100
- "context": 272000
101
- },
102
- "opencode": {
103
- "id": "opencode/gpt-6-luna",
104
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
105
- "context": 1050000
106
- },
107
- "opencode-go": {
108
- "id": "opencode-go/gpt-6-luna",
109
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
110
- "context": 1050000
111
- },
112
- "cursor": { "id": "gpt-6-luna", "efforts": ["high"], "context": 200000 }
58
+ "codex": { "id": "gpt-6-luna" },
59
+ "opencode": { "id": "opencode/gpt-6-luna" },
60
+ "opencode-go": { "id": "opencode-go/gpt-6-luna" },
61
+ "cursor": { "id": "gpt-6-luna" }
113
62
  }
114
63
  },
115
64
  {
116
65
  "id": "gpt-5.6-sol",
117
66
  "name": "GPT-5.6 Sol",
118
- "vendor": "openai",
119
- "releaseDate": "2026-07-09",
120
- "status": "legacy",
121
67
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
122
- "price": { "input": 4, "cached": 0.4, "output": 20 },
123
68
  "planWeight": 30,
124
69
  "on": {
125
- "codex": {
126
- "id": "gpt-5.6-sol",
127
- "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"],
128
- "context": 272000
129
- },
130
- "opencode": {
131
- "id": "opencode/gpt-5.6-sol",
132
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
133
- "context": 1050000
134
- }
70
+ "codex": { "id": "gpt-5.6-sol" },
71
+ "opencode": { "id": "opencode/gpt-5.6-sol" }
135
72
  },
136
- "notes": { "upgrade": "Codex offers gpt-6-sol as its upgrade" }
73
+ "notes": {
74
+ "upgrade": "Codex offers gpt-6-sol as its upgrade"
75
+ }
137
76
  },
138
77
  {
139
78
  "id": "gpt-5.6-terra",
140
79
  "name": "GPT-5.6 Terra",
141
- "vendor": "openai",
142
- "releaseDate": "2026-07-09",
143
- "status": "legacy",
144
80
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
145
- "price": { "input": 2, "cached": 0.2, "output": 12 },
146
81
  "planWeight": 15,
147
82
  "on": {
148
- "codex": {
149
- "id": "gpt-5.6-terra",
150
- "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"],
151
- "context": 272000
152
- },
153
- "opencode": {
154
- "id": "opencode/gpt-5.6-terra",
155
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
156
- "context": 1050000
157
- }
83
+ "codex": { "id": "gpt-5.6-terra" },
84
+ "opencode": { "id": "opencode/gpt-5.6-terra" }
158
85
  },
159
- "notes": { "upgrade": "Codex offers gpt-6-sol as its upgrade" }
86
+ "notes": {
87
+ "upgrade": "Codex offers gpt-6-sol as its upgrade"
88
+ }
160
89
  },
161
90
  {
162
91
  "id": "gpt-5.6-luna",
163
92
  "name": "GPT-5.6 Luna",
164
- "vendor": "openai",
165
- "releaseDate": "2026-07-09",
166
- "status": "legacy",
167
93
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
168
- "price": { "input": 0.2, "cached": 0.02, "output": 1.2 },
169
94
  "planWeight": 1.5,
170
95
  "on": {
171
- "codex": {
172
- "id": "gpt-5.6-luna",
173
- "efforts": ["low", "medium", "high", "xhigh", "max"],
174
- "context": 272000
175
- },
176
- "opencode": {
177
- "id": "opencode/gpt-5.6-luna",
178
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
179
- "context": 1050000
180
- },
181
- "opencode-go": {
182
- "id": "opencode-go/gpt-5.6-luna",
183
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
184
- "context": 1050000
185
- }
96
+ "codex": { "id": "gpt-5.6-luna" },
97
+ "opencode": { "id": "opencode/gpt-5.6-luna" },
98
+ "opencode-go": { "id": "opencode-go/gpt-5.6-luna" }
186
99
  },
187
- "notes": { "upgrade": "Codex offers gpt-6-luna as its upgrade" }
100
+ "notes": {
101
+ "upgrade": "Codex offers gpt-6-luna as its upgrade"
102
+ }
188
103
  },
189
104
  {
190
105
  "id": "claude-fable-5-1",
191
106
  "name": "Claude Fable 5.1",
192
- "vendor": "anthropic",
193
- "releaseDate": "2026-09-01",
194
107
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
195
- "price": { "input": 10, "cached": 0.25, "output": 50 },
196
108
  "meteredOnPlan": true,
197
109
  "on": {
198
- "claude-code": {
199
- "id": "claude-fable-5-1",
200
- "efforts": ["low", "medium", "high", "xhigh", "max"],
201
- "context": 1000000
202
- },
203
- "opencode": {
204
- "id": "opencode/claude-fable-5-1",
205
- "efforts": ["low", "medium", "high", "xhigh", "max"],
206
- "context": 1000000
207
- }
110
+ "claude-code": { "id": "claude-fable-5-1" },
111
+ "opencode": { "id": "opencode/claude-fable-5-1" }
208
112
  },
209
113
  "notes": {
210
114
  "plan": "Pro and Team Standard pay usage credits for Fable; Max includes it up to half the weekly limit"
@@ -213,196 +117,109 @@
213
117
  {
214
118
  "id": "claude-opus-5-5",
215
119
  "name": "Claude Opus 5.5",
216
- "vendor": "anthropic",
217
- "releaseDate": "2026-09-22",
218
120
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
219
- "price": { "input": 4, "cached": 0.2, "output": 20 },
220
121
  "on": {
221
- "claude-code": {
222
- "id": "claude-opus-5-5",
223
- "efforts": ["low", "medium", "high", "xhigh", "max"],
224
- "context": 1000000
225
- },
226
- "opencode": {
227
- "id": "opencode/claude-opus-5-5",
228
- "efforts": ["low", "medium", "high", "xhigh", "max"],
229
- "context": 1000000
230
- },
231
- "cursor": {
232
- "id": "claude-opus-5-5",
233
- "efforts": ["low", "medium", "high", "xhigh", "max"],
234
- "context": 200000
235
- }
122
+ "claude-code": { "id": "claude-opus-5-5" },
123
+ "opencode": { "id": "opencode/claude-opus-5-5" },
124
+ "cursor": { "id": "claude-opus-5-5" }
236
125
  },
237
- "notes": { "effort": "the API default effort is medium" }
126
+ "notes": {
127
+ "effort": "the API default effort is medium"
128
+ }
238
129
  },
239
130
  {
240
131
  "id": "claude-sonnet-5-5",
241
132
  "name": "Claude Sonnet 5.5",
242
- "vendor": "anthropic",
243
- "releaseDate": "2026-09-28",
244
133
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
245
- "price": { "input": 2, "cached": 0.2, "output": 10 },
246
134
  "on": {
247
- "claude-code": {
248
- "id": "claude-sonnet-5-5",
249
- "efforts": ["low", "medium", "high", "xhigh", "max"],
250
- "context": 1000000
251
- },
252
- "opencode": {
253
- "id": "opencode/claude-sonnet-5-5",
254
- "efforts": ["low", "medium", "high", "xhigh", "max"],
255
- "context": 1000000
256
- }
135
+ "claude-code": { "id": "claude-sonnet-5-5" },
136
+ "opencode": { "id": "opencode/claude-sonnet-5-5" }
257
137
  }
258
138
  },
259
139
  {
260
140
  "id": "claude-sonnet-5",
261
141
  "name": "Claude Sonnet 5",
262
- "vendor": "anthropic",
263
- "releaseDate": "2026-06-29",
264
142
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
265
- "price": { "input": 2, "cached": 0.2, "output": 10 },
266
143
  "on": {
267
- "claude-code": {
268
- "id": "claude-sonnet-5",
269
- "efforts": ["low", "medium", "high", "xhigh", "max"],
270
- "context": 1000000
271
- },
272
- "opencode": {
273
- "id": "opencode/claude-sonnet-5",
274
- "efforts": ["low", "medium", "high", "xhigh", "max"],
275
- "context": 1000000
276
- }
144
+ "claude-code": { "id": "claude-sonnet-5" },
145
+ "opencode": { "id": "opencode/claude-sonnet-5" }
277
146
  }
278
147
  },
279
148
  {
280
- "id": "claude-haiku-4-5",
149
+ "id": "claude-4-5-haiku",
281
150
  "name": "Claude Haiku 4.5",
282
- "vendor": "anthropic",
283
- "releaseDate": "2025-10-15",
284
151
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
285
- "price": { "input": 1, "cached": 0.1, "output": 5 },
286
152
  "on": {
287
- "claude-code": { "id": "claude-haiku-4-5-20251001", "efforts": [], "context": 200000 },
288
- "opencode": { "id": "opencode/claude-haiku-4-5", "efforts": ["high", "max"], "context": 200000 }
153
+ "claude-code": { "id": "claude-haiku-4-5-20251001" },
154
+ "opencode": { "id": "opencode/claude-haiku-4-5" }
289
155
  },
290
- "notes": { "effort": "no effort parameter in Claude Code: its only rung there is #default" }
156
+ "notes": {
157
+ "effort": "no effort parameter in Claude Code: its only rung there is #default"
158
+ }
291
159
  },
292
160
  {
293
161
  "id": "grok-4-7",
294
162
  "name": "Grok 4.7",
295
- "vendor": "xai",
296
- "releaseDate": "2026-09-21",
297
163
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
298
- "price": { "input": 2, "cached": 0.5, "output": 6 },
299
164
  "on": {
300
- "grok": { "id": "grok-4.7", "efforts": ["low", "medium", "high", "xhigh"], "context": 500000 },
301
- "cursor": { "id": "grok-4.7", "efforts": ["low", "medium", "high", "xhigh"], "context": 200000 }
165
+ "cursor": { "id": "grok-4.7" }
302
166
  },
303
167
  "notes": {
304
- "pool": "a Cursor Model in Cursor: billed from Cursor's own pool (research §2.4)",
305
- "effort": "grok lists no efforts: Grok Build's effort names, low to xhigh (research §3.4, §5; live-verification §12)"
168
+ "pool": "a Cursor Model in Cursor: billed from Cursor's own pool (research §2.4)"
306
169
  }
307
170
  },
308
171
  {
309
172
  "id": "grok-4-6",
310
173
  "name": "Grok 4.6",
311
- "vendor": "xai",
312
- "releaseDate": "2026-08-12",
313
174
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
314
- "price": { "input": 2, "cached": 0.5, "output": 6 },
315
175
  "on": {
316
- "grok": { "id": "grok-4.6", "efforts": ["low", "medium", "high", "xhigh"], "context": 500000 },
317
- "cursor": {
318
- "id": "cursor-grok-4.6",
319
- "efforts": ["low", "medium", "high", "xhigh"],
320
- "context": 200000
321
- }
176
+ "cursor": { "id": "cursor-grok-4.6" }
322
177
  },
323
178
  "notes": {
324
- "pool": "a Cursor Model in Cursor: billed from Cursor's own pool (research §2.4)",
325
- "effort": "grok lists no efforts: Grok Build's effort names, low to xhigh (research §3.4, §5; live-verification §12)"
179
+ "pool": "a Cursor Model in Cursor: billed from Cursor's own pool (research §2.4)"
326
180
  }
327
181
  },
328
182
  {
329
183
  "id": "grok-4-5",
330
184
  "name": "Grok 4.5",
331
- "vendor": "xai",
332
- "releaseDate": "2026-07-08",
333
185
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
334
- "price": { "input": 2, "cached": 0.3, "output": 6 },
335
186
  "on": {
336
- "grok": { "id": "grok-4.5", "efforts": ["low", "medium", "high", "xhigh"], "context": 500000 },
337
- "cursor": { "id": "cursor-grok-4.5", "efforts": ["low", "medium", "high"], "context": 200000 }
187
+ "cursor": { "id": "cursor-grok-4.5" }
338
188
  },
339
189
  "notes": {
340
- "pool": "a Cursor Model in Cursor: billed from Cursor's own pool (research §2.4)",
341
- "effort": "grok lists no efforts: Grok Build's effort names, low to xhigh (research §3.4, §5; live-verification §12)"
342
- }
343
- },
344
- {
345
- "id": "composer-2-5",
346
- "name": "Composer 2.5",
347
- "vendor": "cursor",
348
- "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
349
- "price": { "input": 2, "cached": 0.5, "output": 6 },
350
- "on": { "cursor": { "id": "composer-2.5", "efforts": [], "context": 200000 } },
351
- "notes": {
352
- "price": "no keyless source prices Composer (research §5); Grok 4.7's, the same Cursor pool, stands in",
353
- "effort": "no effort: its only rung is #default"
190
+ "pool": "a Cursor Model in Cursor: billed from Cursor's own pool (research §2.4)"
354
191
  }
355
192
  },
356
193
  {
357
194
  "id": "gemini-3-8-flash",
358
195
  "name": "Gemini 3.8 Flash",
359
- "vendor": "google",
360
- "releaseDate": "2026-09-02",
361
196
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
362
- "price": { "input": 0.75, "cached": 0.075, "output": 3.75 },
363
197
  "on": {
364
- "cursor": { "id": "gemini-3.8-flash", "efforts": ["low", "medium", "high"], "context": 200000 },
365
- "antigravity": { "id": "gemini-3.8-flash", "efforts": ["low", "medium", "high"], "context": 1048576 }
198
+ "cursor": { "id": "gemini-3.8-flash" }
366
199
  }
367
200
  },
368
201
  {
369
202
  "id": "gemini-3-7-flash",
370
203
  "name": "Gemini 3.7 Flash",
371
- "vendor": "google",
372
- "releaseDate": "2026-08-13",
373
204
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
374
- "price": { "input": 0.75, "cached": 0.075, "output": 3.75 },
375
205
  "on": {
376
- "cursor": { "id": "gemini-3.7-flash", "efforts": ["low", "medium", "high"], "context": 200000 },
377
- "antigravity": { "id": "gemini-3.7-flash", "efforts": ["low", "medium", "high"], "context": 1048576 }
206
+ "cursor": { "id": "gemini-3.7-flash" }
378
207
  }
379
208
  },
380
209
  {
381
210
  "id": "gemini-3-6-flash",
382
211
  "name": "Gemini 3.6 Flash",
383
- "vendor": "google",
384
- "releaseDate": "2026-07-21",
385
212
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
386
- "price": { "input": 0.75, "cached": 0.075, "output": 3.75 },
387
213
  "on": {
388
- "cursor": {
389
- "id": "gemini-3.6-flash",
390
- "efforts": ["minimal", "low", "medium", "high"],
391
- "context": 200000
392
- },
393
- "antigravity": { "id": "gemini-3.6-flash", "efforts": ["low", "medium", "high"], "context": 1048576 }
214
+ "cursor": { "id": "gemini-3.6-flash" }
394
215
  }
395
216
  },
396
217
  {
397
- "id": "gemini-3-1-pro",
218
+ "id": "gemini-3-1-pro-preview",
398
219
  "name": "Gemini 3.1 Pro",
399
- "vendor": "google",
400
- "releaseDate": "2026-02-19",
401
220
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
402
- "price": { "input": 2, "cached": 0.2, "output": 12 },
403
221
  "on": {
404
- "cursor": { "id": "gemini-3.1-pro", "efforts": [], "context": 200000 },
405
- "antigravity": { "id": "gemini-3.1-pro", "efforts": ["low", "high"], "context": 1048576 }
222
+ "cursor": { "id": "gemini-3.1-pro" }
406
223
  }
407
224
  }
408
225
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catherd-cli",
3
- "version": "1.4.0",
3
+ "version": "2.0.0-beta.20261022113309",
4
4
  "description": "Herds coding agents: autopilot builds from your own Claude Code session.",
5
5
  "keywords": [
6
6
  "autopilot",
@@ -12,7 +12,7 @@
12
12
  "mcp",
13
13
  "opencode",
14
14
  "orchestration",
15
- "tui"
15
+ "web-panel"
16
16
  ],
17
17
  "homepage": "https://github.com/47vigen/catherd#readme",
18
18
  "bugs": {
@@ -29,6 +29,7 @@
29
29
  },
30
30
  "files": [
31
31
  "src",
32
+ "web/dist",
32
33
  "catalog",
33
34
  "plugin",
34
35
  "THIRD_PARTY_NOTICES.md"
@@ -39,17 +40,15 @@
39
40
  "lint": "oxlint --deny-warnings src test",
40
41
  "format": "oxfmt",
41
42
  "format:check": "oxfmt --check",
42
- "tui-frames": "CATHERD_WRITE_FRAMES=1 bun test test/entry/tui/frames.test.tsx",
43
+ "panel:openapi": "bun scripts/panel-openapi.ts",
44
+ "panel:build": "cd web && bun install --frozen-lockfile && bun run build",
45
+ "prepack": "bun run panel:build",
43
46
  "version-packages": "changeset version && bun scripts/stamp-plugin-version.mjs",
44
47
  "release:publish": "npm view catherd-cli@$npm_package_version version >/dev/null 2>&1 || bun test/pack-smoke.ts && changeset publish"
45
48
  },
46
49
  "dependencies": {
47
50
  "@modelcontextprotocol/sdk": "^1.30.1",
48
- "@opentui/core": "0.5.12",
49
- "@opentui/keymap": "0.5.12",
50
- "@opentui/react": "0.5.12",
51
51
  "citty": "^0.2.2",
52
- "react": "^19.3.0",
53
52
  "zod": "^4.6.5"
54
53
  },
55
54
  "devDependencies": {
@@ -57,7 +56,6 @@
57
56
  "@commitlint/cli": "^21.2.3",
58
57
  "@commitlint/config-conventional": "^21.2.3",
59
58
  "@types/bun": "^1.4.2",
60
- "@types/react": "^19.3.0",
61
59
  "lefthook": "^2.1.14",
62
60
  "oxfmt": "^0.70.0",
63
61
  "oxlint": "^1.85.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catherd",
3
- "version": "1.4.0",
3
+ "version": "2.0.0-beta.20261022113309",
4
4
  "description": "Herds coding agents: Claude plans and verifies, Codex, opencode or headless Claude Code workers write the code, and Jev picks the model and effort for each piece.",
5
5
  "author": {
6
6
  "name": "47vigen",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catherd",
3
- "version": "1.4.0",
3
+ "version": "2.0.0-beta.20261022113309",
4
4
  "description": "Shared catherd orchestration, profiles and durable role results through the versioned MCP core.",
5
5
  "author": { "name": "47vigen", "url": "https://github.com/47vigen" },
6
6
  "homepage": "https://github.com/47vigen/catherd",
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
  # catherd's MCP launcher (spec 1.1 §12): the plugin's .mcp.json runs it. The release stamps VERSION
3
3
  # (scripts/stamp-plugin-version.mjs), so the plugin always starts the server it was released with.
4
- VERSION="1.4.0"
4
+ VERSION="2.0.0-beta.20261022113309"
5
5
 
6
6
  # a global catherd at this version (catherd init installs one): start it, no resolve at all
7
7
  if command -v catherd >/dev/null 2>&1 && [ "$(catherd --version 2>/dev/null)" = "$VERSION" ]; then
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Orchestrate a task with catherd — Claude plans and verifies, Codex, opencode or headless Claude Code workers write the code
2
+ description: Orchestrate a task with catherd — a background daemon plans, dispatches, reviews and verifies it, and headless roles write the code
3
3
  argument-hint: "<task, or nothing to resume the latest run>"
4
4
  ---
5
5
 
@@ -7,4 +7,4 @@ Use the `catherd` skill for this, and follow it exactly.
7
7
 
8
8
  Task: $ARGUMENTS
9
9
 
10
- If the task is empty, resume: call `status()`, tell the user which run it names, call `peek(run)` once, and continue that run from its `Protocol next` step.
10
+ If the task is empty, resume: call `status()`, tell the user which run it names and what it waits on, and relay any parked question to them: their answer goes in with `answer(run, unit, answer)`. A finished run is read with `result(run)`.