pbakaus/impeccable · warning
Skipped existing {provider}/skills/{skill}. Use --force to r
Error message
Skipped existing {provider}/skills/{skill}. Use --force to replace it with a link.
What it means
In `link_provider_skills`, when creating symlinks for provider skills, a destination that already exists blocks the operation. If the existing entry is not already a symlink to the intended source and `--force` was not passed, the skill is skipped with this message and counted in `result.skipped` — nothing is overwritten.
Source
Thrown at crates/skills/src/bundle.rs:855
}
seen.push(real);
unique.push((provider, local_skills_dir));
}
for (provider, local_skills_dir) in unique {
let src_dir = jsp::join(&[bundle_root, provider, "skills"]);
if !util::exists(&src_dir) {
continue;
}
for skill in bundle_skill_dirs(&src_dir) {
let src = jsp::join(&[&src_dir, &skill]);
let dest = jsp::join(&[&local_skills_dir, &skill]);
if util::exists_or_link(&dest) {
if is_symlink_to(&dest, &src) {
result.already += 1;
continue;
}
if !force {
io.err(&format!("Skipped existing {provider}/skills/{skill}. Use --force to replace it with a link.\n"));
result.skipped += 1;
continue;
}
util::rm_rf(&dest);
}
let mut target = jsp::relative("/", &jsp::dirname(&dest), &src);
if target.is_empty() {
target = ".".to_string();
}
util::symlink_dir(&target, &dest)?;
result.linked += 1;
}
}
Ok(result)
}
#[cfg(test)]
mod tests {View on GitHub (pinned to 2bc2879276)
Solutions
- Re-run with `--force`: `impeccable skills link --force` to replace the existing entry with a link.
- Manually remove the existing `<provider>/skills/<skill>` path, then link again.
- If the existing copy is intentional and current, do nothing — the skip is safe.
- If the existing path is a stale symlink to an old checkout, delete just that symlink and re-link.
Example fix
// before impeccable skills link # Skipped existing claude/skills/impeccable // after impeccable skills link --force
Defensive patterns
Strategy: validation
Validate before calling
[ -e .claude/skills/impeccable ] && echo 'destination exists; pass --force or remove it first'
Prevention
- Run `skills link` with --force when you know prior installs exist.
- Remove old copied skill directories before switching to linked installs.
- Check for stale symlinks after moving the skill checkout.
When it happens
Trigger: Running `impeccable skills link` (without `--force`) where `<provider>/skills/<skill>` already exists as a regular directory/file, or as a symlink pointing somewhere other than the checkout source.
Common situations: A previous `skills install` copied the skill into the provider directory; a manually created folder with the same name; a stale symlink left from an old checkout path that no longer matches the new source.
Understand the failure class
Background: "already exists" / EEXIST / FileAlreadyExistsException: what the 'file already exists' error means and how to fix it — this error's family across 37 libraries.
Related errors
- Warning: user-level agents in {} shadow the project copies j
- Run `npx impeccable update --user` to refresh them, or remov
- Unknown skills command: {other}
- Run 'impeccable --help' for available commands.
AI-assisted analysis of pbakaus/impeccable@2bc2879276 (2026-09-08).
Data as JSON: /api/errors/c779cfdef5715a3c.
Report an issue: GitHub.