charmbracelet/crush · critical · errModelProviderNotConfigured

model provider not configured

Error message

model provider not configured

What it means

errModelProviderNotConfigured is a sentinel error returned by coordinator.run (line 261), Summarize (line 1240), and runSubAgent (line 1425) when the provider named by the active model's ModelCfg.Provider is not found in the resolved Providers config. The provider config is required to build API credentials/options (mergeCallOptions, token refresh), so the run is aborted.

Source

Thrown at internal/agent/coordinator.go:60

	"github.com/charmbracelet/crush/internal/skills"
	"golang.org/x/sync/errgroup"

	"charm.land/fantasy/providers/anthropic"
	"charm.land/fantasy/providers/azure"
	"charm.land/fantasy/providers/bedrock"
	"charm.land/fantasy/providers/google"
	"charm.land/fantasy/providers/openai"
	"charm.land/fantasy/providers/openaicompat"
	"charm.land/fantasy/providers/openrouter"
	"charm.land/fantasy/providers/vercel"
	openaisdk "github.com/openai/openai-go/v3/option"
	"github.com/qjebbs/go-jsons"
)

// Coordinator errors.
var (
	errCoderAgentNotConfigured         = errors.New("coder agent not configured")
	errModelProviderNotConfigured      = errors.New("model provider not configured")
	errLargeModelNotSelected           = errors.New("large model not selected")
	errSmallModelNotSelected           = errors.New("small model not selected")
	errLargeModelProviderNotConfigured = errors.New("large model provider not configured")
	errSmallModelProviderNotConfigured = errors.New("small model provider not configured")
	errLargeModelNotFound              = errors.New("large model not found in provider config")
	errSmallModelNotFound              = errors.New("small model not found in provider config")
)

// Copilot models that use the Responses API instead of Chat Completions.
var copilotResponsesModels = map[string]bool{
	"gpt-5.2":       true,
	"gpt-5.2-codex": true,
	"gpt-5.3-codex": true,
	"gpt-5.4":       true,
	"gpt-5.4-mini":  true,
	"gpt-5.5":       true,
	"gpt-5-mini":    true,
	"gpt-5.6-luna":  true,

View on GitHub (pinned to 7944b8e522)

Solutions

  1. Add the missing provider block to your crushrc so it matches the model's provider id.
  2. Update the model selection (large/small model settings) to a model whose provider is configured.
  3. Check config load logs for provider merge/load failures and fix the source config.

Example fix

// before
provider "openai" { ... }
model "anthropic/claude-sonnet-4" // provider missing
// after
provider "anthropic" {
  api_key env.ANTHROPIC_API_KEY
}
model "anthropic/claude-sonnet-4"
Defensive patterns

Strategy: validation

Validate before calling

model := coord.CurrentModel()
if _, ok := cfg.Providers.Get(model.ModelCfg.Provider); !ok {
    return fmt.Errorf("provider %q for selected model %q is not configured", model.ModelCfg.Provider, model.ID)
}

Try / catch

result, err := coord.Run(ctx, sessionID, prompt)
if errors.Is(err, errModelProviderNotConfigured) {
    // add the provider block or switch models, then retry the run
}

Prevention

When it happens

Trigger: Run/Summarize/runSubAgent invoked after UpdateModels resolved a model whose Provider string has no matching entry in cfg.Config().Providers — e.g. the model came from a different config layer, the provider block was removed, or the provider id is misspelled.

Common situations: Deleting or renaming a provider block while models still reference it; env-specific config overlays dropping a provider; OAuth providers whose config failed to load; switching models to one whose provider was never set up.

Related errors


AI-assisted analysis of charmbracelet/crush@7944b8e522 (2026-08-29). Data as JSON: /api/errors/13a0dde7397184f4. Report an issue: GitHub.