{"record":{"id":"7b76809dc4ecb9b0","repo":"charmbracelet/crush","slug":"failed-to-load-providers-during-reload-w","errorCode":null,"errorMessage":"failed to load providers during reload: %w","messagePattern":"failed to load providers during reload: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/config/store.go","lineNumber":1246,"sourceCode":"\t// Reapply model choices made in this instance. The global config file is\n\t// shared, so it may now name a model a sibling instance selected; a\n\t// reload triggered by an unrelated write must not swap the user's model\n\t// mid-session. An external edit to the config still takes effect for any\n\t// model type this instance never chose.\n\tmaps.Copy(cfg.Models, overrides.Models)\n\n\t// Reconfigure providers\n\tenv := env.New()\n\tresolver := NewShellVariableResolver(env)\n\n\t// Apply top-level env vars before configuring providers so variables\n\t// like AWS_PROFILE are visible to the AWS SDK credential chain.\n\tcfg.applyEnv(resolver)\n\n\tproviders, err := Providers(cfg)\n\tif err != nil {\n\t\tif len(providers) == 0 {\n\t\t\treturn fmt.Errorf(\"failed to load providers during reload: %w\", err)\n\t\t}\n\t\tslog.Warn(\"Reload continuing with the previously known providers\", \"error\", err)\n\t}\n\n\tif err := cfg.configureProviders(ctx, s, env, resolver, providers); err != nil {\n\t\treturn fmt.Errorf(\"failed to configure providers during reload: %w\", err)\n\t}\n\n\t// Update store state BEFORE running model/agent setup (so they see new config)\n\ts.setConfig(cfg)\n\ts.loadedPaths = loadedPaths\n\ts.resolver = resolver\n\ts.knownProviders = providers\n\ts.overrides = overrides\n\ts.workspacePath = workspacePath\n\n\t// Mirror startup flow: setup models and agents against NEW config.\n\tvar setupErr error","sourceCodeStart":1228,"sourceCodeEnd":1264,"githubUrl":"https://github.com/charmbracelet/crush/blob/7944b8e52225d8805e31eacbf7ef24856b0dfb7a/internal/config/store.go#L1228-L1264","documentation":"During reload the store resolves providers via Providers(cfg). If provider loading fails AND no providers could be resolved at all (len(providers)==0), reload fails hard with this error, because a config with zero providers is unusable. If at least one provider loaded, it only logs a warning and continues.","triggerScenarios":"Providers(cfg) returns err with an empty provider set: all provider definitions invalid (bad api keys structure, unknown provider IDs, model resolution failures) or the catwalk provider registry is unreachable and no cached/fallback providers exist.","commonSituations":"Offline first run with no cached provider catalog; a config edit removed/mangled all provider blocks; provider ID renamed in a newer catwalk dataset.","solutions":["Fix the provider definitions in the config (correct provider IDs, required fields) per the wrapped error.","Run while online at least once so the provider catalog can be cached, then reload.","Restore the previously working providers block from version control or backup.","Check the wrapped error for a registry/network failure and retry with connectivity."],"exampleFix":"// before: provider removed entirely, zero providers remain\nproviders: {}\n// after: keep at least one valid provider\nproviders:\n  anthropic: {api_key: \"sk-...\"}","handlingStrategy":"fallback","validationCode":"if len(cfg.Providers) == 0 { return errors.New(\"no providers configured; refusing reload\") }","typeGuard":null,"tryCatchPattern":"if err := reload(); err != nil && strings.Contains(err.Error(), \"failed to load providers\") {\n    ensureNetwork(); ensureCatalogCache(); reload()\n}","preventionTips":["Keep at least one valid provider block in config","Run online once to populate the provider catalog cache","Pin known-good provider IDs; diff config against backups"],"tags":["providers","configuration","reload"],"backgroundTag":"provider-resolution-failed","analyzedSha":"7944b8e52225d8805e31eacbf7ef24856b0dfb7a","analyzedAt":"2026-08-29T12:48:59.079Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}