Model guide

The full model catalog — context windows, list prices per million tokens, release timing, and which model fits which seat.

This is the full list of every model stella seeds into its catalog, with the numbers you need to decide: context window, list price, and what the model is good at. The pricing figures come from stella's seed catalog; prices are list $/Mtok (input / output / cached-input). The Released and Best for columns are added by these docs for context — the catalog itself doesn't store or sync them. Verify with your provider before budgeting, since prices and lineups change.

The seed table below is only the offline starting point. stella models refresh syncs the live master list — every valid provider/model slug and its current pricing, from the public models.dev catalog (no API key needed) — into a local model-card database, and stella models list browses it. See the live model catalog below.

The catalog

ModelProviderContextIn $/MtokOut $/MtokCached-in $/MtokReleasedBest for
claude-fable-5anthropic1M10.0050.001.002026The strongest coding and agentic model in the catalog, and the most expensive — first of the Claude 5 family. A top-tier worker for hard multi-file changes, and a strong verifier.
claude-opus-5anthropic1M5.0025.000.502026Half of Fable's list price, with the same 1M window. Reach for this tier when Fable's worker quality is more than the task needs.
claude-sonnet-5anthropic1M3.0015.000.302026Sonnet pricing with a 1M window. A strong default worker when the budget rules out the tiers above.
gpt-5.5openai400k1.2510.000.125late 2025Top-tier reasoning with a 400k window at a mid price. An excellent cross-family verifier over a Claude or GLM worker, and a strong worker on its own.
gemini-3-progemini (also vertex)1M1.2510.000.31Q4 2025The 1M-token window: whole-repo comprehension, long-log analysis. Solid worker, good verifier.
grok-4.3xai1M1.252.500.202026Strong reasoning at a low price, with a 1M window. A different model family, useful as an alternate verifier. Prices above are the below-200k-input tier — double them past it.
deepseek-chatdeepseek128k0.271.100.07Q4 2024 (V3 line, revised through 2025)The best value in the catalog. An ideal triage model, and a very capable budget worker.
glm-5.2zai200k0.602.200.112026Excellent coding at a fraction of flagship price — stella's default worker tier. The coding-plan endpoint makes it a strong subscription option.
us.anthropic.claude-sonnet-4-5-20250929-v1:0bedrock200k3.0015.000.30Sep 2025Claude under AWS governance, for orgs that must keep inference inside their cloud account.
moonshotai/kimi-k3openrouter1M3.0015.000.302026A long-context agentic driver, and the OpenRouter default — a 1M window that holds a whole repo while it works. Runs at xhigh effort with thinking on.
openrouter/autoopenrouter128kgateway-pricedgateway-pricedrollingOpenRouter's meta-router. Any vendor/model slug on the gateway routes exactly as written — one key, every vendor.

Model by role

A run distributes work across separate roles, and each one wants different things from a model:

  • Worker. Writes the code. It wants the strongest coding model you can afford — this is where quality is worth paying for. Worker tokens dominate a run, but most of them are cached-input tokens (see below), so the real price gap between tiers is smaller than the list price suggests.
  • Verifier. Checks the work at high effort. It wants a different family than the worker: cross-family judging avoids same-model bias, where a model forgives the mistakes it would have made itself. A Claude worker with a GPT verifier (or the other way around) catches more than either family judging its own work. This is goal mode's standing verifier.

An installed wrapper plugin can add further roles of its own. What it runs, and how it routes them, is up to its manifest, not stella's.

Ready-made lineups you can copy:

LineupWorkerVerifierTriage
Max qualityclaude-fable-5gpt-5.5deepseek-chat
Balancedglm-5.2claude-fable-5 or gpt-5.5deepseek-chat
Dirt cheapdeepseek-chatglm-5.2deepseek-chat

Each one links to a worked settings.json profile in Examples. Wire any of them up per agent with agent_engine_config.

The live model catalog (stella models refresh)

The seed table above can't keep up with weekly model launches. Without a refresh, an invalid slug is only caught for seeded providers — OpenRouter and custom gateways accept anything and only fail later, mid-run, on the wire. The live catalog fixes both:

stella models refresh                      # sync the master list (models.dev, no API key)
stella models list --provider anthropic    # browse valid slugs + live pricing
  • Master list, locally. One public document, needing no login, covers every provider stella can select (plus about 160 more). It lands in a user-tier SQLite catalog (catalog.db, next to usage.db): model cards keyed per API provider, and model card versions holding each pricing configuration. A refresh adds a new version only when pricing actually changed, so the version history is a real change history, and the latest version is the pricing that displays everywhere (cost metering, stella models list, the deck's model picker). On top of that master list, refresh also overlays each configured provider's own live /models listing (OpenRouter, Anthropic, Gemini, and any OpenAI-compatible endpoint), so newly-shipped slugs and per-model pricing/capability come straight from the serving provider — this overlay resolves through each provider's configured credential (only the models.dev master list needs no key).
  • Incremental. The HTTP ETag is saved and reused, so an unchanged list is one conditional request and zero writes. A stale list (older than 24 hours) re-syncs automatically at startup, and STELLA_CATALOG_AUTO_REFRESH=0 turns that re-sync off — though when automatic syncing can first fire differs by source (see below).
  • Strict slug validation, everywhere. Once a provider's master-list rows are synced, an invalid --model slug shows a clear, immediate error with did-you-mean suggestions — before any wire call, for every provider including OpenRouter and settings.json-defined gateways. The seed table always passes, and a custom endpoint the master list doesn't know about is trusted as-is, exactly as before.
  • Exact telemetry. A model_aliases table connects every string form a model travels under — bare slug, provider/slug, date-stamped snapshots, region-prefixed Bedrock profiles, and any id a provider echoes on the wire (learned automatically from telemetry) — to a single (api provider, model provider, model version, model card) record, so per-model cost analytics never split one model across its different spellings.

When sources sync

A fresh install never contacts models.dev on its own. The two sources are gated differently:

  • Each configured provider's own /models listing auto-syncs whenever it is stale, including the very first time — this is what surfaces new releases as they ship. That traffic stays within your own keys: it goes to a provider you already gave stella a key for, the same host your next turn calls anyway. No credential for a provider means nothing is fetched for it.
  • The models.dev master list is a third party, so stella never contacts it without being asked. It only auto-refreshes once a sync record exists — that is, after your first explicit stella models refresh. Until you run that command once, the seed table above is your whole catalog and models.dev is never contacted.

Because the native overlay resolves through each provider's configured credential, the slugs and prices you get back are exactly what that key can see. This is the same credential chain that authorizes inference — resolved once, used for both:

The credential chain1--api-key flag (needs an explicit --model)2the provider's env var, plus its aliases3settings.json — providers.<id>.api_key4~/.stella/credentials.toml5interactive prompt — saved, so it asks oncekey resolvedfirst hit wins — the rest are skippednothing below the first hit is ever read

Only the models.dev master list is keyless.

Prompt caching changes the math

The cached-input column is what most worker input actually costs partway through a run. stella keeps the prompt prefix stable on purpose — the context engine adds to it rather than rewriting it — so after the first turn, most of every request is a cache hit billed at the cached-input rate: a 10x–20x discount depending on provider. This is why real per-run cost lands far below a simple input-tokens-times-list-price estimate, and why a model's cached-input price matters more than its headline input price for long agentic runs.

The cache-write rate

Reads are only half the story. Writing a prefix into the cache is itself billed, at a premium over the input rate, and the seed catalog carries that figure per model alongside the other three. It doesn't appear in any column above, because it is not a price you shop on — it's an upfront cost you earn back over time:

ModelProviderIn $/MtokCache-write $/MtokPremium
claude-fable-5anthropic10.0012.501.25x
claude-opus-5anthropic5.006.251.25x
claude-sonnet-5anthropic3.003.751.25x
us.anthropic.claude-sonnet-4-5-20250929-v1:0bedrock3.003.751.25x
gpt-5.5openai1.251.251x
gemini-3-progemini, vertex1.251.251x
grok-4.3xai1.251.251x
glm-5.2zai0.600.601x
deepseek-chatdeepseek0.270.271x
moonshotai/kimi-k3openrouter3.003.001x
openrouter/autoopenroutergateway-pricedgateway-priced

The Claude family is the only one in the seed catalog carrying a write premium — and, not coincidentally, the only one where caching is opt-in rather than automatic: Anthropic, Bedrock, and Claude routed through OpenRouter each need an explicit cache marker, while the rest of the field caches for you automatically. With reads at roughly a tenth of the input rate and writes at 1.25x, a written prefix breaks even after two requests — and an agent loop replays its prefix every turn, so the premium is paid once and earned back right away.

There's one failure case worth knowing: a prefix that goes cold before it is read back is a write you paid for and never used. stella stats reports this directly — a negative SAVED ($) means the write premium cost more than the reads it bought, and TTL REWRITES counts the prefixes that expired between turns. See stella stats.

stella models lists the full catalog with live key status per provider. The Observatory's models view shows your observed $/resolved task per model, measured on your repo, your tasks, your prompts — the real measure of what a model is worth to you. See The Observatory dashboard.