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

`zeroclaw plugin install <url>` is not supported; use `--reg

Error message

`zeroclaw plugin install <url>` is not supported; use `--registry <url>` with a plugin name, or install a local plugin path

What it means

`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.

Source

Thrown at src/main.rs:6331

                        println!(
                            "{}",
                            ta(
                                "cli-plugin-search-result",
                                &[
                                    ("name", &plugin.name),
                                    ("version", &plugin.version),
                                    ("description", description),
                                ],
                                "Plugin search result"
                            )
                        );
                    }
                }
                Ok(())
            }
            PluginCommands::Install { source, registry } => {
                if plugin_registry::looks_like_url(&source) {
                    bail!(
                        "`zeroclaw plugin install <url>` is not supported; use `--registry <url>` with a plugin name, or install a local plugin path"
                    );
                }
                let mut host = plugin_host_with_configured_security(&config)?;
                if plugin_registry::is_local_plugin_source(&source) {
                    let name = host.install(&source)?;
                    let config_entries = installed_plugin_config_entries(&host, &name)?;
                    println!(
                        "{}",
                        ta(
                            "cli-plugin-installed-from",
                            &[("source", &source)],
                            "Plugin installed"
                        )
                    );
                    Box::pin(seed_plugin_config_entries(&mut config, &config_entries)).await?;
                } else {
                    let registry_url = plugin_registry::registry_url(registry.as_deref());

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. Install by name from a registry: `zeroclaw plugin install <plugin-name>`, adding `--registry <index-url>` if it lives on a custom registry
  2. Download or clone the plugin locally, then install the directory: `zeroclaw plugin install ./path/to/plugin-dir`
  3. Publish or host a registry index and pass its URL via `--registry` (or the registry env var) so name-based install works

Example fix

# before
zeroclaw plugin install https://example.com/downloads/shout.wasm
# after
curl -LO https://example.com/downloads/shout.tgz && tar xf shout.tgz
zeroclaw plugin install ./shout
Defensive patterns

Strategy: validation

Validate before calling

plugin_source="$1"
case "$plugin_source" in
  *://*) echo "URL installs unsupported: use --registry <url> <name>, or a local path" >&2; exit 2 ;;
esac

Prevention

When it happens

Trigger: `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.

Common situations: 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.

Related errors


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