{"record":{"id":"41244770f95088ba","repo":"asdf-vm/asdf","slug":"no-executable-for-tool-version","errorCode":null,"errorMessage":"no executable for tool version","messagePattern":"no executable for tool version","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/cli/cli.go","lineNumber":1456,"sourceCode":"\tif err != nil {\n\t\tlogger.Printf(\"unable to get current directory: %s\", err)\n\t\treturn err\n\t}\n\n\tif command == \"\" {\n\t\tfmt.Println(\"usage: asdf which <command>\")\n\t\treturn errors.New(\"must provide command\")\n\t}\n\n\tpath, _, _, _, err := shims.FindExecutable(conf, command, currentDir)\n\tif _, ok := err.(shims.UnknownCommandError); ok {\n\t\tlogger.Printf(\"unknown command: %s. Perhaps you have to reshim?\", command)\n\t\treturn errors.New(\"command not found\")\n\t}\n\n\tif _, ok := err.(shims.NoExecutableForPluginError); ok {\n\t\tlogger.Printf(\"%s\", err.Error())\n\t\treturn errors.New(\"no executable for tool version\")\n\t}\n\n\tif err != nil {\n\t\tfmt.Printf(\"unexpected error: %s\\n\", err.Error())\n\t\treturn err\n\t}\n\n\tfmt.Printf(\"%s\\n\", path)\n\treturn nil\n}\n\nfunc uninstallCommand(logger *log.Logger, tool, version string) error {\n\tif tool == \"\" || version == \"\" {\n\t\tlogger.Print(\"No plugin given\")\n\t\tcli.OsExiter(1)\n\t\treturn nil\n\t}\n","sourceCodeStart":1438,"sourceCodeEnd":1474,"githubUrl":"https://github.com/asdf-vm/asdf/blob/074a1722ca88d6677f228541ce06efaf4f9924d4/internal/cli/cli.go#L1438-L1474","documentation":"When shims.FindExecutable returns shims.NoExecutableForPluginError, the installed tool version exists but does not ship the requested executable/bin entries. The CLI logs the underlying message and returns 'no executable for tool version'.","triggerScenarios":"Running `asdf which <cmd>` where the command matches a plugin name but that plugin's version has no bin entry for the command (e.g. asking for an executable a tool version doesn't provide, or plugin's bin listing is incomplete/stale).","commonSituations":"Plugins whose bin/ scripts were removed or renamed between versions; custom plugins with incomplete bin listing; version resolved via .tool-versions doesn't actually provide the command.","solutions":["Check which executables the version provides: `asdf reshim` then inspect ~/.asdf/installs/<tool>/<version>/bin","Verify the plugin supports the command; use a different version or plugin that provides it","Update/reinstall the plugin to regenerate correct bin entries"],"exampleFix":"// before\n$ asdf which yarn   # nodejs version lacks yarn binary\n// after\n$ asdf plugin add yarn && asdf install yarn && asdf which yarn","handlingStrategy":"type-guard","validationCode":"if [ ! -x \"$(asdf where \"$TOOL\")/bin/$CMD\" ]; then\n  echo \"version does not provide $CMD\" >&2\nfi","typeGuard":"// Go caller distinguishing the underlying error type\nvar noExec *shims.NoExecutableForPluginError\nif errors.As(err, &noExec) {\n    // version exists but lacks the executable\n}","tryCatchPattern":"out=$(asdf which \"$CMD\" 2>&1) || {\n  case \"$out\" in\n    *\"no executable\"*) echo \"tool version lacks $CMD\";;\n    *) echo \"$out\";;\n  esac\n}","preventionTips":["Inspect ~/.asdf/installs/<tool>/<version>/bin to know which commands a version provides","Update plugins so bin listings stay accurate across version changes","Pin to a version known to ship the executable you need"],"tags":["cli","plugins","executables"],"backgroundTag":"executable-not-found-in-tool-version","analyzedSha":"074a1722ca88d6677f228541ce06efaf4f9924d4","analyzedAt":"2026-08-30T19:56:42.972Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}