{"record":{"id":"3c23b4d2373b039b","repo":"jdx/mise","slug":"tool-does-not-have-an-executable-named","errorCode":null,"errorMessage":"Tool '{}' does not have an executable named '{}'","messagePattern":"Tool '(.+?)' does not have an executable named '(.+?)'","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/tool_stub.rs","lineNumber":612,"sourceCode":"                args,\n                env,\n                env_remove,\n                &Default::default(),\n                false,\n            )\n            .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","sourceCodeStart":594,"sourceCodeEnd":630,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/tool_stub.rs#L594-L630","documentation":"Tool stub execution resolved the tool successfully but the requested executable name was not among its exposed bins and the tool provides no other executables to suggest. The bail text includes the tool name and the missing executable; usually a bin-name mismatch after an install or rename.","triggerScenarios":"`mise x node -- npn install` (typo), or calling a bin name the package genuinely does not ship, via `mise x`/`mise exec` against an installed tool.","commonSituations":"Typos in package-manager binary names (nodemon vs node-dev, pip3 vs pip); binaries exposed only under different names on some platforms; assuming a tool ships a CLI when it is a library.","solutions":["List the tool's exposed binaries: `mise exec <tool> -- ls $(mise where <tool>)/bin` or check the package docs","Correct the executable name in the command","Check bin-paths configuration if custom bin paths were expected to expose the binary"],"exampleFix":"// before\nmise x node@22 -- npn -v\n// after\nmise x node@22 -- npx -v","handlingStrategy":"validation","validationCode":"const dir = exec('mise where '+tool).trim();\nconst bins = exec(`ls ${dir}/bin`).split('\\n');\nif (!bins.includes(bin)) throw new Error(`${tool} has no bin ${bin}; have: ${bins}`);","typeGuard":"const toolHasBin = (bin: string, bins: string[]) => bins.includes(bin);","tryCatchPattern":"try { exec(`mise x ${tool} -- ${bin}`); } catch (e) { if (/does not have an executable/.test(String(e))) console.error('check bin name with mise exec <tool> -- ls'); throw e; }","preventionTips":["Check package docs for shipped binary names before scripting","Beware platform-dependent bin suffixes (python3 vs python)","Inspect the install dir with `mise where <tool>` when unsure"],"tags":["cli","tools","executable","not-found"],"backgroundTag":"command-not-found","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}