{"record":{"id":"a969ef44d231ebf3","repo":"jdx/mise","slug":"tool-does-not-have-an-executable-named-a969ef","errorCode":null,"errorMessage":"Tool '{}' does not have an executable named '{}'. Available executables: {}","messagePattern":"Tool '(.+?)' does not have an executable named '(.+?)'\\. Available executables: (.+?)","errorType":"exception","errorClass":"eyre::Report","httpStatus":null,"severity":"error","filePath":"src/cli/tool_stub.rs","lineNumber":607,"sourceCode":"            crate::cli::exec::exec_program(bin_path, args, env, &Default::default(), false).await\n        }\n        Err(e) => match e {\n            BinPathError::ToolNotFound(tool_name) => {\n                bail!(\"Tool '{}' not found\", tool_name);\n            }\n            BinPathError::BinNotFound {\n                tool_name,\n                bin,\n                available_bins,\n            } => {\n                if available_bins.is_empty() {\n                    bail!(\n                        \"Tool '{}' does not have an executable named '{}'\",\n                        tool_name,\n                        bin\n                    );\n                } else {\n                    bail!(\n                        \"Tool '{}' does not have an executable named '{}'. Available executables: {}\",\n                        tool_name,\n                        bin,\n                        available_bins.join(\", \")\n                    );\n                }\n            }\n        },\n    }\n}\n\n/// Execute a tool stub\n///\n/// Tool stubs are executable files containing TOML configuration that specify\n/// which tool to run and how to run it. They provide a convenient way to create\n/// portable, self-contained executables that automatically manage tool installation\n/// and execution.\n///","sourceCodeStart":589,"sourceCodeEnd":625,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/cli/tool_stub.rs#L589-L625","documentation":"Same BinPathError::BinNotFound path as error 291, but the tool ships other executables — mise lists them in the message (src/cli/tool_stub.rs:607) so you can see the correct name. The requested bin simply isn't one of them.","triggerScenarios":"Running a shim/executable name that differs from what the installed tool version provides — e.g. `python3.12` when the version ships `python3`, or a plugin-provided bin renamed across major versions.","commonSituations":"Scripts hardcoding version-suffixed binary names (python3.11 vs python3.12); switching tools where bin names differ (bun vs node ecosystem); typo'd shim names.","solutions":["Use one of the executables listed in the error message verbatim","For python-style version-suffixed bins, list bins via mise (`mise ls bins <tool>` if available) or ls the install's bin dir, then adjust the script","If an older version had that bin name, pin it: `mise use <tool>@<older-version>`"],"exampleFix":"# before\n$ mise x --lang python python3.12 -V\n# error: Tool 'python' does not have an executable named 'python3.12'. Available executables: python, python3, ...\n\n# after\n$ mise x python -- python3 -V","handlingStrategy":"validation","validationCode":"tool=\"python\"; want=\"python3\"\ninst=\"$(mise where \"$tool\")\"\nls \"$inst/bin\" | grep -qx \"$want\" || { echo \"$tool lacks '$want'; available:\"; ls \"$inst/bin\"; exit 1; }\n\"$inst/bin/$want\" -V","typeGuard":null,"tryCatchPattern":"mise x \"$tool\" -- \"$bin\" \"$@\" || { echo \"use one of the executables listed in the error message\" >&2; exit 1; }","preventionTips":["Don't hardcode version-suffixed binary names; call the stable name (python3, not python3.12)","Script against the 'Available executables:' list the error prints when bootstrapping new tool versions"],"tags":["mise","shims","tool-stub","executable","bin-name"],"backgroundTag":"executable-not-in-package","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}