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

skill '{skill_name}' not found in registry '{registry_name}'

Error message

skill '{skill_name}' not found in registry '{registry_name}' and no skills are available

What it means

Installing a skill from a named extra registry: after that registry is cloned, skills/<skill_name> is not a directory and the registry listing is empty. The named registry's clone contains no skills at all, so nothing can be installed from it.

Source

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

                    configured.join(", ")
                )
            }
        })?;

    if registry.kind != zeroclaw_config::schema::ExternalRegistryKind::Git {
        anyhow::bail!(
            "registry '{registry_name}' uses unsupported kind '{}'; only 'git' is supported",
            registry.kind
        );
    }

    let registry_dir = ensure_extra_registry(workspace_dir, &registry_name, &registry.url)?;
    let skill_dir = registry_dir.join("skills").join(&skill_name);

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

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

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

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. Verify the registry URL configured for that name is a skills registry with a top-level skills/ directory.
  2. Delete the local clone of that registry under the workspace and retry for a fresh full clone.
  3. If submodules are used in the registry, make sure they resolve over your credentials.
  4. Populate the registry repo with at least one skill directory under skills/ if you own it.

Example fix

# before
zeroclaw skills install registry:extra/my-skill
# error: skill 'my-skill' not found in registry 'extra' and no skills are available

# after: fix the registry URL to a real catalog, then clear cache
# config: [[skills.registries]] name="extra" kind="git" url="https://github.com/org/skills"
rm -rf .zeroclaw/registries/extra && zeroclaw skills install registry:extra/my-skill
Defensive patterns

Strategy: validation

Validate before calling

fn extra_registry_ready(registry_dir: &std::path::Path) -> bool {
    registry_dir
        .join("skills")
        .read_dir()
        .map(|mut it| it.any(|e| e.map(|e| e.path().is_dir()).unwrap_or(false)))
        .unwrap_or(false)
}

Try / catch

match install_from_registry(registry_name, skill) {
    Err(e) if e.to_string().contains("and no skills are available") => {
        clear_registry_cache(registry_name)?; // rm -rf local clone
        install_from_registry(registry_name, skill)?
    }
    rest => rest?,
}

Prevention

When it happens

Trigger: Registry-qualified install (`registry:<name>/<skill>`) where `registry_dir/skills/<skill_name>` is missing and `list_registry_skill_names` returns nothing — the cloned registry repo has no skills/ directory or an empty one.

Common situations: Registry URL points at a non-catalog repo; wrong default branch without skills/; interrupted first clone left an empty dir; private registry not yet populated; submodules not initialized during clone.

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/d1ebd2d281ca00c8. Report an issue: GitHub.