1# Model manifest
2
3The [bundled manifest](../../apps/server/src/provider/model-manifest.json) allows
4offline startup; fetching it from `main` lets model metadata change between
5releases. Failed fetches or invalid data preserve the last usable manifest.
6Remote data must pass both catalog-reference validation and the owning provider's
7adapter validation before replacing the cache.
8
9A newer bundle outranks the cached remote manifest by `updatedAt`, so a release can
10correct model data before the next successful fetch. Bump `updatedAt` whenever the
11file changes. Fetch time cannot establish which copy contains the newer edit.
12
13Generic catalog data describes presentation and capabilities. Each provider owns
14its adapter schema and dispatch mappings. Providers never read the manifest
15itself: the server exposes each driver's entry through the
16[`ModelCatalog`](../../packages/provider-core/src/server/ModelCatalog.ts) port,
17and compatibility policies stay with the server. Claude uses the manifest for its entire
18built-in catalog. Adding a model with an existing capability profile is a JSON
19edit; a new profile is needed only for a new capability combination. Codex still
20gets its model list from its app server.
21
22A model that needs a newer provider CLI should still be announced as soon as it
23ships. Claude entries set `adapter.claudeCode.minVersion`; Codex entries set
24`adapter.codex.minVersion`, since Codex's own `model/list` cannot name models
25released after the installed build. Snapshots report those models in
26`updateRequiredModels`, and the picker tells the user which update unlocks them.
27
28`currentModels.claudeAgent` is the current-model classification overlay for
29releases that predate catalog discovery; it does not add models to their catalogs.
30Catalog-aware releases use `providers.claudeAgent.models[].status` instead.
31Codex uses `currentModels.codex` as a legacy-classification overlay for discovered
32models.
33
34Model data is schema-validated configuration. Tests should cover resolver, cache,
35and adapter semantics with synthetic model names, so adding a model never requires
36tests that repeat the configuration.