nikivdev/code · error

remote external CLI installs are not implemented yet for {};

Error message

remote external CLI installs are not implemented yet for {}; use `f install <path-to-cli>` for now

What it means

install::run detects when the requested name matches looks_like_remote_external_cli_id — an identifier referencing a remote external CLI rather than a local path or flox package. Remote fetching of external CLIs is not implemented, so it bails with guidance to install from a local CLI file path instead.

Source

Thrown at src/install.rs:38

        .map(str::trim)
        .filter(|name| !name.is_empty())
    {
        let candidate = Path::new(name);
        if candidate.exists() {
            let tool = external_cli::install_external_cli_link(candidate, opts.force)?;
            println!(
                "Linked external CLI {} from {}",
                tool.manifest.id,
                tool.source_root.display()
            );
            if let Some(path) = &tool.registration_path {
                println!("Link record: {}", path.display());
            }
            return Ok(());
        }

        if looks_like_remote_external_cli_id(name) {
            bail!(
                "remote external CLI installs are not implemented yet for {}; use `f install <path-to-cli>` for now",
                name
            );
        }
    }

    if opts
        .name
        .as_deref()
        .map(|name| name.trim().is_empty())
        .unwrap_or(true)
    {
        opts.backend = InstallBackend::Flox;
        opts.name = Some(prompt_flox_package()?);
    }

    match opts.backend {
        InstallBackend::Registry => registry::install(normalize_registry_install_opts(opts)),

View on GitHub (pinned to a747e741ae)

Solutions

  1. Download the CLI binary/file locally first, then run `f install /path/to/cli`.
  2. If the tool exists as a flox package, install it by its flox package name instead of the remote CLI id.
  3. Check whether a newer version of `f` implements remote external CLI installs.

Example fix

// before
f install some-remote-cli
// after
f install ~/downloads/some-remote-cli
Defensive patterns

Strategy: validation

Validate before calling

// Only pass local file paths for external CLI installs
let p = std::path::Path::new(name);
if !(p.exists() && p.is_file()) && looks_like_remote_external_cli_id(name) {
    eprintln!("{name} is a remote CLI id; download it locally and pass the path");
}

Type guard

fn is_local_cli_path(name: &str) -> bool {
    std::path::Path::new(name).is_file()
}

Try / catch

match f_install(name) {
    Err(e) if e.to_string().contains("not implemented yet") => {
        eprintln!("download the CLI locally, then: f install <path-to-cli>");
    }
    r => r?,
}

Prevention

When it happens

Trigger: Calling `f install <name>` where <name> is recognized as a remote external CLI identifier (e.g. a registry-style id for a CLI binary) instead of a local file path.

Common situations: Users copy an install id from docs/registries for a CLI tool; automation passes a remote identifier; confusion between flox package names and external CLI ids.

Related errors


AI-assisted analysis of nikivdev/code@a747e741ae (2026-09-01). Data as JSON: /api/errors/2ca2c8e1fd8ae5b2. Report an issue: GitHub.