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

skill ' ' not found in registry ' '. Available skills

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.

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.

Appendix: 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)