pbakaus/impeccable · error
Install failed: {e}
Error message
Install failed: {e} What it means
After downloading the bundle, `install` writes the skill variants, agents, and hooks into the target folders. If that install step returns an error, the message 'Install failed: {e}' is printed, the downloaded bundle temp dir is cleaned up with rm_rf, and the process exits 1.
Source
Thrown at crates/skills/src/commands.rs:705
sys.migrate_unprefix_impeccable(&install_root, scope_opt);
let outcome: Result<(Vec<String>, Vec<bundle::AgentResult>, Vec<&'static str>), String> = (|| {
let written = bundle::copy_provider_skills(&sys, &bundle_dir, &install_root, &targets, scope_opt)?;
let agents = bundle::copy_provider_agents(&sys, &bundle_dir, &install_root, &targets, scope_opt)?;
bundle::copy_provider_commands(&sys, &bundle_dir, &install_root, &targets, scope_opt);
let hooks = if want_hooks {
copy_provider_hooks(&sys, &bundle_dir, &hook_root, &targets, force, Some(&install_root))?
} else {
Vec::new()
};
Ok((written, agents, hooks))
})();
let (written, agent_results, hook_targets) = match outcome {
Ok(v) => v,
Err(e) => {
util::rm_rf(&bundle_dir);
err(io, &format!("Install failed: {e}"));
return Err(Flow::Exit(1));
}
};
util::rm_rf(&bundle_dir);
if written.is_empty() {
err(io, &format!("Nothing was installed: the bundle had no variants for {}.", targets.join(", ")));
return Err(Flow::Exit(1));
}
out(io, &format!(
"Installed impeccable into: {} ({})",
targets.join(", "),
if scope == Scope::User { "global" } else { "project" }
));
install_engine_binaries(&sys, io, &written);
bundle::report_provider_agents(&sys, io, &agent_results);
if !hook_targets.is_empty() {
out(io, &format!("Installed hooks into: {}", hook_targets.join(", ")));View on GitHub (pinned to 2bc2879276)
Solutions
- Check write permissions on the target folder (e.g. .claude/) and retry.
- Free disk space / resolve filesystem errors reported in the inner error `{e}`.
- Delete conflicting or partially installed files and rerun install.
- Retry the install; the bundle temp dir is cleaned automatically so state is not stale.
Example fix
// before $ impeccable install Install failed: Permission denied (os error 13) writing .claude/skills // after $ chmod -R u+w .claude && impeccable install --providers=.claude
Defensive patterns
Strategy: validation
Validate before calling
TARGET=.claude
[ -w "$TARGET" ] || { echo "$TARGET not writable"; exit 1; } Try / catch
impeccable install --providers=.claude || { echo "install failed: $?"; exit 1; } Prevention
- Verify write permissions on target folders and home dir before installing.
- Run install as a user with access to the project directory (not root-created files).
- Watch disk usage on machines that install frequently.
When it happens
Trigger: `install` when the write/extract-to-target step fails: unwritable target harness folder, missing bundle files for the requested providers, hook-root creation failure, or any error bubbling out of the install closure.
Common situations: Read-only project directories; permission issues in the user home when scope=user; partially corrupted bundle contents; filesystem errors (disk full, path too long); existing conflicting files that cannot be overwritten.
Understand the failure class
Background: "failed to write file", "Could not save figure", "Error saving remote file" — file write failed: causes and fixes across languages and libraries — this error's family across 38 libraries.
Related errors
- Warning: cannot access {target}
- {msg} (dynamic Flow::Throw message, e.g. 'Unknown provider(s
- Pass providers explicitly, e.g. --providers=claude,cursor
- Nothing was installed: the bundle had no variants for {}.
- Install check failed: {e}
AI-assisted analysis of pbakaus/impeccable@2bc2879276 (2026-09-08).
Data as JSON: /api/errors/57664e2111873883.
Report an issue: GitHub.