Models

Configure which models appear in the UI and set your defaults.

Models

The models your agent can use are defined in ~/.jean2/models.json. This file controls what appears in the client's model picker.

The server filters the list based on your configured API keys — if you don't have a key set up for a provider, its models won't appear in the picker regardless of what's in this file.

File structure

{
  "providers": [
    {
      "id": "provider-id",
      "name": "Display Name",
      "models": [
        {
          "id": "model-id",
          "name": "Model Display Name",
          "contextWindow": 128000,
          "maxOutputTokens": 16384,
          "tier": "standard",
          "capabilities": {
            "input": {
              "text": true,
              "image": true,
              "video": false,
              "file": ["application/pdf"]
            }
          }
        }
      ]
    }
  ],
  "defaultModel": "model-id",
  "defaultProvider": "provider-id"
}

Top-level fields

Field Description
providers Array of provider objects
defaultModel Model used when a preconfig doesn't define its own model, and as a fallback for compaction
defaultProvider Provider used when a preconfig doesn't define its own model, and as a fallback for compaction

Provider fields

Field Description
id The provider ID registered with AI SDK (e.g. openai, anthropic, codex)
name Display name shown in the UI
models Array of model objects available under this provider

Model fields

Field Description
id The model ID as expected by the provider. Sent directly to the LLM API via AI SDK.
name Display name shown in the model picker
contextWindow Maximum context length in tokens
maxOutputTokens (optional) Maximum output tokens the model can produce
tier budget, standard, or premium — for your own organization
variants (optional) Named presets that override provider options
capabilities (optional) Declares what input types the model supports

Variants

Some models support variants — presets that adjust provider-specific settings. Each variant key is a name, and its value is an object with providerOptions that get merged into the request.

{
  "id": "my-model",
  "name": "My Model",
  "variants": {
    "low": { "providerOptions": { "reasoningEffort": "low" } },
    "high": { "providerOptions": { "reasoningEffort": "high" } }
  }
}

Variants appear as sub-options in the model picker.

Capabilities

The capabilities field declares what input types a model supports. This is informational — it doesn't enforce anything, but it powers the client's UI to show or hide features like image upload.

{
  "id": "my-model",
  "name": "My Model",
  "capabilities": {
    "input": {
      "text": true,
      "image": true,
      "video": true,
      "file": ["application/pdf"]
    }
  }
}
Field Description
input.text Whether the model supports text input
input.image Whether the model supports image input
input.video Whether the model supports video input
input.file Array of MIME types the model can process (e.g. ["application/pdf", "text/csv"])

If capabilities is omitted, the model is assumed to support text input only.

Default config

The default models.json created by jean2 init includes MiniMax, Zhipu Coding, and Codex (ChatGPT subscription). This is just a starting point — edit it to match what you actually use.

Keeping the list clean

The model picker in the client shows exactly what's in this file. If you only use two models from a provider, remove the rest. The file is your UI — shape it the way you want.

Applying changes

Restart the server after editing models.json:

jean2 restart