{"record":{"id":"038ab96cfbfc3d58","repo":"jdx/mise","slug":"tool-not-found","errorCode":null,"errorMessage":"Tool '{}' not found","messagePattern":"Tool '(.+?)' not found","errorType":"exception","errorClass":"eyre::Report","httpStatus":null,"severity":"error","filePath":"src/cli/tool_stub.rs","lineNumber":593,"sourceCode":"            }\n\n            if let Some((backend, _tv)) = toolset.list_current_installed_versions(config).first() {\n                let btp = backend\n                    .dependency_toolset(config)\n                    .await?\n                    .list_paths(config)\n                    .await;\n                for p in btp {\n                    path_env.add(p);\n                }\n            }\n            env.insert(crate::env::PATH_KEY.to_string(), path_env.to_string());\n\n            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(\", \")","sourceCodeStart":575,"sourceCodeEnd":611,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/cli/tool_stub.rs#L575-L611","documentation":"A mise shim/tool-stub was executed, and while resolving which installed tool provides the binary, the tool named by the request had no installed versions at all — BinPathError::ToolNotFound, surfaced at src/cli/tool_stub.rs:593. The tool is typically referenced in config but its install directory is empty/missing.","triggerScenarios":"Running a shim (e.g. `node`, `rg`) when the tool is referenced by mise.toml/trusted config but `mise install` was never run; after uninstalling the tool while shims/config remain; a lockfile pins a version not present on this machine.","commonSituations":"Fresh clone of a repo where teammates assume mise auto-installs (and auto-install is disabled or MISE_AUTO_INSTALL=0); post-uninstall leftover shims on PATH; CI job that forgot the install step.","solutions":["Install everything the config references: `mise install` (run in the project)","Install the specific tool: `mise install <tool>@<version>` or add it with `mise use <tool>` (which installs too)","If the tool should not be managed by mise, remove it from mise.toml/.tool-versions and clear stale shims (`mise prune`)"],"exampleFix":"# before\n$ node -v\n# error: Tool 'node' not found\n\n# after\n$ mise install\n$ node -v","handlingStrategy":"validation","validationCode":"# ensure config tools exist before running shims\nmise install\ntool=\"node\"\nmise ls --installed \"$tool\" >/dev/null 2>&1 || { echo \"$tool not installed\" >&2; exit 1; }\n$tool --version","typeGuard":null,"tryCatchPattern":"command -v node >/dev/null && node -v || { mise install && exec node \"$@\"; }","preventionTips":["Make `mise install` the first step of every bootstrap/CI job that runs mise-managed binaries","Enable auto-install (mise settings set auto_install true) so missing tools install on first shim use","Run `mise ls` after checkout to catch configured-but-missing versions early"],"tags":["mise","shims","tool-stub","install","toolchain"],"backgroundTag":"tool-version-not-installed","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}