Model Catalog
Every chat node picks a model from a portal picker fed by three sources: the bundled BYOK provider shortlists, the CLI agents’ own--model alias lists, and a remote patch channel that can update the BYOK lists without an app release. This page is the full catalog as coded in src/lib/chatModels.ts.
For how the backends themselves work — API, CLI agent, and Warp — see Chat Pane. The short version: the API (BYOK) backend calls provider SDKs from the app’s frontend via the Vercel AI SDK, the CLI Agent backend drives the vendor CLI headlessly through a per-turn Node bridge (auth is whatever the CLI is already logged into), and Warp is an experimental Rust gateway that routes provider/model strings in a single round trip.
BYOK providers
Nine providers ship in the bundled floor (PROVIDER_MODELS in src/lib/chatModels.ts), 88 models in total. Context windows come from the context map in config/models.json; models without an entry there fall back to the 128,000-token default (DEFAULT_CONTEXT).
- Anthropic
- OpenAI
- Gemini
- Mistral
- DeepSeek
- xAI
- Groq
- OpenRouter
- Ollama
CLI agent shortlists
The four CLI-agent backends ride the samecli backend and bridge sidecar; each has its own --model alias shortlist (CLI_AGENT_MODELS in src/lib/chatModels.ts). Order is default first.
- Claude Code
- Codex
- OpenCode
- Gemini CLI
These are the CLI’s real
--model aliases, not BYOK model ids.The models.json patch channel
The bundled tables above are a floor. On top of it runs a data-only patch channel that lives outside the app-version updater (src/lib/remoteConfig.ts), so a new model can ship by editing config/models.json and pushing, without cutting a release.
At startup, startModelManifestFetch:
1
Fetch
Fetches
https://cdn.jsdelivr.net/gh/tempestai-dev/tempest@main/config/models.json with cache: "no-cache".2
Validate
validate() turns the untrusted JSON into a manifest patch. Anything malformed is dropped rather than coerced, unknown keys are ignored, and a bad manifest degrades to “no patch” — never a throw.3
Merge
The patch is merged over the bundled floor: provider-level replace plus a context merge by id. A provider the patch names wins whole; a provider it omits keeps its bundled list.
4
Cache
The last-good raw manifest is written to
localStorage under the key tempest-model-manifest.config/agents.json, which is verified with minisign because it carries CLI command strings and auto-approve flags. See Agent manifest.
Adding a model
No release: config/models.json
Edit
config/models.json and push to main. The jsDelivr-hosted manifest is fetched at startup, validated, and merged over the bundled floor. Update the file’s updatedAt stamp while you’re there.Release: the bundled floor
Edit
PROVIDER_MODELS / MODEL_CONTEXT in src/lib/chatModels.ts. This changes what ships in the app itself and goes out with the next release — use it for the initial catalog or when a bundled shortlist should change structurally.BYOK provider keys come from your OS credential manager, entered once in Settings → API Keys — see API Keys. The experimental Warp backend is separate from all of the above: it has its own provider/model list (currently
openai/gpt-5-nano, openai/gpt-4o-mini, deepseek/deepseek-v4-flash, kimi/kimi-k3, openrouter/anthropic/claude-sonnet-4) and is gated behind Settings → Experimental. See Chat Pane.