{"record":{"id":"b20dd002f5d2f130","repo":"eyaltoledano/claude-task-master","slug":"warning-invalid-main-provider-config-models-ma","errorCode":null,"errorMessage":"Warning: Invalid main provider \"${config.models.main.provider}\" in ${configPath}. Falling back to default.","messagePattern":"Warning: Invalid main provider \"(.+?)\" in (.+?)\\. Falling back to default\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"scripts/modules/config-manager.js","lineNumber":180,"sourceCode":"\t\t\t\tclaudeCode: { ...defaults.claudeCode, ...parsedConfig?.claudeCode },\n\t\t\t\tcodexCli: { ...defaults.codexCli, ...parsedConfig?.codexCli },\n\t\t\t\tgrokCli: { ...defaults.grokCli, ...parsedConfig?.grokCli }\n\t\t\t};\n\t\t\tconfigSource = `file (${configPath})`; // Update source info\n\n\t\t\t// Issue deprecation warning if using legacy config file\n\t\t\tif (isLegacy) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t`⚠️  DEPRECATION WARNING: Found configuration in legacy location '${configPath}'. Please migrate to .taskmaster/config.json. Run 'task-master migrate' to automatically migrate your project.`\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// --- Validation (Warn if file content is invalid) ---\n\t\t\t// Use log.warn for consistency\n\t\t\tif (!validateProvider(config.models.main.provider)) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t`Warning: Invalid main provider \"${config.models.main.provider}\" in ${configPath}. Falling back to default.`\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tconfig.models.main = { ...defaults.models.main };\n\t\t\t}\n\t\t\tif (!validateProvider(config.models.research.provider)) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\tchalk.yellow(\n\t\t\t\t\t\t`Warning: Invalid research provider \"${config.models.research.provider}\" in ${configPath}. Falling back to default.`\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tconfig.models.research = { ...defaults.models.research };\n\t\t\t}\n\t\t\tif (\n\t\t\t\tconfig.models.fallback?.provider &&\n\t\t\t\t!validateProvider(config.models.fallback.provider)\n\t\t\t) {","sourceCodeStart":162,"sourceCodeEnd":198,"githubUrl":"https://github.com/eyaltoledano/claude-task-master/blob/c0c98d367c55296bfe69e65680625b6db437af02/scripts/modules/config-manager.js#L162-L198","documentation":"During config load, the main model's `provider` value is validated against the known provider list. If invalid, task-master warns and resets config.models.main entirely to the built-in defaults, so the custom main model settings are discarded for this run.","triggerScenarios":"A hand-edited or partially written .taskmaster/config.json where models.main.provider is misspelled, empty, or from an unsupported provider.","commonSituations":"Manual config editing; copying config snippets from outdated docs; renaming a provider in a newer version; JSON drift from merge conflicts.","solutions":["Fix the provider string in config to a supported value (e.g. via `task-master models --set-main <model>`)","Run `task-master models` to view valid providers/models","Restore from a known-good config or delete the invalid file to regenerate defaults","Upgrade task-master if the provider is newly supported"],"exampleFix":"// before (.taskmaster/config.json)\n\"models\": { \"main\": { \"provider\": \"openai-chat\", \"modelId\": \"gpt-4o\" } }\n// after\n\"models\": { \"main\": { \"provider\": \"openai\", \"modelId\": \"gpt-4o\" } }","handlingStrategy":"validation","validationCode":"import fs from 'fs';\nconst VALID_PROVIDERS = ['openai','anthropic','google','perplexity','ollama','openrouter','groq','zai'];\nconst cfg = JSON.parse(fs.readFileSync('.taskmaster/config.json','utf8'));\nif (!VALID_PROVIDERS.includes(cfg.models?.main?.provider)) {\n  console.warn('Invalid main provider; fix before running task-master');\n}","typeGuard":"const isValidMainProvider = (cfg) =>\n  typeof cfg?.models?.main?.provider === 'string' && cfg.models.main.provider.length > 0;","tryCatchPattern":"try {\n  const config = loadConfig();\n} catch (e) {\n  console.error('Config invalid, regenerating defaults:', e.message);\n  resetToDefaultConfig();\n}","preventionTips":["Edit models via `task-master models --set-main` instead of by hand","Validate config JSON in CI before running task-master","Keep config under version control to spot drift","Check provider names against `task-master models` output"],"tags":["configuration","validation","provider","fallback-to-default"],"backgroundTag":"invalid-config-value","analyzedSha":"c0c98d367c55296bfe69e65680625b6db437af02","analyzedAt":"2026-08-29T02:56:26.071Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}