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, ®istry_name, ®istry.url)?;
let skill_dir = registry_dir.join("skills").join(&skill_name);
if !skill_dir.is_dir() {
let available = list_registry_skill_names(®istry_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
- Set the registry's kind to `git` (or remove the kind key if it defaults to git) in your config.
- Remove the unsupported registry entry entirely if you do not need it.
- Check the config schema/docs for the exact accepted kind values on your zeroclaw version.
- 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
- Schema-validate the whole config at startup; reject unknown registry kind values early.
- Only copy registry config from docs matching your zeroclaw version.
- Add a config lint (`zeroclaw config check` equivalent) to CI for checked-in configs.
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
- skills.extra_registries[{i}].name '{}' is invalid; use only
- skills.extra_registries[{}].url is not a valid URL: {e}
- failed to clone skills registry: {stderr}
- skill '{skill_name}' not found in registry '{registry_name}'
- Git clone failed: {stderr}
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/34ad664494d8ec44.
Report an issue: GitHub.