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

  1. Pick the correct name from the 'Available executables' list in the message and rerun
  2. If the needed binary truly is missing, install the package/plugin variant that provides it
  3. 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

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


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)