Skip to main content

Catalog Reference

Ante resolves every provider and model from a catalog: the built-in presets documented here, with your ~/.ante/catalog.json merged on top at startup. The catalog is read once per process — restart Ante to pick up edits.

This page is the exhaustive reference. For how to pick a provider day to day and copy-paste customization recipes, see Providers.

Built-in providers

ProviderIDWire styleAuthentication
AnthropicanthropicAnthropicMessageANTHROPIC_API_KEY
Anthropic Subscriptionanthropic-subscriptionAnthropicMessageOAuth
OpenAIopenaiOpenAiResponseOPENAI_API_KEY
OpenAI Compatibleopenai-compatibleOpenAiCompatibleOPENAI_COMPATIBLE_API_KEY
OpenAI Subscriptionopenai-subscriptionOpenAiResponseOAuth (Codex)
GeminigeminiGeminiGEMINI_API_KEY
Vertex AI Geminivertex-geminiGeminiVERTEX_GEMINI_API_KEY
Open RouteropenrouterOpenAiCompatibleOPENROUTER_API_KEY
Open Router Responsesopenrouter-responsesOpenAiResponseOPENROUTER_API_KEY
Open Router Anthropicopenrouter-anthropicAnthropicMessageOPENROUTER_API_KEY
Grok (xAI)xaiOpenAiResponseXAI_API_KEY
ZaizaiOpenAiCompatibleZAI_API_KEY
DeepSeekdeepseekOpenAiCompatibleDEEPSEEK_API_KEY
Ali Coding Planali-coding-planAnthropicMessageALI_CODING_PLAN_API_KEY
AntixantixAnthropicMessageOAuth
Antix (API key)antix-api-keyAnthropicMessageANTIX_API_KEY
LocallocalOpenAiCompatiblenone

The ID column is what you pass to --provider. Providers authenticating via OAuth (anthropic-subscription, openai-subscription, antix) sign in interactively through the TUI; the rest read an API key from the listed environment variable.

Models by provider

Each provider ships a set of preferred_models — the ids that appear in the model picker. When you select a provider without naming a model, Ante defaults to its heaviest-weight model (see Weight classes), not simply the first in the list. Explicit provider choices are authoritative: if you pass --provider, Ante sends the model id you supplied to that provider even when it is not listed in preferred_models (see Resolution).

Anthropic

anthropic and anthropic-subscription serve the same models:

ModelDescriptionContext
claude-haiku-4-5Fastest model with near-frontier intelligence200K
claude-sonnet-5Best combination of speed and intelligence1M
claude-sonnet-4-6Fast and capable1M
claude-opus-4-8Most capable Opus-tier model1M
claude-fable-5Highest capability for demanding reasoning1M
ante --provider anthropic --model claude-sonnet-5

OpenAI

ModelDescriptionContext
gpt-5.6-solGPT-5.6 flagship for complex reasoning and coding1.05M
gpt-5.6-terraGPT-5.6 balance of intelligence and cost1.05M
gpt-5.6-lunaGPT-5.6 model for efficient, high-volume workloads1.05M
gpt-5.5-proHighest reliability on complex problems400K
gpt-5.4-proHighest reliability in the GPT-5.4 family400K
gpt-5.3-codexFrontier coding model400K
gpt-5.4-miniFaster, cheaper GPT-5.4 model400K
gpt-5.4-nanoSmallest GPT-5.4 model400K
ante --provider openai --model gpt-5.6-sol

The openai-subscription provider (ChatGPT/Codex OAuth) serves a smaller set — gpt-5.5, gpt-5.4, and gpt-5.4-mini — since the other GPT ids aren't available on ChatGPT accounts.

OpenAI transports

The openai and openai-subscription providers can stream responses two ways:

TransportEndpointDefault
http_sse (HTTP + SSE)https://api.openai.com/v1/responses (or the subscription equivalent)
websocket_auto (persistent WebSocket)wss://.../v1/responsesopt-in

WebSocket mode keeps one connection open per session and continues each turn with previous_response_id plus only the new input items. In long agentic tool loops this eliminates per-turn round-trip latency. See OpenAI's WebSocket mode guide for the underlying protocol.

Opt in via the process-scoped env var (default is http_sse):

ANTE_OPENAI_TRANSPORT=websocket_auto ante --provider openai --model gpt-5.4-mini

Accepted values: http_sse, websocket_auto. Unknown values warn and fall back to http_sse.

Notes:

  • WS only engages on streaming turns (TUI sessions). Headless --prompt mode uses non-streaming chat() and bypasses WS by design.

  • Any transient WS failure (connect timeout, network blip) falls back to HTTP/SSE for that turn — users never see hard errors caused by the transport choice. Auth failures (401/403) flip the entire session to HTTP/SSE for the rest of its lifetime.

  • Works against both api.openai.com (API-key) and the ChatGPT subscription backend at chatgpt.com/backend-api/codex.

  • To verify which transport is active: in debug builds, toggle the debug panel (Ctrl+L) and check the Info tab for the OpenAI Transport: line. Otherwise grep your session log for transport selected:

    grep "transport selected" ~/.ante/logs/ante.*.log.*

Gemini

gemini and vertex-gemini serve the same models:

ModelDescriptionContext
gemini-3.5-flashGemini 3.5 Flash, agentic workflows1M
gemini-3.1-pro-previewGemini 3.1 Pro with deep thinking1M
gemini-3.1-pro-preview-customtoolsGemini 3.1 Pro optimized for custom tool usage1M
gemini-3.1-flash-liteLow-latency, cost-effective Gemini 3.1 model1M
ante --provider gemini --model gemini-3.1-pro-preview

Grok (xAI)

ModelDescriptionContext
grok-4.5Grok 4.5 with vision500K
grok-4-latestGrok 4256K
ante --provider xai --model grok-4.5

Zai

ModelDescriptionContext
glm-5.2Latest GLM-5.2 model1M
glm-5.1GLM-5.1 model200K
ante --provider zai --model glm-5.2

Open Router

Open Router ships as three providers sharing one API key, split by wire style: openrouter (OpenAI-compatible chat), openrouter-responses (OpenAI Responses), and openrouter-anthropic (Anthropic Messages).

openrouter:

ModelDescriptionContext
deepseek/deepseek-v4-flashDeepSeek V4 Flash1M
x-ai/grok-4.5Grok 4.5 via OpenRouter500K
meta/muse-spark-1.1Muse Spark 1.1 multimodal agentic reasoning model1.05M
tencent/hy3Tencent Hy3 agentic reasoning model262K
xiaomi/mimo-v2.5-proMiMo-V2.5-Pro flagship agentic model1.05M
xiaomi/mimo-v2.5MiMo-V2.5 omnimodal model with vision1.05M
z-ai/glm-5.2GLM 5.2 reasoning model via OpenRouter1.05M
moonshotai/kimi-k3Kimi K3 flagship multimodal reasoning model1.05M
moonshotai/kimi-k2.7-codeKimi K2.7 Code reasoning model with vision262K
minimax/minimax-m3MiniMax M3 multimodal model512K
deepseek/deepseek-v4-proDeepSeek V4 Pro1M

openrouter-responses serves the GPT family over the Responses API: openai/gpt-5.6-sol, openai/gpt-5.6-terra, openai/gpt-5.6-luna (1.05M context), plus openai/gpt-5.5-pro, openai/gpt-5.4-pro, openai/gpt-5.3-codex, openai/gpt-5.4-mini, and openai/gpt-5.4-nano (400K).

openrouter-anthropic serves the Claude family over Anthropic Messages: anthropic/claude-haiku-4.5 (200K context), plus anthropic/claude-sonnet-5, anthropic/claude-sonnet-4.6, anthropic/claude-opus-4.8, anthropic/claude-opus-4.8-fast, and anthropic/claude-fable-5 (1M).

Each provider also accepts any model from Open Router's full model list by id, as long as it speaks that provider's wire style.

ante --provider openrouter --model deepseek/deepseek-v4-pro
ante --provider openrouter-responses --model openai/gpt-5.6-sol
ante --provider openrouter-anthropic --model anthropic/claude-fable-5

DeepSeek

ModelDescriptionContext
deepseek-v4-flashDeepSeek V4 Flash1M
deepseek-v4-proDeepSeek V4 Pro1M
ante --provider deepseek --model deepseek-v4-flash

Set DEEPSEEK_API_KEY, and optionally DEEPSEEK_BASE_URL.

Ali Coding Plan

ModelDescriptionContext
qwen3.5-plusQwen 3.5 Plus with vision1M
qwen3.6-plusLatest Qwen 3.6 Plus with vision1M
glm-5.1GLM-5.1 model200K
MiniMax-M2.5MiniMax M2.5 model205K
qwen3-max-2026-01-23Qwen 3 Max snapshot1M
qwen3-coder-nextQwen 3 Coder Next coding model1M
qwen3-coder-plusQwen 3 Coder Plus coding model1M
qwen-plusFast and capable1M
ante --provider ali-coding-plan --model qwen3.5-plus

Requires a Coding Plan subscription and API key (format: sk-sp-xxxxx). The built-in provider speaks the Anthropic wire endpoint. Some models are only available on the OpenAI-compatible endpoint — add a custom catalog entry to reach it:

{
"providers": {
"ali-coding-plan-oai": {
"display_name": "Ali Coding Plan (OpenAI)",
"base_url": "https://coding.dashscope.aliyuncs.com/v1",
"auth": { "bearer": { "env_key": "ALI_CODING_PLAN_API_KEY" } },
"wire_style": "OpenAiCompatible",
"http_headers": {
"User-Agent": "ante-cli/1.0.0",
"X-DashScope-UserAgent": "coding-agent"
}
}
}
}

Antix

antix (OAuth) and antix-api-key (API key) serve the same models through Antigma:

ModelDescriptionContext
gemini-3.5-flashGemini 3.5 Flash, agentic workflows1M
grok-4.5Grok 4.5, xAI flagship for code and agentic work500K
kimi-k3Kimi K3 flagship reasoning model with vision1M
qwen3.7-maxLatest Qwen 3.7 Max1M
qwen3.7-plusLatest Qwen 3.7 Plus1M
gemini-3.1-pro-previewGemini 3.1 Pro with deep thinking1M
claude-haiku-4-5Fast and capable200K
claude-sonnet-4-6Fast and capable200K
claude-opus-4-8Most capable, slower200K
claude-fable-5Most capable Claude model1M
gpt-5.5Latest flagship GPT model
gpt-5.5-proHighest reliability on complex problems
gpt-5.4Latest model powering Codex and Codex CLI
gpt-5.4-proHighest reliability in the GPT-5.4 family
gpt-5.3-codexCoding-optimized Codex model
deepseek-v4-flashFast DeepSeek V4 Flash1M
deepseek-v4-proDeepSeek V4 Pro with deep thinking1M
glm-5.2Latest GLM-5.2 model1M
ante --provider antix --model claude-sonnet-4-6 # OAuth
ante --provider antix-api-key --model claude-sonnet-4-6 # ANTIX_API_KEY

Local

Run GGUF models locally via the built-in llama.cpp engine — no API key required. local is a wildcard provider; the available model depends on what the offline server has loaded. See Offline Mode for setup.

ante --provider local

catalog.json schema

~/.ante/catalog.json is merged on top of the built-in presets at startup. It has two optional top-level keys, both maps keyed by id:

{
"providers": { /* add or override providers */ },
"models": { /* override fields on existing models */ }
}

A providers entry whose key matches a built-in (e.g. openai) patches that preset field by field; a new key adds a provider. The map key is the provider id — the value you pass to --provider. An id (or legacy name) field inside an entry is ignored.

note

~/.ante can be relocated with the ANTE_HOME environment variable; the catalog is always $ANTE_HOME/catalog.json.

Provider fields

The provider id comes from the map key, not from a field — there is no id field.

FieldRequiredDescription
display_nameNew providers: optionalFriendly name shown in the TUI. New providers default to the provider id (the map key) when omitted.
base_urlNew providers: ✅API base URL.
wire_styleNew providers: ✅API dialect Ante speaks — AnthropicMessage, OpenAiCompatible, OpenAiResponse, or Gemini.
authHow to authenticate (see Authentication). Omit for a provider that needs no key.
http_headersExtra headers sent with every request, as a string→string map.
supports_web_searchWhether the provider exposes a native web-search affordance. When true, the WebSearch tool is added to sessions on this provider automatically; when false (the default), WebSearch is not offered.
preferred_modelsModels shown for this provider in the picker and used as provider defaults (see Model fields). For built-in provider overlays, matching model ids are patched and new ids are appended; omitted leaves the preset list unchanged.
{
"providers": {
"my-provider": {
"display_name": "My Provider",
"base_url": "https://api.example.com/v1",
"wire_style": "OpenAiCompatible",
"auth": { "bearer": { "env_key": "MY_PROVIDER_API_KEY" } },
"http_headers": { "X-Org": "my-team" },
"preferred_models": [
{
"id": "my-model",
"description": "My fine-tuned model",
"max_tokens": 32000,
"context_limit": 200000,
"effort": "medium"
}
]
}
}
}

For built-in providers, include only the fields you want to change. Optional fields with null clear the preset value, which is useful when repointing a provider at a local proxy that should not send the built-in auth or headers:

{
"providers": {
"openai": {
"base_url": "http://localhost:8080/v1",
"auth": null,
"http_headers": null
}
}
}

Authentication

auth is a tagged object: the tag chooses where the credential goes, and the credential is either an environment variable (env_key) or one of Ante's built-in OAuth flows (oauth_preset).

FormJSONSends
Bearer token{ "bearer": { "env_key": "MY_KEY" } }Authorization: Bearer <token>
Custom header{ "header": { "name": "x-api-key", "env_key": "MY_KEY" } }<name>: <token>
Query param{ "query": { "name": "api_key", "env_key": "MY_KEY" } }?<name>=<token>

Swap env_key for oauth_preset to authenticate through a built-in OAuth flow (anthropic, openai, or antix) instead of an env var:

"auth": { "bearer": { "oauth_preset": "anthropic" } }

A provider counts as authenticated when its credential is present — the env var is set and non-empty, or the OAuth token exists on disk. Providers with no auth block are always authenticated. Unauthenticated providers are skipped during auto-detection and shown last in the picker.

Model fields

The same fields describe a model fully inside a provider's preferred_models (where id is required) or partially under models (where the map key supplies the id). Every field except the id is optional:

FieldDescription
idModel id. Required in preferred_models (name is accepted as a legacy alias); supplied by the map key under models.
display_nameFriendly name.
descriptionShort description shown in the model picker.
temperatureSampling temperature.
top_pNucleus sampling cutoff.
top_kTop-k sampling cutoff.
max_tokensMaximum output tokens per turn.
stop_sequencesList of strings that end generation.
context_limitContext window size, in tokens.
effortDefault effort levelmin, low, medium, high, xhigh, or max. Omit for models with no reasoning knob (Ante then sends no effort parameter and hides the effort slider).
weight_classSize/cost tier — Feather, Middle, or Heavy. Drives automatic default and auxiliary model selection (see Weight classes).
support_visionWhether the model accepts image input. When omitted, Ante infers it from the model id; an image read against a model with no vision support returns the image's metadata instead of its pixels.

The models section patches a model by id wherever it is defined, layering on top of the canonical spec at resolve time. The built-in presets leave it empty:

{
"models": {
"claude-sonnet-4-6": { "effort": "high", "max_tokens": 64000 }
}
}

Weight classes

Every built-in model carries a weight_classFeather (small/fast/cheap), Middle, or Heavy (largest/most capable). Ante uses it to pick models without you naming one:

  • Default model — selecting a provider with no explicit model resolves to its heaviest model.
  • Auxiliary calls — cheap internal work such as WebFetch page summarization uses the provider's lightest model.

Models with no weight_class set fall back to catalog order. Set weight_class on a custom model to steer these choices.

How a model and provider are chosen

When Ante resolves a model id it layers three sources, last wins:

  1. Canonical spec — the first provider (in catalog order) whose preferred_models lists that id. An unknown id falls back to a bare default spec.
  2. models override — your partial patch for that id, if any.
  3. Environment overrides — the process env vars below win over everything.

Providers are matched to models too. If you pass only --model, Ante picks an authenticated provider whose preferred_models list contains that id, falling back to an authenticated provider with no preferred_models, then to the default provider.

If you pass both --provider and --model, the explicit provider choice wins as long as that provider is authenticated. Ante still resolves the model id globally first, so known ids inherit catalog metadata and user overrides even when served by a different provider; unknown ids are passed through as bare model specs.

When you don't pass --model/--provider, Ante auto-detects: it uses the first authenticated provider in catalog order and that provider's heaviest-weight model (see Weight classes), falling back to local if nothing is authenticated.

Environment overrides

These process env vars override catalog values for the session without editing the file:

VariableOverrides
MODEL_BASE_URLBase URL for all providers (a per-provider var like ANTHROPIC_BASE_URL takes precedence).
MODEL_TEMPERATUREtemperature
MODEL_TOP_Ptop_p
MODEL_MAX_TOKENSmax_tokens
MODEL_CONTEXT_LIMITcontext_limit

Effort has no env override — set it per run with the --effort CLI flag or per model via the effort field.

Several presets also honor a dedicated base-URL env var that takes precedence over MODEL_BASE_URL: ANTHROPIC_BASE_URL, OPENAI_BASE_URL, OPENAI_COMPATIBLE_BASE_URL, OPENROUTER_BASE_URL, DEEPSEEK_BASE_URL.

Error handling

A bad entry doesn't sink the whole file. Ante parses catalog.json leniently: any provider or model entry that fails to deserialize is skipped, and the rest still load. Skipped entries are reported at startup, e.g.:

Skipped 1 entry in ~/.ante/catalog.json:
- providers.my-provider: missing field `base_url`

Only a file that isn't a JSON object at all is rejected outright. A missing catalog.json is fine — Ante just uses the built-in presets.