eyaltoledano/claude-task-master · warning

Warning: Invalid main provider "${config.models.main.provide

Error message

Warning: Invalid main provider "${config.models.main.provider}" in ${configPath}. Falling back to default.

What it means

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.

Source

Thrown at scripts/modules/config-manager.js:180

				claudeCode: { ...defaults.claudeCode, ...parsedConfig?.claudeCode },
				codexCli: { ...defaults.codexCli, ...parsedConfig?.codexCli },
				grokCli: { ...defaults.grokCli, ...parsedConfig?.grokCli }
			};
			configSource = `file (${configPath})`; // Update source info

			// Issue deprecation warning if using legacy config file
			if (isLegacy) {
				console.warn(
					chalk.yellow(
						`⚠️  DEPRECATION WARNING: Found configuration in legacy location '${configPath}'. Please migrate to .taskmaster/config.json. Run 'task-master migrate' to automatically migrate your project.`
					)
				);
			}

			// --- Validation (Warn if file content is invalid) ---
			// Use log.warn for consistency
			if (!validateProvider(config.models.main.provider)) {
				console.warn(
					chalk.yellow(
						`Warning: Invalid main provider "${config.models.main.provider}" in ${configPath}. Falling back to default.`
					)
				);
				config.models.main = { ...defaults.models.main };
			}
			if (!validateProvider(config.models.research.provider)) {
				console.warn(
					chalk.yellow(
						`Warning: Invalid research provider "${config.models.research.provider}" in ${configPath}. Falling back to default.`
					)
				);
				config.models.research = { ...defaults.models.research };
			}
			if (
				config.models.fallback?.provider &&
				!validateProvider(config.models.fallback.provider)
			) {

View on GitHub (pinned to c0c98d367c)

Solutions

  1. Fix the provider string in config to a supported value (e.g. via `task-master models --set-main <model>`)
  2. Run `task-master models` to view valid providers/models
  3. Restore from a known-good config or delete the invalid file to regenerate defaults
  4. Upgrade task-master if the provider is newly supported

Example fix

// before (.taskmaster/config.json)
"models": { "main": { "provider": "openai-chat", "modelId": "gpt-4o" } }
// after
"models": { "main": { "provider": "openai", "modelId": "gpt-4o" } }
Defensive patterns

Strategy: validation

Validate before calling

import fs from 'fs';
const VALID_PROVIDERS = ['openai','anthropic','google','perplexity','ollama','openrouter','groq','zai'];
const cfg = JSON.parse(fs.readFileSync('.taskmaster/config.json','utf8'));
if (!VALID_PROVIDERS.includes(cfg.models?.main?.provider)) {
  console.warn('Invalid main provider; fix before running task-master');
}

Type guard

const isValidMainProvider = (cfg) =>
  typeof cfg?.models?.main?.provider === 'string' && cfg.models.main.provider.length > 0;

Try / catch

try {
  const config = loadConfig();
} catch (e) {
  console.error('Config invalid, regenerating defaults:', e.message);
  resetToDefaultConfig();
}

Prevention

When it happens

Trigger: A hand-edited or partially written .taskmaster/config.json where models.main.provider is misspelled, empty, or from an unsupported provider.

Common situations: Manual config editing; copying config snippets from outdated docs; renaming a provider in a newer version; JSON drift from merge conflicts.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29). Data as JSON: /api/errors/b20dd002f5d2f130. Report an issue: GitHub.