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

skill '{source}' not found in the registry and no skills are

Error message

skill '{source}' not found in the registry and no skills are available

What it means

Registry-based skill install (install by source name from the default skills registry): after ensure_skills_registry clones/updates the registry, skills/<source> is not a directory and the registry listing returned zero names. The local registry clone is empty or broken — no skills can be installed from it.

Source

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

        install_local_skill_source(skill_dir_str, skills_path, allow_scripts)
    })()
}

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()
            )

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. Delete the local registry clone inside the workspace and retry so it re-clones fresh.
  2. Verify the configured registry URL is correct and reachable, and that the repo has a skills/ directory with entries.
  3. Check disk space and permissions on the workspace dir — partial clones often come from IO failures.
  4. If the registry layout changed upstream, pin to a compatible tag/commit or update zeroclaw.

Example fix

# before: stale/empty registry cache
zeroclaw skills install from-registry:my-skill
# error: skill 'my-skill' not found in the registry and no skills are available

# after: wipe the cache so it re-clones
rm -rf .zeroclaw/skills-registry && zeroclaw skills install from-registry:my-skill
Defensive patterns

Strategy: validation

Validate before calling

fn 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)
}
// if false, delete registry_dir and re-clone before installing

Try / catch

match install_registry_skill(source) {
    Err(e) if e.to_string().contains("no skills are available") => {
        refresh_registry_clone()?; // rm -rf + re-clone, then retry once
        install_registry_skill(source)?
    }
    rest => rest?,
}

Prevention

When it happens

Trigger: Calling the registry install path with a source name when `registry_dir/skills/<source>` is not a dir and `list_registry_skill_names(&registry_dir)` is empty — e.g. the registry clone failed partway, the registry repo is empty, or the registry layout changed.

Common situations: First-use scenario where the registry clone was interrupted (disk full, network drop); registry URL overridden in config to an empty repo; registry repo restructured so skills/ moved; corrupted workspace cache dir.

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