Model Sizes

Updated August 1, 2026

A hero asks for a model size, not a model id: small, standard, or large. Sizes are what makes one hero catalog work for everybody. “Seeker runs large” means something whether you run Claude Code, Codex, or an agent that shipped last week; “Seeker runs opus” only means something to half of them.

crystl ships no size-to-model table

There is no built-in list of which model is large for which agent, and that is deliberate. Model ids churn constantly, there are more agent CLIs every month, and a table compiled into the app is stale the moment a provider renames something. Serving the table from crystl.dev would only move the staleness somewhere else, and either way it could only ever cover the agents we thought to list.

So the map is learned. Your agent knows its own models, ships that knowledge with its own releases, and is already running on your machine. You fill the map in once, or your agent fills in its own.

Filling it in

Two ways, both writing the same map.

In the app: Settings → Agentsagents & models. One row per agent, three fields: small, standard, large. Type the model ids you would pass to that agent’s own --model flag and save. The same tab is where you pick which agent crystl launches by default, so the agent choice and the sizes it maps sit together.

From an agent: crystl agent profile shows what has been learned so far, and crystl agent profile set teaches it.

crystl agent profile                        # what crystl knows
crystl agent profile show --agent codex     # one agent
crystl agent profile set --agent codex \
  --small gpt-5.6-luna --standard gpt-5.6-sol --large gpt-5.6-terra

Pick the agent’s cheapest and fastest model for --small, its everyday default for --standard, and its most capable for --large. Only the sizes you pass are changed, so you can fill one in now and the rest later, and passing an empty string clears one. Both the read and the write are free on every tier: it is local machine config with no abuse surface, and a free account’s heroes should not be stuck on the wrong model with no way to say otherwise.

The profile is keyed by the agent’s binary name, so claude, codex, agy, and any agent crystl has never heard of all get their own entry. It is stored at ~/.config/crystl/agent-profiles.json.

Nothing breaks without a profile

A size is a hint that is allowed to evaporate. If the agent you are running has no profile, or the size a hero asked for has no mapping, crystl passes no model flag at all and the agent launches on whatever it is configured to run. It never guesses, and it never fails a launch over a missing map.

That is also how heroes and quest members behave generally now: they inherit your agent’s own model unless something more deliberate says otherwise. Ordinary shard create has always worked that way, and heroes match it.

Which model actually launches

Three steps, most deliberate first:

  1. An explicit model. The hero’s own pinned model, or --model on the summon. A deliberate choice always wins.
  2. The size, mapped through that agent’s learned profile. This is the only step that knows what large means for codex.
  3. Nothing. No model flag, and the agent runs its own configured model.