zeroclaw-labs/zeroclaw · error · anyhow::Error

skill '{source}' not found in the registry. Available skills

Error message

skill '{source}' not found in the registry.
Available skills: {}

What it means

Registry-based skill install: skills/<source> is not a directory in the cloned registry, and the registry does contain skills — their names are listed in the message. The source name is misspelled, wrongly cased, or absent from this registry.

Source

Thrown at crates/zeroclaw-runtime/src/skills/mod.rs:2527

}

pub fn install_registry_skill_source(
    source: &str,
    skills_path: &Path,
    allow_scripts: bool,
    workspace_dir: &Path,
    registry_url: Option<&str>,
    suppress_tier_banner: bool,
) -> Result<(PathBuf, usize)> {
    let registry_dir = ensure_skills_registry(workspace_dir, registry_url)?;
    let skill_dir = registry_dir.join("skills").join(source);

    if !skill_dir.is_dir() {
        let available = list_registry_skill_names(&registry_dir);
        if available.is_empty() {
            anyhow::bail!("skill '{source}' not found in the registry and no skills are available");
        }
        anyhow::bail!(
            "skill '{source}' not found in the registry.\nAvailable skills: {}",
            available.join(", ")
        );
    }

    if !suppress_tier_banner {
        let (tier, version) = lookup_registry_skill_tier(&registry_dir, source);
        print_install_tier_banner(source, version.as_deref(), tier);
    }

    install_local_skill_source(
        skill_dir.to_str().with_context(|| {
            format!(
                "registry path is not valid UTF-8: {}",
                skill_dir.display().to_string()
            )
        })?,
        skills_path,

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. Pick the exact name from the 'Available skills:' list in the error and retry.
  2. Force a registry update (re-clone or pull) in case the local copy predates the skill being added.
  3. Confirm which registry is configured — the skill may live in another registry that must be named explicitly.
  4. Check for renames in the registry's changelog if this started failing after an update.

Example fix

# before
zeroclaw skills install from-registry:deploy-skills
# error: ...Available skills: deploy_skill, rollback_skill

# after
zeroclaw skills install from-registry:deploy_skill
Defensive patterns

Strategy: validation

Validate before calling

fn skill_in_registry(registry_dir: &std::path::Path, source: &str) -> bool {
    registry_dir.join("skills").join(source).is_dir()
}

Try / catch

match install_registry_skill(source) {
    Err(e) if e.to_string().contains("Available skills:") => {
        eprintln!("{source} not in registry; pick from: {}", e);
        // suggest closest match or fail gracefully
    }
    rest => rest?,
}

Prevention

When it happens

Trigger: Calling the default-registry install path when `registry_dir/skills/<source>` is missing and `list_registry_skill_names` returns names — e.g. installing `from-registry:git-sync` when the registry only has `git_sync`.

Common situations: Name typo or case mismatch; skill renamed/removed in a newer registry revision while the script still uses the old name; wrong registry configured; using a private registry that lacks a skill that exists in the public one.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23). Data as JSON: /api/errors/17ca100e6bd007f2. Report an issue: GitHub.