jdx/mise · error

remote mise path does not name an executable: {command:?}

Error message

remote mise path does not name an executable: {command:?}

What it means

This helper resolves the remote mise executable path. A command starting with ~ must name a home-relative executable; a bare "~/" (empty suffix) names nothing and is rejected rather than silently resolving to the home directory.

Source

Thrown at src/system/remote.rs:1240

esac"#,
        shell_quote(command),
        shell_quote(command),
    );
    let output = session.output_async(&["sh", "-lc", &script]).await?;
    validated_absolute_remote_path_output(&output, "remote login executable")
}

fn resolve_remote_mise_path(
    command: &str,
    project: &str,
    remote_home: Option<&str>,
) -> Result<String> {
    if command.starts_with('/') {
        return Ok(command.to_string());
    }
    if let Some(suffix) = command.strip_prefix("~/") {
        if suffix.is_empty() {
            bail!("remote mise path does not name an executable: {command:?}");
        }
        let home = remote_home.ok_or_else(|| eyre!("remote login home was not resolved"))?;
        return Ok(format!("{}/{suffix}", home.trim_end_matches('/')));
    }

    let mut components = Vec::new();
    for component in command.split('/') {
        match component {
            "" | "." => {}
            ".." => {
                if components.pop().is_none() {
                    bail!("relative remote mise path escapes the staged project: {command:?}");
                }
            }
            component => components.push(component),
        }
    }
    if components.is_empty() {

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Set the full path including the executable name, e.g. ~/bin/mise or ~/.local/bin/mise
  2. Fix the template/variable that is empty so the path is not just "~/"
  3. Use an absolute path (starting with /) if the location is known

Example fix

// before
remote_mise = "~/"
// after
remote_mise = "~/.local/bin/mise"
Defensive patterns

Strategy: validation

Validate before calling

const validHomePath = (cmd) => typeof cmd === 'string' && cmd.startsWith('~/') && cmd.length > 2;

Type guard

const namesExecutable = (cmd) => cmd.startsWith('/') || (cmd.startsWith('~/') && cmd.slice(2).trim() !== '');

Prevention

When it happens

Trigger: Passing "~/" (or a command whose home-relative expansion is empty) as the remote mise path into the resolver that receives remote_home.

Common situations: Config templating where an environment variable that should hold the binary name is empty, producing "~/"; hand-edited remote mise path settings missing the executable name.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/4b3de8fcaf3f4490. Report an issue: GitHub.