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

  1. Run `mise install` in the project to install every configured tool
  2. Check what's configured vs installed: `mise ls` (shows missing versions for the current config)
  3. 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

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


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