Repository navigation
Added
-
use --small-model <id>fills the slot agents reach for cheap background work — Claude Code's
ANTHROPIC_DEFAULT_HAIKU_MODELandANTHROPIC_SMALL_FAST_MODEL— and--no-small-modelclears
it again. Leaving it unset means "same as the default model", so an expensive default quietly
became the background model too, and the only way to set the slot wasadd, which demands the
endpoint and credential again. The id is validated against the provider's model list and a dry
run previews it without saving, exactly as-mdoes. -
Picking providers works the same way everywhere.
--alland a comma-separated--provider a,b
now mean the same thing onsync,discoverandrefresh;discoveradditionally takes its
ids positionally (discover alpha beta) and falls back to the active provider when given none,
where it used to require exactly one. Every id is resolved before the first request, so a typo
fails before half a run is on disk, and each command keeps its own default for an omitted
selection: the active provider forsyncanddiscover, every provider forrefresh.discoverrefreshes several providers with the same isolationsynchas — an unreachable
endpoint is reported and skipped, the rest still refresh, and the run exits non-zero — and
discover --syncthen writes only the providers that actually refreshed, never a stale list. -
sync --allsyncs every configured provider, and--providernow takes a comma-separated list
(sync -p alpha,beta), so refreshing a machine's providers is one command instead of one per
provider. The menu's Sync providers action is a multi-select with an "all" row; selecting
nothing returns to the menu.Each provider is refreshed and written in turn, with the active provider last, so whatever
"current" pointer an app keeps ends up where the store says it should. An app that names a single
provider rather than a map — Claude Code's env block — is written once rather than once per
provider: it receives the active provider when it supports that protocol, otherwise the single
provider in the run that it does support, so an anthropic-only app is not starved by an openai
active provider. When several candidates compete and the active provider is not among them the
app keeps pointing where it already does, because syncing is not switching. A provider whose
endpoint cannot be reached is reported and skipped; the rest still
sync and the run exits non-zero.--jsonreports aprovidersarray plus the deduplicated union
of the files touched; a single-provider sync keeps the payload it had.
Changed
syncrefreshes the provider's model list (and re-enriches saved metadata) before writing the
agent configs, so one command keeps both sides in step;sync --no-refreshwrites the saved
list without fetching. The menu's separate model-list action and its "also sync?" toggle are
gone — the single Sync a provider action runs the same refresh-then-write path as the CLI.
Fixed
-
A default or small model the endpoint has stopped listing is now named out loud. A refresh keeps
such an id on purpose — one flaky listing must not delete the model a person chose — but keeping
it also kept it out ofremoved, so the only trace was a dim yellow line between the refresh
header and a model table that can run to dozens of rows, and--jsoncarried no trace at all
whilesyncwent on writing that id into every agent config. This is exactly what an endpoint
renaming a model looks like from the client side. It is still written, and now it is reported:
awarning:naming the models and theagentsw use <id> -m <model>that replaces them, printed
afterdiscover's table and aftersync's per-app results, plusrefreshed.missingin the
--jsonpayload. The small model counts too, which it did not before. -
sync --dry-runno longer saves the refreshed model list. The refresh above ran before the
dry-run scope opened, so previewing a sync wrote the freshly fetched list straight into the
provider store — the one thing--dry-runpromises not to do. The fetch still happens, so the
preview matches what a real sync would write, but the list now stays in memory and--json
reports it asrefreshed.saved: false.
Full Changelog: v0.10.2...v0.11.0