{"record":{"id":"b4811f6298f0894c","repo":"zeroclaw-labs/zeroclaw","slug":"zeroclaw-plugin-install-url-is-not-supported","errorCode":null,"errorMessage":"`zeroclaw plugin install <url>` is not supported; use `--registry <url>` with a plugin name, or install a local plugin path","messagePattern":"`zeroclaw plugin install <url>` is not supported; use `--registry <url>` with a plugin name, or install a local plugin path","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/main.rs","lineNumber":6331,"sourceCode":"                        println!(\n                            \"{}\",\n                            ta(\n                                \"cli-plugin-search-result\",\n                                &[\n                                    (\"name\", &plugin.name),\n                                    (\"version\", &plugin.version),\n                                    (\"description\", description),\n                                ],\n                                \"Plugin search result\"\n                            )\n                        );\n                    }\n                }\n                Ok(())\n            }\n            PluginCommands::Install { source, registry } => {\n                if plugin_registry::looks_like_url(&source) {\n                    bail!(\n                        \"`zeroclaw plugin install <url>` is not supported; use `--registry <url>` with a plugin name, or install a local plugin path\"\n                    );\n                }\n                let mut host = plugin_host_with_configured_security(&config)?;\n                if plugin_registry::is_local_plugin_source(&source) {\n                    let name = host.install(&source)?;\n                    let config_entries = installed_plugin_config_entries(&host, &name)?;\n                    println!(\n                        \"{}\",\n                        ta(\n                            \"cli-plugin-installed-from\",\n                            &[(\"source\", &source)],\n                            \"Plugin installed\"\n                        )\n                    );\n                    Box::pin(seed_plugin_config_entries(&mut config, &config_entries)).await?;\n                } else {\n                    let registry_url = plugin_registry::registry_url(registry.as_deref());","sourceCodeStart":6313,"sourceCodeEnd":6349,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/src/main.rs#L6313-L6349","documentation":"`zeroclaw plugin install` refuses any `source` containing `://` (plugin_registry::looks_like_url) before any install work starts. Installing directly from a URL is not supported: the source must be a plugin name resolved through a registry (default registry, `--registry <index-url>`, or the registry env var) or a local filesystem path.","triggerScenarios":"`zeroclaw plugin install https://example.com/pkg/my-plugin.wasm` or any source string containing a scheme separator (http://, git+https://, file://). The URL check runs before is_local_plugin_source, so even URL-looking strings are always rejected.","commonSituations":"Following older docs that showed URL installs; pointing at a GitHub tarball or .wasm artifact because the default registry does not list the plugin; air-gapped setups where the default registry is unreachable so users attempt direct URLs.","solutions":["Install by name from a registry: `zeroclaw plugin install <plugin-name>`, adding `--registry <index-url>` if it lives on a custom registry","Download or clone the plugin locally, then install the directory: `zeroclaw plugin install ./path/to/plugin-dir`","Publish or host a registry index and pass its URL via `--registry` (or the registry env var) so name-based install works"],"exampleFix":"# before\nzeroclaw plugin install https://example.com/downloads/shout.wasm\n# after\ncurl -LO https://example.com/downloads/shout.tgz && tar xf shout.tgz\nzeroclaw plugin install ./shout","handlingStrategy":"validation","validationCode":"plugin_source=\"$1\"\ncase \"$plugin_source\" in\n  *://*) echo \"URL installs unsupported: use --registry <url> <name>, or a local path\" >&2; exit 2 ;;\nesac","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Resolve plugin names via `zeroclaw plugin search <query>` before installing","Pin the registry URL in the environment so name-based installs are reproducible","Vendored plugin dirs under version control avoid registry/network dependence entirely"],"tags":["plugins","install","registry","cli","zeroclaw"],"backgroundTag":"install-from-url-unsupported","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}