jdx/mise · error · eyre::Report
No executable found for configured tool: {bin_name}
Error message
No executable found for configured tool: {bin_name} What it means
`mise which <bin>` found no active toolset entry for the bin, and the shims module recognized the situation 'bin belongs to a tool that is configured in mise.toml but has no installed version' — unavailable_configured_tool_message returns 'No executable found for configured tool: <bin>' and which bails with it (src/cli/which.rs:60-63). The tool is declared but not installed, so no executable path exists.
Source
Thrown at src/cli/which.rs:63
let bin_name = self.bin_name.clone().unwrap();
match ts.which(&config, &bin_name).await {
Some((p, tv)) => {
if self.version {
miseprintln!("{}", tv.version);
} else if self.plugin {
miseprintln!("{p}");
} else {
let path = p.which(&config, &tv, &bin_name).await?;
miseprintln!("{}", path.unwrap().display());
}
Ok(())
}
None => {
if let Some(msg) =
crate::shims::unavailable_configured_tool_message(&config, &ts, &bin_name)
{
bail!(msg);
}
if self.has_shim(&bin_name) {
bail!(
"{bin_name} is a mise bin however it is not currently active. Use `mise use` to activate it in this directory."
)
} else {
bail!("{bin_name} is not a mise bin. Perhaps you need to install it first.",)
}
}
}
}
async fn complete(&self, config: &Arc<Config>) -> Result<()> {
let ts = self.get_toolset(config).await?;
let bins = ts
.list_paths(config)
.await
.into_iter()
.flat_map(|p| file::ls(&p).unwrap_or_default())View on GitHub (pinned to 9dcfcaa0dc)
Solutions
- Run `mise install` in the project to install every configured tool
- Check what's configured vs installed: `mise ls` (shows missing versions for the current config)
- If the tool shouldn't be managed by mise, remove it from mise.toml/.tool-versions
Example fix
# before $ mise which node # error: No executable found for configured tool: node # after $ mise install $ mise which node
Defensive patterns
Strategy: validation
Validate before calling
bin="node"
mise ls >/dev/null 2>&1 || mise install
mise which "$bin" >/dev/null 2>&1 || { mise install; mise which "$bin"; } Try / catch
p="$(mise which "$bin" 2>/dev/null)" || { mise install && p="$(mise which "$bin")"; } || { echo "$bin's tool is configured but not installed" >&2; exit 1; } Prevention
- Run `mise install` after checkout and after pulling config changes
- Use `mise ls` in CI to fail fast on configured-but-missing versions
When it happens
Trigger: `mise which node` when mise.toml lists node but `mise install` hasn't run on this machine, or the pinned version failed to install / was removed while config still references it.
Common situations: Fresh clone + no auto-install; install step failed silently in CI; someone uninstalled a tool others still have in mise.toml.
Related errors
- {bin_name} is a mise bin however it is not currently active.
- Tool '{}' not found
- rename_exe: cannot rename '{}' to '{}': target already exist
- config file not found: {}
- No mise.toml file found
AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17).
Data as JSON: /api/errors/3f5c97a95af71f13.
Report an issue: GitHub.