pbakaus/impeccable · error
Pass one explicitly, e.g. --providers=claude,cursor
Error message
Pass one explicitly, e.g. --providers=claude,cursor
What it means
Follow-up hint in link when sys.resolve_install_targets returned an empty list — no harness folder could be auto-detected for the project (and none was selectable from --providers). This line tells the user to name the target provider folders explicitly.
Source
Thrown at crates/skills/src/commands.rs:470
fn link(flags: &[String], io: &mut Io) -> R<()> {
let (sys, mut prompt) = ctx(io);
let force = has_flag(flags, "--force");
let yes = has_flag(flags, "-y") || has_flag(flags, "--yes");
let source_value = get_flag_value(flags, "--source");
let providers_value = get_flag_value(flags, "--providers");
let root = sys.find_project_root();
let source = match bundle::resolve_link_source(source_value, &root) {
Ok(s) => s,
Err(e) => {
err(io, &e);
return Err(Flow::Exit(1));
}
};
let targets = sys.resolve_install_targets(&root, providers_value);
if targets.is_empty() {
err(io, "Could not determine a target harness folder.");
err(io, "Pass one explicitly, e.g. --providers=claude,cursor");
return Err(Flow::Exit(1));
}
if !yes {
out(io, &format!("Source checkout: {}", source.checkout_root));
out(io, &format!("Target harness folder(s): {}", targets.join(", ")));
let ans = prompt.ask(io, &format!("Link impeccable skills into {} folder(s)? (Y/n) ", targets.len()))?;
if ans == "n" || ans == "no" {
out(io, "Aborted. Re-run with --providers=<names> to choose explicitly (e.g. --providers=claude,cursor).");
return Err(Flow::Exit(0));
}
}
let result = bundle::link_provider_skills(io, &source.bundle_root, &root, &targets, force).map_err(Flow::Throw)?;
// Linked installs are excluded from install/update refreshes (overwriting
// a symlink would destroy the link), so this is the only path that can
// deliver the OpenCode command bridge to them. A copy, not a symlink: the
// bridge is static and OpenCode scans the real commands dir. No-ops when
// the source checkout has no built commands (#483).
bundle::copy_provider_commands(&sys, &source.bundle_root, &root, &targets, Some(Scope::Project));View on GitHub (pinned to 2bc2879276)
Solutions
- Add `--providers=claude,cursor` (or your providers of choice) to the link command
- Consult the provider list in the docs and pick valid values
Example fix
// before impeccable link // after impeccable link --providers=claude
Defensive patterns
Strategy: validation
Validate before calling
if (!/--providers=/.test(cmd)) warn('link requires --providers=claude,cursor'); Try / catch
try { await link(); } catch (e) { if (/--providers=/.test(String(e))) console.error('Add explicit providers'); } Prevention
- Include --providers in all link invocations
- Document valid provider values in your team scripts
When it happens
Trigger: Same as the missing-target error: `impeccable link` invoked with no `--providers` flag and no detectable harness folders.
Common situations: Users relying on auto-detection in an empty workspace or a non-standard setup.
Understand the failure class
Background: "--flag is required" and "must specify" CLI errors: how missing-required-flag validation works and how to fix it — this error's family across 20 libraries.
Related errors
- Existing skills were left untouched. Re-run with --force to
- {e} (dynamic error string from bundle::resolve_link_source)
- Could not determine a target harness folder.
- Nothing was linked because matching skill folders already ex
- Nothing was linked: {} had no variants for {}.
AI-assisted analysis of pbakaus/impeccable@2bc2879276 (2026-09-08).
Data as JSON: /api/errors/77e5d25f15e01092.
Report an issue: GitHub.