jdx/mise · error

Tool ' ' does not have an executable named

Error message

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

What it means

Tool stub execution resolved the tool successfully but the requested executable name was not among its exposed bins and the tool provides no other executables to suggest. The bail text includes the tool name and the missing executable; usually a bin-name mismatch after an install or rename.

Solutions

  1. List the tool's exposed binaries: `mise exec <tool> -- ls $(mise where <tool>)/bin` or check the package docs
  2. Correct the executable name in the command
  3. Check bin-paths configuration if custom bin paths were expected to expose the binary

Example fix

// before
mise x node@22 -- npn -v
// after
mise x node@22 -- npx -v
Defensive patterns

Strategy: validation

Validate before calling

const dir = exec('mise where '+tool).trim();
const bins = exec(`ls ${dir}/bin`).split('\n');
if (!bins.includes(bin)) throw new Error(`${tool} has no bin ${bin}; have: ${bins}`);

Type guard

const toolHasBin = (bin: string, bins: string[]) => bins.includes(bin);

Try / catch

try { exec(`mise x ${tool} -- ${bin}`); } catch (e) { if (/does not have an executable/.test(String(e))) console.error('check bin name with mise exec <tool> -- ls'); throw e; }

Prevention

When it happens

Trigger: `mise x node -- npn install` (typo), or calling a bin name the package genuinely does not ship, via `mise x`/`mise exec` against an installed tool.

Common situations: Typos in package-manager binary names (nodemon vs node-dev, pip3 vs pip); binaries exposed only under different names on some platforms; assuming a tool ships a CLI when it is a library.

Related errors


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

Appendix: source

Thrown at src/cli/tool_stub.rs:612

                args,
                env,
                env_remove,
                &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 533346cc37)