R.6

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 idLegacy idCredential
anthropicnoneANTHROPIC_API_KEY, or auth.type: workload_identity_federation
openainoneOPENAI_API_KEY
chatgptnonenone. A browser sign-in through docker agent setup, shown as CHATGPT_OAUTH_TOKEN
github-copilotnoneGITHUB_TOKEN or GH_TOKEN, a PAT with the copilot scope
googlenoneGOOGLE_API_KEY or GEMINI_API_KEY. Vertex AI uses GOOGLE_GENAI_USE_VERTEXAI, GOOGLE_CLOUD_PROJECT, GOOGLE_CLOUD_LOCATION
mistralnoneMISTRAL_API_KEY
openrouternoneOPENROUTER_API_KEY
basetennoneBASETEN_API_KEY
ovhcloudnoneOVH_AI_ENDPOINTS_ACCESS_TOKEN
groqnoneGROQ_API_KEY
fireworks-aifireworksFIREWORKS_API_KEY
deepseeknoneDEEPSEEK_API_KEY
cerebrasnoneCEREBRAS_API_KEY
togetheraitogetherTOGETHER_API_KEY
huggingfacenoneHF_TOKEN
moonshotaimoonshotMOONSHOT_API_KEY
vercelnoneAI_GATEWAY_API_KEY
amazon-bedrocknoneAWS_BEARER_TOKEN_BEDROCK, or the AWS credential chain, which the doctor counts as three more variables
opencodeopencode-zenOPENCODE_API_KEY
opencode-gononeOPENCODE_API_KEY
dmrnonenone. A local Docker Model Runner
ollamanonenone. An optional base_url
xainoneXAI_API_KEY
nebiusnoneNEBIUS_API_KEY
nvidianoneNVIDIA_API_KEY
minimaxnoneMINIMAX_API_KEY
cloudflare-workers-ainoneCLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID
cloudflare-ai-gatewaynoneCLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, and CLOUDFLARE_GATEWAY_ID
requestynoneREQUESTY_API_KEY
azurenoneAZURE_API_KEY and a base_url
a name under providersnonethe 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

FormExampleMeaning
provider/modeldmr/ai/qwen3, anthropic/claude-sonnet-4-5An inline model on a known provider
a name from modelsmodel: localA named model with its own keys
name/modelmy_gateway/gpt-4oA model on a provider defined under providers
a,banthropic/claude-sonnet-4-5,openai/gpt-5An alloy. The runtime alternates between the models in one conversation
automodel: autoThe first cloud provider with a credential, else a pulled DMR model
first_available: [...]a list of referencesThe first candidate whose credentials are configured, resolved at load time
--model [agent=]provider/model--model root=dmr/ai/qwen3A 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

StepEndpoint
1base_url on the model or the provider, when set
2the endpoint the docker model plugin reports. The doctor runs docker model status --json through the Desktop context
3the default http://127.0.0.1:12434/engines/llama.cpp/v1 when the plugin is not found
in a containerhttp://model-runner.docker.internal/engines/v1, with unload_api: /engines/_unload on the provider
unloadthe 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

KeyApplies toValues
temperature, top_p, frequency_penalty, presence_penaltyevery providersampling parameters, sent per request
max_tokensevery provideroutput tokens per response, not the context window
thinking_budgetOpenAInone, minimal, low, medium, high, xhigh, max. xhigh needs gpt-5.2 or later, none and max need gpt-5.6 or later
thinking_budgetAnthropican integer from 1024 to 32768, adaptive, adaptive/<effort>, or an effort level
thinking_budgetAmazon Bedrock with Claudean integer, or low, medium, high
thinking_budgetGemini 2.5an integer, -1 dynamic, 0 off, 24576 at most
thinking_budgetGemini 3minimal on Flash only, low, medium, high
thinking_budgetDMR on llama.cppsent as llamacpp.reasoning-budget through _configure. On vLLM as thinking_token_budget per request. Ignored on MLX and SGLang
task_budgetAnthropican integer or {type: tokens, total: N}, sent as output_config.task_budget
provider_opts.context_sizeDMRthe context window, sent through _configure. max_tokens is never the window
provider_opts.runtime_flags, raw_runtime_flagsDMRflags for the inference runtime, as a list or one string. Exclusive with each other
provider_opts.keep_aliveDMRa Go duration, 0 unloads at once, -1 never unloads
provider_opts.modeDMRcompletion, embedding, reranking, image-generation
provider_opts.speculative_draft_model, speculative_num_tokens, speculative_acceptance_rateDMRspeculative decoding with a draft model
provider_opts.gpu_memory_utilization, hf_overridesDMR on vLLMengine settings sent through _configure
provider_opts.supports_images, supports_pdfDMRdeclare attachment types, because DMR models are not in the models.dev catalogue
provider_opts.http_headersOpenAI-compatible providersheaders on every request, such as the Copilot integration id
fallback.models, retries (2), cooldown (1m)every providermodels tried after a failure, with backoff
capabilities, output_capabilities, costevery providerattachment flags, image output, and USD prices that override the catalogue
title_model, compaction_model, compaction_threshold (0.9)every providercheaper models for titles and summaries, and the compaction point
providers.<name> defaultsevery providertemperature, 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