catherd-cli 1.5.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 (275) hide show
  1. package/README.md +164 -208
  2. package/THIRD_PARTY_NOTICES.md +217 -35
  3. package/catalog/jev.json +27 -1
  4. package/catalog/models.json +56 -247
  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 -421
  11. package/plugin/skills/catherd-setup/SKILL.md +20 -19
  12. package/src/adapters/all.ts +0 -4
  13. package/src/adapters/backend.ts +1 -2
  14. package/src/adapters/cursor/home.ts +1 -1
  15. package/src/adapters/cursor/index.ts +4 -4
  16. package/src/cli.ts +22 -27
  17. package/src/domain/bars.ts +33 -107
  18. package/src/domain/blocked.ts +72 -0
  19. package/src/domain/branch.ts +51 -0
  20. package/src/domain/brief.ts +21 -6
  21. package/src/domain/catalog.ts +69 -324
  22. package/src/domain/cost.ts +15 -30
  23. package/src/domain/errors.ts +2 -2
  24. package/src/domain/fail-lines.ts +26 -0
  25. package/src/domain/failover.ts +37 -87
  26. package/src/domain/findings.ts +47 -0
  27. package/src/domain/gate-brief.ts +1 -0
  28. package/src/domain/ids.ts +13 -2
  29. package/src/domain/jev.ts +47 -2
  30. package/src/domain/judge.ts +124 -0
  31. package/src/domain/lane.ts +22 -3
  32. package/src/domain/milestone-memory.ts +53 -0
  33. package/src/domain/notice.ts +25 -8
  34. package/src/domain/notify.ts +32 -0
  35. package/src/domain/plan-doc.ts +198 -0
  36. package/src/domain/plan-lint.ts +141 -0
  37. package/src/domain/profile-rules.ts +101 -160
  38. package/src/domain/profile.ts +116 -63
  39. package/src/domain/record.ts +53 -2
  40. package/src/domain/role-prompts.ts +131 -45
  41. package/src/domain/role-scope.ts +4 -34
  42. package/src/domain/role-tools.ts +2 -2
  43. package/src/domain/roles.ts +2 -0
  44. package/src/domain/route.ts +17 -0
  45. package/src/domain/rules.ts +33 -0
  46. package/src/domain/run-events.ts +298 -0
  47. package/src/domain/run-machine.ts +668 -0
  48. package/src/domain/run-state.ts +1310 -0
  49. package/src/domain/scorecard.ts +197 -0
  50. package/src/domain/select.ts +151 -146
  51. package/src/domain/slopalytics.ts +72 -0
  52. package/src/entry/answer-command.ts +39 -0
  53. package/src/entry/catalog-command.ts +25 -174
  54. package/src/entry/check-bin.ts +17 -0
  55. package/src/entry/cli-kit.ts +1 -1
  56. package/src/entry/daemon-bin.ts +22 -0
  57. package/src/entry/glyphs.ts +15 -2
  58. package/src/entry/init-command.ts +18 -68
  59. package/src/entry/knowledge-command.ts +45 -4
  60. package/src/entry/lock-command.ts +6 -7
  61. package/src/entry/mcp/role-server.ts +18 -0
  62. package/src/entry/mcp/server.ts +13 -40
  63. package/src/entry/mcp/session-tools.ts +149 -0
  64. package/src/entry/panel/openapi.ts +189 -0
  65. package/src/entry/panel/server.ts +410 -0
  66. package/src/entry/panel-command.ts +68 -0
  67. package/src/entry/profile-command.ts +10 -14
  68. package/src/entry/role-cli-command.ts +47 -3
  69. package/src/entry/runs-command.ts +3 -19
  70. package/src/entry/scorecard-command.ts +187 -0
  71. package/src/entry/supervise-bin.ts +1 -1
  72. package/src/infra/env.ts +0 -2
  73. package/src/infra/git.ts +64 -0
  74. package/src/infra/heavy-lock.ts +45 -7
  75. package/src/infra/launch.ts +63 -7
  76. package/src/infra/memory.ts +45 -0
  77. package/src/infra/ntfy.ts +40 -0
  78. package/src/infra/open-url.ts +42 -0
  79. package/src/infra/paths.ts +2 -2
  80. package/src/infra/slopalytics.ts +30 -0
  81. package/src/infra/store.ts +6 -1
  82. package/src/services/admission.ts +24 -9
  83. package/src/services/backends.ts +4 -6
  84. package/src/services/capture.ts +1 -22
  85. package/src/services/catalog-service.ts +155 -262
  86. package/src/services/credentials.ts +4 -20
  87. package/src/services/daemon.ts +181 -0
  88. package/src/services/dispatch-service.ts +5 -1
  89. package/src/services/doctor-backends.ts +1 -1
  90. package/src/services/doctor-checks.ts +47 -0
  91. package/src/services/doctor.ts +4 -9
  92. package/src/services/failover-rungs.ts +109 -0
  93. package/src/services/finalize.ts +12 -0
  94. package/src/services/gate-env.ts +1 -2
  95. package/src/services/gate-service.ts +21 -6
  96. package/src/services/jev-service.ts +2 -4
  97. package/src/services/lane-service.ts +34 -3
  98. package/src/services/milestone-check.ts +433 -0
  99. package/src/services/milestone-tree.ts +170 -0
  100. package/src/services/milestones.ts +35 -8
  101. package/src/services/notifier.ts +69 -2
  102. package/src/services/notify-service.ts +26 -0
  103. package/src/services/panel-setup.ts +116 -0
  104. package/src/services/plan-input.ts +151 -0
  105. package/src/services/ports.ts +30 -4
  106. package/src/services/preflight.ts +82 -8
  107. package/src/services/profile-service.ts +30 -3
  108. package/src/services/profile-store.ts +8 -3
  109. package/src/services/protocol.ts +4 -0
  110. package/src/services/provenance.ts +31 -90
  111. package/src/services/questions.ts +9 -0
  112. package/src/services/reconcile.ts +11 -0
  113. package/src/services/routing-service.ts +26 -15
  114. package/src/services/run-briefs.ts +477 -0
  115. package/src/services/run-client.ts +217 -0
  116. package/src/services/run-effects.ts +837 -0
  117. package/src/services/run-events-store.ts +174 -0
  118. package/src/services/run-evidence.ts +1 -1
  119. package/src/services/run-read.ts +221 -0
  120. package/src/services/run-report.ts +176 -0
  121. package/src/services/run-service.ts +55 -6
  122. package/src/services/run-store.ts +54 -7
  123. package/src/services/scorecard-metrics.ts +86 -0
  124. package/src/services/scorecard.ts +382 -0
  125. package/src/services/summary.ts +27 -3
  126. package/src/services/tree-path.ts +27 -0
  127. package/src/services/workspace-admission.ts +5 -13
  128. package/src/services/workspace-service.ts +5 -0
  129. package/web/dist/assets/Brand-PKlUX5TE.js +1 -0
  130. package/web/dist/assets/Brand-PKlUX5TE.js.br +0 -0
  131. package/web/dist/assets/Brand-PKlUX5TE.js.gz +0 -0
  132. package/web/dist/assets/Modal-Dxc5so53.js +1 -0
  133. package/web/dist/assets/Modal-Dxc5so53.js.br +0 -0
  134. package/web/dist/assets/Modal-Dxc5so53.js.gz +0 -0
  135. package/web/dist/assets/Pressable-C8-T6Ed_.js +1 -0
  136. package/web/dist/assets/StatusChip-B5xfI_Mn.js +153 -0
  137. package/web/dist/assets/StatusChip-B5xfI_Mn.js.br +0 -0
  138. package/web/dist/assets/StatusChip-B5xfI_Mn.js.gz +0 -0
  139. package/web/dist/assets/_app-Ea5cpyKe.js +1 -0
  140. package/web/dist/assets/_app-Ea5cpyKe.js.br +0 -0
  141. package/web/dist/assets/_app-Ea5cpyKe.js.gz +0 -0
  142. package/web/dist/assets/_runId-pTG0fXVo.js +1 -0
  143. package/web/dist/assets/_runId-pTG0fXVo.js.br +0 -0
  144. package/web/dist/assets/_runId-pTG0fXVo.js.gz +0 -0
  145. package/web/dist/assets/drawer-Du3cdlok.js +1 -0
  146. package/web/dist/assets/drawer-Du3cdlok.js.br +0 -0
  147. package/web/dist/assets/drawer-Du3cdlok.js.gz +0 -0
  148. package/web/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  149. package/web/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  150. package/web/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  151. package/web/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  152. package/web/dist/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  153. package/web/dist/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  154. package/web/dist/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  155. package/web/dist/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  156. package/web/dist/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  157. package/web/dist/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  158. package/web/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  159. package/web/dist/assets/index-B6GiwDkh.js +11 -0
  160. package/web/dist/assets/index-B6GiwDkh.js.br +0 -0
  161. package/web/dist/assets/index-B6GiwDkh.js.gz +0 -0
  162. package/web/dist/assets/index-C5IbylvM.css +2 -0
  163. package/web/dist/assets/index-C5IbylvM.css.br +0 -0
  164. package/web/dist/assets/index-C5IbylvM.css.gz +0 -0
  165. package/web/dist/assets/label-DFSYBc62.js +1 -0
  166. package/web/dist/assets/label-DFSYBc62.js.br +0 -0
  167. package/web/dist/assets/label-DFSYBc62.js.gz +0 -0
  168. package/web/dist/assets/link-D8EcKZUt.js +1 -0
  169. package/web/dist/assets/link-D8EcKZUt.js.br +0 -0
  170. package/web/dist/assets/link-D8EcKZUt.js.gz +0 -0
  171. package/web/dist/assets/login-DaN5HPPW.js +1 -0
  172. package/web/dist/assets/login-DaN5HPPW.js.br +0 -0
  173. package/web/dist/assets/login-DaN5HPPW.js.gz +0 -0
  174. package/web/dist/assets/query-Cu--ccT3.js +1 -0
  175. package/web/dist/assets/questions-shoO9OVj.js +1 -0
  176. package/web/dist/assets/questions-shoO9OVj.js.br +0 -0
  177. package/web/dist/assets/questions-shoO9OVj.js.gz +0 -0
  178. package/web/dist/assets/react-query.gen-Bu2yV-qJ.js +12 -0
  179. package/web/dist/assets/react-query.gen-Bu2yV-qJ.js.br +0 -0
  180. package/web/dist/assets/react-query.gen-Bu2yV-qJ.js.gz +0 -0
  181. package/web/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  182. package/web/dist/assets/run-status-C0DRuV7U.js +1 -0
  183. package/web/dist/assets/runs-C3rg2zZc.js +1 -0
  184. package/web/dist/assets/runs-C3rg2zZc.js.br +0 -0
  185. package/web/dist/assets/runs-C3rg2zZc.js.gz +0 -0
  186. package/web/dist/assets/setup-5I4Vl9fR.js +1 -0
  187. package/web/dist/assets/setup-5I4Vl9fR.js.br +0 -0
  188. package/web/dist/assets/setup-5I4Vl9fR.js.gz +0 -0
  189. package/web/dist/assets/table-BOxXhqS4.js +1 -0
  190. package/web/dist/assets/table-BOxXhqS4.js.br +0 -0
  191. package/web/dist/assets/table-BOxXhqS4.js.gz +0 -0
  192. package/web/dist/assets/textfield-BzRFkxBF.js +1 -0
  193. package/web/dist/assets/textfield-BzRFkxBF.js.br +0 -0
  194. package/web/dist/assets/textfield-BzRFkxBF.js.gz +0 -0
  195. package/web/dist/assets/time--9kSQbbp.js +1 -0
  196. package/web/dist/assets/use-css-variable-CpnN9WtA.js +5 -0
  197. package/web/dist/assets/use-css-variable-CpnN9WtA.js.br +0 -0
  198. package/web/dist/assets/use-css-variable-CpnN9WtA.js.gz +0 -0
  199. package/web/dist/assets/useMutation-CVPKlR34.js +1 -0
  200. package/web/dist/assets/useMutation-CVPKlR34.js.br +0 -0
  201. package/web/dist/assets/useMutation-CVPKlR34.js.gz +0 -0
  202. package/web/dist/index.html +15 -0
  203. package/catalog/ATTRIBUTION.md +0 -44
  204. package/catalog/scores.json +0 -3202
  205. package/catalog/sources.json +0 -97
  206. package/src/adapters/antigravity/events.ts +0 -131
  207. package/src/adapters/antigravity/home.ts +0 -46
  208. package/src/adapters/antigravity/index.ts +0 -335
  209. package/src/adapters/antigravity/models.ts +0 -37
  210. package/src/adapters/grok/events.ts +0 -112
  211. package/src/adapters/grok/home.ts +0 -187
  212. package/src/adapters/grok/index.ts +0 -358
  213. package/src/adapters/grok/models.ts +0 -48
  214. package/src/domain/calibration.ts +0 -132
  215. package/src/domain/sources.ts +0 -144
  216. package/src/entry/mcp/dispatch-tools.ts +0 -52
  217. package/src/entry/mcp/lane-tools.ts +0 -131
  218. package/src/entry/mcp/protocol-tools.ts +0 -63
  219. package/src/entry/mcp/push-tools.ts +0 -16
  220. package/src/entry/mcp/run-tools.ts +0 -164
  221. package/src/entry/mcp/setup-tools.ts +0 -109
  222. package/src/entry/mcp/workspace-tools.ts +0 -142
  223. package/src/entry/tui/commands.ts +0 -563
  224. package/src/entry/tui/effects.ts +0 -385
  225. package/src/entry/tui/fixtures.ts +0 -637
  226. package/src/entry/tui/profile-edits.ts +0 -146
  227. package/src/entry/tui/profile-tree.ts +0 -429
  228. package/src/entry/tui/providers/app.tsx +0 -162
  229. package/src/entry/tui/providers/boundary.tsx +0 -57
  230. package/src/entry/tui/providers/data.tsx +0 -160
  231. package/src/entry/tui/providers/keymap.tsx +0 -166
  232. package/src/entry/tui/providers/root.tsx +0 -45
  233. package/src/entry/tui/providers/theme.tsx +0 -17
  234. package/src/entry/tui/providers/toast.tsx +0 -77
  235. package/src/entry/tui/run.tsx +0 -114
  236. package/src/entry/tui/state.ts +0 -400
  237. package/src/entry/tui/stories.ts +0 -114
  238. package/src/entry/tui/text.ts +0 -130
  239. package/src/entry/tui/theme.ts +0 -140
  240. package/src/entry/tui/views/app.tsx +0 -208
  241. package/src/entry/tui/views/dialogs.tsx +0 -41
  242. package/src/entry/tui/views/profile-actions.ts +0 -331
  243. package/src/entry/tui/views/profiles.tsx +0 -520
  244. package/src/entry/tui/views/runs.tsx +0 -619
  245. package/src/entry/tui/views/save-dialog.tsx +0 -344
  246. package/src/entry/tui/views/status.tsx +0 -213
  247. package/src/entry/tui/widgets/chrome.tsx +0 -114
  248. package/src/entry/tui/widgets/dialog-confirm.tsx +0 -58
  249. package/src/entry/tui/widgets/dialog-prompt.tsx +0 -52
  250. package/src/entry/tui/widgets/dialog-select.tsx +0 -212
  251. package/src/entry/tui/widgets/dialog.tsx +0 -68
  252. package/src/entry/tui/widgets/line.tsx +0 -92
  253. package/src/entry/tui/widgets/list.tsx +0 -197
  254. package/src/entry/tui/widgets/spinner.tsx +0 -49
  255. package/src/entry/tui/widgets/toast.tsx +0 -62
  256. package/src/infra/sources/arena.ts +0 -95
  257. package/src/infra/sources/artificial-analysis.ts +0 -119
  258. package/src/infra/sources/cache.ts +0 -126
  259. package/src/infra/sources/csv.ts +0 -38
  260. package/src/infra/sources/epoch.ts +0 -82
  261. package/src/infra/sources/http.ts +0 -75
  262. package/src/infra/sources/litellm.ts +0 -58
  263. package/src/infra/sources/models-dev.ts +0 -59
  264. package/src/infra/sources/openrouter-endpoints.ts +0 -52
  265. package/src/infra/sources/openrouter-models.ts +0 -60
  266. package/src/infra/sources/rows.ts +0 -38
  267. package/src/infra/sources/vectara.ts +0 -69
  268. package/src/infra/sources/zip.ts +0 -48
  269. package/src/services/catalog-refresh.ts +0 -201
  270. package/src/services/doctor-sources.ts +0 -76
  271. package/src/services/runs-page.ts +0 -290
  272. package/src/services/source-derive.ts +0 -397
  273. package/src/services/source-sync.ts +0 -312
  274. package/src/services/standins.ts +0 -238
  275. package/src/services/treat-likes.ts +0 -113
@@ -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,17 +27,9 @@
45
27
  {
46
28
  "id": "gpt-6.1-sol",
47
29
  "name": "GPT-6.1 Sol",
48
- "predecessor": "gpt-6-sol",
49
- "vendor": "openai",
50
- "releaseDate": "2026-09-29",
51
30
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
52
- "price": { "input": 2, "cached": 0.1, "output": 10 },
53
31
  "on": {
54
- "codex": {
55
- "id": "gpt-6.1-sol",
56
- "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"],
57
- "context": 272000
58
- }
32
+ "codex": { "id": "gpt-6.1-sol" }
59
33
  },
60
34
  "notes": {
61
35
  "ultra": "maximum reasoning with automatic task delegation to parallel subagents; never in a default ladder"
@@ -64,24 +38,12 @@
64
38
  {
65
39
  "id": "gpt-6-sol",
66
40
  "name": "GPT-6 Sol",
67
- "predecessor": "gpt-5.6-sol",
68
- "vendor": "openai",
69
- "releaseDate": "2026-09-22",
70
41
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
71
- "price": { "input": 2, "cached": 0.2, "output": 10 },
72
42
  "planWeight": 20,
73
43
  "on": {
74
- "codex": {
75
- "id": "gpt-6-sol",
76
- "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"],
77
- "context": 272000
78
- },
79
- "opencode": {
80
- "id": "opencode/gpt-6-sol",
81
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
82
- "context": 1050000
83
- },
84
- "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" }
85
47
  },
86
48
  "notes": {
87
49
  "ultra": "maximum reasoning with automatic task delegation to parallel subagents; never in a default ladder"
@@ -90,124 +52,63 @@
90
52
  {
91
53
  "id": "gpt-6-luna",
92
54
  "name": "GPT-6 Luna",
93
- "predecessor": "gpt-5.6-luna",
94
- "vendor": "openai",
95
- "releaseDate": "2026-09-22",
96
55
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
97
- "price": { "input": 0.1, "cached": 0.01, "output": 0.5 },
98
56
  "planWeight": 1,
99
57
  "on": {
100
- "codex": {
101
- "id": "gpt-6-luna",
102
- "efforts": ["low", "medium", "high", "xhigh", "max"],
103
- "context": 272000
104
- },
105
- "opencode": {
106
- "id": "opencode/gpt-6-luna",
107
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
108
- "context": 1050000
109
- },
110
- "opencode-go": {
111
- "id": "opencode-go/gpt-6-luna",
112
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
113
- "context": 1050000
114
- },
115
- "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" }
116
62
  }
117
63
  },
118
64
  {
119
65
  "id": "gpt-5.6-sol",
120
66
  "name": "GPT-5.6 Sol",
121
- "vendor": "openai",
122
- "releaseDate": "2026-07-09",
123
- "status": "legacy",
124
67
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
125
- "price": { "input": 4, "cached": 0.4, "output": 20 },
126
68
  "planWeight": 30,
127
69
  "on": {
128
- "codex": {
129
- "id": "gpt-5.6-sol",
130
- "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"],
131
- "context": 272000
132
- },
133
- "opencode": {
134
- "id": "opencode/gpt-5.6-sol",
135
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
136
- "context": 1050000
137
- }
70
+ "codex": { "id": "gpt-5.6-sol" },
71
+ "opencode": { "id": "opencode/gpt-5.6-sol" }
138
72
  },
139
- "notes": { "upgrade": "Codex offers gpt-6-sol as its upgrade" }
73
+ "notes": {
74
+ "upgrade": "Codex offers gpt-6-sol as its upgrade"
75
+ }
140
76
  },
141
77
  {
142
78
  "id": "gpt-5.6-terra",
143
79
  "name": "GPT-5.6 Terra",
144
- "vendor": "openai",
145
- "releaseDate": "2026-07-09",
146
- "status": "legacy",
147
80
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
148
- "price": { "input": 2, "cached": 0.2, "output": 12 },
149
81
  "planWeight": 15,
150
82
  "on": {
151
- "codex": {
152
- "id": "gpt-5.6-terra",
153
- "efforts": ["low", "medium", "high", "xhigh", "max", "ultra"],
154
- "context": 272000
155
- },
156
- "opencode": {
157
- "id": "opencode/gpt-5.6-terra",
158
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
159
- "context": 1050000
160
- }
83
+ "codex": { "id": "gpt-5.6-terra" },
84
+ "opencode": { "id": "opencode/gpt-5.6-terra" }
161
85
  },
162
- "notes": { "upgrade": "Codex offers gpt-6-sol as its upgrade" }
86
+ "notes": {
87
+ "upgrade": "Codex offers gpt-6-sol as its upgrade"
88
+ }
163
89
  },
164
90
  {
165
91
  "id": "gpt-5.6-luna",
166
92
  "name": "GPT-5.6 Luna",
167
- "vendor": "openai",
168
- "releaseDate": "2026-07-09",
169
- "status": "legacy",
170
93
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
171
- "price": { "input": 0.2, "cached": 0.02, "output": 1.2 },
172
94
  "planWeight": 1.5,
173
95
  "on": {
174
- "codex": {
175
- "id": "gpt-5.6-luna",
176
- "efforts": ["low", "medium", "high", "xhigh", "max"],
177
- "context": 272000
178
- },
179
- "opencode": {
180
- "id": "opencode/gpt-5.6-luna",
181
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
182
- "context": 1050000
183
- },
184
- "opencode-go": {
185
- "id": "opencode-go/gpt-5.6-luna",
186
- "efforts": ["none", "low", "medium", "high", "xhigh", "max"],
187
- "context": 1050000
188
- }
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" }
189
99
  },
190
- "notes": { "upgrade": "Codex offers gpt-6-luna as its upgrade" }
100
+ "notes": {
101
+ "upgrade": "Codex offers gpt-6-luna as its upgrade"
102
+ }
191
103
  },
192
104
  {
193
105
  "id": "claude-fable-5-1",
194
106
  "name": "Claude Fable 5.1",
195
- "vendor": "anthropic",
196
- "releaseDate": "2026-09-01",
197
107
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
198
- "price": { "input": 10, "cached": 0.25, "output": 50 },
199
108
  "meteredOnPlan": true,
200
109
  "on": {
201
- "claude-code": {
202
- "id": "claude-fable-5-1",
203
- "efforts": ["low", "medium", "high", "xhigh", "max"],
204
- "context": 1000000
205
- },
206
- "opencode": {
207
- "id": "opencode/claude-fable-5-1",
208
- "efforts": ["low", "medium", "high", "xhigh", "max"],
209
- "context": 1000000
210
- }
110
+ "claude-code": { "id": "claude-fable-5-1" },
111
+ "opencode": { "id": "opencode/claude-fable-5-1" }
211
112
  },
212
113
  "notes": {
213
114
  "plan": "Pro and Team Standard pay usage credits for Fable; Max includes it up to half the weekly limit"
@@ -216,201 +117,109 @@
216
117
  {
217
118
  "id": "claude-opus-5-5",
218
119
  "name": "Claude Opus 5.5",
219
- "vendor": "anthropic",
220
- "releaseDate": "2026-09-22",
221
120
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
222
- "price": { "input": 4, "cached": 0.2, "output": 20 },
223
121
  "on": {
224
- "claude-code": {
225
- "id": "claude-opus-5-5",
226
- "efforts": ["low", "medium", "high", "xhigh", "max"],
227
- "context": 1000000
228
- },
229
- "opencode": {
230
- "id": "opencode/claude-opus-5-5",
231
- "efforts": ["low", "medium", "high", "xhigh", "max"],
232
- "context": 1000000
233
- },
234
- "cursor": {
235
- "id": "claude-opus-5-5",
236
- "efforts": ["low", "medium", "high", "xhigh", "max"],
237
- "context": 200000
238
- }
122
+ "claude-code": { "id": "claude-opus-5-5" },
123
+ "opencode": { "id": "opencode/claude-opus-5-5" },
124
+ "cursor": { "id": "claude-opus-5-5" }
239
125
  },
240
- "notes": { "effort": "the API default effort is medium" }
126
+ "notes": {
127
+ "effort": "the API default effort is medium"
128
+ }
241
129
  },
242
130
  {
243
131
  "id": "claude-sonnet-5-5",
244
132
  "name": "Claude Sonnet 5.5",
245
- "predecessor": "claude-sonnet-5",
246
- "vendor": "anthropic",
247
- "releaseDate": "2026-09-28",
248
133
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
249
- "price": { "input": 2, "cached": 0.2, "output": 10 },
250
134
  "on": {
251
- "claude-code": {
252
- "id": "claude-sonnet-5-5",
253
- "efforts": ["low", "medium", "high", "xhigh", "max"],
254
- "context": 1000000
255
- },
256
- "opencode": {
257
- "id": "opencode/claude-sonnet-5-5",
258
- "efforts": ["low", "medium", "high", "xhigh", "max"],
259
- "context": 1000000
260
- }
135
+ "claude-code": { "id": "claude-sonnet-5-5" },
136
+ "opencode": { "id": "opencode/claude-sonnet-5-5" }
261
137
  }
262
138
  },
263
139
  {
264
140
  "id": "claude-sonnet-5",
265
141
  "name": "Claude Sonnet 5",
266
- "vendor": "anthropic",
267
- "releaseDate": "2026-06-29",
268
142
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
269
- "price": { "input": 2, "cached": 0.2, "output": 10 },
270
143
  "on": {
271
- "claude-code": {
272
- "id": "claude-sonnet-5",
273
- "efforts": ["low", "medium", "high", "xhigh", "max"],
274
- "context": 1000000
275
- },
276
- "opencode": {
277
- "id": "opencode/claude-sonnet-5",
278
- "efforts": ["low", "medium", "high", "xhigh", "max"],
279
- "context": 1000000
280
- }
144
+ "claude-code": { "id": "claude-sonnet-5" },
145
+ "opencode": { "id": "opencode/claude-sonnet-5" }
281
146
  }
282
147
  },
283
148
  {
284
- "id": "claude-haiku-4-5",
149
+ "id": "claude-4-5-haiku",
285
150
  "name": "Claude Haiku 4.5",
286
- "vendor": "anthropic",
287
- "releaseDate": "2025-10-15",
288
151
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
289
- "price": { "input": 1, "cached": 0.1, "output": 5 },
290
152
  "on": {
291
- "claude-code": { "id": "claude-haiku-4-5-20251001", "efforts": [], "context": 200000 },
292
- "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" }
293
155
  },
294
- "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
+ }
295
159
  },
296
160
  {
297
161
  "id": "grok-4-7",
298
162
  "name": "Grok 4.7",
299
- "predecessor": "grok-4-6",
300
- "vendor": "xai",
301
- "releaseDate": "2026-09-21",
302
163
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
303
- "price": { "input": 2, "cached": 0.5, "output": 6 },
304
164
  "on": {
305
- "grok": { "id": "grok-4.7", "efforts": ["low", "medium", "high", "xhigh"], "context": 500000 },
306
- "cursor": { "id": "grok-4.7", "efforts": ["low", "medium", "high", "xhigh"], "context": 200000 }
165
+ "cursor": { "id": "grok-4.7" }
307
166
  },
308
167
  "notes": {
309
- "pool": "a Cursor Model in Cursor: billed from Cursor's own pool (research §2.4)",
310
- "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)"
311
169
  }
312
170
  },
313
171
  {
314
172
  "id": "grok-4-6",
315
173
  "name": "Grok 4.6",
316
- "predecessor": "grok-4-5",
317
- "vendor": "xai",
318
- "releaseDate": "2026-08-12",
319
174
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
320
- "price": { "input": 2, "cached": 0.5, "output": 6 },
321
175
  "on": {
322
- "grok": { "id": "grok-4.6", "efforts": ["low", "medium", "high", "xhigh"], "context": 500000 },
323
- "cursor": {
324
- "id": "cursor-grok-4.6",
325
- "efforts": ["low", "medium", "high", "xhigh"],
326
- "context": 200000
327
- }
176
+ "cursor": { "id": "cursor-grok-4.6" }
328
177
  },
329
178
  "notes": {
330
- "pool": "a Cursor Model in Cursor: billed from Cursor's own pool (research §2.4)",
331
- "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)"
332
180
  }
333
181
  },
334
182
  {
335
183
  "id": "grok-4-5",
336
184
  "name": "Grok 4.5",
337
- "vendor": "xai",
338
- "releaseDate": "2026-07-08",
339
185
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
340
- "price": { "input": 2, "cached": 0.3, "output": 6 },
341
186
  "on": {
342
- "grok": { "id": "grok-4.5", "efforts": ["low", "medium", "high", "xhigh"], "context": 500000 },
343
- "cursor": { "id": "cursor-grok-4.5", "efforts": ["low", "medium", "high"], "context": 200000 }
187
+ "cursor": { "id": "cursor-grok-4.5" }
344
188
  },
345
189
  "notes": {
346
- "pool": "a Cursor Model in Cursor: billed from Cursor's own pool (research §2.4)",
347
- "effort": "grok lists no efforts: Grok Build's effort names, low to xhigh (research §3.4, §5; live-verification §12)"
348
- }
349
- },
350
- {
351
- "id": "composer-2-5",
352
- "name": "Composer 2.5",
353
- "vendor": "cursor",
354
- "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
355
- "price": { "input": 2, "cached": 0.5, "output": 6 },
356
- "on": { "cursor": { "id": "composer-2.5", "efforts": [], "context": 200000 } },
357
- "notes": {
358
- "price": "no keyless source prices Composer (research §5); Grok 4.7's, the same Cursor pool, stands in",
359
- "effort": "no effort: its only rung is #default"
190
+ "pool": "a Cursor Model in Cursor: billed from Cursor's own pool (research §2.4)"
360
191
  }
361
192
  },
362
193
  {
363
194
  "id": "gemini-3-8-flash",
364
195
  "name": "Gemini 3.8 Flash",
365
- "predecessor": "gemini-3-7-flash",
366
- "vendor": "google",
367
- "releaseDate": "2026-09-02",
368
196
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
369
- "price": { "input": 0.75, "cached": 0.075, "output": 3.75 },
370
197
  "on": {
371
- "cursor": { "id": "gemini-3.8-flash", "efforts": ["low", "medium", "high"], "context": 200000 },
372
- "antigravity": { "id": "gemini-3.8-flash", "efforts": ["low", "medium", "high"], "context": 1048576 }
198
+ "cursor": { "id": "gemini-3.8-flash" }
373
199
  }
374
200
  },
375
201
  {
376
202
  "id": "gemini-3-7-flash",
377
203
  "name": "Gemini 3.7 Flash",
378
- "predecessor": "gemini-3-6-flash",
379
- "vendor": "google",
380
- "releaseDate": "2026-08-13",
381
204
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
382
- "price": { "input": 0.75, "cached": 0.075, "output": 3.75 },
383
205
  "on": {
384
- "cursor": { "id": "gemini-3.7-flash", "efforts": ["low", "medium", "high"], "context": 200000 },
385
- "antigravity": { "id": "gemini-3.7-flash", "efforts": ["low", "medium", "high"], "context": 1048576 }
206
+ "cursor": { "id": "gemini-3.7-flash" }
386
207
  }
387
208
  },
388
209
  {
389
210
  "id": "gemini-3-6-flash",
390
211
  "name": "Gemini 3.6 Flash",
391
- "vendor": "google",
392
- "releaseDate": "2026-07-21",
393
212
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
394
- "price": { "input": 0.75, "cached": 0.075, "output": 3.75 },
395
213
  "on": {
396
- "cursor": {
397
- "id": "gemini-3.6-flash",
398
- "efforts": ["minimal", "low", "medium", "high"],
399
- "context": 200000
400
- },
401
- "antigravity": { "id": "gemini-3.6-flash", "efforts": ["low", "medium", "high"], "context": 1048576 }
214
+ "cursor": { "id": "gemini-3.6-flash" }
402
215
  }
403
216
  },
404
217
  {
405
- "id": "gemini-3-1-pro",
218
+ "id": "gemini-3-1-pro-preview",
406
219
  "name": "Gemini 3.1 Pro",
407
- "vendor": "google",
408
- "releaseDate": "2026-02-19",
409
220
  "capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
410
- "price": { "input": 2, "cached": 0.2, "output": 12 },
411
221
  "on": {
412
- "cursor": { "id": "gemini-3.1-pro", "efforts": [], "context": 200000 },
413
- "antigravity": { "id": "gemini-3.1-pro", "efforts": ["low", "high"], "context": 1048576 }
222
+ "cursor": { "id": "gemini-3.1-pro" }
414
223
  }
415
224
  }
416
225
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catherd-cli",
3
- "version": "1.5.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.5.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.5.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.5.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)`.