dagger/dagger · error
provider %q not configured, run 'dagger llm add-key %s' firs
Error message
provider %q not configured, run 'dagger llm add-key %s' first
What it means
`dagger llm use <provider>` loaded a config file but the requested provider has no entry in [llm.providers], meaning no API key/credentials were ever stored for it. The command refuses to make it the default without configuration.
Source
Thrown at internal/cmd/dagger/llm_config.go:647
var llmSetDefaultCmd = &cobra.Command{
Use: "set-default <provider> [model]",
Short: "Set default provider and optionally model",
Args: cobra.RangeArgs(1, 2),
RunE: func(cmd *cobra.Command, args []string) error {
provider := args[0]
cfg, err := llmconfig.Load()
if err != nil {
return err
}
if cfg == nil {
return fmt.Errorf("no LLM configuration found, run 'dagger llm setup' first")
}
// Verify provider exists
providerCfg, ok := cfg.LLM.Providers[provider]
if !ok {
return fmt.Errorf("provider %q not configured, run 'dagger llm add-key %s' first",
provider, provider)
}
cfg.LLM.DefaultProvider = provider
if len(args) > 1 {
cfg.LLM.DefaultModel = args[1]
} else {
// Don't carry the previous provider's model over: it would be
// exported as this provider's model and prefix routing could send
// requests back to the old provider. Prefer the provider's own
// configured model, then its catalog default; otherwise clear it.
model := providerCfg.Model
if model == "" {
model = llmconfig.DefaultModelForProvider(provider)
}
cfg.LLM.DefaultModel = model
}
View on GitHub (pinned to 82ba2681db)
Solutions
- Run `dagger llm add-key <provider>` first, then `dagger llm use <provider>`
- Verify the exact provider name against [llm.providers] in the config file
- Check DAGGER_CONFIG points at the config that actually holds the key
- Re-add credentials if the provider entry was removed previously
Example fix
// before (shell) dagger llm use anthropic # key never added // after (shell) dagger llm add-key anthropic dagger llm use anthropic
Defensive patterns
Strategy: validation
Validate before calling
cfg, err := llmconfig.Load()
if err != nil { return err }
if cfg == nil { return errors.New("no config") }
if _, ok := cfg.LLM.Providers[provider]; !ok {
return fmt.Errorf("provider %q not configured; run 'dagger llm add-key %s' first", provider, provider)
} Type guard
func providerReady(cfg *llmconfig.Config, name string) bool {
if cfg == nil { return false }
p, ok := cfg.LLM.Providers[name]
return ok && (p.APIKey != "" || p.AuthToken != "")
} Try / catch
if _, ok := cfg.LLM.Providers[provider]; !ok {
return fmt.Errorf("provider %q not configured, run 'dagger llm add-key %s' first", provider, provider)
} Prevention
- Always `dagger llm add-key <provider>` before `dagger llm use <provider>`
- Use identical provider aliases across add-key/use/remove-key
- After remove-key, re-add before switching back to that provider
- Sync the config (with keys) when moving between machines
When it happens
Trigger: `dagger llm use <name>` where <name> is absent from cfg.LLM.Providers (llm_config.go:647): typo in provider name, key never added via `dagger llm add-key`, provider removed earlier with `dagger llm remove-key`, or a different config file in scope via DAGGER_CONFIG.
Common situations: Using a provider name that differs from the alias used at add-key time; switching machines where the key wasn't migrated; after removing the key; CI environment missing the config with keys.
Related errors
- no LLM configuration found
- provider %q not found in config
- no LLM configuration found, run 'dagger llm setup' first
- startInteractivePromptMode: no ID found in LLM object: %+v
- startInteractivePromptMode: unexpected response type for LLM
AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05).
Data as JSON: /api/errors/0829b742af31c006.
Report an issue: GitHub.