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
- 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
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
- 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
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
- Warning: Invalid research provider "${config.models.research
- ${this.name} Model ID is required
- MISSING_CONFIGURATION
- INVALID_INPUT
- Unknown provider '${providerName}' for API key resolution.
AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29).
Data as JSON: /api/errors/b20dd002f5d2f130.
Report an issue: GitHub.