Providers and models
Every provider id docker-agent 1.149.0 knows, the credential it reads, the provider/model reference form, the DMR endpoint order, the auto rule, and the keys that tune a model.
docker-agent doctor printed 20 providers with their credential variables on the capture machine, every one not set (our source record). The docs name 31 ids, and the schema description of provider lists the built-in aliases. The table below is the union, in the order of the doctor output and then of the docs. The doctor prints canonical ids such as fireworks-ai, and the legacy ids stay accepted as aliases (conflict C58).
The provider ids
| Provider id | Legacy id | Credential |
|---|---|---|
anthropic | none | ANTHROPIC_API_KEY, or auth.type: workload_identity_federation |
openai | none | OPENAI_API_KEY |
chatgpt | none | none. A browser sign-in through docker agent setup, shown as CHATGPT_OAUTH_TOKEN |
github-copilot | none | GITHUB_TOKEN or GH_TOKEN, a PAT with the copilot scope |
google | none | GOOGLE_API_KEY or GEMINI_API_KEY. Vertex AI uses GOOGLE_GENAI_USE_VERTEXAI, GOOGLE_CLOUD_PROJECT, GOOGLE_CLOUD_LOCATION |
mistral | none | MISTRAL_API_KEY |
openrouter | none | OPENROUTER_API_KEY |
baseten | none | BASETEN_API_KEY |
ovhcloud | none | OVH_AI_ENDPOINTS_ACCESS_TOKEN |
groq | none | GROQ_API_KEY |
fireworks-ai | fireworks | FIREWORKS_API_KEY |
deepseek | none | DEEPSEEK_API_KEY |
cerebras | none | CEREBRAS_API_KEY |
togetherai | together | TOGETHER_API_KEY |
huggingface | none | HF_TOKEN |
moonshotai | moonshot | MOONSHOT_API_KEY |
vercel | none | AI_GATEWAY_API_KEY |
amazon-bedrock | none | AWS_BEARER_TOKEN_BEDROCK, or the AWS credential chain, which the doctor counts as three more variables |
opencode | opencode-zen | OPENCODE_API_KEY |
opencode-go | none | OPENCODE_API_KEY |
dmr | none | none. A local Docker Model Runner |
ollama | none | none. An optional base_url |
xai | none | XAI_API_KEY |
nebius | none | NEBIUS_API_KEY |
nvidia | none | NVIDIA_API_KEY |
minimax | none | MINIMAX_API_KEY |
cloudflare-workers-ai | none | CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID |
cloudflare-ai-gateway | none | CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, and CLOUDFLARE_GATEWAY_ID |
requesty | none | REQUESTY_API_KEY |
azure | none | AZURE_API_KEY and a base_url |
a name under providers | none | the variable in token_key |
The doctor lists eleven ids that the docs tables do not count as providers, and the docs list ten that the doctor did not print. A credential can also come from ~/.config/cagent/.env, from a credential_helper command in the user config, from Docker Desktop, or from a 1Password op:// reference.
The model reference
| Form | Example | Meaning |
|---|---|---|
provider/model | dmr/ai/qwen3, anthropic/claude-sonnet-4-5 | An inline model on a known provider |
a name from models | model: local | A named model with its own keys |
name/model | my_gateway/gpt-4o | A model on a provider defined under providers |
a,b | anthropic/claude-sonnet-4-5,openai/gpt-5 | An alloy. The runtime alternates between the models in one conversation |
auto | model: auto | The first cloud provider with a credential, else a pulled DMR model |
first_available: [...] | a list of references | The first candidate whose credentials are configured, resolved at load time |
--model [agent=]provider/model | --model root=dmr/ai/qwen3 | A CLI override, repeatable per agent |
The auto rule
auto picks the first cloud provider with a configured credential and then a locally pulled Docker Model Runner model. On the DMR side it prefers the model named in model: when that model is already pulled. Otherwise it takes the first available non-embedding model, instead of asking to pull ai/qwen3:latest. It never picks a provider defined under providers. DOCKER_AGENT_DEFAULT_MODEL sets the model used when none is given. On the capture machine, with no credential and the runner unreachable, the doctor still printed auto -> dmr/ai/qwen3:latest and reported one issue (our source record).
The DMR endpoint
| Step | Endpoint |
|---|---|
| 1 | base_url on the model or the provider, when set |
| 2 | the endpoint the docker model plugin reports. The doctor runs docker model status --json through the Desktop context |
| 3 | the default http://127.0.0.1:12434/engines/llama.cpp/v1 when the plugin is not found |
| in a container | http://model-runner.docker.internal/engines/v1, with unload_api: /engines/_unload on the provider |
| unload | the base_url with the trailing /v1 replaced by _unload, called by the unload builtin on on_agent_switch |
The runner needs no API key, and the API is not authenticated (conflict C84). The docs state only that the default URL is used when the plugin is not found. The order above puts that default third, after base_url and the plugin, as the research file reads it.
The models gateway
--models-gateway and DOCKER_AGENT_MODELS_GATEWAY route model traffic through one address, and bypass_models_gateway: true or a custom base_url sends a model directly to its provider. docker agent models asks the gateway /v1/models first and uses the providers with credentials when the gateway answers nothing usable. The Docker gateway needs a Docker token. Desktop hands out one that lasts 15 minutes. When Desktop has none, docker-agent exchanges the docker login access token for a fresh one over HTTPS. The exchange is cached under the cache directory, DOCKER_AGENT_NO_TOKEN_EXCHANGE=1 turns it off, and docker agent debug auth shows the token in use.
Keys that tune a model
| Key | Applies to | Values |
|---|---|---|
temperature, top_p, frequency_penalty, presence_penalty | every provider | sampling parameters, sent per request |
max_tokens | every provider | output tokens per response, not the context window |
thinking_budget | OpenAI | none, minimal, low, medium, high, xhigh, max. xhigh needs gpt-5.2 or later, none and max need gpt-5.6 or later |
thinking_budget | Anthropic | an integer from 1024 to 32768, adaptive, adaptive/<effort>, or an effort level |
thinking_budget | Amazon Bedrock with Claude | an integer, or low, medium, high |
thinking_budget | Gemini 2.5 | an integer, -1 dynamic, 0 off, 24576 at most |
thinking_budget | Gemini 3 | minimal on Flash only, low, medium, high |
thinking_budget | DMR on llama.cpp | sent as llamacpp.reasoning-budget through _configure. On vLLM as thinking_token_budget per request. Ignored on MLX and SGLang |
task_budget | Anthropic | an integer or {type: tokens, total: N}, sent as output_config.task_budget |
provider_opts.context_size | DMR | the context window, sent through _configure. max_tokens is never the window |
provider_opts.runtime_flags, raw_runtime_flags | DMR | flags for the inference runtime, as a list or one string. Exclusive with each other |
provider_opts.keep_alive | DMR | a Go duration, 0 unloads at once, -1 never unloads |
provider_opts.mode | DMR | completion, embedding, reranking, image-generation |
provider_opts.speculative_draft_model, speculative_num_tokens, speculative_acceptance_rate | DMR | speculative decoding with a draft model |
provider_opts.gpu_memory_utilization, hf_overrides | DMR on vLLM | engine settings sent through _configure |
provider_opts.supports_images, supports_pdf | DMR | declare attachment types, because DMR models are not in the models.dev catalogue |
provider_opts.http_headers | OpenAI-compatible providers | headers on every request, such as the Copilot integration id |
fallback.models, retries (2), cooldown (1m) | every provider | models tried after a failure, with backoff |
capabilities, output_capabilities, cost | every provider | attachment flags, image output, and USD prices that override the catalogue |
title_model, compaction_model, compaction_threshold (0.9) | every provider | cheaper models for titles and summaries, and the compaction point |
providers.<name> defaults | every provider | temperature, max_tokens, thinking_budget, task_budget, and the other defaults a model inherits |
The docs give a default reasoning effort per provider. It is medium on OpenAI always-reasoning models, off on Anthropic, -1 on Gemini 2.5, and model-dependent on Gemini 3.
Docker Sandboxes (sbx) and Docker Agent (docker-agent) sbx 0.47.0, docker-agent 1.149.0 · bf4169c · 2026-10-07 · Edition 2026.10