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}'.
Available skills: {}

What it means

Installing a skill from a named extra registry: skills/<skill_name> is not a directory, but the registry does contain other skills whose names are listed in the message. The requested name does not match any skill directory in that registry.

Source

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

    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: {}",
                skill_dir.display().to_string()
            )
        })?,
        skills_path,

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. Use the exact name from the 'Available skills:' list in the error message.
  2. Update the local registry clone (delete and let it re-clone) so new skills appear.
  3. Confirm the registry name qualifier — the skill may exist in the default registry or another extra registry, not this one.
  4. Check the registry repo for renames if this broke after an update.

Example fix

# before
zeroclaw skills install registry:extra/Deploy
# error: ...Available skills: rollout, status

# after
zeroclaw skills install registry:extra/rollout
Defensive patterns

Strategy: validation

Validate before calling

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

Try / catch

match install_from_registry(registry_name, skill) {
    Err(e) if e.to_string().contains("Available skills:") => {
        eprintln!("{skill} not in {registry_name}; available: {e}");
    }
    rest => rest?,
}

Prevention

When it happens

Trigger: Registry-qualified install where `registry_dir/skills/<skill_name>` is missing and the listing is non-empty — e.g. `registry:extra/deploy` when the registry has skills/rollout and skills/status.

Common situations: Typo or wrong casing in the skill name; expecting a public-registry skill inside a private extra registry; skill renamed upstream; stale local registry 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/7cce196240ec3a41. Report an issue: GitHub.