jdx/mise · error
Tool ' ' not found
Error message
Tool '{}' not found What it means
When resolving a tool+binary for execution (e.g. `mise x`/`mise exec`), mise maps a bin-path failure to a user-facing error. `BinPathError::ToolNotFound` means no installed version matched the requested tool, so there is nothing to run.
Solutions
- Run `mise ls` to see installed tools and `mise ls-remote <tool>` for available versions
- Install the tool first: mise use node@22 (or mise install node@22)
- Fix the tool-name spelling in the command or config file
Example fix
// before mise x nod@22 -- node -v // after mise use node@22 && mise x node -- node -v
Defensive patterns
Strategy: validation
Validate before calling
const installed = exec('mise ls --json');
function toolInstalled(name){ return JSON.parse(installed).some(t=>t.tool===name); }
if (!toolInstalled('node')) exec('mise install node'); Type guard
const isInstalled = (tool: string, list: {tool:string;installed?:string[]}[]) =>
list.some(t => t.tool === tool && (t.installed?.length ?? 0) > 0); Try / catch
try { exec(`mise x ${tool}@${ver} -- ${cmd}`); } catch (e) { if (String(e).includes('not found')) { exec(`mise install ${tool}`); retry(); } else throw e; } Prevention
- Pin tools in mise.toml so `mise install` provisions them before exec
- Verify spelling with `mise ls-remote <tool>`
- Run `mise ls` after version changes to confirm installed state
When it happens
Trigger: `mise x node@99 -- node -v` or `mise x python -- ...` when the named tool has no matching installed version; typo in tool name passed via tool arguments to exec/x.
Common situations: Referencing a tool not in mise.toml/.tool-versions and not installed; renaming tools in config without reinstalling; misspelled tool name in `mise x`.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- Tool ' ' does not have an executable named
- Tool ' ' does not have an executable named ' '. Available…
- bail!(msg) — dynamic message: uninstalled tool message from…
- cannot encode # as JSON
- no dotfiles matched target filter
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/038ab96cfbfc3d58.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/tool_stub.rs:604
env.insert(
crate::env::PATH_KEY.to_string(),
std::env::join_paths(paths)?.to_string_lossy().to_string(),
);
}
}
crate::cli::exec::exec_program(
bin_path,
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(", ")View on GitHub (pinned to 533346cc37)