{"record":{"id":"12c1bbaf440d1af2","repo":"zeroclaw-labs/zeroclaw","slug":"cli-skills-install-skill-requires-git","errorCode":"cli-skills-install-skill-requires-git","errorMessage":"--skill <name> requires a git repository URL as the source (got '{$source}')","messagePattern":"--skill <name> requires a git repository URL as the source \\(got '(.+?)'\\)","errorType":"console","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/skills/mod.rs","lineNumber":253,"sourceCode":"            bundle,\n            no_tier_banner,\n            skill,\n        } => {\n            println!(\n                \"{}\",\n                get_required_cli_string_with_args(\n                    \"cli-skills-install-start\",\n                    &[(\"source\", &source)]\n                )\n            );\n\n            let location = resolve_install_location(config, agent.as_deref(), bundle.as_deref())?;\n            let skills_path = location.dir().to_path_buf();\n            std::fs::create_dir_all(&skills_path)?;\n\n            let (installed_dir, files_scanned) = if let Some(skill_name) = skill.as_deref() {\n                if !is_git_source(&source) {\n                    anyhow::bail!(get_required_cli_string_with_args(\n                        \"cli-skills-install-skill-requires-git\",\n                        &[(\"source\", &source)]\n                    ));\n                }\n                install_git_catalog_skill_source(\n                    &source,\n                    skill_name,\n                    &skills_path,\n                    config.skills.allow_scripts,\n                    workspace_dir,\n                )\n                .with_context(|| {\n                    get_required_cli_string_with_args(\n                        \"cli-skills-install-catalog-failed\",\n                        &[(\"skill\", skill_name), (\"source\", &source)],\n                    )\n                })?\n            } else if is_git_source(&source) {","sourceCodeStart":235,"sourceCodeEnd":271,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/src/skills/mod.rs#L235-L271","documentation":"`skills install --skill <name> <source>` extracts a single skill out of a git repository catalog, so the source must pass is_git_source. Any other source shape — a local directory or a registry reference — is rejected up front with the offending value embedded in the message, before anything is downloaded or created.","triggerScenarios":"Passing a local path (`skills install --skill foo ./skills`) or registry shorthand (`--skill foo some-registry/foo`); a URL missing its scheme or .git suffix; an SSH form the is_git_source matcher does not recognize.","commonSituations":"Copy-pasting a local-path install command while keeping --skill from an earlier git-catalog install; muscle memory from the registry syntax; truncated URLs from docs.","solutions":["Use a full git URL for --skill installs, e.g. https://github.com/owner/skill-catalog.git","If the source is a local dir or registry ref, drop --skill and install the whole source: `skills install ./path` or `skills install owner/repo`","Check the (got '{$source}') value in the error to see exactly what was parsed"],"exampleFix":"# before\nzeroclaw skills install --skill code-review ./local-skills\n\n# after — one skill pulled from a git catalog\nzeroclaw skills install --skill code-review https://github.com/owner/skill-catalog.git","handlingStrategy":"validation","validationCode":"fn looks_like_git(source: &str) -> bool {\n    (source.starts_with(\"https://\") || source.starts_with(\"http://\") || source.starts_with(\"git@\"))\n        && (source.ends_with(\".git\") || source.starts_with(\"git@\"))\n}\n\nif skill_flag.is_some() && !looks_like_git(&source) {\n    eprintln!(\"--skill requires a git URL; drop --skill for local/registry sources\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Branch your install wrapper: git URL + --skill, otherwise plain install of the whole source","Validate the source scheme before invoking the CLI so the error never fires","Keep .git on https URLs used with --skill"],"tags":["cli","skills","install","git","argument-validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}