jdx/mise · error · eyre::Report

Tool '{}' not found

Error message

Tool '{}' not found

What it means

A mise shim/tool-stub was executed, and while resolving which installed tool provides the binary, the tool named by the request had no installed versions at all — BinPathError::ToolNotFound, surfaced at src/cli/tool_stub.rs:593. The tool is typically referenced in config but its install directory is empty/missing.

Source

Thrown at src/cli/tool_stub.rs:593

            }

            if let Some((backend, _tv)) = toolset.list_current_installed_versions(config).first() {
                let btp = backend
                    .dependency_toolset(config)
                    .await?
                    .list_paths(config)
                    .await;
                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(", ")

View on GitHub (pinned to 9dcfcaa0dc)

Solutions

  1. Install everything the config references: `mise install` (run in the project)
  2. Install the specific tool: `mise install <tool>@<version>` or add it with `mise use <tool>` (which installs too)
  3. If the tool should not be managed by mise, remove it from mise.toml/.tool-versions and clear stale shims (`mise prune`)

Example fix

# before
$ node -v
# error: Tool 'node' not found

# after
$ mise install
$ node -v
Defensive patterns

Strategy: validation

Validate before calling

# ensure config tools exist before running shims
mise install
tool="node"
mise ls --installed "$tool" >/dev/null 2>&1 || { echo "$tool not installed" >&2; exit 1; }
$tool --version

Try / catch

command -v node >/dev/null && node -v || { mise install && exec node "$@"; }

Prevention

When it happens

Trigger: Running a shim (e.g. `node`, `rg`) when the tool is referenced by mise.toml/trusted config but `mise install` was never run; after uninstalling the tool while shims/config remain; a lockfile pins a version not present on this machine.

Common situations: Fresh clone of a repo where teammates assume mise auto-installs (and auto-install is disabled or MISE_AUTO_INSTALL=0); post-uninstall leftover shims on PATH; CI job that forgot the install step.

Related errors


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