Helpers on another model, chosen by logic rather than by the model

A helper still runs on the chat's own model by default. Other models are
designated per main model -- offered to it, or by hand only -- by the
instance or, with helpers.designate, by a person. subagent_run gains a
model argument whose enum is exactly the candidates that passed two
checks: capacity (a model that serves one request at a time cannot be
its own helper; a connection that holds one model at a time cannot serve
a helper on another of its models) and the model rules. A helper on
another model takes that model's own effort and data group. The composer
gains a Helpers picker; the model page, the connection form and Settings
gain their switches and lists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-29 17:37:53 +00:00
co-authored by Claude Opus 5.5
parent c27fe47d4d
commit 216e3a20d1
24 changed files with 1385 additions and 48 deletions
+37
View File
@@ -16,6 +16,43 @@ for 1.0.0 have something to be assembled from.
## Unreleased
## 1.12.0
Helpers on another model. This is the last of the three releases.
- **A helper can run on a different model.** A helper is still the chat's own
model by default. On each model's page, **Helpers** lists other models this
one may send helpers to. Each is either *offered to the model*, so it can
choose that model itself, or *by hand only*, so it is used once somebody adds
it to a chat. When there is more than one choice, `subagent_run` gains a
`model` argument limited to exactly those models, and the model is told what
each is for. A helper on another model runs with that model's own default
reasoning effort, never the parent's, which it might refuse. It reads its own
data group's memories and notes.
- **The composer's Helpers button** lists the models designated for the chat's
model. Tick one to add it to this chat, on the new-chat screen as well.
- **Capacity is decided by logic, not by the model.** Two new switches, both off
by default, so nothing changes until they are set:
- **Serves one request at a time**, on a model. It cannot be its own helper,
because the helper would wait behind the reply that is waiting for it.
- **Holds one model at a time**, on a connection (llama-swap in front of one
GPU). Its models may still be their own helpers, but never send one to
another model on the same connection, because loading it would unload the
model whose reply is waiting.
A model with no helper it can use is no longer offered `subagent_run` at all,
instead of being offered a tool that refuses every call. Asking a friend and
the crowd are not affected: both are sequential, and the wait for a model to
load is accepted there.
- **The model rules apply to helpers too.** A designation the model chooses
itself must be allowed by the rules. One added to a chat by hand needs what a
crowd member added by hand needs. A model in another data group needs a rule
that allows it.
- **Your own helper models.** With the new *Choose their own helper models*
permission (off by default), Settings → Models lets a person designate helpers
for their models. These are added to the instance's, and a row of theirs for
the same pair replaces the instance's.
## 1.11.0
Rules for which model may talk to which. This is the second of three releases;