{"record":{"id":"d1ebd2d281ca00c8","repo":"zeroclaw-labs/zeroclaw","slug":"skill-skill-name-not-found-in-registry-regis","errorCode":null,"errorMessage":"skill '{skill_name}' not found in registry '{registry_name}' and no skills are available","messagePattern":"skill '(.+?)' not found in registry '(.+?)' and no skills are available","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-runtime/src/skills/mod.rs","lineNumber":2636,"sourceCode":"                    configured.join(\", \")\n                )\n            }\n        })?;\n\n    if registry.kind != zeroclaw_config::schema::ExternalRegistryKind::Git {\n        anyhow::bail!(\n            \"registry '{registry_name}' uses unsupported kind '{}'; only 'git' is supported\",\n            registry.kind\n        );\n    }\n\n    let registry_dir = ensure_extra_registry(workspace_dir, &registry_name, &registry.url)?;\n    let skill_dir = registry_dir.join(\"skills\").join(&skill_name);\n\n    if !skill_dir.is_dir() {\n        let available = list_registry_skill_names(&registry_dir);\n        if available.is_empty() {\n            anyhow::bail!(\n                \"skill '{skill_name}' not found in registry '{registry_name}' and no skills are available\"\n            );\n        }\n        anyhow::bail!(\n            \"skill '{skill_name}' not found in registry '{registry_name}'.\\nAvailable skills: {}\",\n            available.join(\", \")\n        );\n    }\n\n    if !suppress_tier_banner {\n        let (tier, version) = lookup_registry_skill_tier(&registry_dir, &skill_name);\n        print_install_tier_banner(&skill_name, version.as_deref(), tier);\n    }\n\n    install_local_skill_source(\n        skill_dir.to_str().with_context(|| {\n            format!(\n                \"registry path is not valid UTF-8: {}\",","sourceCodeStart":2618,"sourceCodeEnd":2654,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-runtime/src/skills/mod.rs#L2618-L2654","documentation":"Installing a skill from a named extra registry: after that registry is cloned, skills/<skill_name> is not a directory and the registry listing is empty. The named registry's clone contains no skills at all, so nothing can be installed from it.","triggerScenarios":"Registry-qualified install (`registry:<name>/<skill>`) where `registry_dir/skills/<skill_name>` is missing and `list_registry_skill_names` returns nothing — the cloned registry repo has no skills/ directory or an empty one.","commonSituations":"Registry URL points at a non-catalog repo; wrong default branch without skills/; interrupted first clone left an empty dir; private registry not yet populated; submodules not initialized during clone.","solutions":["Verify the registry URL configured for that name is a skills registry with a top-level skills/ directory.","Delete the local clone of that registry under the workspace and retry for a fresh full clone.","If submodules are used in the registry, make sure they resolve over your credentials.","Populate the registry repo with at least one skill directory under skills/ if you own it."],"exampleFix":"# before\nzeroclaw skills install registry:extra/my-skill\n# error: skill 'my-skill' not found in registry 'extra' and no skills are available\n\n# after: fix the registry URL to a real catalog, then clear cache\n# config: [[skills.registries]] name=\"extra\" kind=\"git\" url=\"https://github.com/org/skills\"\nrm -rf .zeroclaw/registries/extra && zeroclaw skills install registry:extra/my-skill","handlingStrategy":"validation","validationCode":"fn extra_registry_ready(registry_dir: &std::path::Path) -> bool {\n    registry_dir\n        .join(\"skills\")\n        .read_dir()\n        .map(|mut it| it.any(|e| e.map(|e| e.path().is_dir()).unwrap_or(false)))\n        .unwrap_or(false)\n}","typeGuard":null,"tryCatchPattern":"match install_from_registry(registry_name, skill) {\n    Err(e) if e.to_string().contains(\"and no skills are available\") => {\n        clear_registry_cache(registry_name)?; // rm -rf local clone\n        install_from_registry(registry_name, skill)?\n    }\n    rest => rest?,\n}","preventionTips":["Validate each extra registry once at setup: `git ls-remote` works and the repo has skills/ with directories.","Clear the per-registry cache after any interrupted clone or credential failure.","Prefer registry names/URLs pinned in reviewed config, not ad-hoc flags."],"tags":["skills","registry","not-found","clone","config"],"backgroundTag":"resource-not-found","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}