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

registry '{registry_name}' uses unsupported kind '{}'; only

Error message

registry '{registry_name}' uses unsupported kind '{}'; only 'git' is supported

What it means

Extra/named registries are configured with a `kind` field, and only ExternalRegistryKind::Git is implemented. When the configured registry resolves to any other kind (e.g. a future 'http' kind or a typo like 'gits'), the lookup bails before cloning.

Source

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

                .filter(|r| r.enabled)
                .map(|r| r.name.as_str())
                .collect();
            if configured.is_empty() {
                format!(
                    "registry '{registry_name}' is not configured or is disabled. \
                     Add it under [[skills.extra_registries]] in your config."
                )
            } else {
                format!(
                    "registry '{registry_name}' is not configured or is disabled. \
                     Configured registries: {}",
                    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(", ")

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. Set the registry's kind to `git` (or remove the kind key if it defaults to git) in your config.
  2. Remove the unsupported registry entry entirely if you do not need it.
  3. Check the config schema/docs for the exact accepted kind values on your zeroclaw version.
  4. If you genuinely need a non-git registry, upgrade zeroclaw — older binaries only implement git.

Example fix

# before
[[skills.registries]]
name = "extra"
kind = "http"
url = "https://example.com/skills"

# after
[[skills.registries]]
name = "extra"
kind = "git"
url = "https://github.com/org/skills"
Defensive patterns

Strategy: validation

Validate before calling

fn registry_kind_supported(kind: &str) -> bool {
    kind.eq_ignore_ascii_case("git")
}
// validate config before any registry install:
for r in &config.skills.registries {
    assert!(registry_kind_supported(&r.kind), "registry {} kind must be git", r.name);
}

Try / catch

match install_from_registry(name, skill) {
    Err(e) if e.to_string().contains("only 'git' is supported") => {
        eprintln!("fix config: registry {name} kind must be 'git'");
    }
    rest => rest?,
}

Prevention

When it happens

Trigger: Config contains an external registry entry whose kind is not `git` — e.g. `[[skills.registries]] name = "extra" kind = "http" url = "..."` — and you then install a skill from that registry (`skills install registry:extra/my-skill`).

Common situations: Copy-pasted config from docs describing unsupported future kinds; hand-edited registry config with a typo in kind; registry kind vocabulary expanded in a newer version than the running binary supports; config written for a different tool.

Related errors


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