Hmbown/CodeWhale · error · anyhow::Error
skill was imported locally (spec '{spec}') and cannot be upd
Error message
skill was imported locally (spec '{spec}') and cannot be updated from a registry; re-import or remove it first What it means
ensure_remote_updatable reads the INSTALLED_FROM_MARKER inside the skill package and finds it records a local import source rather than a registry spec. Locally imported skills have no registry origin to update from, so update_skill refuses: the correct lifecycle is to re-import (replacing content) or remove and reinstall. The local-import marker in the skill directory is the input at fault.
Source
Thrown at crates/tui/src/skills/mutation.rs:580
"skill content changed since audit (expected {expected}, found {current}); \
re-review before mutating"
);
}
Ok(Some(current))
}
fn ensure_remote_updatable(skill_dir: &Path) -> Result<()> {
let marker_path = skill_dir.join(install::INSTALLED_FROM_MARKER);
let body = fs::read_to_string(&marker_path)
.with_context(|| format!("failed to read {}", marker_path.display()))?;
let value: serde_json::Value = serde_json::from_str(&body)
.with_context(|| format!("malformed {}", install::INSTALLED_FROM_MARKER))?;
let spec = value
.get("spec")
.and_then(|v| v.as_str())
.unwrap_or_default();
if !install::is_registry_updatable_spec(spec) {
bail!(
"skill was imported locally (spec '{spec}') and cannot be updated from a registry; \
re-import or remove it first"
);
}
Ok(())
}
async fn install_remote(
source: InstallSource,
target: SkillTargetScope,
ctx: &MutationContext<'_>,
) -> Result<SkillMutationReceipt> {
let skills_dir = prepare_owned_target(ctx.workspace, ctx.home, target)?;
let anchor = owned_anchor(ctx.workspace, ctx.home, target)?;
let outcome = install::install_with_registry(
source,
&skills_dir,View on GitHub (pinned to 0c42157ee5)
Solutions
- Re-import the skill from its local source to refresh it
- Remove the skill, then install it from the registry if a registry copy is wanted
- Edit the local source directory directly and re-import
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at crates/tui/src/skills/mutation.rs:580 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20).
Data as JSON: /api/errors/5499b46925776202.
Report an issue: GitHub.