jdx/mise · error
Tool ' ' does not have an executable named ' '. Available…
Error message
Tool '{}' does not have an executable named '{}'. Available executables: {} What it means
Same failure as the plain BinNotFound case — the installed tool does not ship an executable with the requested name — but mise found other binaries in the tool's install and appends them as 'Available executables: ...' to guide the correction.
Solutions
- Pick the correct name from the 'Available executables' list in the message and rerun
- If the needed binary truly is missing, install the package/plugin variant that provides it
- Pin a different tool version that ships the expected executable
Example fix
// before mise x python@3.12 -- python3.11 -V // after mise x python@3.12 -- python3 -V # listed under Available executables
Defensive patterns
Strategy: validation
Validate before calling
const dir = exec('mise where '+tool).trim();
const bins = fs.readdirSync(path.join(dir,'bin'));
if (!bins.includes(bin)) bin = bins.find(b=>b.startsWith(bin)) ?? bin; Type guard
const resolveBin = (bin: string, available: string[]): string | null => available.includes(bin) ? bin : (available.find(b => b.startsWith(bin)) ?? null);
Try / catch
try { exec(`mise x ${tool} -- ${bin}`); } catch (e) { const m = String(e).match(/Available executables: (.*)/); if (m) bin = m[1].split(', ')[0]; else throw e; } Prevention
- Read the 'Available executables' list in the message — it names the correct bin
- Diff bin sets between tool versions before pinning upgrades
- Use exact bin names from `ls $(mise where <tool>)/bin` in scripts
When it happens
Trigger: `mise x node@22 -- nodemon ...` when node's bin dir contains node, npm, npx, etc.; any mise exec/x invocation naming a bin that misses but near-matches installed bins.
Common situations: Typos caught only after running; tools exposing differently-cased or -suffixed binaries (python3 vs python); switching tool versions that ship different bin sets.
Related errors
- Tool ' ' does not have an executable named
- Tool ' ' not found
- 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/a969ef44d231ebf3.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/tool_stub.rs:618
.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
///
/// Tool stubs are executable files containing TOML configuration that specify
/// which tool to run and how to run it. They provide a convenient way to create
/// portable, self-contained executables that automatically manage tool installation
/// and execution.
///View on GitHub (pinned to 533346cc37)