@lmctl-ai/lmctl 0.1.82 → 0.1.84
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/CHANGELOG.md +41 -0
- package/README.md +5 -5
- package/dist/cli/index.js +571 -564
- package/durable-memory/model_selection.md +138 -0
- package/package.json +2 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Model Selection
|
|
2
|
+
|
|
3
|
+
`model=` on a `_MEMBER_` line is a provider-specific model request.
|
|
4
|
+
|
|
5
|
+
For `.lmctl` teamfile compatibility mode:
|
|
6
|
+
|
|
7
|
+
- `lmctl lint <teamfile>` warns when a requested model is not in the
|
|
8
|
+
tested-model catalog for `claude`, `codex`, `gemini`, `qwen`, or `agy`.
|
|
9
|
+
- `opencode` model validation reads configured models from
|
|
10
|
+
`~/.config/opencode/opencode.json` and WARNS (never injects) when a
|
|
11
|
+
`model=` isn't declared there and isn't a config-free github-copilot
|
|
12
|
+
GPT/Gemini/o-series id. See the `## OpenCode` section below.
|
|
13
|
+
- `copilot` accepts `model=` syntactically, but model selection is not
|
|
14
|
+
supported and lint warns that the value is ignored.
|
|
15
|
+
- `lmctl seed <teamfile>` passes `model=` through to the provider seed
|
|
16
|
+
call. It does not contact provider model catalogs.
|
|
17
|
+
|
|
18
|
+
The runtime also carries a built-in fallback catalog so installed
|
|
19
|
+
`lmctl` can lint without requiring this source-tree document to be
|
|
20
|
+
present in `dist`. Keep this document and
|
|
21
|
+
`src/providers/config/model-selection-lint.ts` synchronized when adding
|
|
22
|
+
or retiring tested model ids.
|
|
23
|
+
|
|
24
|
+
## Claude
|
|
25
|
+
|
|
26
|
+
| Configured `model=` | Evidence |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| `claude-opus-4-6` | Ported from lmctl0 tested-model catalog. |
|
|
29
|
+
| `claude-opus-4-7` | Ported from lmctl0 tested-model catalog. |
|
|
30
|
+
| `claude-opus-4-8` | Added from operator-confirmed availability on 2026-06-13; `lmctl lint` compatibility smoke accepts it. |
|
|
31
|
+
| `claude-sonnet-4-6` | Ported from lmctl0 tested-model catalog. |
|
|
32
|
+
| `claude-sonnet-5` | Operator-confirmed 2026-07-05 (via GitHub Copilot: `opencode --model github-copilot/claude-sonnet-5 run …` → "build · claude-sonnet-5"). Also a valid native Claude Code model id (`claude --model claude-sonnet-5`). |
|
|
33
|
+
| `claude-haiku-4-5` | Ported from lmctl0 tested-model catalog. |
|
|
34
|
+
| `claude-fable-5` | Session observed locally via `lmctl0 ls` on 2026-06-11; `lmctl lint` compatibility smoke accepts it. Anthropic announced on 2026-06-12 that access to Fable 5 was suspended for customers; keep the id valid for existing teamfiles, but do not use it for new work while unavailable. |
|
|
35
|
+
|
|
36
|
+
## Codex
|
|
37
|
+
|
|
38
|
+
| Configured `model=` | Evidence |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| `gpt-5.2` | Ported from lmctl0 tested-model catalog. |
|
|
41
|
+
| `gpt-5.4` | Ported from lmctl0 tested-model catalog. |
|
|
42
|
+
| `gpt-5.5` | Ported from lmctl0 tested-model catalog. |
|
|
43
|
+
| `gpt-5.4-mini` | Ported from lmctl0 tested-model catalog. |
|
|
44
|
+
| `gpt-5.3-codex` | Ported from lmctl0 tested-model catalog. |
|
|
45
|
+
| `gpt-5.3-codex-spark` | Ported from lmctl0 tested-model catalog. |
|
|
46
|
+
|
|
47
|
+
## Gemini
|
|
48
|
+
|
|
49
|
+
| Configured `model=` | Evidence |
|
|
50
|
+
| --- | --- |
|
|
51
|
+
| `gemini-3.1-pro-preview` | Ported from lmctl0 tested-model catalog. |
|
|
52
|
+
| `gemini-3-flash-preview` | Ported from lmctl0 tested-model catalog. |
|
|
53
|
+
| `gemini-3.1-flash-lite-preview` | Ported from lmctl0 tested-model catalog. |
|
|
54
|
+
| `gemini-2.5-flash` | Ported from lmctl0 tested-model catalog. |
|
|
55
|
+
| `gemini-2.5-flash-lite` | Ported from lmctl0 tested-model catalog. |
|
|
56
|
+
|
|
57
|
+
## Qwen
|
|
58
|
+
|
|
59
|
+
| Configured `model=` | Evidence |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| `qwen3.5-plus` | Ported from lmctl0 tested-model catalog. |
|
|
62
|
+
| `qwen3.6-plus` | Ported from lmctl0 tested-model catalog. |
|
|
63
|
+
|
|
64
|
+
## Antigravity
|
|
65
|
+
|
|
66
|
+
Antigravity (`agy`) is a distinct provider from Gemini even though it stores
|
|
67
|
+
state under `~/.gemini/antigravity-cli`. `lmctl` supports it through native
|
|
68
|
+
terminal resume plus one-shot `agy -p` turns.
|
|
69
|
+
|
|
70
|
+
| Configured `model=` | Evidence |
|
|
71
|
+
| --- | --- |
|
|
72
|
+
| `gemini-1.5-flash` | Ported from lmctl0 tested-model catalog. |
|
|
73
|
+
| `gemini-1.5-pro` | Ported from lmctl0 tested-model catalog. |
|
|
74
|
+
| `gemini-3.5-flash` | Ported from lmctl0 tested-model catalog. |
|
|
75
|
+
| `gemini-3.1-pro` | Ported from lmctl0 tested-model catalog. |
|
|
76
|
+
| `gpt-oss-120b` | Ported from lmctl0 tested-model catalog. |
|
|
77
|
+
| `gpt-4-turbo` | Ported from lmctl0 tested-model catalog. |
|
|
78
|
+
| `gpt-4` | Ported from lmctl0 tested-model catalog. |
|
|
79
|
+
| `gpt-3.5-turbo` | Ported from lmctl0 tested-model catalog. |
|
|
80
|
+
| `claude-3-opus` | Ported from lmctl0 tested-model catalog. |
|
|
81
|
+
| `claude-3-sonnet` | Ported from lmctl0 tested-model catalog. |
|
|
82
|
+
| `claude-3-haiku` | Ported from lmctl0 tested-model catalog. |
|
|
83
|
+
|
|
84
|
+
## OpenCode
|
|
85
|
+
|
|
86
|
+
opencode model ids use `<provider>/<model>` shape. **lmctl does NOT manage opencode
|
|
87
|
+
model config.** When lmctl spawns an opencode member it writes only
|
|
88
|
+
`permission: "allow"` (the YOLO contract — opencode ACP has no
|
|
89
|
+
`--dangerously-skip-permissions` flag) plus its own `mcp.lmctl` bridge entry into
|
|
90
|
+
the member's `.opencode/opencode.json`. It never injects a provider/model catalog.
|
|
91
|
+
Models resolve from **opencode's own default models.dev catalog + your
|
|
92
|
+
`~/.config/opencode/opencode.json`** — you own the model config.
|
|
93
|
+
|
|
94
|
+
What needs declaring:
|
|
95
|
+
- **github-copilot GPT / Gemini / o-series** → served **config-free** from opencode's
|
|
96
|
+
default catalog. Just `opencode auth login github-copilot`, then
|
|
97
|
+
`model=github-copilot/gpt-5.5`, etc.
|
|
98
|
+
- **github-copilot Claude** (`claude-opus-4.8`, `claude-sonnet-5`, …) → **must be
|
|
99
|
+
declared** in your `opencode.json`. Copilot proxies Claude through its own API and
|
|
100
|
+
opencode's default catalog does not route them (→ "404 page not found"); declaring
|
|
101
|
+
them under a `github-copilot` provider (`@ai-sdk/openai-compatible`,
|
|
102
|
+
`baseURL https://api.githubcopilot.com`) fixes it.
|
|
103
|
+
- **Custom providers** (`deepseek/*`, `z-ai-coding/*`, `openrouter/*`,
|
|
104
|
+
`ollama-local/*`, …) → **must be declared** (not in models.dev).
|
|
105
|
+
|
|
106
|
+
Copy the published sample and adjust for your account:
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
mkdir -p ~/.config/opencode
|
|
110
|
+
cp examples/opencode.json ~/.config/opencode/opencode.json # or: curl -sL https://lmctl.com/examples/opencode.json -o ~/.config/opencode/opencode.json
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Lint = detect + warn (never inject).** `lmctl lint`/`seed` warns when a
|
|
114
|
+
`provider=opencode model=` is **not declared** in your `opencode.json` and isn't a
|
|
115
|
+
config-free github-copilot GPT/Gemini/o id — pointing you at the sample. It also
|
|
116
|
+
warns when `model=` is absent (opencode would silently pick its own default). It
|
|
117
|
+
does not edit your config.
|
|
118
|
+
|
|
119
|
+
`effort=`/variants: an opencode member's `effort=` maps to opencode's `--variant`
|
|
120
|
+
(reasoning effort). Declare the variants on the model in your `opencode.json` (see
|
|
121
|
+
the sample's Claude/GPT entries with `variants: { high, xhigh, max }`); on the ACP
|
|
122
|
+
chat path lmctl sends `session/set_config_option` with `configId: "model"` and
|
|
123
|
+
`configId: "effort"` before `session/prompt`.
|
|
124
|
+
|
|
125
|
+
Example:
|
|
126
|
+
|
|
127
|
+
```md
|
|
128
|
+
_MEMBER_ alias=Reviewer provider=opencode model=github-copilot/gpt-5.4 effort=xhigh sessionid=<seeded-id>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
`effort=` support by provider:
|
|
132
|
+
|
|
133
|
+
| Provider | Status |
|
|
134
|
+
| --- | --- |
|
|
135
|
+
| `opencode` | Supported (via the model's declared `variants` in opencode.json). |
|
|
136
|
+
| `claude` | Claude Code has native `--effort`, but lmctl has not wired `_MEMBER_ effort=` to Claude yet. |
|
|
137
|
+
| `codex` | Native effort surfaces exist; lmctl has not wired `_MEMBER_ effort=` to Codex yet. |
|
|
138
|
+
| `agy` | No verified effort flag; only `--model` supported. |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lmctl-ai/lmctl",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.84",
|
|
4
4
|
"description": "A provider-agnostic control plane for teams of AI coding agents — across providers, with independent review and durable memory.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://lmctl.com",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"dist/cli/schema.sql",
|
|
14
14
|
"dist/cli/side_effect_classifier.json",
|
|
15
15
|
"dist/config/",
|
|
16
|
+
"durable-memory/model_selection.md",
|
|
16
17
|
"workflows/",
|
|
17
18
|
"bin/",
|
|
18
19
|
"package.json",
|