jdx/mise · error · eyre::Report

Tool '{}' does not have an executable named '{}'

Error message

Tool '{}' does not have an executable named '{}'

What it means

A mise shim ran, the referenced tool IS installed, but the requested executable name is not among the tool's bins — BinPathError::BinNotFound with an empty available-bins list (src/cli/tool_stub.rs:601). The tool's install directory exposes no executables for mise to dispatch to.

Source

Thrown at src/cli/tool_stub.rs:601

                for p in btp {
                    path_env.add(p);
                }
            }
            env.insert(crate::env::PATH_KEY.to_string(), path_env.to_string());

            crate::cli::exec::exec_program(bin_path, args, env, &Default::default(), false).await
        }
        Err(e) => match e {
            BinPathError::ToolNotFound(tool_name) => {
                bail!("Tool '{}' not found", tool_name);
            }
            BinPathError::BinNotFound {
                tool_name,
                bin,
                available_bins,
            } => {
                if available_bins.is_empty() {
                    bail!(
                        "Tool '{}' does not have an executable named '{}'",
                        tool_name,
                        bin
                    );
                } else {
                    bail!(
                        "Tool '{}' does not have an executable named '{}'. Available executables: {}",
                        tool_name,
                        bin,
                        available_bins.join(", ")
                    );
                }
            }
        },
    }
}

/// Execute a tool stub

View on GitHub (pinned to 9dcfcaa0dc)

Solutions

  1. Inspect what the install actually ships: `ls "$(mise where <tool> 2>/dev/null || echo ~/.local/share/mise/installs/<tool>/<version>)"/bin`
  2. Reinstall the tool version: `mise uninstall <tool>@<version> && mise install <tool>@<version>`
  3. Remove/recreate the stale shim (`mise prune` or regenerate shims) if it references a bin that no longer exists

Example fix

# before
$ mise x terraform -- tf
# error: Tool 'terraform' does not have an executable named 'tf'

# after
$ ls ~/.local/share/mise/installs/terraform/*/bin   # see real bin name 'terraform'
$ mise x terraform -- terraform
Defensive patterns

Strategy: validation

Validate before calling

tool="terraform"; bin="terraform"
inst="$(mise where "$tool" 2>/dev/null)" || { mise install "$tool"; inst="$(mise where "$tool")"; }
[ -x "$inst/bin/$bin" ] || { echo "$tool has no bin '$bin'" >&2; exit 1; }
"$inst/bin/$bin" -version

Try / catch

mise x "$tool" -- "$bin" "$@" || { echo "bin '$bin' missing — inspect $(mise where $tool)/bin and reinstall if empty" >&2; exit 1; }

Prevention

When it happens

Trigger: Executing a shim whose name doesn't match any bin the installed tool version ships (e.g. a hand-created shim or renamed bin); tool version installed but broken/partial so its bin directory is empty.

Common situations: Custom shims created with `mise generate`/manually pointing at a nonexistent bin; tool upgraded and the old binary name dropped; corrupted install where the bin directory is empty.

Related errors


AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17). Data as JSON: /api/errors/3c23b4d2373b039b. Report an issue: GitHub.