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

  1. Re-import the skill from its local source to refresh it
  2. Remove the skill, then install it from the registry if a registry copy is wanted
  3. 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.