{"record":{"id":"dffc037a576aa1e3","repo":"pbakaus/impeccable","slug":"pass-providers-explicitly-e-g-providers-claude","errorCode":null,"errorMessage":"Pass providers explicitly, e.g. --providers=claude,cursor","messagePattern":"Pass providers explicitly, e\\.g\\. --providers=claude,cursor","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/skills/src/commands.rs","lineNumber":545,"sourceCode":"/// Sentinel for the JS `process.exit(1)` inside install's already-installed\n/// `try` block (an exit, not an error, so no \"Install check failed\" line).\nconst EXIT_1: &str = \"\\u{0}exit1\";\n\n/// JS: install(flags)\nfn install(flags: &[String], io: &mut Io) -> R<()> {\n    let (sys, mut prompt) = ctx(io);\n    let force = has_flag(flags, \"--force\");\n    let yes = has_flag(flags, \"-y\") || has_flag(flags, \"--yes\");\n    let install_hooks = !has_flag(flags, \"--no-hooks\");\n    let project_root = sys.find_project_root();\n    if !yes {\n        print_install_intro(&prompt, io);\n    }\n    let plan = match choose_install_plan(&sys, &mut prompt, io, &project_root, flags, yes) {\n        Ok(p) => p,\n        Err(Flow::Throw(msg)) => {\n            err(io, &msg);\n            err(io, \"Pass providers explicitly, e.g. --providers=claude,cursor\");\n            return Err(Flow::Exit(1));\n        }\n        Err(other) => return Err(other),\n    };\n    let InstallPlan { targets, scope, install_root, hook_root, explicit } = plan;\n    let scope_opt = Some(scope);\n    let existing = sys.is_already_installed(&install_root, scope_opt);\n    let installed_targets: Vec<&'static str> = if existing.is_some() {\n        sys.find_installed_providers(&install_root, scope_opt)\n    } else {\n        Vec::new()\n    };\n    let missing_selected_targets: Vec<&'static str> = if existing.is_some() && !force && explicit {\n        targets.iter().copied().filter(|p| !installed_targets.contains(p)).collect()\n    } else {\n        Vec::new()\n    };\n","sourceCodeStart":527,"sourceCodeEnd":563,"githubUrl":"https://github.com/pbakaus/impeccable/blob/2bc2879276c1f321a53c4ca99d3371e411329b52/crates/skills/src/commands.rs#L527-L563","documentation":"Recovery hint in install's plan-selection error arm: choose_install_plan returned Flow::Throw (e.g. no providers could be determined interactively or from flags), and this line suggests passing --providers explicitly to bypass the prompt/autodetection.","triggerScenarios":"Any install invocation where provider selection fails validation (unknown providers or none resolvable).","commonSituations":"Users omitting `--providers` in environments where auto-detection returns nothing or invalid names.","solutions":["Add an explicit `--providers=claude,cursor` argument","Verify the flag spelling and value"],"exampleFix":"// before\nimpeccable install --providers=foo\n// after\nimpeccable install --providers=claude,cursor","handlingStrategy":"validation","validationCode":"if (!args.includes('--providers')) throw new Error('install requires --providers=claude,cursor');","typeGuard":null,"tryCatchPattern":"try { await install(); } catch (e) { if (/--providers/.test(String(e))) console.error('Pass explicit providers'); }","preventionTips":["Always pass --providers in non-interactive runs","Pin provider choices in CI configuration"],"tags":["cli","install","hint"],"backgroundTag":"missing-required-flag","analyzedSha":"2bc2879276c1f321a53c4ca99d3371e411329b52","analyzedAt":"2026-09-08T04:51:14.109Z","contentChangedAt":"2026-09-08T04:51:14.109Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}