{"record":{"id":"5a9543fc69b4a814","repo":"jdx/mise","slug":"remote-host-mise-binary-does-not-exist","errorCode":null,"errorMessage":"remote host '{}' mise binary does not exist: {}","messagePattern":"remote host '(.+?)' mise binary does not exist: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/remote.rs","lineNumber":354,"sourceCode":"            for link in &self.copy_link {\n                validate_copy_link(&self.source, link).wrap_err_with(|| {\n                    format!(\"remote host '{}' has invalid copy_link\", self.name)\n                })?;\n            }\n        }\n        if let Some(identity) = &self.identity_file\n            && !identity.is_file()\n        {\n            bail!(\n                \"remote host '{}' identity file does not exist: {}\",\n                self.name,\n                identity.display()\n            );\n        }\n        if let Some(binary) = &self.mise_bin\n            && !binary.is_file()\n        {\n            bail!(\n                \"remote host '{}' mise binary does not exist: {}\",\n                self.name,\n                binary.display()\n            );\n        }\n        let provisioning_strategies = [\n            self.mise_bin.is_some(),\n            self.remote_mise.is_some(),\n            self.bootstrap_command.is_some(),\n        ]\n        .into_iter()\n        .filter(|configured| *configured)\n        .count();\n        if provisioning_strategies > 1 {\n            bail!(\n                \"remote host '{}' must set at most one of mise_bin, remote_mise, or bootstrap_command\",\n                self.name\n            );","sourceCodeStart":336,"sourceCodeEnd":372,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/system/remote.rs#L336-L372","documentation":"Thrown by `RemoteHostConfig::validate_with_source` when a remote host entry sets `mise_bin` to a path that does not exist as a file. This path tells mise where the mise binary already lives on the remote host; mise validates that the local path you wrote is sane before attempting the remote session.","triggerScenarios":"Configuring `mise_bin` with a typo'd or non-existent binary path and running a remote operation, so `validate`/`apply_overrides` rejects the host config.","commonSituations":"Hand-typed install path that doesn't match where mise was installed (`~/.local/bin/mise` vs `/usr/local/bin/mise`); mise uninstalled or moved on the host; config copied between machines with different layouts.","solutions":["Set `mise_bin` to the actual mise binary path on the target host (check with `which mise` on the host)","Remove `mise_bin` and use `remote_mise`, `bootstrap_command`, or `install_mise` provisioning instead","Install mise on the remote host at the configured path"],"exampleFix":"// before\nmise_bin = \"/opt/mise/bin/mise\"\n// after\nmise_bin = \"/usr/local/bin/mise\"","handlingStrategy":"validation","validationCode":"if !Path::new(&host.mise_bin).is_file() {\n    panic!(\"mise_bin does not exist: {}\", host.mise_bin);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Copy the exact path from `which mise` on the target host","Prefer `install_mise` or `remote_mise` instead of hardcoding mise_bin paths","Re-verify paths when migrating configs between machines"],"tags":["remote","ssh","config-validation","mise-binary"],"backgroundTag":"file-not-found","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}