jdx/mise · error
bootstrap_command left multiple unchanged mise executables a
Error message
bootstrap_command left multiple unchanged mise executables and the installed path is ambiguous: {}; set remote_mise or mise_bin explicitly What it means
After a remote `bootstrap_command` runs, `select_bootstrapped_mise` must pick exactly one mise executable. If the post-bootstrap PATH contains multiple candidates that are all 'unchanged' (none are new, none changed identity, none match the running mise version, and there is more than one), the installed path is ambiguous and this error names every candidate while telling the user to set the path explicitly.
Source
Thrown at src/system/remote.rs:1414
.and_then(|identity| identity.version.split_whitespace().next())
.is_some_and(|version| {
version == env!("CARGO_PKG_VERSION")
|| version == concat!(env!("CARGO_PKG_VERSION"), "-DEBUG")
})
})
.collect::<Vec<_>>();
if let Some(candidate) =
select_unique_remote_mise_candidate(version_candidates, "version-matching")?
{
return Ok(candidate);
}
if let [candidate] = after {
return Ok(candidate.clone());
}
if after.is_empty() {
bail!("mise executable not found after bootstrap_command");
}
bail!(
"bootstrap_command left multiple unchanged mise executables and the installed path is ambiguous: {}; set remote_mise or mise_bin explicitly",
after.join(", ")
)
}
fn select_unique_remote_mise_candidate(
candidates: Vec<&String>,
kind: &str,
) -> Result<Option<String>> {
match candidates.as_slice() {
[] => Ok(None),
[candidate] => Ok(Some((*candidate).clone())),
_ => bail!(
"bootstrap_command left multiple {kind} mise executables and the installed path is ambiguous: {}; set remote_mise or mise_bin explicitly",
candidates
.iter()
.map(|candidate| candidate.as_str())
.collect::<Vec<_>>()View on GitHub (pinned to afd2eddd3a)
Solutions
- Set `remote_mise` (or `mise_bin`) explicitly to the desired absolute path so selection is unambiguous.
- Remove the extra mise executables from the remote PATH, keeping only one.
- Adjust the bootstrap_command to install to a single fixed path (MISE_INSTALL_PATH) so only one candidate exists.
- Ensure the bootstrap-installed mise reports the same version as the local mise so the version-matching selector can disambiguate it.
Example fix
# before bootstrap_command = "curl -fsSL https://mise.run | sh" # after remote_mise = "/usr/local/bin/mise" bootstrap_command = "curl -fsSL https://mise.run | MISE_INSTALL_PATH=/usr/local/bin/mise sh"
Defensive patterns
Strategy: validation
Validate before calling
# shell ls -l $(compgen -c mise | sort -u | command -v mise 2>/dev/null) 2>/dev/null; which -a mise
Prevention
- Keep exactly one mise on the remote PATH.
- Pin remote_mise in project config for shared hosts.
- Use MISE_INSTALL_PATH in bootstrap scripts to control placement.
When it happens
Trigger: Running remote auto-provisioning where the bootstrap leaves ≥2 mise binaries on the remote PATH, and none is uniquely identified as new/changed/version-matching — e.g. a pre-existing mise plus a freshly installed one with identical version/fingerprint resolution, or several shim/wrapper scripts named mise.
Common situations: The host already had mise installed and the bootstrap installed a second copy; a wrapper script named `mise` shadows a real binary; mise exists in both /usr/local/bin and ~/.local/bin.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- bootstrap_command left multiple {kind} mise executables and
- mise executable not found after bootstrap_command
- {} exists but is not a git checkout with an origin remote
- {} has origin {origin:?}, expected {url:?}
- no remote targets configured; pass --host [user@]host or add
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/c04deb5c6bbb7293.
Report an issue: GitHub.