Skip to main content

Providers

Ante is provider-agnostic. Each provider implements a common interface for sending prompts and receiving streaming responses, and providers and models are resolved from a catalog at session start.

This page covers the everyday tasks: picking a provider, authenticating, and customizing the catalog. For the complete list of built-in providers, every model they serve, and the full catalog.json schema, see the Catalog Reference.

Selecting a provider

You can set your provider three ways, in order of precedence:

  1. CLI flagante --provider anthropic --model claude-sonnet-5
  2. Settings file — set provider and model in ~/.ante/settings.json
  3. Auto-detect — if you specify neither, Ante uses the first provider you have credentials for (and local if none).

Every provider key you can pass to --provider is listed in the Catalog Reference.

Mid-session, type /providers in the TUI: pick a connected provider, then confirm a model (and effort) from its scoped picker. Ante remembers the last model you used on each provider. See Models, Providers & Effort.

Authentication

Most providers read an API key from an environment variable:

export ANTHROPIC_API_KEY="sk-ant-..."
ante --provider anthropic --model claude-sonnet-5

Each provider's exact auth method (env var name or OAuth) is in the Catalog Reference.

Paste an API key

You can also paste a key directly in the onboarding dialog (reopen it any time with /welcome): choose Use API key, and Ante auto-detects the provider from the key prefix, masks the input, and validates the key against the provider before storing it owner-only under ~/.ante/auth/. A key set in the environment always takes precedence over a stored one.

With Anthropic selected on the API-key step, press Tab to sign in to the Anthropic Console in your browser instead — Ante provisions an API key for you automatically, without the key ever touching the clipboard.

Subscription login (OAuth)

Providers with subscription plans (Anthropic, OpenAI, Antix, etc.) can sign in via OAuth instead, so you use your existing subscription without managing API keys. Type /connect in the TUI to open the provider login flow. Ante launches your default browser for authentication, then links your session automatically.

Connecting to a provider via /connect

Once connected, Ante remembers your credentials for future sessions, so there is no need to re-authenticate each time.

tip

When using third-party providers, make sure the model supports tool use (function calling) — Ante relies on it for agent capabilities. If results are poor, try a larger or more capable model.

Custom catalog

Create ~/.ante/catalog.json to add a provider Ante doesn't ship, patch a built-in one, or tweak a model's defaults. It is merged on top of the built-in presets at startup, so you only specify what you want to add or change. Prefer not to write it by hand? Run /add-provider in the TUI: Ante discovers the endpoint's models, can probe which effort levels each one accepts, and writes the entry for you (restart to load it). The examples below are the common cases; see the Catalog Reference for the full schema, authentication forms, and resolution rules.

Add a hosted provider

Most hosted endpoints are OpenAI-compatible. Register one with wire_style: "OpenAiCompatible", point base_url at it, and list the models you want to appear in the picker:

{
"providers": {
"together": {
"display_name": "Together AI",
"base_url": "https://api.together.xyz/v1",
"wire_style": "OpenAiCompatible",
"auth": { "bearer": { "env_key": "TOGETHER_API_KEY" } },
"preferred_models": [
{
"id": "moonshotai/Kimi-K2-Instruct",
"description": "Kimi K2 on Together",
"max_tokens": 16384,
"context_limit": 128000,
"effort": "medium"
}
]
}
}
}
export TOGETHER_API_KEY="..."
ante --provider together --model moonshotai/Kimi-K2-Instruct

Declare the effort levels a model accepts

The effort slider's ladder is built in per provider and model family, so a model on a custom endpoint may get a ladder that doesn't match what the endpoint really accepts. Declare the true set with supported_efforts — the slider then shows exactly those levels, and OpenAI-compatible providers send the selected level as the same-named reasoning_effort:

"preferred_models": [
{
"id": "kimi-k3",
"effort": "high",
"supported_efforts": ["low", "medium", "high"]
}
]

An empty list ("supported_efforts": []) declares that the model takes no effort setting at all. There is no API that reports supported levels, so when in doubt let /add-provider probe the endpoint for you.

Add a local provider with no auth

Omit auth for a provider that needs no key, and leave preferred_models off when the provider has no stable picker/default model list — handy for a local server like Ollama where the available models change as you pull them. You can still pass any model id explicitly with --provider and --model:

{
"providers": {
"ollama": {
"display_name": "Ollama",
"base_url": "http://localhost:11434/v1",
"wire_style": "OpenAiCompatible"
}
}
}
ante --provider ollama --model qwen2.5-coder:7b

Patch a built-in provider

When the key matches a built-in provider, only the fields you set are changed. Set optional fields such as auth or http_headers to null to clear the preset value:

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

Send extra request parameters

Gateways and proxies often require a parameter Ante doesn't model. Put it in extra_body and it is merged into every chat and streaming request body for that provider:

{
"providers": {
"my-gateway": {
"display_name": "My Gateway",
"base_url": "https://gateway.example.com/v1",
"wire_style": "OpenAiCompatible",
"auth": { "bearer": { "env_key": "MY_GATEWAY_API_KEY" } },
"extra_body": {
"service_tier": "priority"
}
}
}
}

extra_body can only add fields — keys Ante already generates for that wire style (model, messages, stream, and friends) are dropped at startup with a notice, and the provider still loads. See Extra request fields for the full reserved list.

Override model defaults

The models section patches a model by id without redefining it. Each field you set replaces the built-in default; everything else is left alone:

{
"models": {
"claude-opus-5": { "effort": "max" },
"claude-sonnet-5": { "effort": "high", "max_tokens": 64000 },
"gpt-5.5": { "temperature": 0.2 }
}
}

Third-party providers

Using Open Router

  1. Sign up at openrouter.ai and generate an API key.
  2. Set your API key:
    export OPENROUTER_API_KEY="sk-or-..."
  3. Use any model from Open Router's model list:
    ante --provider openrouter --model deepseek/deepseek-reasoner

OpenAI-compatible providers

Many LLM providers expose an OpenAI-compatible API (e.g., Together AI, Fireworks, Groq Cloud, Perplexity). For a one-off you can reuse the built-in openai-compatible provider via env vars (no catalog edit needed):

  1. Set the base URL — the per-provider variable takes precedence over MODEL_BASE_URL:
    export OPENAI_COMPATIBLE_BASE_URL="https://api.together.xyz/v1"
  2. Set your API key:
    export OPENAI_COMPATIBLE_API_KEY="your-provider-api-key"
  3. Run with the OpenAI Compatible provider:
    ante --provider openai-compatible --model meta-llama/Llama-3-70b-chat-hf

For something you'll use repeatedly, add a named provider to your custom catalog instead so it shows up in the picker.