mibyan-agent release.
When the manifest is unreachable (offline, network blocked, hosting failure), Mibyan silently falls back to the in-repo snapshot that ships with the CLI. The manifest never breaks the picker — worst case you see whatever list was bundled with your installed version.
Live manifest URL
main via the existing deploy-site.yml GitHub Pages pipeline. The source of truth lives in the repo at website/static/api/model-catalog.json.
Schema
version— integer schema version. Future schemas bump this; Mibyan refuses manifests with versions it doesn’t understand and falls back to the hardcoded snapshot.metadata— free-form dict at the manifest, provider, and model level. Any keys. Mibyan ignores unknown fields, so you can annotate entries ("tier": "paid","tags": [...], etc.) without coordinating a schema change.description— OpenRouter-only. Drives picker badge text ("recommended","free","default", or empty). Nous Portal doesn’t use this.default— exactly one entry per provider may carry"default": true. That model is the silent default: what Mibyan lands on when the user never selected a model (GUI onboarding confirm card,providerconfigured with nomodel, emptymodel.default). Read cache-only at runtime (get_default_model_from_cache) so hot resolution paths never hit the network; when no cached manifest exists, Mibyan falls back to the in-repoPREFERRED_SILENT_DEFAULT_MODELconstant, which must match the labeled entry. This lets maintainers rotate the silent default without shipping a release. It is deliberately a capable low-cost model, never the priciest flagship.- Pricing and context length are NOT in the manifest. Those come from live provider APIs (
/v1/modelsendpoints, models.dev) at fetch time.
Fetch behavior
Cache location:
~/.mibyan/cache/model_catalog.json.
Per-provider model lists in the GUI picker
The Desktop, TUI and dashboard pickers (model.options) build each provider’s row from the disk-cached live catalog (~/.mibyan/provider_models_cache.json) or, when nothing is cached yet, the curated list. Opening the picker never waits on a provider’s /v1/models probe or on an auth probe: stale or missing catalogs are refreshed in a background thread and land on the next open, so one slow, rate-limited or unreachable provider cannot hold the whole picker on its loading state. Refresh models (or /model --refresh) is the explicit action that busts the cache and probes every provider live.
Config
enabled: false to disable remote fetch entirely and always use the in-repo snapshot (this also disables the gateway’s background refresh). ttl_minutes sets both the cache lifetime and the gateway refresh cadence; the legacy ttl_hours key is still honoured if you set it explicitly.
Per-provider override URLs
Third parties can self-host their own curation list using the same schema. Point a provider at a custom URL:Hiding providers from the picker
excluded_providers lets you hide specific providers from the /model picker even when valid credentials exist. Useful when credentials are present for legacy or testing providers that shouldn’t appear in normal use (e.g. an old Copilot or OpenRouter token still cached in auth.json or discovered via the gh CLI).
copilot hides the provider regardless of which section emits it. It is honored by every /model picker surface: the gateway interactive/text pickers, the TUI picker, and the interactive mibyan model CLI picker. An empty list (or omitting the key) has no effect.
Updating the manifest
Maintainers:website/static/api/model-catalog.json to main. The docs site auto-deploys on merge and the new manifest is live within a few minutes.
You can also hand-edit the JSON directly for fine-grained metadata changes that don’t belong in the in-repo snapshot — the generator script is a convenience, not the single source of truth.
