catherd-cli 1.2.1 → 1.4.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.
- package/README.md +146 -36
- package/catalog/models.json +148 -5
- package/catalog/scores.json +24 -0
- package/catalog/sources.json +12 -2
- package/package.json +3 -2
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +11 -0
- package/plugin/.mcp-codex.json +10 -0
- package/plugin/bin/catherd-mcp +1 -1
- package/plugin/skills/catherd/SKILL.md +45 -39
- package/plugin/skills/catherd-setup/SKILL.md +24 -8
- package/src/adapters/access.ts +61 -18
- package/src/adapters/all.ts +6 -0
- package/src/adapters/antigravity/events.ts +131 -0
- package/src/adapters/antigravity/home.ts +46 -0
- package/src/adapters/antigravity/index.ts +320 -0
- package/src/adapters/antigravity/models.ts +37 -0
- package/src/adapters/backend.ts +34 -1
- package/src/adapters/claude-code/index.ts +2 -0
- package/src/adapters/cli.ts +1 -64
- package/src/adapters/codex/index.ts +2 -0
- package/src/adapters/cursor/events.ts +120 -0
- package/src/adapters/cursor/home.ts +79 -0
- package/src/adapters/cursor/index.ts +331 -0
- package/src/adapters/cursor/models.ts +30 -0
- package/src/adapters/discovery.ts +21 -0
- package/src/adapters/grok/events.ts +112 -0
- package/src/adapters/grok/home.ts +132 -0
- package/src/adapters/grok/index.ts +339 -0
- package/src/adapters/grok/models.ts +48 -0
- package/src/adapters/opencode/index.ts +2 -0
- package/src/cli.ts +49 -19
- package/src/domain/catalog.ts +10 -1
- package/src/domain/cost.ts +1 -0
- package/src/domain/errors.ts +1 -0
- package/src/domain/failover.ts +5 -2
- package/src/domain/host.ts +17 -0
- package/src/domain/ids.ts +2 -2
- package/src/domain/notice.ts +5 -2
- package/src/domain/profile-rules.ts +17 -0
- package/src/domain/profile.ts +89 -5
- package/src/domain/record.ts +3 -0
- package/src/domain/util.ts +3 -0
- package/src/entry/catalog-command.ts +4 -2
- package/src/entry/deps.ts +6 -3
- package/src/entry/doctor-command.ts +11 -2
- package/src/entry/host-arg.ts +28 -0
- package/src/entry/init-command.ts +18 -7
- package/src/entry/knowledge-command.ts +50 -0
- package/src/entry/lock-command.ts +7 -2
- package/src/entry/mcp/handshake.ts +3 -1
- package/src/entry/mcp/run-tools.ts +5 -2
- package/src/entry/mcp/server.ts +129 -40
- package/src/entry/mcp/setup-tools.ts +7 -2
- package/src/entry/profile-command.ts +108 -12
- package/src/entry/runs-command.ts +81 -5
- package/src/entry/tui/effects.ts +30 -10
- package/src/entry/tui/fixtures.ts +34 -10
- package/src/entry/tui/profile-tree.ts +10 -1
- package/src/entry/tui/run.tsx +10 -4
- package/src/entry/tui/state.ts +19 -6
- package/src/entry/tui/stories.ts +11 -4
- package/src/entry/tui/views/profile-actions.ts +4 -2
- package/src/entry/tui/views/profiles.tsx +16 -3
- package/src/entry/tui/views/save-dialog.tsx +2 -2
- package/src/infra/cli.ts +65 -0
- package/src/infra/codex-queue.ts +165 -0
- package/src/infra/delivery.ts +83 -0
- package/src/infra/dispatch-dir.ts +1 -0
- package/src/infra/env.ts +4 -1
- package/src/infra/host-context.ts +58 -0
- package/src/infra/paths.ts +3 -1
- package/src/infra/peer-inbox.ts +4 -1
- package/src/infra/supervisor.ts +3 -2
- package/src/services/admission.ts +34 -7
- package/src/services/agent-links.ts +30 -5
- package/src/services/backends.ts +49 -4
- package/src/services/capture.ts +112 -54
- package/src/services/catalog-refresh.ts +2 -1
- package/src/services/dispatch-service.ts +17 -7
- package/src/services/dispatches.ts +8 -1
- package/src/services/doctor-access.ts +14 -7
- package/src/services/doctor-backends.ts +39 -7
- package/src/services/doctor-checks.ts +43 -3
- package/src/services/doctor-push.ts +69 -90
- package/src/services/doctor.ts +107 -32
- package/src/services/finalize.ts +2 -1
- package/src/services/lane-service.ts +4 -10
- package/src/services/notifier.ts +322 -70
- package/src/services/peek.ts +46 -9
- package/src/services/ports.ts +8 -2
- package/src/services/profile-service.ts +117 -31
- package/src/services/profile-store.ts +126 -5
- package/src/services/routing-service.ts +6 -1
- package/src/services/run-debug.ts +98 -4
- package/src/services/run-service.ts +39 -4
- package/src/services/run-store.ts +21 -5
- package/src/services/runs-page.ts +3 -2
- package/src/services/session-view.ts +18 -13
- package/src/services/sessions.ts +32 -16
- package/src/services/setup.ts +31 -10
- package/src/services/source-derive.ts +32 -7
- package/src/services/summary.ts +40 -5
- package/src/services/treat-likes.ts +22 -9
package/README.md
CHANGED
|
@@ -6,19 +6,18 @@
|
|
|
6
6
|
(")(")
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
Autopilot builds from your own Claude Code session.
|
|
10
|
-
headless Claude Code
|
|
9
|
+
Autopilot builds from your own Claude Code or native Codex session. Your profile routes the architect, verifier and workers to their backends; Codex, opencode, Cursor, Grok Build,
|
|
10
|
+
Antigravity or headless Claude Code processes write the code, and [Jev](https://typesafe.ai) picks the model and effort for each piece
|
|
11
11
|
of work, climbing a ladder only when a cheaper rung falls short.
|
|
12
12
|
|
|
13
13
|
- **Your harness, as you set it up.** Every role runs in its vendor's own CLI with your config,
|
|
14
14
|
hooks, skills and `AGENTS.md`. Isolation is an opt-in toggle per profile and harness, for when
|
|
15
15
|
you'd rather save the tokens your customizations cost.
|
|
16
|
-
- **Claude roles stay native.** `claude:` rungs run as ordinary Claude Code subagents; Codex,
|
|
17
|
-
opencode and headless `claude-code:` rungs run through catherd's MCP server.
|
|
16
|
+
- **Claude roles stay native on Claude Code.** `claude:` rungs require that host and run as ordinary Claude Code subagents; Codex,
|
|
17
|
+
opencode, Cursor, Grok Build, Antigravity and headless `claude-code:` rungs run through catherd's MCP server.
|
|
18
18
|
- **Survives restarts.** Workers are detached processes writing straight to disk, so a dropped
|
|
19
19
|
MCP server never loses a run.
|
|
20
|
-
- **Results come to you.** Roles run side by side while you keep talking
|
|
21
|
-
arrives in the session as a message, like a native subagent's notice, and `peek` shows how a run stands.
|
|
20
|
+
- **Results come to you.** Roles run side by side while you keep talking. Claude Code uses its peer inbox; Codex uses queued next input through its existing native server. A busy Codex conversation processes it after the active turn. Queue acceptance and result collection are separate; `peek` shows how a run stands.
|
|
22
21
|
- **A protocol the tools enforce.** Every lane is routed, every brief ends with the reply contract, and a
|
|
23
22
|
milestone lands only after a reviewer and a verifier passed it. Workers can run their own checks (network,
|
|
24
23
|
loopback, Docker, the lock dir); an owner question parks one milestone, not the run.
|
|
@@ -28,28 +27,100 @@ of work, climbing a ladder only when a cheaper rung falls short.
|
|
|
28
27
|
## Requirements
|
|
29
28
|
|
|
30
29
|
- [Bun](https://bun.sh) ≥ 1.4
|
|
31
|
-
- [Claude Code](https://claude.com/claude-code) (
|
|
30
|
+
- An orchestration host: [Claude Code](https://claude.com/claude-code), or native [Codex](https://github.com/openai/codex) CLI/Desktop with plugin support and the existing native queue endpoint (installed CLI 0.159.2 verified for packaging; queue support is feature-detected)
|
|
32
31
|
- At least one worker backend, logged in:
|
|
33
32
|
- [Codex CLI](https://github.com/openai/codex) 0.157.0 or newer
|
|
34
33
|
- [opencode](https://opencode.ai) **v2**, 2.0.16 or newer: `curl -fsSL https://opencode.ai/v2/install | bash`
|
|
35
34
|
(the npm package `opencode-ai` is v1 and is not supported)
|
|
36
35
|
- Claude Code's `claude` CLI 2.1.282 or newer, for headless `claude-code:` rungs
|
|
36
|
+
- Cursor's CLI, `cursor-agent` 2026.09.28 or newer: `curl https://cursor.com/install -fsS | bash`, then
|
|
37
|
+
`cursor-agent login` (below)
|
|
38
|
+
- Grok Build's `grok` 1.0.44 or newer: `curl -fsSL https://x.ai/cli/install.sh | bash`, then `grok login`
|
|
39
|
+
(below)
|
|
40
|
+
- Google's Antigravity CLI, `agy` 1.2.13 or newer: `brew install --cask antigravity-cli`, or
|
|
41
|
+
`curl -fsSL https://antigravity.google/cli/install.sh | bash` (with `~/.local/bin` on PATH), then run `agy` once
|
|
42
|
+
to sign in (below)
|
|
37
43
|
- Optional: a TypeSafe API key for Jev, in `TYPESAFE_API_KEY` or saved by `catherd init`
|
|
38
44
|
- Optional: a free [Artificial Analysis](https://artificialanalysis.ai) API key for more scores, in
|
|
39
45
|
`ARTIFICIAL_ANALYSIS_API_KEY` or saved by `catherd init`; its numbers are read for you alone and never shipped
|
|
40
46
|
|
|
41
47
|
`catherd doctor` checks each backend's version and login and prints the fix for anything missing. The default
|
|
42
48
|
profile runs its workers on Codex; without Codex, doctor's fix also names how to move those roles to a backend
|
|
43
|
-
you have (`/catherd-setup
|
|
49
|
+
you have (`/catherd-setup`, or `catherd profile set roles.<role>.rungs <rung> --host <codex|claude-code>`). Codex-only setup does not require or configure Claude; enabled selected roles and reachable failover decide optional dependencies. Doctor sends nothing by default; `--test-push` is an explicit smoke send from a validated host session.
|
|
50
|
+
|
|
51
|
+
### Cursor
|
|
52
|
+
|
|
53
|
+
A Cursor rung names Cursor's own model slug, with the effort as the slug's suffix: `cursor:gpt-6-sol#xhigh` runs
|
|
54
|
+
`gpt-6-sol-xhigh`, and `#default` runs the bare slug (`cursor:composer-2.5#default`). `cursor-agent models` lists
|
|
55
|
+
what your account offers; `catherd catalog refresh` reads it. No profile uses Cursor until you put a rung on it.
|
|
56
|
+
Its Composer and Grok models bill from Cursor's own pool, the other models at API rates after your plan's included
|
|
57
|
+
usage, so a Cursor rung ranks as `metered`.
|
|
58
|
+
|
|
59
|
+
- **Native** (the default) runs with your login and your Cursor setup. It also loads your Claude Code hooks,
|
|
60
|
+
skills and plugins, which Cursor reads from `~/.claude`. `workspace-write` runs in Cursor's sandbox under your
|
|
61
|
+
`~/.cursor/sandbox.json`, which catherd never edits: `catherd doctor` shows which of a worker's checks (the lock
|
|
62
|
+
dir, temp, loopback, the network, Docker) it allows. `read-only` runs Cursor's ask mode, which asks the model not
|
|
63
|
+
to write but cannot stop it (`advisory`).
|
|
64
|
+
- **Isolated** (`catherd profile set harness.cursor.isolated true`) needs `CURSOR_API_KEY`, since a login cannot
|
|
65
|
+
move to another home. catherd runs Cursor under its own HOME with its own `sandbox.json`, which gives a worker
|
|
66
|
+
catherd's writable roots.
|
|
67
|
+
|
|
68
|
+
### Grok Build
|
|
69
|
+
|
|
70
|
+
A Grok rung names grok's model and effort: `grok:grok-4.6#high` runs `grok -m grok-4.6 --effort high`, and
|
|
71
|
+
`#default` passes no effort. `grok models` lists your models but no efforts, so catherd offers Grok Build's `low`
|
|
72
|
+
to `xhigh`; `catherd catalog refresh` reads the list. No profile uses grok until you put a rung on it. A Grok login
|
|
73
|
+
(SuperGrok, X Premium+) bills your subscription and `XAI_API_KEY` bills per token: `catherd doctor` says when a
|
|
74
|
+
profile's `billing.grok` differs from your login. On a usage limit, a Grok rung fails over to the same model on
|
|
75
|
+
Cursor, and a Cursor Grok rung to grok, unless the profile names another stand-in.
|
|
76
|
+
|
|
77
|
+
- **Native** (the default) runs with your login and your grok setup. It also loads your Claude Code plugins,
|
|
78
|
+
agents, skills, hooks and permission rules, and your Cursor rules and MCP. `workspace-write` runs in grok's
|
|
79
|
+
sandbox under catherd's own profile, `catherd-ws`, which lets a worker write the lock dir, temp and the
|
|
80
|
+
toolchain caches: catherd adds its marked `[profiles.catherd-*]` tables to `~/.grok/sandbox.toml` and leaves the
|
|
81
|
+
rest of that file alone. `read-only` runs grok's kernel `read-only` profile. On a Mac whose
|
|
82
|
+
`/var/run/docker.sock` is a link (Docker Desktop, OrbStack, Colima) grok refuses that profile, so catherd gives
|
|
83
|
+
the role only the read tools instead (`advisory`); `catherd doctor` says which applies. On macOS no grok profile
|
|
84
|
+
controls the network.
|
|
85
|
+
- **Isolated** (`catherd profile set harness.grok.isolated true`) needs `XAI_API_KEY`: catherd never copies your
|
|
86
|
+
grok login, whose refresh token rotates. catherd runs grok under its own HOME with its own `sandbox.toml`.
|
|
87
|
+
|
|
88
|
+
grok keeps a session on the access it started with, so catherd refuses to resume one under another access.
|
|
89
|
+
|
|
90
|
+
### Antigravity
|
|
91
|
+
|
|
92
|
+
An Antigravity rung names the model `agy models` lists, without an effort suffix; the effort is agy's `--effort`
|
|
93
|
+
(`low`, `medium`, `high` or `max`), and `#default` passes none: `antigravity:gemini-3.8-flash#low`. No profile uses
|
|
94
|
+
Antigravity until you put a rung on it. catherd never runs `agy -p` while agy is signed out, since agy would open a
|
|
95
|
+
browser and wait; `catherd doctor` says so, with the fix. A Google login draws on your plan's quota (doctor shows
|
|
96
|
+
what is left); `GEMINI_API_KEY` bills the Gemini API project. Gemini rungs fail over between Antigravity and Cursor
|
|
97
|
+
when either runs out, unless your profile names another stand-in.
|
|
98
|
+
|
|
99
|
+
- **Native** (the default) runs with your Google login and your `~/.gemini` settings, which the Antigravity desktop
|
|
100
|
+
app shares and catherd never edits. `workspace-write` runs shell commands in agy's sandbox, which reaches the
|
|
101
|
+
workspace, temp and build caches but no network unless your own `read_url` rules grant it; the file tools are not
|
|
102
|
+
confined (`advisory`). agy has no read-only mode, so a read-only role (the reviewer, the architect) cannot run on
|
|
103
|
+
native Antigravity: `profile validate` refuses it.
|
|
104
|
+
- **Isolated** (`catherd profile set harness.antigravity.isolated true`) needs `GEMINI_API_KEY`. catherd runs agy
|
|
105
|
+
under its own HOME, with its own settings: the Gemini API as the provider, write and command deny rules for
|
|
106
|
+
read-only roles, and catherd's writable roots and the network for `workspace-write`.
|
|
107
|
+
|
|
108
|
+
Whether Google's plan terms allow an orchestrator to drive `agy` on a consumer plan is not settled here. The API-key
|
|
109
|
+
route is the one meant for automation; check the terms before you rely on a plan login.
|
|
44
110
|
|
|
45
111
|
## Install
|
|
46
112
|
|
|
113
|
+
The published `v1.3.0` marketplace and global `catherd-cli@1.3.0` remain the stable Claude integration. The native Codex feature in this checkout is unreleased and held pending actual packaged CLI/Desktop/Claude acceptance. A matching version alone does not prove that the feature core ran. Use the [local packaged acceptance procedure](docs/dev/live-verification.md#14-native-codex-packaging-and-completion-acceptance) for this candidate; do not publish or update the remote tag to test it.
|
|
114
|
+
|
|
115
|
+
### Claude Code
|
|
116
|
+
|
|
47
117
|
```sh
|
|
48
118
|
bun add -g catherd-cli
|
|
49
|
-
catherd init
|
|
119
|
+
catherd init --host claude-code
|
|
50
120
|
```
|
|
51
121
|
|
|
52
|
-
The npm package is `catherd-cli`; the command it installs is `catherd`. `bunx catherd-cli init
|
|
122
|
+
The npm package is `catherd-cli`; the command it installs is `catherd`. `bunx catherd-cli init --host claude-code`
|
|
123
|
+
works too (a terminal with no host evidence cannot pick the architect/verifier defaults, so name the host): `init`
|
|
53
124
|
installs the global command at its own version (`--no-global` skips it) and says `installing catherd…` before
|
|
54
125
|
it does, though the first `bunx` resolve itself prints nothing for up to half a minute. `init` asks for the
|
|
55
126
|
optional Jev key and the optional Artificial Analysis key, syncs the public model sources, writes the default
|
|
@@ -65,40 +136,76 @@ claude plugin install catherd@catherd
|
|
|
65
136
|
```
|
|
66
137
|
|
|
67
138
|
Start a new Claude Code session so the plugin, its MCP server and the agent files load, then check with
|
|
68
|
-
`catherd doctor
|
|
69
|
-
|
|
139
|
+
`catherd doctor --host claude-code`. From inside that session, explicit `catherd doctor --test-push` sends a labeled smoke notice; inspect actual processing separately from transport acceptance.
|
|
140
|
+
|
|
141
|
+
### Native Codex — after the feature release
|
|
142
|
+
|
|
143
|
+
These remote commands become feature installation guidance only after the held release is published:
|
|
144
|
+
|
|
145
|
+
```sh
|
|
146
|
+
bun add -g catherd-cli
|
|
147
|
+
catherd init --host codex
|
|
148
|
+
codex plugin marketplace add 47vigen/catherd
|
|
149
|
+
codex plugin add catherd@catherd
|
|
150
|
+
codex mcp list --json
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Restart the Codex host to load the installed shared skills and server. Native CLI accepts `owner/repo[@ref]` and a local marketplace path. The supported marketplace uses `.claude-plugin/marketplace.json` with its plugin subdirectory; the native manifest is `plugin/.codex-plugin/plugin.json`, with `skills: "./skills/"` and `mcpServers: "./.mcp-codex.json"`. Installed native resolution supplies `command: "sh"`, `args: ["./bin/catherd-mcp"]`, `cwd: <installed plugin root>` and `CATHERD_ORCHESTRATION_HOST=codex`. No Claude root macro or synthetic session ID belongs in that declaration. The shared launcher/core remains versioned together with both manifests.
|
|
154
|
+
|
|
155
|
+
Pass the actual project `repo` to repository-aware MCP profile/setup/catalog calls, because the server cwd is the plugin root. `run_start(repo, ...)` already requires it. Terminal `init` and `doctor` accept `--host codex|claude-code|auto`; selecting a terminal host chooses setup checks without inventing a conversation owner.
|
|
70
156
|
|
|
71
157
|
## Use
|
|
72
158
|
|
|
73
|
-
In
|
|
159
|
+
In either supported host, use the installed shared skills through that host's skill invocation and tool discovery:
|
|
74
160
|
|
|
75
161
|
- `/catherd <task>` runs a task on autopilot; `/catherd` alone resumes the latest run. While it runs, keep
|
|
76
|
-
talking:
|
|
162
|
+
talking: completion arrives through the host's transport, and "how is it going?" gets a `peek`.
|
|
77
163
|
- `/catherd-setup` tunes your profile in conversation: which models and efforts each role may
|
|
78
164
|
use, cost or speed, isolation, budget and failover.
|
|
79
165
|
|
|
166
|
+
`route` chooses the backend for every role. Native `claude:` uses Claude Code's `Agent` and `record_agent_run` only on Claude Code; process backends, including Codex architect/verifier, use `dispatch` followed by `result`. Omitted Codex architect/verifier choices are exactly `codex:gpt-6.1-sol#high` / `codex:gpt-6.1-sol#low`; omitted Claude choices retain their existing native defaults. Verify that exact model ID against native catalog discovery and validation; if spelling differs, resolve the mismatch explicitly with the owner, never silently normalize or substitute, and retain high/low efforts. Explicit ladders and materialized profiles are preserved, without silently converting `claude:` to `claude-code:`. To opt into host defaults, review and save the narrow reset:
|
|
167
|
+
|
|
168
|
+
```sh
|
|
169
|
+
catherd profile reset-host-defaults <profile> --host codex --preview --json > /tmp/catherd-host-defaults-review.json
|
|
170
|
+
# Review the diff, effective defaults, errors and warnings.
|
|
171
|
+
catherd profile reset-host-defaults <profile> --host codex --expect /tmp/catherd-host-defaults-review.json --json
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
It removes only architect/verifier `rungs` and `defaultRung`; every other setting stays intact. Run profile CLI commands from the project directory and choose the actual profile name. Use `--host claude-code` for Claude defaults.
|
|
175
|
+
|
|
176
|
+
Completion never uses `await_results` or model polling. Codex sends through `codex queue --remote unix://` to the validated original thread: idle wake and ordered busy follow-up are the native semantics, without Claude's urgent tool-round priority. A receipt proves queue acceptance, not observed generation or collection; unloaded/interrupted hosts may retain input. Only `result` collects the actual stored record. Explicit `peek(run)` adopts the run for the current host/session; `status` and `result` do not. Unknown/conflicting identity never owns or pushes.
|
|
177
|
+
|
|
178
|
+
Recover unread work with `peek` and `result`. Accepted or ambiguous attempts are not automatically resent. When ambiguity needs a deliberate retry, run from the current owner's validated host session:
|
|
179
|
+
|
|
180
|
+
```sh
|
|
181
|
+
catherd runs retry-push <run> <name> --event '<exact event ID from peek/status>' --acknowledge-possible-duplicate
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
This acknowledges possible duplicate native input; an accepted receipt still suppresses a repeat for that owner/event. Without a supported history reconciliation API, retain ambiguity until an explicit decision. Notices preserve all event IDs, including coalesced events; repeated input means idempotent reads, never another dispatch or landing. Stored records and independent reviewer/verifier gates are authoritative. Profile notification moments use an available host facility, without inventing a Codex notification tool or scheduled wake.
|
|
185
|
+
|
|
80
186
|
In a terminal:
|
|
81
187
|
|
|
82
|
-
| Command
|
|
83
|
-
|
|
|
84
|
-
| `catherd`
|
|
85
|
-
| `catherd init [--no-input] [--no-global] [--profile <p>]`
|
|
86
|
-
| `catherd doctor [--json]`
|
|
87
|
-
| `catherd profile list\|show\|use [--repo]\|new [--from <p>]\|copy\|rm\|diff\|validate`
|
|
88
|
-
| `catherd profile use --repo --clear`
|
|
89
|
-
| `catherd profile set <path> <value> [--profile <p>]`
|
|
90
|
-
| `catherd status [run]`, `catherd watch [--once] [--interval <s>]`
|
|
91
|
-
| `catherd runs list [--repo <path>]\|show <id> [--debug [--name <n>]]\|cancel <id> <name>`
|
|
92
|
-
| `catherd catalog refresh\|list [--backend <b>] [--role <r>] [--text <t>] [--scored]`
|
|
93
|
-
| `catherd catalog sync [--force] [--unmatched]`
|
|
94
|
-
| `catherd catalog treat-like <rung> <like>`
|
|
95
|
-
| `catherd catalog treat-like --suggest <rung>\|--clear <rung>\|--reset`
|
|
96
|
-
| `catherd
|
|
97
|
-
| `catherd
|
|
98
|
-
| `catherd
|
|
188
|
+
| Command | What it does |
|
|
189
|
+
| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
190
|
+
| `catherd` | The dashboard: Status, Profiles and Runs (below) |
|
|
191
|
+
| `catherd init [--host codex\|claude-code\|auto] [--no-input] [--no-global] [--profile <p>]` | First-run setup; installs the global `catherd` at its own version unless `--no-global` |
|
|
192
|
+
| `catherd doctor [--host codex\|claude-code\|auto] [--test-push] [--json]` | Readiness and capability report; no send unless explicit smoke; exits 3 when not ready |
|
|
193
|
+
| `catherd profile list\|show\|use [--repo]\|new [--from <p>]\|copy\|rm\|diff\|validate` | Profiles; `use --repo` binds one to the repo you are in |
|
|
194
|
+
| `catherd profile use --repo --clear` | Unbinds the repo you are in; it runs on the active profile again |
|
|
195
|
+
| `catherd profile set <path> <value> [--profile <p>]` | One field, e.g. `roles.verifier.access read-only`, `roles.worker.network false`, `budget.usd 20` |
|
|
196
|
+
| `catherd status [run]`, `catherd watch [--once] [--interval <s>]` | Where runs stand, grouped by host and session; read-only ownership |
|
|
197
|
+
| `catherd runs list [--repo <path>]\|show <id> [--debug [--name <n>]]\|cancel <id> <name>` | Past runs, by session; `--debug` adds exit.json and the stderr and event tails, `--name` one role's |
|
|
198
|
+
| `catherd catalog refresh\|list [--backend <b>] [--role <r>] [--text <t>] [--scored]` | The models catherd can place, filtered |
|
|
199
|
+
| `catherd catalog sync [--force] [--unmatched]` | Fetches the public model facts and scores now (below); `--unmatched` lists ids no model matched |
|
|
200
|
+
| `catherd catalog treat-like <rung> <like>` | Scores an unscored rung as a scored one |
|
|
201
|
+
| `catherd catalog treat-like --suggest <rung>\|--clear <rung>\|--reset` | The three nearest stand-ins for a rung; removes one or every mapping of yours |
|
|
202
|
+
| `catherd knowledge show\|add "<line>"\|path [--repo <path>]` | The repo's knowledge.md, which new runs read; `add` appends a fact of yours, marked "by hand" |
|
|
203
|
+
| `catherd lock [--slots N] -- <cmd>` | Runs a heavy command behind the machine-wide semaphore, in its own session (no /dev/tty) |
|
|
204
|
+
| `catherd mcp` | The MCP server on stdio; the plugin starts it, you never need to |
|
|
205
|
+
| `catherd capture-fixtures [--backend <b>] [--out <dir>]` | Contributors: records sanitized test fixtures from real runs (see CONTRIBUTING.md) |
|
|
99
206
|
|
|
100
207
|
A profile command without a profile name (`show`, `set`, `diff`, `validate`), like the MCP profile tools, acts
|
|
101
|
-
on the profile the repo you are in runs on: the one bound to it, else the active one. Run them as
|
|
208
|
+
on the profile the repo you are in runs on: the one bound to it, else the active one. Pass `repo` explicitly to MCP tools; profile CLI commands accept `--host` for effective defaults. Run them as
|
|
102
209
|
`bunx catherd-cli <command>` when catherd is not installed globally. Every read command takes `--json`; a bare `catherd runs` is `catherd runs list`. Exit codes: 0 ok, 1 error, 2 usage, 3 not ready, 130 interrupted; an error prints
|
|
103
210
|
`error E_CODE: message` and a `fix:` line. `--verbose` (or `CATHERD_LOG=debug`) logs more to
|
|
104
211
|
`~/.local/share/catherd/logs/`, kept for 7 days with secrets redacted. The dashboard takes `--plain` (ASCII, no colour)
|
|
@@ -106,7 +213,7 @@ and `--reduced-motion`; `doctor` and `init` take `--plain` for ASCII glyphs too.
|
|
|
106
213
|
|
|
107
214
|
Model facts and scores also come from public sources: models.dev, OpenRouter, LiteLLM, Arena (LMArena), Vectara's
|
|
108
215
|
hallucination leaderboard and Epoch AI, plus Artificial Analysis when you give `catherd init` a free key. The MCP
|
|
109
|
-
server syncs them in the background when a
|
|
216
|
+
server syncs them in the background when a host session starts (each source at most every 12 hours, never
|
|
110
217
|
delaying the session), `init` syncs them, and `catherd catalog sync` (or the `catalog_sync` tool) does it on demand.
|
|
111
218
|
Each answer is kept in `~/.local/share/catherd/sources/`; a source that fails keeps its last good answer, and with no
|
|
112
219
|
network and no sync at all catherd routes on the scores it ships. Those are the keyless sources' values, refreshed
|
|
@@ -133,6 +240,9 @@ Run data lives in `~/.local/share/catherd/`, config in `~/.config/catherd/` (bot
|
|
|
133
240
|
| `TYPESAFE_API_KEY` | The Jev key, instead of the one `catherd init` saves |
|
|
134
241
|
| `ARTIFICIAL_ANALYSIS_API_KEY` | An Artificial Analysis key for `catalog sync`, instead of the one `catherd init` saves |
|
|
135
242
|
| `CATHERD_NO_SYNC` | `1`: no automatic sync of the public sources (at MCP server start and in `init`); `catalog sync` still runs |
|
|
243
|
+
| `CURSOR_API_KEY` | Cursor's API key: logs `cursor-agent` in, and is what an isolated Cursor role runs on |
|
|
244
|
+
| `XAI_API_KEY` | xAI's API key: logs `grok` in when no Grok login is active, and is what an isolated grok role runs on |
|
|
245
|
+
| `GEMINI_API_KEY` | The Gemini API key an isolated Antigravity role runs on (agy reads it only with its Gemini API provider) |
|
|
136
246
|
| `CATHERD_HOME` | Puts config and data under `$CATHERD_HOME/config` and `$CATHERD_HOME/data` instead of XDG |
|
|
137
247
|
| `CATHERD_LOG` | Log level: `off`, `error`, `warn`, `info` (default) or `debug` (what `--verbose` sets) |
|
|
138
248
|
| `CATHERD_LOCK_SLOTS` | `catherd lock`'s slot count when `--slots` is not given (before the profile's `lock.heavy`) |
|
|
@@ -148,7 +258,7 @@ tests (CONTRIBUTING.md has the rest).
|
|
|
148
258
|
|
|
149
259
|
`catherd` opens three tabs: **1 Status** (every check with its fix; `y` copies the fix, `r` checks again),
|
|
150
260
|
**2 Profiles** (one tree per profile: roles with their access, default rung, models and efforts, then routing,
|
|
151
|
-
harness, budget, failover, timeouts and notify) and **3 Runs** (the
|
|
261
|
+
harness, budget, failover, timeouts and notify) and **3 Runs** (the host sessions that drove your runs, newest
|
|
152
262
|
first; a session opens on its runs, their milestones and every role with its rung, status, time and last event, live
|
|
153
263
|
ones first; a milestone opens on its digest (what landed, lanes and climbs, reviewer and verifier, tokens); a role
|
|
154
264
|
opens on its brief, reply and record; the open screen redraws as run files change; `esc` goes back,
|
|
@@ -207,8 +317,8 @@ Code session. The details are in [MIGRATION.md](MIGRATION.md).
|
|
|
207
317
|
|
|
208
318
|
## Contributing
|
|
209
319
|
|
|
210
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md). CI
|
|
211
|
-
|
|
320
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md). This feature's checks and acceptance are local, with release held; do not request or re-enable CI for it. The documented historical CI matrix uses Linux/macOS and Bun 1.4.0/latest;
|
|
321
|
+
live verification is in [`docs/dev/live-verification.md`](docs/dev/live-verification.md). Report security issues
|
|
212
322
|
privately, as [SECURITY.md](SECURITY.md) describes. Everyone taking part follows the
|
|
213
323
|
[Code of Conduct](CODE_OF_CONDUCT.md).
|
|
214
324
|
|
package/catalog/models.json
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": 1,
|
|
3
|
-
"version": "2026-
|
|
3
|
+
"version": "2026-10-01",
|
|
4
4
|
"sources": {
|
|
5
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); 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"
|
|
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"
|
|
8
10
|
},
|
|
9
11
|
"backends": {
|
|
10
12
|
"codex": {
|
|
@@ -40,6 +42,24 @@
|
|
|
40
42
|
"ultra": "maximum reasoning with automatic task delegation to parallel subagents; never in a default ladder"
|
|
41
43
|
}
|
|
42
44
|
},
|
|
45
|
+
{
|
|
46
|
+
"id": "gpt-6.1-sol",
|
|
47
|
+
"name": "GPT-6.1 Sol",
|
|
48
|
+
"vendor": "openai",
|
|
49
|
+
"releaseDate": "2026-09-29",
|
|
50
|
+
"capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
|
|
51
|
+
"price": { "input": 2, "cached": 0.1, "output": 10 },
|
|
52
|
+
"on": {
|
|
53
|
+
"codex": {
|
|
54
|
+
"id": "gpt-6.1-sol",
|
|
55
|
+
"efforts": ["low", "medium", "high", "xhigh", "max", "ultra"],
|
|
56
|
+
"context": 272000
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"notes": {
|
|
60
|
+
"ultra": "maximum reasoning with automatic task delegation to parallel subagents; never in a default ladder"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
43
63
|
{
|
|
44
64
|
"id": "gpt-6-sol",
|
|
45
65
|
"name": "GPT-6 Sol",
|
|
@@ -58,7 +78,8 @@
|
|
|
58
78
|
"id": "opencode/gpt-6-sol",
|
|
59
79
|
"efforts": ["none", "low", "medium", "high", "xhigh", "max"],
|
|
60
80
|
"context": 1050000
|
|
61
|
-
}
|
|
81
|
+
},
|
|
82
|
+
"cursor": { "id": "gpt-6-sol", "efforts": ["low", "high", "xhigh"], "context": 200000 }
|
|
62
83
|
},
|
|
63
84
|
"notes": {
|
|
64
85
|
"ultra": "maximum reasoning with automatic task delegation to parallel subagents; never in a default ladder"
|
|
@@ -87,7 +108,8 @@
|
|
|
87
108
|
"id": "opencode-go/gpt-6-luna",
|
|
88
109
|
"efforts": ["none", "low", "medium", "high", "xhigh", "max"],
|
|
89
110
|
"context": 1050000
|
|
90
|
-
}
|
|
111
|
+
},
|
|
112
|
+
"cursor": { "id": "gpt-6-luna", "efforts": ["high"], "context": 200000 }
|
|
91
113
|
}
|
|
92
114
|
},
|
|
93
115
|
{
|
|
@@ -205,6 +227,11 @@
|
|
|
205
227
|
"id": "opencode/claude-opus-5-5",
|
|
206
228
|
"efforts": ["low", "medium", "high", "xhigh", "max"],
|
|
207
229
|
"context": 1000000
|
|
230
|
+
},
|
|
231
|
+
"cursor": {
|
|
232
|
+
"id": "claude-opus-5-5",
|
|
233
|
+
"efforts": ["low", "medium", "high", "xhigh", "max"],
|
|
234
|
+
"context": 200000
|
|
208
235
|
}
|
|
209
236
|
},
|
|
210
237
|
"notes": { "effort": "the API default effort is medium" }
|
|
@@ -261,6 +288,122 @@
|
|
|
261
288
|
"opencode": { "id": "opencode/claude-haiku-4-5", "efforts": ["high", "max"], "context": 200000 }
|
|
262
289
|
},
|
|
263
290
|
"notes": { "effort": "no effort parameter in Claude Code: its only rung there is #default" }
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"id": "grok-4-7",
|
|
294
|
+
"name": "Grok 4.7",
|
|
295
|
+
"vendor": "xai",
|
|
296
|
+
"releaseDate": "2026-09-21",
|
|
297
|
+
"capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
|
|
298
|
+
"price": { "input": 2, "cached": 0.5, "output": 6 },
|
|
299
|
+
"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 }
|
|
302
|
+
},
|
|
303
|
+
"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)"
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"id": "grok-4-6",
|
|
310
|
+
"name": "Grok 4.6",
|
|
311
|
+
"vendor": "xai",
|
|
312
|
+
"releaseDate": "2026-08-12",
|
|
313
|
+
"capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
|
|
314
|
+
"price": { "input": 2, "cached": 0.5, "output": 6 },
|
|
315
|
+
"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
|
+
}
|
|
322
|
+
},
|
|
323
|
+
"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)"
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
"id": "grok-4-5",
|
|
330
|
+
"name": "Grok 4.5",
|
|
331
|
+
"vendor": "xai",
|
|
332
|
+
"releaseDate": "2026-07-08",
|
|
333
|
+
"capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
|
|
334
|
+
"price": { "input": 2, "cached": 0.3, "output": 6 },
|
|
335
|
+
"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 }
|
|
338
|
+
},
|
|
339
|
+
"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"
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"id": "gemini-3-8-flash",
|
|
358
|
+
"name": "Gemini 3.8 Flash",
|
|
359
|
+
"vendor": "google",
|
|
360
|
+
"releaseDate": "2026-09-02",
|
|
361
|
+
"capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
|
|
362
|
+
"price": { "input": 0.75, "cached": 0.075, "output": 3.75 },
|
|
363
|
+
"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 }
|
|
366
|
+
}
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"id": "gemini-3-7-flash",
|
|
370
|
+
"name": "Gemini 3.7 Flash",
|
|
371
|
+
"vendor": "google",
|
|
372
|
+
"releaseDate": "2026-08-13",
|
|
373
|
+
"capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
|
|
374
|
+
"price": { "input": 0.75, "cached": 0.075, "output": 3.75 },
|
|
375
|
+
"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 }
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
"id": "gemini-3-6-flash",
|
|
382
|
+
"name": "Gemini 3.6 Flash",
|
|
383
|
+
"vendor": "google",
|
|
384
|
+
"releaseDate": "2026-07-21",
|
|
385
|
+
"capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
|
|
386
|
+
"price": { "input": 0.75, "cached": 0.075, "output": 3.75 },
|
|
387
|
+
"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 }
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"id": "gemini-3-1-pro",
|
|
398
|
+
"name": "Gemini 3.1 Pro",
|
|
399
|
+
"vendor": "google",
|
|
400
|
+
"releaseDate": "2026-02-19",
|
|
401
|
+
"capabilities": { "toolUse": true, "imageIn": true, "reasoning": true },
|
|
402
|
+
"price": { "input": 2, "cached": 0.2, "output": 12 },
|
|
403
|
+
"on": {
|
|
404
|
+
"cursor": { "id": "gemini-3.1-pro", "efforts": [], "context": 200000 },
|
|
405
|
+
"antigravity": { "id": "gemini-3.1-pro", "efforts": ["low", "high"], "context": 1048576 }
|
|
406
|
+
}
|
|
264
407
|
}
|
|
265
408
|
]
|
|
266
409
|
}
|
package/catalog/scores.json
CHANGED
|
@@ -3053,6 +3053,30 @@
|
|
|
3053
3053
|
"gpt-6-luna#max": {
|
|
3054
3054
|
"like": "gpt-5.6-luna#max",
|
|
3055
3055
|
"note": "no Arena agent score is published for GPT-6 Luna; GPT-5.6 Luna at the same effort stands in for agentic and steer (the nearest stand-in, spec 1.2 §6.3)"
|
|
3056
|
+
},
|
|
3057
|
+
"gpt-6.1-sol#low": {
|
|
3058
|
+
"like": "gpt-6-sol#low",
|
|
3059
|
+
"note": "no DeepSWE 1.1 or Arena score is published for GPT-6.1 Sol yet, and its only Terminal-Bench 4.0 value (vals.ai, 55.05 ± 1.82 at max) comes from a harness not comparable with GPT-6 Sol's Artificial Analysis one; the addendum's Broken Search Tool figure (2.08 % failure, https://deploymentsafety.openai.com/gpt-6-1-sol) is left out because a shipped honesty row would become the nearest honesty stand-in for unrelated sparse rungs; GPT-6 Sol at the same effort stands in for every dimension (the nearest stand-in, spec 1.2 §6.3)"
|
|
3060
|
+
},
|
|
3061
|
+
"gpt-6.1-sol#medium": {
|
|
3062
|
+
"like": "gpt-6-sol#medium",
|
|
3063
|
+
"note": "no DeepSWE 1.1 or Arena score is published for GPT-6.1 Sol yet, and its only Terminal-Bench 4.0 value (vals.ai, 55.05 ± 1.82 at max) comes from a harness not comparable with GPT-6 Sol's Artificial Analysis one; the addendum's Broken Search Tool figure (2.08 % failure, https://deploymentsafety.openai.com/gpt-6-1-sol) is left out because a shipped honesty row would become the nearest honesty stand-in for unrelated sparse rungs; GPT-6 Sol at the same effort stands in for every dimension (the nearest stand-in, spec 1.2 §6.3)"
|
|
3064
|
+
},
|
|
3065
|
+
"gpt-6.1-sol#high": {
|
|
3066
|
+
"like": "gpt-6-sol#high",
|
|
3067
|
+
"note": "no DeepSWE 1.1 or Arena score is published for GPT-6.1 Sol yet, and its only Terminal-Bench 4.0 value (vals.ai, 55.05 ± 1.82 at max) comes from a harness not comparable with GPT-6 Sol's Artificial Analysis one; the addendum's Broken Search Tool figure (2.08 % failure, https://deploymentsafety.openai.com/gpt-6-1-sol) is left out because a shipped honesty row would become the nearest honesty stand-in for unrelated sparse rungs; GPT-6 Sol at the same effort stands in for every dimension (the nearest stand-in, spec 1.2 §6.3)"
|
|
3068
|
+
},
|
|
3069
|
+
"gpt-6.1-sol#xhigh": {
|
|
3070
|
+
"like": "gpt-6-sol#xhigh",
|
|
3071
|
+
"note": "no DeepSWE 1.1 or Arena score is published for GPT-6.1 Sol yet, and its only Terminal-Bench 4.0 value (vals.ai, 55.05 ± 1.82 at max) comes from a harness not comparable with GPT-6 Sol's Artificial Analysis one; the addendum's Broken Search Tool figure (2.08 % failure, https://deploymentsafety.openai.com/gpt-6-1-sol) is left out because a shipped honesty row would become the nearest honesty stand-in for unrelated sparse rungs; GPT-6 Sol at the same effort stands in for every dimension (the nearest stand-in, spec 1.2 §6.3)"
|
|
3072
|
+
},
|
|
3073
|
+
"gpt-6.1-sol#max": {
|
|
3074
|
+
"like": "gpt-6-sol#max",
|
|
3075
|
+
"note": "no DeepSWE 1.1 or Arena score is published for GPT-6.1 Sol yet, and its only Terminal-Bench 4.0 value (vals.ai, 55.05 ± 1.82 at max) comes from a harness not comparable with GPT-6 Sol's Artificial Analysis one; the addendum's Broken Search Tool figure (2.08 % failure, https://deploymentsafety.openai.com/gpt-6-1-sol) is left out because a shipped honesty row would become the nearest honesty stand-in for unrelated sparse rungs; GPT-6 Sol at the same effort stands in for every dimension (the nearest stand-in, spec 1.2 §6.3)"
|
|
3076
|
+
},
|
|
3077
|
+
"gpt-6.1-sol#ultra": {
|
|
3078
|
+
"like": "gpt-6-sol#ultra",
|
|
3079
|
+
"note": "no DeepSWE 1.1 or Arena score is published for GPT-6.1 Sol yet, and its only Terminal-Bench 4.0 value (vals.ai, 55.05 ± 1.82 at max) comes from a harness not comparable with GPT-6 Sol's Artificial Analysis one; the addendum's Broken Search Tool figure (2.08 % failure, https://deploymentsafety.openai.com/gpt-6-1-sol) is left out because a shipped honesty row would become the nearest honesty stand-in for unrelated sparse rungs; GPT-6 Sol at the same effort stands in for every dimension (the nearest stand-in, spec 1.2 §6.3)"
|
|
3056
3080
|
}
|
|
3057
3081
|
},
|
|
3058
3082
|
"bars": {
|
package/catalog/sources.json
CHANGED
|
@@ -69,10 +69,12 @@
|
|
|
69
69
|
],
|
|
70
70
|
"aliases": {
|
|
71
71
|
"claude-4-5-haiku": "claude-haiku-4-5",
|
|
72
|
-
"claude-haiku-4-5-20251001": "claude-haiku-4-5"
|
|
72
|
+
"claude-haiku-4-5-20251001": "claude-haiku-4-5",
|
|
73
|
+
"gemini-3.1-pro-preview": "gemini-3-1-pro"
|
|
73
74
|
},
|
|
74
75
|
"defaultEffort": {
|
|
75
76
|
"gpt-6-astra": "medium",
|
|
77
|
+
"gpt-6.1-sol": "medium",
|
|
76
78
|
"gpt-6-sol": "medium",
|
|
77
79
|
"gpt-6-luna": "medium",
|
|
78
80
|
"gpt-5.6-sol": "medium",
|
|
@@ -82,6 +84,14 @@
|
|
|
82
84
|
"claude-opus-5-5": "high",
|
|
83
85
|
"claude-sonnet-5-5": "high",
|
|
84
86
|
"claude-sonnet-5": "high",
|
|
85
|
-
"claude-haiku-4-5": "default"
|
|
87
|
+
"claude-haiku-4-5": "default",
|
|
88
|
+
"grok-4-7": "high",
|
|
89
|
+
"grok-4-6": "high",
|
|
90
|
+
"grok-4-5": "high",
|
|
91
|
+
"composer-2-5": "default",
|
|
92
|
+
"gemini-3-8-flash": "high",
|
|
93
|
+
"gemini-3-7-flash": "high",
|
|
94
|
+
"gemini-3-6-flash": "high",
|
|
95
|
+
"gemini-3-1-pro": "high"
|
|
86
96
|
}
|
|
87
97
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "catherd-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Herds coding agents: autopilot builds from your own Claude Code session.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"autopilot",
|
|
@@ -40,7 +40,8 @@
|
|
|
40
40
|
"format": "oxfmt",
|
|
41
41
|
"format:check": "oxfmt --check",
|
|
42
42
|
"tui-frames": "CATHERD_WRITE_FRAMES=1 bun test test/entry/tui/frames.test.tsx",
|
|
43
|
-
"version-packages": "changeset version && bun scripts/stamp-plugin-version.mjs"
|
|
43
|
+
"version-packages": "changeset version && bun scripts/stamp-plugin-version.mjs",
|
|
44
|
+
"release:publish": "npm view catherd-cli@$npm_package_version version >/dev/null 2>&1 || bun test/pack-smoke.ts && changeset publish"
|
|
44
45
|
},
|
|
45
46
|
"dependencies": {
|
|
46
47
|
"@modelcontextprotocol/sdk": "^1.30.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "catherd",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
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",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "catherd",
|
|
3
|
+
"version": "1.4.0",
|
|
4
|
+
"description": "Shared catherd orchestration, profiles and durable role results through the versioned MCP core.",
|
|
5
|
+
"author": { "name": "47vigen", "url": "https://github.com/47vigen" },
|
|
6
|
+
"homepage": "https://github.com/47vigen/catherd",
|
|
7
|
+
"repository": "https://github.com/47vigen/catherd",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"skills": "./skills/",
|
|
10
|
+
"mcpServers": "./.mcp-codex.json"
|
|
11
|
+
}
|
package/plugin/bin/catherd-mcp
CHANGED
|
@@ -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
|
+
VERSION="1.4.0"
|
|
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
|